输入类

输入框

输入框是最基本的接收用户文本输入的组件

代码演示

如何引入

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



Prefix




Suffix
代码
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

http://
.com
代码
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。



0/100
代码
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 才能换行

使用
shift+enter
换行的 TextArea
代码
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 属性可设置只有高度自动随内容增加而变化。





0/100
代码
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

10/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

onChange 触发次数: 0


TextArea with composition

onChange 触发次数: 0
代码
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无边框模式。booleanfalse
clearIcon自定义清除按钮的图标,showClear 为 true 时有效。JSX.Element-
composition是否开启输入法模式,开启后输入法组合期间不触发 onChange,组合结束后触发一次。booleanfalse
defaultValue非受控时的初始内容。string | number-
disabled是否禁用。未设置时使用所在 InputGroup 的 disabled。boolean-
getValueLength自定义计算字符串长度,搭配 maxLength、minLength 使用。Type(value: string) => number-
hideSuffix清除按钮显示时隐藏后缀,默认两者并列。booleanfalse
inputRef接收原生 input 元素。Type(element: HTMLInputElement) => void-
inputStyle原生 input 元素的样式,对象键使用 kebab-case,数值需带单位。JSX.CSSProperties | string-
insetLabel内嵌标签,未设置 prefix 时渲染在前缀位置;此时若未设置 aria-label 与 aria-labelledby,输入框通过 aria-labelledby 由它命名。JSX.Element-
insetLabelIdinsetLabel 所在元素的 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 只禁止输入。booleanfalse
ref接收外层容器 div 元素,其 focus() 与 blur() 作用于输入框。TypeRef<HTMLDivElement>-
showClear有内容且悬停或焦点位于组件内时展示清除按钮。booleanfalse
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 | AutosizeRowfalse
borderless无边框模式。booleanfalse
cols默认列数,按平均字符宽度计。number20
composition是否开启输入法模式,开启后输入法组合期间不触发 onChange,组合结束后触发一次。booleanfalse
defaultValue非受控时的初始内容。string-
disabled是否禁用。boolean-
disabledEnterStartNewLine内部属性,供 Chat 使用:Enter 不换行,Shift + Enter 换行。boolean-
getValueLength自定义计算字符串长度,搭配 maxLength、minLength、maxCount 使用。Type(value: string) => number-
lineNumberClassName行号区域的类名。string-
lineNumberStart行号起始值。number1
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默认行数。number4
showClear有内容且悬停或焦点位于组件内时展示清除按钮。booleanfalse
showCounter是否显示字数统计;设置 maxCount 时总是显示。booleanfalse
showLineNumber是否展示行号。booleanfalse
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 变量,不能覆写。定制样式请覆写 --semi-* CSS 变量(见 Design Token 页),或写不分层的 CSS 规则。
Sass 变量值用法
$transition_duration-input-bgvar(--semi-transition_duration-none)输入框-背景色-动画持续时间
$transition_function-input-bgvar(--semi-transition_function-easeIn)输入框-背景色-过渡曲线
$transition_delay-input-bgvar(--semi-transition_delay-none)输入框-背景色-延迟时间
$transition_duration-input-bordervar(--semi-transition_duration-none)输入框-边框-动画持续时间
$transition_function-input-bordervar(--semi-transition_function-easeIn)输入框-边框-过渡曲线
$transition_delay-input-bordervar(--semi-transition_delay-none)输入框-边框-延迟时间
$transform_scale-inputvar(--semi-transform_scale-none)输入框-变大
$color-input_default-border-defaulttransparent输入框描边颜色 - 默认
$color-input_default-bg-defaultvar(--semi-color-fill-0)输入框背景颜色 - 默认
$color-input_default-text-defaultvar(--semi-color-text-0)输入框文本颜色 - 默认
$color-input_default-bg-hovervar(--semi-color-fill-1)输入框背景颜色 - 悬浮
$color-input_default-border-hovertransparent输入框描边颜色 - 悬浮
$color-input_default-bg-activevar(--semi-color-fill-2)输入框背景颜色 - 按下
$color-input_default-bg-focusvar(--semi-color-fill-0)输入框背景颜色 - 选中
$color-input_default-border-focusvar(--semi-color-focus-border)输入框描边颜色 - 选中
$color-input_default-bg-focus-hover$color-input_default-bg-focus输入框背景颜色 - 选中悬浮
$color-input_danger-bg-defaultvar(--semi-color-danger-light-default)错误输入框背景颜色 - 默认
$color-input_danger-border-defaultvar(--semi-color-danger-light-default)错误输入框描边颜色 - 默认
$color-input_danger-bg-hovervar(--semi-color-danger-light-hover)错误输入框背景颜色 - 悬浮
$color-input_danger-border-hovervar(--semi-color-danger-light-hover)错误输入框描边颜色 - 悬浮
$color-input_danger-bg-focusvar(--semi-color-danger-light-default)错误输入框背景颜色 - 选中
$color-input_danger-border-focusvar(--semi-color-danger)错误输入框描边颜色 - 选中
$color-input_danger-bg-activevar(--semi-color-danger-light-active)错误输入框背景颜色 - 按下
$color-input_warning-bg-defaultvar(--semi-color-warning-light-default)警告输入框背景颜色 - 默认
$color-input_warning-border-defaultvar(--semi-color-warning-light-default)警告输入框文本颜色 - 默认
$color-input_warning-bg-hovervar(--semi-color-warning-light-hover)警告输入框背景颜色 - 悬浮
$color-input_warning-border-hovervar(--semi-color-warning-light-hover)警告输入框描边颜色 - 悬浮
$color-input_warning-bg-focusvar(--semi-color-warning-light-default)警告输入框背景颜色 - 选中
$color-input_warning-border-focusvar(--semi-color-warning)警告输入框描边颜色 - 选中
$color-input_warning-bg-activevar(--semi-color-warning-light-active)警告输入框背景颜色 - 按下
$color-input_disabled-bg-defaultvar(--semi-color-disabled-fill)禁用输入框背景颜色
$color-input_disabled-text-defaultvar(--semi-color-disabled-text)禁用输入框文字颜色
$color-input_placeholder-text-defaultvar(--semi-color-text-2)输入框占位文字颜色
$color-input_prefix-text-defaultvar(--semi-color-text-2)输入框 prefix 文字颜色
$color-input-icon-defaultvar(--semi-color-text-2)输入框图标颜色
$color-input-icon-hovervar(--semi-color-primary-hover)输入框图标颜色 - 悬浮
$color-input_counter-text-defaultvar(--semi-color-text-2)多行文本字数统计文字颜色 - 未超限
$color-input_counter_danger-text-defaultvar(--semi-color-danger)多行文本字数统计文字颜色 - 未超限
$color-input_group-border-defaultvar(--semi-color-border)输入框组合分割线颜色
$color_input-default-border-only_border-defaultvar(--semi-color-border)只有描边的输入框描边颜色 - 默认
$color_input-default-border-only_border-hovervar(--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-tightsuffix 之前的清除按钮宽度
$width-input-icon_clear_before_modebtn$width-icon-medium密码之前的清除按钮宽度
$motion-scale_size-active0.97
$motion-scale_size-inactive1
$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_wrappervar(--semi-border-radius-small)输入框圆角大小
$spacing-input-paddingLeft$spacing-base-tight输入光标距离容器的左侧内边距
$spacing-input-paddingRight$spacing-base-tight输入文字距离容器的右侧内边距
$spacing-input_prefix_suffix-marginX$spacing-base-tightprefix/suffix 水平外边距
$spacing-input_prefix_icon-marginY0prefix 图标垂直内边距
$spacing-input_prefix_icon-marginX$spacing-tightprefix 图标水平内边距
$spacing-input_prepend-paddingY0前置标签垂直内边距
$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-boldprefix/suffix 文字字重
$spacing-textarea-paddingY5px多行文本垂直内边距
$spacing-textarea-paddingX$spacing-base-tight多行文本水平内边距
$spacing-textarea_counter-paddingTop3px多行文本字数统计顶部内边距
$spacing-textarea_counter-paddingRight12px多行文本字数统计右侧内边距
$spacing-textarea_counter-paddingBottom5px多行文本字数统计底部内边距
$spacing-textarea_counter-paddingLeft12px多行文本字数统计左侧内边距
$width-textarea-border$border-thickness多行文本描边宽度
$height-textarea_counter32px多行文本字数统计最小高度
$color-textarea-border-defaulttransparent多行文本描边颜色
$color-textarea-border-hover$color-textarea-border-default多行文本描边颜色 - 悬浮
$color-textarea-icon-defaultvar(--semi-color-text-2)多行文本 clear 图标颜色
$color-textarea-icon-hovervar(--semi-color-primary-hover)多行文本 clear 图标颜色 - 悬浮
$width-textarea-icon$width-icon-medium + $spacing-tightclear 图标最小宽度
$height-textarea-default32px多行文本 clear 图标的高度
$spacing-textarea_withShowClear-paddingRight36px多行文本设置 showClear 后的右内边距
$spacing-textarea-icon-right$spacing-extra-tight多行文本 clear 图标的右边距