Skip to content

Input 输入框 ​

原生 <input> 增强的基础输入组件。

基础用法 ​

基础用法

无障碍名称(label) ​

label(可访问名称)

label 作为输入框的可访问名称(aria-label)来源,读屏朗读该名称。未设置 label 时依次回退 placeholder → 内置文案「输入框」;设置后(如「登录邮箱」)覆盖回退链。

原生表单与 label 关联 ​

form-associated:label for / FormData / reset

读取 FormDataform.reset()

组件是 form-associated 自定义元素(formAssociated: true):<label for> 原生关联生效(点击 label 聚焦到 shadow 内真实 input,读屏朗读 label 文本);放进原生 <form> 后经标准 FormData 收集(有 name 才提交)、form.reset() 回到 value 初始值、父级 fieldset[disabled] 联动禁用。与 oas-form 的 collectFields 机制并行可用。

程序性读/写当前值走公开 value property(对齐原生 input.value):el.value 读取——parser/mask 感知的提交值语义(与 oas-input/oas-change/FormData 口径一致);el.value = x 写入——写受控 value 属性并即时回写内部控件,不派发事件。受控赋值即生效语义:即使传入值与当前属性值相同也会强制回写内部控件;Vue 等框架对自定义元素的 :value 绑定在每次 patch 会无条件重写,受控绑定下请以事件(oas-input/oas-change)同步外部状态,避免无关重渲染抹掉用户未提交的输入。

类型 ​

type

type 透传原生 input 类型,支持 text / password / number / email 等。

密码可见切换 ​

show-password

show-password 在 type="password" 时于输入框右侧渲染眼睛按钮,点击在明文/密文间切换;按钮带 aria-label(locale 文案)与 aria-pressed,聚焦时有焦点环。

可清空 ​

可清空(clearable)

存在内容且设置 clearable 时显示清除按钮,点击后清空并聚焦,派发 oas-clear。

加载态 ​

loading 加载态(不禁用输入)

切换 loading

设置 loading 后输入框行尾显示 spinner 并同步 aria-busy="true":输入不被禁用(用户可继续编辑,适合远程校验/联想请求场景);与 clearable 共存时 spinner 优先、清除按钮让位,退出 loading 后恢复。

禁用与只读 ​

disabled / readonly

前后缀(addon) ​

addon-before / addon-after

addon-before / addon-after 为输入框外侧的 addon 文案块(如单位、域名),分别走独立的 ::part(prepend) / ::part(append),禁用时 addon 灰化。

图标 ​

prefix-icon / suffix-icon

prefix-icon / suffix-icon 接受图标名(@oas-ui/icons 的 内置图标名),内联渲染 SVG 装饰图标。

内嵌前后缀与清空并存 ​

prefix / suffix + clearable

prefix-text / suffix-text 为输入框内部文案,与 clearable、图标、addon 可并存不冲突。prefix / suffix 为兼容别名(attribute 与 property 两条通道均可写入,React / Vue 绑定也生效)——规范名是 prefix-text / suffix-text。

自定义清除图标(clear-icon 插槽) ​

clear-icon 插槽

clearable 的清除按钮默认渲染内置关闭图标;需要个性化时用 slot="clear-icon" 分发自定义图标(slot 有内容时原生替换内置 fallback,图标尺寸由分发内容自定)。

字数统计 ​

show-count + maxlength

show-count 在输入框右下角显示字数统计:设置 maxlength 时显示 当前长度/maxlength,未设置时仅显示当前长度;maxlength 同时透传原生 input 限制输入长度。超过限制时计数数字变 danger 色。

提示文案(hint) ​

hint 静态提示(与校验错误独立)

切换校验错误

hint 在输入框下方常驻一段静态提示文案(字号 --oas-font-size-sm、次要色),并通过 aria-describedby 关联到内层 input(读屏朗读提示内容)。它与校验错误(status / aria-invalid)相互独立:错误态出现时提示仍保留。点击按钮切换 status="error" 可看到错误边框与提示文案共存。

回车提交事件 ​

oas-enter

