98.0k

输入组 Input Group

PreviousNext

显示附加信息或操作到输入框或文本域。

安装

pnpm dlx shadcn@latest add input-group

用法

import {
  InputGroup,
  InputGroupAddon,
  InputGroupButton,
  InputGroupInput,
  InputGroupText,
  InputGroupTextarea,
} from "@/components/ui/input-group"
<InputGroup>
  <InputGroupInput placeholder="搜索..." />
  <InputGroupAddon>
    <SearchIcon />
  </InputGroupAddon>
  <InputGroupAddon align="inline-end">
    <InputGroupButton>搜索</InputGroupButton>
  </InputGroupAddon>
</InputGroup>

示例

图标

文字

在输入框旁显示附加文本信息。

按钮

在输入组中添加按钮以执行操作。

提示框

添加提示框以提供额外上下文或帮助。

文本域

输入组同样支持文本域组件。使用 block-startblock-end 进行对齐。

加载旋转器

处理输入时显示加载指示器。

标签

在输入组内添加标签以提升无障碍性。

下拉菜单

将输入组与下拉菜单结合,支持复杂交互。

按钮组

用按钮组包裹输入组以创建前缀和后缀。

自定义输入

给你的自定义输入添加 data-slot="input-group-control" 属性,实现自动行为和聚焦状态处理。

不会对自定义输入应用样式。请使用 className 属性自行添加样式。

import { InputGroup, InputGroupAddon } from "@/component/ui/input-group"
import TextareaAutosize from "react-textarea-autosize"
 
export function InputGroupCustom() {
  return (
    <InputGroup>
      <TextareaAutosize
        data-slot="input-group-control"
        className="dark:bg-input/30 flex field-sizing-content min-h-16 w-full resize-none rounded-md bg-transparent px-3 py-2 text-base transition-[color,box-shadow] outline-none"
        placeholder="自动调整高度文本域..."
      />
      <InputGroupAddon align="block-end">how</InputGroupAddon>
    </InputGroup>
  )
}

API 参考

InputGroup

包裹输入和附加内容的主组件。

属性类型默认值
classNamestring
<InputGroup>
  <InputGroupInput />
  <InputGroupAddon />
</InputGroup>

InputGroupAddon

显示图标、文字、按钮或其他内容在输入旁边。

属性类型默认值
align"inline-start" | "inline-end" | "block-start" | "block-end""inline-start"
classNamestring
<InputGroupAddon align="inline-end">
  <SearchIcon />
</InputGroupAddon>

对于 <InputGroupInput />,使用 inline-startinline-end 对齐。对于 <InputGroupTextarea />,使用 block-startblock-end 对齐。

InputGroupAddon 组件可以包含多个 InputGroupButton 组件和图标。

<InputGroupAddon>
  <InputGroupButton>按钮</InputGroupButton>
  <InputGroupButton>按钮</InputGroupButton>
</InputGroupAddon>

InputGroupButton

在输入组内显示按钮。

属性类型默认值
size"xs" | "icon-xs" | "sm" | "icon-sm""xs"
variant"default" | "destructive" | "outline" | "secondary" | "ghost" | "link""ghost"
classNamestring
<InputGroupButton>按钮</InputGroupButton>
<InputGroupButton size="icon-xs" aria-label="复制">
  <CopyIcon />
</InputGroupButton>

InputGroupInput

构建输入组时替代 <Input />。该组件预先应用了输入组样式,并使用统一的 data-slot="input-group-control" 处理聚焦状态。

属性类型默认值
classNamestring

其他所有属性会透传给底层的 <Input /> 组件。

<InputGroup>
  <InputGroupInput placeholder="请输入内容..." />
  <InputGroupAddon>
    <SearchIcon />
  </InputGroupAddon>
</InputGroup>

InputGroupTextarea

构建输入组时替代 <Textarea />。该组件预先应用了文本域组样式,并使用统一的 data-slot="input-group-control" 处理聚焦状态。

属性类型默认值
classNamestring

其他所有属性会透传给底层的 <Textarea /> 组件。

<InputGroup>
  <InputGroupTextarea placeholder="输入消息..." />
  <InputGroupAddon align="block-end">
    <InputGroupButton>发送</InputGroupButton>
  </InputGroupAddon>
</InputGroup>

更新日志

2025-10-06 InputGroup

InputGroup 组件添加了 min-w-0 类。详情参见 diff