跳转到内容

InputGroup 输入组

用于在同一输入表面中组合前缀、输入控件和后缀。

用法

为输入框添加固定前缀

组件结构

加粗的是必需部件。

data-scope="input-group"root · item

示例

动作

将关联操作放在输入框末端

变体

outline 画描边输入面,subtle 用淡底嵌入已有表面

¥
¥

文本前后缀

添加协议和域名后缀

https://
.dev

设计指引

何时使用

  • 输入框需要图标、单位或固定文本。
  • 输入框需要紧邻的搜索、复制或提交动作。

何时不用

  • 组合并列操作时,使用按钮组
  • 仅排列控件时,使用布局组件。

特性

  • 所有内容共享一个背景、外轮廓和焦点环。
  • 支持 outlinesubtleghost 三种形态,与组内字段同一套词。
  • 前后缀不参与交互,控件保留自身语义。
  • 支持 smmdlg 三种尺寸。

组合

最佳实践

  • 前后缀保持简短,并使用静态内容。
  • 可交互内容使用对应控件,不要放进 item
  • 组内控件使用相同尺寸。

反模式

  • 使用过多前后缀,让输入区域难以识别。
  • item 承载按钮或链接。

API 参考

产物

自定义元素<xh-input-group>
Vue 组件XhInputGroupItem XhInputGroupRoot
状态机无,connect 直接由 props 算属性
皮肤@xihan-ui/styles/input-group.css

Props

属性类型必填说明
sizeSize尺寸:sm / md / lg,写入根上供皮肤填入 item 的高度、内衬与字号槽位。 未提供时档位由组内控件自身的 data-size 决定,组内没有带档位的控件时使用 md。
variantControlVariant形态:outline / subtle / ghost,与组内字段同一套词。默认 outline。

connect API

getXxxProps() 返回对应部件的宿主属性。

成员类型说明
getRootProps() => T['element']
getItemProps() => T['element']

无障碍

键盘

规格出处:W3C APG

无键盘交互(不接收焦点,或焦点行为完全由原生元素提供)。

样式参考

皮肤

@xihan-ui/styles/input-group.css 使用 [data-scope="input-group"][data-part="root"] 部件选择器,位于 xihan.components 层。覆盖样式使用 xihan.overrides

forced-colors: active 下另有一套规则:颜色交给系统,边框与状态标记改用系统色关键字。

数据属性

connect 生成;条件不成立时不输出无值属性。

部件属性
rootdata-sizeprops.size
rootdata-variantprops.variant

CSS 变量

本组件公开覆盖槽由独立皮肤的实际消费位生成;默认来源、作用部件和状态均与 CSS 同源。

变量部件CSS 属性状态默认来源说明
--xh-input-group-bgrootbackgrounddefault--xh-_input-group-bginput-group 的 root 部件 background 覆盖槽。
--xh-input-group-bg-hoverrootbackgrounddisabled
hover
not(:has([data-disabled])
--xh-_input-group-bg-hoverinput-group 的 root 部件 background 覆盖槽。
--xh-input-group-borderrootborderdefault--xh-_input-group-borderinput-group 的 root 部件 border 覆盖槽。
--xh-input-group-border-focusrootborder-colorfocus-within--xh-_input-group-border-focusinput-group 的 root 部件 border-color 覆盖槽。
--xh-input-group-border-hoverrootborder-colordisabled
hover
not(:has([data-disabled])
--xh-_input-group-border-hoverinput-group 的 root 部件 border-color 覆盖槽。
--xh-input-group-border-invalidrootborder-colorhas([data-invalid], [aria-invalid='true'])
invalid
--xh-border-invalidinput-group 的 root 部件 border-color 覆盖槽。
--xh-input-group-item-fgitemcolordefault--xh-fg-mutedinput-group 的 item 部件 color 覆盖槽。
--xh-input-group-item-font-sizeitemfont-sizedefault--xh-_input-group-font-sizeinput-group 的 item 部件 font-size 覆盖槽。
--xh-input-group-item-hitemblock-sizedefault--xh-_input-group-hinput-group 的 item 部件 block-size 覆盖槽。
--xh-input-group-item-pxitempadding-inlinedefault--xh-_input-group-pxinput-group 的 item 部件 padding-inline 覆盖槽。
--xh-input-group-radiuscontrol
root
border-end-end-radius
border-end-start-radius
border-radius
border-start-end-radius
border-start-start-radius
default
first-child
is(*, [data-part='control'], [data-part='root'])
is([data-part='control'], [data-part='root'])
last-child
--xh-shape-controlinput-group 的 control、root 部件 border-end-end-radius、border-end-start-radius、border-radius、border-start-end-radius、border-start-start-radius 覆盖槽。
--xh-input-group-ring-focusrootoutlinefocus-within--xh-ring-focusinput-group 的 root 部件 outline 覆盖槽。
--xh-input-group-ring-invalidrootoutline-colorfocus-within
has([data-invalid], [aria-invalid='true'])
invalid
--xh-ring-invalidinput-group 的 root 部件 outline-color 覆盖槽。
--xh-input-group-shadowrootbox-shadowdefault--xh-_input-group-shadowinput-group 的 root 部件 box-shadow 覆盖槽。

动效

background · border-color · box-shadowtransition 过渡。时长与缓动读动效令牌,改令牌即改全局节奏。

prefers-reduced-motion: reduce 下本组件另有降级规则。

RTL

皮肤用逻辑属性排布(inline-start 一族),dir="rtl" 下自动镜像。

Released under The MIT License