输入时按 Enter(非输入法组合上屏)派发 oas-enter,detail: { value }。

事件 ​

输入与清除事件

监听 oas-input(输入中)与 oas-clear(清除):

复杂前后缀(slot 分发) ​

slot=prefix / slot=suffix

📱

简单文本用 prefix-text / suffix-text 属性;复杂内容(图标/按钮/徽标等)用同名 slot="prefix" / slot="suffix" 分发,slot 有内容时原生替换属性文本。prefix / suffix 为兼容别名(规范名 prefix-text / suffix-text),attribute 与 property(React / Vue 绑定)两条通道均可用。

尺寸 ​

size 尺寸档位

size 支持 small / medium(默认)/ large 三档,高度对齐全局尺寸 token(--oas-control-height-sm/md/lg,24/32/40px),字号同步缩放,内嵌前后缀、addon、清除/眼睛按钮同档联动。未显式设置时就近继承 oas-config-provider 的 size 注入(全局表单密度)。

形态 ​

variant 形态

variant 支持 outlined(默认描边)/ filled(填充底色、聚焦才出边框)/ borderless(无框无底色,用于纯文本嵌入场景)。

校验态 ​

status 校验态

status 支持 error / warning / success 三态:边框与焦点环切换语义色。error 会同步内层 input 的 aria-invalid="true"(读屏可感知「无效」);warning / success 仅视觉提示、不标无效语义。表单校验(oas-form)写宿主 aria-invalid 的既有通道仍然生效,与 status 可叠加(error 优先)。

原生属性透传 ​

原生属性透传白名单

以下原生属性镜像到 shadow 内原生 input(宿主移除后同步解除):name / autocomplete / autofocus / inputmode / minlength / min / max / step / required / spellcheck / enterkeyhint / pattern。可用于原生表单语义、自动填充与移动端键盘优化(inputmode / enterkeyhint);其中 min / max / step 供 type="number" 使用(其余类型浏览器原生忽略)。autofocus 由组件在挂载后转发聚焦一次(原生 autofocus 不穿透 shadow DOM),页面加载即可聚焦输入框。

焦点与提交事件 ​

oas-focus / oas-blur / oas-change + select()

全选
  • oas-focus / oas-blur:内层 input 聚焦/失焦时派发,detail: { value } 携带当前值。
  • oas-change:提交语义——失焦或按 Enter 时值相对上次提交发生变化才派发(输入中不派发,与 oas-input 区分)。
  • select() 方法:全选输入框内容(委托原生 input.select);blur() 同理委托失焦。

addon 复杂内容(slot 分发) ​

slot=prepend / slot=append(文本 / 图标 / 按钮)

http://.com搜索

addon-before / addon-after 属性只接文案;复杂内容用 slot="prepend" / slot="append" 分发。纯文本、图标渲染在灰底 addon 面上(圆角合并/边框去重与 addon 属性一致,文本双通道并存——slot 有内容时原生替换属性 fallback)。分发自包含控件(oas-button / oas-button-group / oas-compact)时,addon 会自动退化为贴合容器:去掉文本 addon 的灰底、描边与左右内边距,高度与输入框同档对齐,相邻边 -1px 压边合并为单线,并把圆角合并协议(--oas-button-group-radius)穿透给控件,使其外角与输入框外框拼成连续圆角。选择器等自带边框/底色的复合控件仍不建议放进 addon 槽:跨 Shadow 边界无法安全去除其内部样式(其下拉层与触发器共享颜色 token,透明化会连带下拉菜单),与输入框拼接复合控件请用 oas-compact 紧凑容器:

select + input 组合(oas-compact 紧凑拼接)

访问

块级 addon(block-start / block-end) ​

slot=block-start / slot=block-end(输入框上/下方整行块)

📦 配送到:北京市海淀区清空地址

