shadcn-vue InputGroup 组件完全指南为输入框与文本域构建前缀、后缀与操作区【免费下载链接】shadcn-vueVue port of shadcn-ui项目地址: https://gitcode.com/gh_mirrors/sh/shadcn-vueInputGroup 是 shadcn-vue 中用于在Input /、Textarea /等输入控件周围挂载图标、文字、按钮、Tooltip、Dropdown 等附加内容的容器组件帮助开发者快速搭建搜索框、金额输入、消息发送等复合交互表单。阅读本篇后你将掌握 InputGroup 全家桶InputGroup、InputGroupAddon、InputGroupButton、InputGroupInput、InputGroupText、InputGroupTextarea的安装方式、对齐规则、焦点态机制与全部示例用法并理解其基于data-slot与 CSShas()选择器的底层实现原理。组件概览一个容器、五个零件InputGroup 采用容器 插槽的组合式设计。官方文档将其定位为向 input 或 textarea 展示附加信息或操作由以下六个组件构成组件职责InputGroup主容器包裹输入控件与所有附加内容InputGroupAddon附加内容容器承载图标、文字、按钮等InputGroupButton组内专用按钮尺寸与外观有专门优化InputGroupInput输入框Input 的组内变体样式预置InputGroupText静态文本如前缀$、单位pxInputGroupTextarea文本域Textarea 的组内变体样式预置在仓库中这些组件的完整源码位于 deprecated/www/src/registry/default/ui/input-group类型与 CVA 变体定义集中在 index.ts对应的交互示例位于 deprecated/www/src/registry/default/examples如InputGroupDemo.vue、InputGroupWithButton.vue等十余个示例。文档页本身引用的是 v4 应用中的同名示例组件 apps/v4/components/demo 目录。安装方式一CLI 一键添加推荐在项目根目录执行npx shadcn-vuelatest add input-group命令会自动把上述六个组件文件index.ts、InputGroup.vue、InputGroupAddon.vue、InputGroupButton.vue、InputGroupInput.vue、InputGroupText.vue、InputGroupTextarea.vue复制到项目的components/ui/input-group目录并解析其依赖如基础button、input、textarea组件与cn工具函数。方式二手动复制手动方式需要按文档列出的文件清单逐一复制通常包括index.ts—— 统一导出与 CVA 变体定义InputGroup.vueInputGroupAddon.vueInputGroupButton.vueInputGroupInput.vueInputGroupText.vueInputGroupTextarea.vue提示InputGroupButton依赖基础Button组件InputGroupInput依赖基础InputInputGroupTextarea依赖基础Textarea手动安装前需确认这些依赖已就绪。实际文件内容以仓库 deprecated/www/src/registry/default/ui/input-group 为准。基本用法在script setup中按需引入后即可组合使用script setup langts import { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, } from /components/ui/input-group /script template InputGroup InputGroupInput placeholderSearch... / InputGroupAddon SearchIcon / /InputGroupAddon InputGroupAddon aligninline-end InputGroupButtonSearch/InputGroupButton /InputGroupAddon /InputGroup /template上面的例子展示了三种典型元素输入框、图标加号、尾部的操作按钮。注意align属性控制附加内容出现在哪一侧——默认inline-start左侧。对齐规则inline 与 block 两套坐标系InputGroup 支持四种对齐方向由InputGroupAddon的align属性控制对齐值适用场景说明inline-start默认InputGroupInput附加内容位于行首左/侧取决于书写方向inline-endInputGroupInput附加内容位于行尾右侧block-startInputGroupTextarea附加内容位于块首上方block-endInputGroupTextarea附加内容位于块尾下方规则给InputGroupInput /用inline-start/inline-end给InputGroupTextarea /用block-start/block-end。这是因为文本域需要上下分布的附加区如底部发送按钮而单行输入框则适合左右分布。从源码看这个规则并非简单的建议InputGroup.vue中通过has-[[data-align...]]选择器根据子元素上的data-align属性动态切换容器布局——block-start/block-end会触发flex-col纵向排布并调整内边距而inline-*则保持横向排布见 InputGroup.vue。对齐的底层实现InputGroupAddon组件将align透传为data-align属性并通过 CVA 生成对应样式类// deprecated/www/src/registry/default/ui/input-group/index.ts export const inputGroupAddonVariants cva( text-muted-foreground flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium select-none ..., { variants: { align: { inline-start: order-first pl-3 has-[button]:ml-[-0.45rem] has-[kbd]:ml-[-0.35rem], inline-end: order-last pr-3 has-[button]:mr-[-0.45rem] has-[kbd]:mr-[-0.35rem], block-start: order-first w-full justify-start px-3 pt-3 ..., block-end: order-last w-full justify-start px-3 pb-3 ..., }, }, defaultVariants: { align: inline-start }, }, )可以看出inline-*通过order-first/order-last在横向 flex 中定位block-*则切换为w-full的纵向占位并针对button、kbd做了负边距微调使组内按钮视觉上与容器边框贴合。焦点态与点击聚焦机制InputGroup 一个关键特性是统一的焦点态处理组内所有输入控件无论InputGroupInput、InputGroupTextarea还是自定义输入都带有data-slotinput-group-control标记InputGroup.vue据此用has-[[data-slotinput-group-control]:focus-visible]在容器上绘制ring焦点环见 InputGroup.vue。这意味着开发者无需在每个输入控件上单独处理 focus 样式焦点环始终渲染在容器边框上视觉统一。另外InputGroupAddon内置了点击聚焦逻辑点击附加区只要不是点击内部按钮会自动把焦点移回组内的input元素提升可访问性见 InputGroupAddon.vue。示例详解图标Icon在输入框侧边放置图标是最常见的用法InputGroup InputGroupInput placeholderSearch... / InputGroupAddon SearchIcon / /InputGroupAddon /InputGroup文本Text在输入框旁展示静态文本信息如货币符号、单位、协议提示InputGroup InputGroupAddon InputGroupTexthttps:///InputGroupText /InputGroupAddon InputGroupInput placeholderexample.com / /InputGroupInputGroupText内部是一个span默认使用text-muted-foreground前景色并对内部 SVG 图标做了尺寸规整见 InputGroupText.vue。按钮Button在输入组内执行动作例如搜索、复制、清空InputGroup InputGroupInput placeholderSearch... / InputGroupAddon aligninline-end InputGroupButtonSearch/InputGroupButton /InputGroupAddon /InputGroupInputGroupButton默认sizexs、variantghost与普通 Button 相比高度更紧凑h-6专为组内场景优化。可同时放置多个按钮InputGroupAddon InputGroupButtonButton/InputGroupButton InputGroupButtonButton/InputGroupButton /InputGroupAddon也可以混排按钮与图标icon-xs尺寸配合aria-label保证可访问性InputGroupButtonButton/InputGroupButton InputGroupButton sizeicon-xs aria-labelCopy CopyIcon / /InputGroupButtonTooltip借助 Tooltip 为输入组提供上下文提示例如解释某个字段的含义或校验规则。InputGroupAddon可容纳任意内容将 Tooltip 触发器包裹其中即可官方示例见 apps/v4/components/demo/InputGroupWithTooltip.vue。Textarea文本域输入组同样适用于文本域使用block-start/block-end对齐InputGroup InputGroupTextarea placeholderEnter message... / InputGroupAddon alignblock-end InputGroupButtonSend/InputGroupButton /InputGroupAddon /InputGroupInputGroup.vue通过has-[textarea]:h-auto自动让容器高度随文本域内容伸缩见 InputGroup.vue。Spinner加载指示器在输入处理过程中如表单提交、异步校验展示加载状态将 Spinner 放入 Addon 即可官方示例见 apps/v4/components/demo/InputGroupWithSpinner.vue。Label标签在输入组内添加标签以提升表单可访问性将 Label 与输入控件一同放入容器InputGroup InputGroupAddon Label foremailEmail/Label /InputGroupAddon InputGroupInput idemail typeemail placeholderyouexample.com / /InputGroupDropdown下拉菜单输入组与下拉菜单组合可承载选择分类 搜索这类复杂交互官方示例见 apps/v4/components/demo/InputGroupWithDropdown.vue。Button Group按钮组用按钮组包裹输入组可以构造前缀/后缀式组合控件如金额的加减、分页器的页码跳转官方示例见 apps/v4/components/demo/InputGroupWithButtonGroup.vue。自定义输入Custom Input除了内置的InputGroupInput/InputGroupTextarea任何自定义输入控件只要带上data-slotinput-group-control属性即可自动获得焦点态处理与布局适配。官方示例是一个可自动伸缩高度的 textarea见 apps/v4/components/demo/InputGroupWithCustomInput.vuescript langts setup import { InputGroup, InputGroupAddon, InputGroupButton } from /registry/default/ui/input-group /script template div classgrid w-full max-w-sm gap-6 InputGroup textarea >template InputGroup InputGroupInput / InputGroupAddon / /InputGroup /template容器渲染为带data-slotinput-group、rolegroup的div默认高度h-10、圆角rounded-md、1px 边框当内部存在 textarea 时自动切换为自适应高度见 InputGroup.vue。InputGroupAddon在输入控件旁展示图标、文本、按钮等任意内容。提示为了正确的焦点导航InputGroupAddon应放置在输入控件之后通过align属性控制其显示位置。Prop类型默认值aligninline-start \| inline-end \| block-start \| block-endinline-startclassstring—InputGroupAddon aligninline-end SearchIcon / /InputGroupAddon对InputGroupInput使用inline-start/inline-end对InputGroupTextarea使用block-start/block-end一个 Addon 内可以包含多个InputGroupButton与图标点击非按钮区域会自动聚焦组内输入框见 InputGroupAddon.vue。InputGroupButton输入组内的专用按钮。Prop类型默认值sizexs \| icon-xs \| sm \| icon-smxsvariantdefault \| destructive \| outline \| secondary \| ghost \| linkghostclassstring—template InputGroupButtonButton/InputGroupButton InputGroupButton sizeicon-xs aria-labelCopy CopyIcon / /InputGroupButton /template其尺寸/变体基于inputGroupButtonVariants的 CVA 定义xs为h-6、icon-xs为size-6等见 index.ts并复用基础Button组件的variant体系。InputGroupInput构建输入组时的Input /替代品组内样式已预置并使用统一的data-slotinput-group-control处理焦点态。Prop类型默认值classstring—其余 props 全部透传给底层Input /组件。template InputGroup InputGroupInput placeholderEnter text... / InputGroupAddon SearchIcon / /InputGroupAddon /InputGroup /template源码实现上InputGroupInput就是一层薄封装为Input追加data-slotinput-group-control并移除自身边框、圆角、focus ringborder-0 rounded-none bg-transparent focus-visible:ring-0让容器统一承担外观见 InputGroupInput.vue。InputGroupTextarea构建输入组时的Textarea /替代品同样预置组内样式并使用统一data-slot约定。Prop类型默认值classstring—其余 props 全部透传给底层Textarea /组件。template InputGroup InputGroupTextarea placeholderEnter message... / InputGroupAddon alignblock-end InputGroupButtonSend/InputGroupButton /InputGroupAddon /InputGroup /templateInputGroupTextarea与InputGroupInput的封装策略一致resize-none border-0 bg-transparent将外观职责交给容器见 InputGroupTextarea.vue。最佳实践小结遵循对齐约定单行输入用inline-*多行文本域用block-*保证布局与焦点行为正确Addon 放在输入控件之后文档明确要求如此排列以支持点击聚焦与键盘导航优先使用InputGroupInput/InputGroupTextarea它们已剥离重复样式并接入统一焦点环避免与容器边框冲突自定义控件记得打上data-slotinput-group-control这是获得自动行为与焦点态处理的契约入口善用按钮尺寸默认xs/ghost适合紧凑场景sm/default适合主操作按钮图标按钮用icon-xs/icon-sm并补充aria-label。【免费下载链接】shadcn-vueVue port of shadcn-ui项目地址: https://gitcode.com/gh_mirrors/sh/shadcn-vue创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
Chat2DB 数据库客户端快速指南:Docker 启动、AI 生成 SQL 与 40 种数据库接入 Chat2DB 数据库客户端快速指南:Docker 启动、AI 生成 SQL 与 40 种数据库接入 【免费下载链接】Chat2DB Chat2DB is a free, cross-platform, local-first database client and SQL workspace for developers, DBAs, analysts, and data teams. Connect to 40 datab… · 2026/9/24 17:09:30
Sliver 项目内 regexp2 v2:Go 语言中的 .NET 风格正则引擎完全指南 网络安全 【免费下载链接】sliver Adversary Emulation Framework 项目地址: https://gitcode.com/gh_mirrors/sl/sliver 点击查看 免费下载 regexp2 是一个为 Go 打造的、功能完备的正则表达式引擎,它移植自 .NET Framework 的 System.Text.RegularExp… · 2026/9/24 17:09:30
软件测试转 AI 测试开发?这些面试题你必须知道! 你是软件测试从业者,但想转向人工智能测试开发岗位吗?
AI 测试岗位不仅考察传统测试技能,还要求你理解 AI/ML 模型特性、设计测试流程、编写自动化脚本。
今天,我们整理了一份面试题,从基础概念到实战场景࿰… · 2026/9/24 17:50:50
AI画布批量生成后怎么抽检:用风险分层决定先看哪几张 一次生成20张图,逐张从头看到尾当然最稳,但很多小团队没有足够时间;完全随机抽几张又可能漏掉带错字、数字错误或主体缺失的高风险结果。
更合理的做法不是追求万能比例,而是先按错误代价分层,再决定检查顺序。本文的… · 2026/9/24 17:50:44
【C#桌面客户端系列学习-1】打包exe,并根据版本号实现自动更新 目录 一、前言
二、主要用到的技术
1、AutoUpdater.NET
2、Fody.Costura
三、安装相关程序包
1、安装Autoupdater.NET.Official
2、安装Fody.Costura
四、配置版本号
五、准备更新用的XML文件
六、代码中调用
七、制作并上传更新包
八、测试是否成功
九、注意事项 … · 2026/9/24 17:50:44
工厂车间代打卡屡禁不止?一文讲透根因与解决方案 一、问题:代打卡为什么成了工厂考勤的"老大难"在劳动密集型的工厂车间,代打卡几乎是所有 HR 和管理者绕不开的痛点,典型表现有这几类:一人多卡:员工把工牌或门禁卡交给同班组的同事,对方刷两次。… · 2026/9/24 17:50:44
D28 | 向量库管理后台:从 0 搭一个企业级知识库管理平台 文章目录 D28 | 向量库管理后台:从 0 搭一个企业级知识库管理平台 写在前面 一、为什么需要向量库管理后台 1.1 RAG 落地的"最后一公里" 1.2 后台的 5 大核心模块 1.3 选型参考 二、文档摄取流水线:从上传到入库 2.1 流水线设计 2.2 文档状态机 2.3 摄取流水线实现… · 2026/9/24 17:50:37
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44