代码演示
如何引入
import { Input, TextArea, InputGroup } from '@fibrous/semi-ui-solid';
基本
基本使用
代码
import { Input } from '@fibrous/semi-ui-solid';
export default function InputDemo() {
return <Input aria-label="Basic input" defaultValue="hi" />;
}三种大小
默认定义了三种尺寸:大、默认、小
代码
import { Input } from '@fibrous/semi-ui-solid';
export default function InputDemo() {
return (
<>
<Input placeholder="large" size="large" />
<br />
<br />
<Input placeholder="default" />
<br />
<br />
<Input placeholder="small" size="small" />
</>
);
}不可用
设定 disabled 属性为 true
代码
import { Input } from '@fibrous/semi-ui-solid';
export default function InputDemo() {
return (
<>
<Input aria-label="可用的输入框" defaultValue="enabled input" />
<br />
<br />
<Input aria-label="禁用的输入框" disabled defaultValue="disabled input" />
</>
);
}前缀/后缀
在输入框上增加前缀、后缀图标,可以是 JSX 元素
当 prefix、suffix 传入的内容为文本或者 Semi Icon 时,会自动带上左右间隔,若为自定义 JSX 元素,则左右间隔为 0
代码
import { IconSearch } from '@fibrous/semi-icons-solid';
import { Input, Typography } from '@fibrous/semi-ui-solid';
export default function InputDemo() {
return (
<>
<Input aria-label="Search" prefix={<IconSearch />} showClear />
<br />
<br />
<Input aria-label="Input with text prefix" prefix="Prefix" showClear />
<br />
<br />
<Input aria-label="Search" suffix={<IconSearch />} showClear />
<br />
<br />
<Input
aria-label="Input with text suffix"
suffix={
<Typography.Text strong type="secondary" style={{ 'margin-right': '8px' }}>
Suffix
</Typography.Text>
}
showClear
/>
</>
);
}前置/后置标签
在输入框上增加前置/后置标签,可以是 JSX 元素
当 addonBefore、addonAfter 传入的内容为文本或者 Semi Icon 时,会自动带上左右间隔,若为自定义 JSX 元素,则左右间隔为 0
代码
import { Input } from '@fibrous/semi-ui-solid';
export default function InputDemo() {
return <Input aria-label="域名" addonBefore="http://" addonAfter=".com" />;
}带移除图标
点击图标删除所有内容
代码
import { Input } from '@fibrous/semi-ui-solid';
export default function InputDemo() {
return <Input aria-label="Clearable input" showClear defaultValue="click to clear" />;
}密码模式
隐藏输入的具体内容
代码
import { Input } from '@fibrous/semi-ui-solid';
export default function InputDemo() {
return <Input aria-label="Password" mode="password" defaultValue="123456" />;
}校验状态
可设置不同校验状态,展示不同样式
代码
import { Input } from '@fibrous/semi-ui-solid';
export default function InputDemo() {
return (
<>
<Input aria-label="警告状态" defaultValue="ies" validateStatus="warning" />
<br />
<br />
<Input aria-label="错误状态" defaultValue="ies" validateStatus="error" />
<br />
<br />
<Input aria-label="默认状态" defaultValue="ies" />
</>
);
}受控组件
Input 值完全取决于传入的 value 值,配合 onChange 回调函数使用
代码
import { createSignal } from 'solid-js';
import { Input } from '@fibrous/semi-ui-solid';
export default function InputDemo() {
const [value, setValue] = createSignal('controlInput');
const onChange = (val: string) => {
console.log(val);
setValue(val);
};
return (
<>
<Input aria-label="Controlled input" value={value()} onChange={onChange} />
</>
);
}输入框组合
可以将多个输入框放入 InputGroup 的容器中,通过设置 size ,disabled 可统一设置组合中的输入框属性,支持输入框类型包括: Input, InputNumber, Select, AutoComplete、TreeSelect、Cascader、DatePicker
代码
import { AutoComplete, DatePicker, Input, InputGroup, InputNumber, Select } from '@fibrous/semi-ui-solid';
export default function InputDemo() {
return (
<div>
<InputGroup>
<Input placeholder="Name" style={{ width: '100px' }} />
<InputNumber placeholder="Score" style={{ width: '140px' }} />
</InputGroup>
<br />
<br />
<br />
<InputGroup size="small">
<Select aria-label="Address type" style={{ width: '100px' }} defaultValue="home">
<Select.Option value="home">Home</Select.Option>
<Select.Option value="work">Work</Select.Option>
</Select>
<AutoComplete data={['Beijing Haidian']} placeholder="Address: " style={{ width: '180px' }} />
</InputGroup>
<br />
<br />
<br />
<InputGroup size="small">
<Select aria-label="Account action" style={{ width: '100px' }} defaultValue="signup">
<Select.Option value="signup">Sign Up</Select.Option>
<Select.Option value="signin">Sign In</Select.Option>
</Select>
<Input placeholder="Email" style={{ width: '180px' }} />
</InputGroup>
<br />
<br />
<br />
<InputGroup size="small">
<Input placeholder="Name" style={{ width: '100px' }} />
<DatePicker placeholder="Birthday" />
</InputGroup>
</div>
);
}代码
import { Cascader, InputGroup, Select, TreeSelect } from '@fibrous/semi-ui-solid';
const treeData = [
{
label: 'Asia',
value: 'Asia',
key: '0',
children: [
{
label: 'China',
value: 'China',
key: '0-0',
children: [
{ label: 'Beijing', value: 'Beijing', key: '0-0-0' },
{ label: 'Shanghai', value: 'Shanghai', key: '0-0-1' },
],
},
],
},
{ label: 'North America', value: 'North America', key: '1' },
];
export default function InputDemo() {
return (
<>
<InputGroup>
<Select aria-label="From or to" style={{ width: '100px' }} defaultValue="from">
<Select.Option value="from">From: </Select.Option>
<Select.Option value="to">To: </Select.Option>
</Select>
<TreeSelect style={{ width: '220px' }} treeData={treeData} placeholder="Please select" />
</InputGroup>
<br />
<br />
<InputGroup>
<Select aria-label="From or to" style={{ width: '100px' }} defaultValue="from">
<Select.Option value="from">From: </Select.Option>
<Select.Option value="to">To: </Select.Option>
</Select>
<Cascader style={{ width: '220px' }} treeData={treeData} placeholder="Please select" />
</InputGroup>
</>
);
}多行输入框
用于多行输入。通过设置 maxCount 属性可以进行字数限制并显示字数统计。支持 showClear。
代码
import { TextArea } from '@fibrous/semi-ui-solid';
export default function InputDemo() {
return (
<div>
<TextArea aria-label="Text area" />
<br />
<br />
<TextArea aria-label="Text area with character limit" maxCount={100} showClear />
</div>
);
}设置 TextArea 高度
通过 textareaStyle 可以设置内部 textarea 元素的样式,如高度、背景色等。
代码
import { TextArea } from '@fibrous/semi-ui-solid';
export default function InputDemo() {
return (
<div>
<TextArea textareaStyle={{ height: '120px' }} placeholder="高度 120px" />
<br />
<br />
<TextArea textareaStyle={{ height: '200px', 'background-color': '#f9f9f9' }} placeholder="高度 200px,灰色背景" />
<br />
<br />
<TextArea style={{ border: '2px solid var(--semi-color-primary)' }} textareaStyle={{ height: '150px' }} placeholder="style 控制外层容器,textareaStyle 控制 textarea" />
</div>
);
}行号
通过设置 showLineNumber 展示行号。可用 lineNumberStart 设置起始行号,或通过 lineNumberStyle/lineNumberClassName 自定义行号区样式。
代码
import { TextArea } from '@fibrous/semi-ui-solid';
export default function InputDemo() {
return <TextArea aria-label="带行号的文本" showLineNumber lineNumberStart={1} defaultValue={'Line 1\nLine 2\n这是一行较长的文本,用来演示软换行时的行号对齐效果。\nLine 4\nLine 5'} rows={12} style={{ width: '420px' }} lineNumberStyle={{ color: 'var(--semi-color-text-2)' }} />;
}使用 Shift + Enter 换行的多行输入框
TextArea 默认情况下 Enter 回车与 Shift + Enter 均可实现换行
通过适当的事件监听与禁用默认行为,你可以实现禁用 Enter 换行,仅 Shift + Enter 才能换行
代码
import { createSignal } from 'solid-js';
import { HotKeys, TextArea } from '@fibrous/semi-ui-solid';
export default function InputDemo() {
const [text, setText] = createSignal('');
const handleKeyDown = (event: KeyboardEvent) => {
if (event.key === 'Enter' && !event.shiftKey) {
event.preventDefault();
}
};
return (
<>
<div id="input-shift-enter-hint" style={{ display: 'flex' }}>
使用
<HotKeys hotKeys={['shift', 'enter']} style={{ 'margin-bottom': '12px', 'margin-left': '4px', 'margin-right': '4px' }} />
换行的 TextArea
</div>
<TextArea aria-labelledby="input-shift-enter-hint" value={text()} onChange={(value) => setText(value)} onKeyDown={handleKeyDown} />
</>
);
}自动扩展的多行输入框
通过设置 autosize 属性可设置只有高度自动随内容增加而变化。
代码
import { TextArea } from '@fibrous/semi-ui-solid';
export default function InputDemo() {
return (
<div>
<TextArea aria-label="单行自适应高度" autosize rows={1} />
<br />
<br />
<TextArea aria-label="限制行数的自适应高度" autosize={{ minRows: 1, maxRows: 3 }} />
<br />
<br />
<TextArea aria-label="限制字数的自适应高度" autosize maxCount={100} />
</div>
);
}自定义计算字符串长度
通过设置 getValueLength 属性可以自定义计算字符串长度。搭配 maxLength 和 minLength(Vue 中为 maxlength、minlength)可以支持 emoji 长度按照可见长度计算。
传入 getValueLength 时,Semi 内部做了什么:
- maxLength:不直接透传 maxLength 给原生 input。如果输入长度超出最大限制,则使用上一次输入的合法长度字符。
- minLength:动态切换 minLength 的长度,emoji 按照一个长度计算。
- maxCount:使用 getValueLength 获取的值与 maxCount 进行比较
maxLength=10
Form.Input + minLength=4
maxCount=10
代码
import { createSignal, Show } from 'solid-js';
import { Button, Form, FormInput, Input, TextArea, Typography } from '@fibrous/semi-ui-solid';
// Counts grapheme clusters, so an emoji sequence counts as one character
function getValueLength(str: string) {
return [...new Intl.Segmenter().segment(str)].length;
}
function getTextAreaStrLength(str: string) {
return str.replace(/\s/g, '').length;
}
export default function InputDemo() {
const [value, setValue] = createSignal('');
return (
<div>
<h4 id="input-value-length-max-length">maxLength=10</h4>
<div>
<Typography.Text>尝试输入以下字符</Typography.Text>
<div>
<Typography.Text copyable>💖</Typography.Text>
</div>
<div>
<Typography.Text copyable>👨👩👧👦</Typography.Text>
</div>
</div>
<Input aria-labelledby="input-value-length-max-length" maxLength={10} getValueLength={getValueLength} onChange={(next) => setValue(next)} style={{ width: '200px', 'margin-top': '12px', 'margin-bottom': '12px' }} />
<Show when={value()}>
<div>
<div>
<Typography.Text type="tertiary">{`getValueLength=${getValueLength(value())}`}</Typography.Text>
</div>
<div>
<Typography.Text type="tertiary">{`length=${value().length}`}</Typography.Text>
</div>
</div>
</Show>
<br />
<br />
<h4 id="input-value-length-min-length">Form.Input + minLength=4</h4>
<Form layout="horizontal">
<FormInput noLabel aria-labelledby="input-value-length-min-length" field="username" minLength={4} getValueLength={getValueLength} style={{ width: '200px' }} />
<Button type="primary" htmlType="submit">
提交
</Button>
</Form>
<h4 id="input-value-length-max-count">maxCount=10</h4>
<TextArea aria-labelledby="input-value-length-max-count" defaultValue="semi design" rows={2} maxCount={10} getValueLength={getTextAreaStrLength} style={{ width: '200px' }} />
</div>
);
}一些问题的回答:
为何不直接引入
grapheme-splitter包?这个包未压缩体积为 200+kB,对于不需要把 emoji 按照可见长度计算的用户来说,这个体积有点过大了。因此 Semi 选择把长度计算函数作为参数让用户传入。
为何不动态修改 maxLength(Vue 中为 maxlength)?动态修改 maxLength 在输入操作完成以后,计算剩余可以输入的字符长度。 如 maxLength 设置为 1,想输入一个 length 为 2 的 '💖',但是由于 input maxLength 的限制,这里根本就输入不进去,也就无法更新 maxLength。
输入法模式
通过设置 composition 属性为 true,可以开启输入法模式。在该模式下,使用输入法(如中文拼音)输入时,onChange 不会在输入法未确认(如拼音过程中)触发,而是在输入法确认后触发一次。适用于实时搜索等场景,避免在拼音输入过程中触发不必要的请求。
Input 和 TextArea 均支持该属性。
Input with composition
TextArea with composition
代码
import { createSignal } from 'solid-js';
import { Input, TextArea } from '@fibrous/semi-ui-solid';
const style = { width: '300px' };
const counterStyle = { 'margin-top': '8px', color: 'var(--semi-color-text-2)', 'font-size': '12px' };
export default function InputDemo() {
const [inputValue, setInputValue] = createSignal('');
const [textAreaValue, setTextAreaValue] = createSignal('');
const [inputCount, setInputCount] = createSignal(0);
const [textAreaCount, setTextAreaCount] = createSignal(0);
const handleInputChange = (value: string) => {
setInputValue(value);
setInputCount((count) => count + 1);
};
const handleTextAreaChange = (value: string) => {
setTextAreaValue(value);
setTextAreaCount((count) => count + 1);
};
return (
<div>
<h4>Input with composition</h4>
<Input composition value={inputValue()} onChange={handleInputChange} placeholder="开启 composition,拼音输入时不会触发 onChange" style={style} />
<div style={counterStyle}>onChange 触发次数: {inputCount()}</div>
<br />
<br />
<h4>TextArea with composition</h4>
<TextArea composition value={textAreaValue()} onChange={handleTextAreaChange} placeholder="开启 composition,拼音输入时不会触发 onChange" style={style} />
<div style={counterStyle}>onChange 触发次数: {textAreaCount()}</div>
</div>
);
}API 参考
Input
Props
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| addonAfter | 后置标签,可以是文本、Semi 图标或任意 JSX 元素。 | JSX.Element | - |
| addonBefore | 前置标签,可以是文本、Semi 图标或任意 JSX 元素。 | JSX.Element | - |
| borderless | 无边框模式。 | boolean | false |
| clearIcon | 自定义清除按钮的图标,showClear 为 true 时有效。 | JSX.Element | - |
| composition | 是否开启输入法模式,开启后输入法组合期间不触发 onChange,组合结束后触发一次。 | boolean | false |
| defaultValue | 非受控时的初始内容。 | string | number | - |
| disabled | 是否禁用。未设置时使用所在 InputGroup 的 disabled。 | boolean | - |
| getValueLength | 自定义计算字符串长度,搭配 maxLength、minLength 使用。 | Type(value: string) => number | - |
| hideSuffix | 清除按钮显示时隐藏后缀,默认两者并列。 | boolean | false |
| inputRef | 接收原生 input 元素。 | Type(element: HTMLInputElement) => void | - |
| inputStyle | 原生 input 元素的样式,对象键使用 kebab-case,数值需带单位。 | JSX.CSSProperties | string | - |
| insetLabel | 内嵌标签,未设置 prefix 时渲染在前缀位置;此时若未设置 aria-label 与 aria-labelledby,输入框通过 aria-labelledby 由它命名。 | JSX.Element | - |
| insetLabelId | insetLabel 所在元素的 id,供 aria-labelledby 引用。 | string | - |
| maxLength | 最大长度。传入 getValueLength 时按它计算长度并截断,否则使用原生属性。 | number | - |
| minLength | 最小长度。传入 getValueLength 时按它换算,否则使用原生属性。 | number | - |
| mode | 输入框模式,可选 password,显示密码显隐按钮。 | InputMode | - |
| onBlur | 输入框失去焦点时的回调。监听在外层容器上,焦点在输入框与组件内按钮之间移动时不触发。 | Type(e: FocusEvent) => void | - |
| onChange | 输入内容变化时的回调,参数为新值与事件。 | Type(value: string, e: InputChangeEvent) => void | - |
| onClear | 点击清除按钮时的回调。 | Type(e: MouseEvent) => void | - |
| onEnterPress | 按下回车时的回调(keydown),输入法组合中的回车不触发。 | Type(e: InputElementEvent<KeyboardEvent>) => void | - |
| onFocus | 输入框获得焦点时的回调。监听在外层容器上,组件内部的焦点移动不会再次触发。 | Type(e: FocusEvent) => void | - |
| onlyBorder | 外层容器的边框宽度,单位 px。 | number | - |
| placeholder | 输入框为空时显示的提示文字。 | string | number | - |
| prefix | 前缀标签,可以是文本、Semi 图标或任意 JSX 元素。 | JSX.Element | - |
| preventScroll | 聚焦时是否阻止浏览器滚动文档以显示新聚焦的元素,作用于组件内的 focus 调用。 | boolean | - |
| readonly | 是否只读:禁止输入,且不显示清除按钮。原生 readOnly 只禁止输入。 | boolean | false |
| ref | 接收外层容器 div 元素,其 focus() 与 blur() 作用于输入框。 | TypeRef<HTMLDivElement> | - |
| showClear | 有内容且悬停或焦点位于组件内时展示清除按钮。 | boolean | false |
| showClearIgnoreDisabled | 内部属性,供 DatePicker 使用:禁用时仍可清除。 | boolean | - |
| size | 输入框大小,可选 large、default、small。在 InputGroup 中由组的 size 替代。 | InputSize | - |
| suffix | 后缀标签,可以是文本、Semi 图标或任意 JSX 元素。 | JSX.Element | - |
| type | 原生 input 的 type。 | string | "text" |
| validateStatus | 校验状态,可选 default、error、warning;error 时输出 aria-invalid。 | ValidateStatus | "default" |
| value | 输入框内容,受控使用,配合 onChange 更新。 | string | number | - |
class、style、ref 落在外层容器 div 上;其余原生属性与事件(如 aria-*、id、name)落在原生 input 上。onFocus、onBlur 监听在外层容器上,焦点在输入框与组件内按钮之间移动时不触发。
TextArea
Props
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| autosize | 高度是否随内容自适应,可传 { minRows, maxRows } 限制行数。 | boolean | AutosizeRow | false |
| borderless | 无边框模式。 | boolean | false |
| cols | 默认列数,按平均字符宽度计。 | number | 20 |
| composition | 是否开启输入法模式,开启后输入法组合期间不触发 onChange,组合结束后触发一次。 | boolean | false |
| defaultValue | 非受控时的初始内容。 | string | - |
| disabled | 是否禁用。 | boolean | - |
| disabledEnterStartNewLine | 内部属性,供 Chat 使用:Enter 不换行,Shift + Enter 换行。 | boolean | - |
| getValueLength | 自定义计算字符串长度,搭配 maxLength、minLength、maxCount 使用。 | Type(value: string) => number | - |
| lineNumberClassName | 行号区域的类名。 | string | - |
| lineNumberStart | 行号起始值。 | number | 1 |
| lineNumberStyle | 行号区域的样式,对象键使用 kebab-case,数值需带单位。 | JSX.CSSProperties | - |
| maxCount | 字数上限,设置后显示字数统计;超出时计数器标红,不截断输入。 | number | - |
| maxLength | 最大长度。传入 getValueLength 时按它计算长度并截断,否则使用原生属性。 | number | - |
| minLength | 最小长度。传入 getValueLength 时按它换算,否则使用原生属性。 | number | - |
| onBlur | 失去焦点时的回调。监听在外层容器上,焦点在文本框与清除按钮之间移动时不触发。 | Type(e: FocusEvent) => void | - |
| onChange | 文本内容变化时的回调,参数为新值与事件。 | Type(value: string, e: TextAreaChangeEvent) => void | - |
| onClear | 点击清除按钮时的回调。 | Type(e: MouseEvent) => void | - |
| onEnterPress | 按下回车时的回调(keydown),输入法组合中的回车不触发。 | Type(e: TextAreaElementEvent<KeyboardEvent>) => void | - |
| onFocus | 获得焦点时的回调。监听在外层容器上,组件内部的焦点移动不会再次触发。 | Type(e: FocusEvent) => void | - |
| onResize | 尺寸变化回调:autosize 导致高度变化时触发;用户拖拽 resize 调整尺寸时也会触发,并额外给出 width。 | Type(data: { height: number; width?: number }) => void | - |
| readonly | 是否只读:禁止输入,且不显示清除按钮。原生 readOnly 只禁止输入。 | boolean | - |
| ref | 接收外层容器 div 元素,其 focus() 与 blur() 作用于文本框。 | TypeRef<HTMLDivElement> | - |
| resize | 是否允许拖拽调整尺寸及方向,可选 none、both、horizontal、vertical、block、inline;仅在显式传入时生效,autosize 开启时忽略。 | 'none' | 'both' | 'horizontal' | 'vertical' | 'block' | 'inline' | - |
| rows | 默认行数。 | number | 4 |
| showClear | 有内容且悬停或焦点位于组件内时展示清除按钮。 | boolean | false |
| showCounter | 是否显示字数统计;设置 maxCount 时总是显示。 | boolean | false |
| showLineNumber | 是否展示行号。 | boolean | false |
| textareaRef | 接收原生 textarea 元素;showLineNumber 切换时 textarea 会重新挂载,并再次调用。 | Type(element: HTMLTextAreaElement) => void | - |
| textareaStyle | 内部 textarea 元素的样式,如高度;对象键使用 kebab-case,数值需带单位。 | JSX.CSSProperties | - |
| validateStatus | 校验状态,可选 default、error、warning;error 时输出 aria-invalid。 | ValidateStatus | - |
| value | 文本内容,受控使用,配合 onChange 更新。 | string | - |
class、style、ref 落在外层容器 div 上;其余原生属性与事件(如 aria-*、id、name)落在原生 textarea 上。onFocus、onBlur 监听在外层容器上,焦点在文本框与清除按钮之间移动时不触发。
InputGroup
Props
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| disabled | 是否禁用,下发给组内未自行设置 disabled 的控件。 | boolean | - |
| label | 组的标签,对象形式,属性同 Form.Label(如 text、required、extra);text 可以是 JSX 元素。 | LabelProps | - |
| labelPosition | 标签位置,可选 top 或 left。 | 'top' | 'left' | (string & {}) | - |
| onBlur | 组内任一控件失去焦点时的回调,组内控件之间移动焦点也会触发。 | Type(e: FocusEvent) => void | - |
| onFocus | 组内任一控件获得焦点时的回调,组内控件之间移动焦点也会触发。 | Type(e: FocusEvent) => void | - |
| size | 输入框大小,可选 large、default、small;下发给组内每个控件,替代控件自身的 size。 | InputSize | "default" |
size 与 disabled 下发给组内每个控件:控件自己设置的 disabled 优先,size 总是取组的值。其余未声明的属性(如 data-*、aria-*)同样下发,控件自己设置的属性优先。class、style、ref 落在 role="group" 的 span 上。onFocus、onBlur 监听在组的根元素上,组内控件获得或失去焦点时,组与控件各自的处理器都会触发,互不覆盖。
Methods
Input 与 TextArea 的 ref 是外层容器 div,不是命令式句柄。focus() 与 blur() 作用于内部的输入框或文本框;select()、setSelectionRange() 等原生方法需要先通过 inputRef、textareaRef 取得原生元素,再在元素上调用。
Accessibility
ARIA
- 当 validateStatus 为 error 时,输入框的 aria-invalid 为 true
- 在 Form 中使用时,输入框通过 aria-labelledby 关联 Field 的 label
键盘和焦点
- Input 可被获取焦点,键盘用户可以使用 Tab 及 Shift + Tab 切换焦点
- 密码显隐按钮是原生
button,名称随状态读语言包中的「显示密码」「隐藏密码」,可以被聚焦,聚焦后使用 Enter 或者空格键切换,切换后焦点回到输入框 showClear开启、有内容且未禁用(或设置了showClearIgnoreDisabled)时,清除按钮是原生button,名称为语言包中的「清空输入」。Input 在 hover 或焦点位于其内时显示它,TextArea(不可编辑时不显示)在 hover 或焦点位于其内时显示它。从输入框按 Tab 移到清除按钮,Enter 或空格键清空,清空后焦点回到输入框;鼠标点击清除按钮时焦点留在原处
设计变量
| Sass 变量 | 值 | 用法 |
|---|---|---|
| $transition_duration-input-bg | var(--semi-transition_duration-none) | 输入框-背景色-动画持续时间 |
| $transition_function-input-bg | var(--semi-transition_function-easeIn) | 输入框-背景色-过渡曲线 |
| $transition_delay-input-bg | var(--semi-transition_delay-none) | 输入框-背景色-延迟时间 |
| $transition_duration-input-border | var(--semi-transition_duration-none) | 输入框-边框-动画持续时间 |
| $transition_function-input-border | var(--semi-transition_function-easeIn) | 输入框-边框-过渡曲线 |
| $transition_delay-input-border | var(--semi-transition_delay-none) | 输入框-边框-延迟时间 |
| $transform_scale-input | var(--semi-transform_scale-none) | 输入框-变大 |
| $color-input_default-border-default | transparent | 输入框描边颜色 - 默认 |
| $color-input_default-bg-default | var(--semi-color-fill-0) | 输入框背景颜色 - 默认 |
| $color-input_default-text-default | var(--semi-color-text-0) | 输入框文本颜色 - 默认 |
| $color-input_default-bg-hover | var(--semi-color-fill-1) | 输入框背景颜色 - 悬浮 |
| $color-input_default-border-hover | transparent | 输入框描边颜色 - 悬浮 |
| $color-input_default-bg-active | var(--semi-color-fill-2) | 输入框背景颜色 - 按下 |
| $color-input_default-bg-focus | var(--semi-color-fill-0) | 输入框背景颜色 - 选中 |
| $color-input_default-border-focus | var(--semi-color-focus-border) | 输入框描边颜色 - 选中 |
| $color-input_default-bg-focus-hover | $color-input_default-bg-focus | 输入框背景颜色 - 选中悬浮 |
| $color-input_danger-bg-default | var(--semi-color-danger-light-default) | 错误输入框背景颜色 - 默认 |
| $color-input_danger-border-default | var(--semi-color-danger-light-default) | 错误输入框描边颜色 - 默认 |
| $color-input_danger-bg-hover | var(--semi-color-danger-light-hover) | 错误输入框背景颜色 - 悬浮 |
| $color-input_danger-border-hover | var(--semi-color-danger-light-hover) | 错误输入框描边颜色 - 悬浮 |
| $color-input_danger-bg-focus | var(--semi-color-danger-light-default) | 错误输入框背景颜色 - 选中 |
| $color-input_danger-border-focus | var(--semi-color-danger) | 错误输入框描边颜色 - 选中 |
| $color-input_danger-bg-active | var(--semi-color-danger-light-active) | 错误输入框背景颜色 - 按下 |
| $color-input_warning-bg-default | var(--semi-color-warning-light-default) | 警告输入框背景颜色 - 默认 |
| $color-input_warning-border-default | var(--semi-color-warning-light-default) | 警告输入框文本颜色 - 默认 |
| $color-input_warning-bg-hover | var(--semi-color-warning-light-hover) | 警告输入框背景颜色 - 悬浮 |
| $color-input_warning-border-hover | var(--semi-color-warning-light-hover) | 警告输入框描边颜色 - 悬浮 |
| $color-input_warning-bg-focus | var(--semi-color-warning-light-default) | 警告输入框背景颜色 - 选中 |
| $color-input_warning-border-focus | var(--semi-color-warning) | 警告输入框描边颜色 - 选中 |
| $color-input_warning-bg-active | var(--semi-color-warning-light-active) | 警告输入框背景颜色 - 按下 |
| $color-input_disabled-bg-default | var(--semi-color-disabled-fill) | 禁用输入框背景颜色 |
| $color-input_disabled-text-default | var(--semi-color-disabled-text) | 禁用输入框文字颜色 |
| $color-input_placeholder-text-default | var(--semi-color-text-2) | 输入框占位文字颜色 |
| $color-input_prefix-text-default | var(--semi-color-text-2) | 输入框 prefix 文字颜色 |
| $color-input-icon-default | var(--semi-color-text-2) | 输入框图标颜色 |
| $color-input-icon-hover | var(--semi-color-primary-hover) | 输入框图标颜色 - 悬浮 |
| $color-input_counter-text-default | var(--semi-color-text-2) | 多行文本字数统计文字颜色 - 未超限 |
| $color-input_counter_danger-text-default | var(--semi-color-danger) | 多行文本字数统计文字颜色 - 未超限 |
| $color-input_group-border-default | var(--semi-color-border) | 输入框组合分割线颜色 |
| $color_input-default-border-only_border-default | var(--semi-color-border) | 只有描边的输入框描边颜色 - 默认 |
| $color_input-default-border-only_border-hover | var(--semi-color-border) | 只有描边的输入框描边颜色 - 默认 |
| $height-input_large | $height-control-large - 2px | 输入框高度 & 行高 - 大尺寸 |
| $height-input_small | $height-control-small - 2px | 输入框高度 & 行高 - 小尺寸 |
| $height-input_default | $height-control-default - 2px | 输入框高度 & 行高 - 默认尺寸 |
| $height-input_wrapper_large | $height-control-large | |
| $height-input_wrapper_small | $height-control-small | |
| $height-input_wrapper_default | $height-control-default | |
| $width-input-icon | $width-icon-medium + $spacing-tight * 2 | 密码图标最小宽度 |
| $width-input-icon_clear_before_suffix | $width-icon-medium + $spacing-tight | suffix 之前的清除按钮宽度 |
| $width-input-icon_clear_before_modebtn | $width-icon-medium | 密码之前的清除按钮宽度 |
| $motion-scale_size-active | 0.97 | |
| $motion-scale_size-inactive | 1 | |
| $width-input_append-border | $border-thickness-control | 后置标签描边宽度 |
| $width-input_prepend-border | $border-thickness-control | 前置标签描边宽度 |
| $width-input_group_pseudo-border | $border-thickness-control | |
| $width-input_wrapper-border | $border-thickness-control-focus | 输入框描边宽度 |
| $width-input_wrapper_focus-border | $border-thickness-control-focus | 输入框描边宽度 - 选中态 |
| $width-input_icon-outlineOffset | -1px | 输入框 icon outline-offset 宽度 |
| $radius-input_wrapper | var(--semi-border-radius-small) | 输入框圆角大小 |
| $spacing-input-paddingLeft | $spacing-base-tight | 输入光标距离容器的左侧内边距 |
| $spacing-input-paddingRight | $spacing-base-tight | 输入文字距离容器的右侧内边距 |
| $spacing-input_prefix_suffix-marginX | $spacing-base-tight | prefix/suffix 水平外边距 |
| $spacing-input_prefix_icon-marginY | 0 | prefix 图标垂直内边距 |
| $spacing-input_prefix_icon-marginX | $spacing-tight | prefix 图标水平内边距 |
| $spacing-input_prepend-paddingY | 0 | 前置标签垂直内边距 |
| $spacing-input_prepend-paddingX | $spacing-base-tight | 前置标签水平内边距 |
| $spacing-input_group_withTopLabel-marginTop | $spacing-base | |
| $spacing-input_group_withTopLabel-marginBottom | $spacing-base | |
| $font-input_prefix_suffix-fontWeight | $font-weight-bold | prefix/suffix 文字字重 |
| $spacing-textarea-paddingY | 5px | 多行文本垂直内边距 |
| $spacing-textarea-paddingX | $spacing-base-tight | 多行文本水平内边距 |
| $spacing-textarea_counter-paddingTop | 3px | 多行文本字数统计顶部内边距 |
| $spacing-textarea_counter-paddingRight | 12px | 多行文本字数统计右侧内边距 |
| $spacing-textarea_counter-paddingBottom | 5px | 多行文本字数统计底部内边距 |
| $spacing-textarea_counter-paddingLeft | 12px | 多行文本字数统计左侧内边距 |
| $width-textarea-border | $border-thickness | 多行文本描边宽度 |
| $height-textarea_counter | 32px | 多行文本字数统计最小高度 |
| $color-textarea-border-default | transparent | 多行文本描边颜色 |
| $color-textarea-border-hover | $color-textarea-border-default | 多行文本描边颜色 - 悬浮 |
| $color-textarea-icon-default | var(--semi-color-text-2) | 多行文本 clear 图标颜色 |
| $color-textarea-icon-hover | var(--semi-color-primary-hover) | 多行文本 clear 图标颜色 - 悬浮 |
| $width-textarea-icon | $width-icon-medium + $spacing-tight | clear 图标最小宽度 |
| $height-textarea-default | 32px | 多行文本 clear 图标的高度 |
| $spacing-textarea_withShowClear-paddingRight | 36px | 多行文本设置 showClear 后的右内边距 |
| $spacing-textarea-icon-right | $spacing-extra-tight | 多行文本 clear 图标的右边距 |