slot="block-start" / slot="block-end" 在输入框上方 / 下方各渲染一个整行块级 addon:与 prepend / append(水平拼接在输入框两侧)不同维度,块级行独立占位、不参与边框拼接,可放提示文案、动作按钮、链接等任意内容。行容器字号走 --oas-font-size-sm、次要色(禁用时灰化),经 ::part(block-start) / ::part(block-end) 可深度定制。与 show-count(outside 计数同在输入框下方)并存时,计数自动挂进 block-end 行内靠右显示,不重叠。

字数统计位置与字素计数 ​

count-position + emoji 字素计数

show-count 计数按**字素(grapheme)**统计(内建 Intl.Segmenter,无该 API 时按码点兜底)——emoji、ZWJ 组合字符(如家庭 emoji)计 1,避免 JS length 把一个 emoji 算作多个。count-position="inside" 把计数移到输入区内右侧(默认 outside 右下角)。注意:maxlength 的原生截断仍按码元口径,与统计口径分离(需要超限场景见下方 allow-over-max)。

超限不截断 ​

allow-over-max + oas-validate

默认 maxlength 透传原生硬截断;设置 allow-over-max 后不再截断,超限可继续输入,计数标红(danger),并在越界状态翻转时派发 oas-validate(detail.error 为 exceed-maximum,回到限内为 null),宿主可据此提示而不打断输入。

显示格式化(formatter / parser) ​

formatter / parser(千分位,property 通道)

formatter / parser 仅 JS property 通道(el.formatter = fn)——Web Components 的 attribute 无法传函数,无对应 HTML 属性。显示值 = formatter(原始值),oas-input / oas-change 等事件 detail.value 携带 parser(显示值) 解析后的原始值;移除(置 null)恢复原始显示。输入时光标按格式化前后长度差近似保持(卡号分段等场景够用)。

输入掩码(mask) ​

mask 输入掩码(###-####)与 mask-raw 原始值

mask 定义输入掩码模板:# 数字、A 字母、* 字母数字,其余字符为字面量(如 ###-#### 的 -)。键入自动跳过字面量、非法字符被过滤、粘贴只收合法位、退格删到字面量即停(字面量由模板管理,不会被删穿),光标始终保持在正确位置。默认事件与表单提交值携带显示值(含字面量);设置 mask-raw 后改为去格式化的原始字符序列(FormData 提交值同口径)。mask 与 formatter/parser 互斥,同设时 mask 优先并告警;maxlength 在 mask 模式下不透传(避免原生截断破坏掩码)。(show-count 计数口径随提交通道:缺省按显示值(含字面量),mask-raw 时按原始序列)

清除按钮显隐 ​

show-clear-on

show-clear-on 控制清除按钮显隐策略:默认 always(有值即常显,现状不变);focus 仅聚焦时显示;hover 悬浮或聚焦时显示(降低密集表单的视觉噪声)。

宽度自适应 ​

auto-width

auto-width 开启后宽度随内容自适应(mirror 测宽技术:与输入框同字体/内边距的隐藏测量元素,空值回落占位文本宽度);auto-width-min / auto-width-max(px 数值)钳制宽度范围,min 缺省 72px、max 缺省 100%。行内编辑、标签输入等场景常用。

范围输入(组合写法) ​

两个输入框 + 分隔符(范围输入)

~

范围输入用两个 oas-input + 分隔符布局即可(组件不提供 pair 双输入 API):两个输入框各自的 oas-change 提交值,宿主组合成区间。需要紧凑圆角拼接时外层套 oas-compact 容器。

API ​

oas-input ​

属性 ​

属性说明类型默认值
addon-after后置 addon 文案块——
addon-before前置 addon 文案块——
allow-over-max超限不截断:maxlength 不再透传原生(可继续输入),计数标红并派发 oas-validateboolean—
auto-width宽度随内容自适应(mirror 测宽;空值回落 placeholder 宽),常配 auto-width-min/max 钳制boolean—
auto-width-maxauto-width 最大宽度 px 或百分比(默认 100%)——
auto-width-minauto-width 最小宽度 px(默认 72)——
autocomplete透传内层原生 input 的自动填充提示(密码管理器/浏览器自动填充)——
autofocus挂载后自动聚焦内层输入框(原生 autofocus 不穿透 shadow,组件转发)boolean—
clearable可清空boolean—
count-position字数计数位置:outside(默认,框外)/ inside(输入区内右侧)string—
disabled禁用boolean—
enterkeyhint透传内层原生 input 的移动虚拟键盘回车键形态(如 search/send/go)——
hint输入框下方常驻静态提示文案(aria-describedby 关联,独立于校验错误)string—
inputmode透传内层原生 input 的移动虚拟键盘类型——
label可访问名称(aria-label 来源,未设时回退 placeholder → 内置文案「输入框」)——
loading加载态:行尾 spinner + aria-busy(不禁用输入);与 clearable 共存时优先显示boolean—
mask输入掩码模板:# 数字 / A 字母 / * 字母数字,其余字符为字面量(如 ###-####);键入自动跳字面量、粘贴只收合法位、退格删到字面量停;与 formatter/parser 互斥(mask 优先)string—
mask-raw提交值/FormData 为去格式化的原始字符序列;缺省提交显示值boolean—
max透传内层原生 input 的最大值——
maxlength最大输入长度(透传原生 maxlength)string—
min透传内层原生 input 的最小值(number 类型生效)——
minlength透传内层原生 input 的最小长度约束——
name原生表单字段名(form-associated:FormData 提交的键)——
pattern透传内层原生 input 的正则校验模式——
placeholder占位提示string—
prefix-icon前置图标名string—
prefix-text内嵌前置文案;prefix 为兼容别名(attribute 与 property 通道均可用)string—
readonly只读boolean—
required必填标记(透传原生 input;驱动原生校验链 valueMissing)boolean—
show-clear-on清除按钮显隐:always(默认常显)/ hover / focusstring—
show-count显示字数统计(右下角,超限标 danger)boolean—
show-password密码可见切换(type="password" 时渲染眼睛按钮)boolean—
size尺寸档位 small / medium(默认)/ large:高度与字号联动stringmedium
spellcheck透传内层原生 input 的拼写检查开关——
status校验态:error / warning / success;error 同步内层 aria-invalidstring—
step透传内层原生 input 的步长——
suffix-icon后置图标名string—
suffix-text内嵌后置文案;suffix 为兼容别名(attribute 与 property 通道均可用)string—
type原生 input 类型stringtext
value值(受控)string—
variant形态:outlined(默认描边)/ filled(填充底色)/ borderless(无框)string—

Property(JS property;是否写回 attribute 见各行说明) ​

Property说明类型默认值
value当前值:parser/mask 感知的提交值语义(el.value 读;el.value = x 写受控 value 并即时回写内部控件,不派发事件)string—

事件 ​

事件说明
oas-blur失焦时派发,detail: { value }
oas-change提交语义:失焦/Enter 且值相对上次提交变化时派发,detail: { value }
oas-clear点击清除,detail: { originalEvent }
oas-enter按 Enter(非输入法组合),detail: { value }
oas-focus聚焦时派发,detail: { value }
oas-input输入中,detail: { value }
oas-validateallow-over-max 越界状态翻转时派发,detail: { error: "exceed-maximum" | null }

插槽 ​

名称说明
append后置 addon 区(可嵌 select/按钮等任意内容)
block-end输入框下方整行块级 addon(动作行/计数行,任意内容;outside 字数计数并存时自动挂入本行)
block-start输入框上方整行块级 addon(提示行/说明行,任意内容)
clear-icon自定义清除按钮图标(插槽有内容即替换内置)
prefix内嵌前置内容(图标/按钮等复杂内容,分发时优先于 prefix 属性文本);简单文本用 prefix 属性即可
prepend前置 addon 区(可嵌 select/按钮等任意内容)
suffix内嵌后置内容(图标/按钮等复杂内容,分发时优先于 suffix 属性文本);简单文本用 suffix 属性即可

CSS 变量 ​

CSS 变量默认值
--oas-button-group-radiusvar(--oas-radius-md)
--oas-input-auto-max100%
--oas-input-auto-min72px
--oas-input-measured100%

基于 MIT OR Apache-2.0 双许可发布