Tailwind CSSTailwind CSS
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
  • 第三章:基础组件

第三章:基础组件

3.2 输入框组件

概述

Shadcn的输入框组件(Input)是基于HTML原生<input>元素的增强封装,提供开箱即用的样式一致性、状态管理和无障碍支持。它完美集成Tailwind CSS,同时支持深度定制。

基础用法

import { Input } from "@/components/ui/input"

function SearchBar() {
  return <Input type="search" placeholder="Search..." />
}

核心属性

属性类型说明
typestringHTML5输入类型(text/email等)
disabledboolean禁用状态
classNamestring自定义Tailwind类名

高级功能

1. 复合输入框

import { Input } from "@/components/ui/input"
import { Search } from "lucide-react"

function SearchInput() {
  return (
    <div className="relative">
      <Search className="absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4" />
      <Input className="pl-10" placeholder="Search docs..." />
    </div>
  )
}

2. 表单集成示例

import { useForm } from "react-hook-form"
import { Input } from "@/components/ui/input"

export function ProfileForm() {
  const { register } = useForm()
  
  return (
    <form>
      <Input 
        {...register("username")}
        placeholder="Username"
        className="mb-4"
      />
      <Input
        {...register("email")}
        type="email"
        placeholder="Email"
      />
    </form>
  )
}

样式定制

通过Tailwind CSS实现多种变体:

<Input 
  className="border-rose-500 focus-visible:ring-rose-300"
  placeholder="Error state"
/>

最佳实践

  1. 标签关联:始终使用<label>配合htmlFor属性
  2. 错误状态:结合aria-invalid属性实现无障碍错误提示
  3. 类型选择:根据场景选择正确的type(如password/number)

常见问题

Q:如何实现密码可见切换?

import { useState } from "react"
import { Input } from "@/components/ui/input"
import { Eye, EyeOff } from "lucide-react"

function PasswordInput() {
  const [showPassword, setShowPassword] = useState(false)
  
  return (
    <div className="relative">
      <Input 
        type={showPassword ? "text" : "password"} 
        placeholder="Password"
      />
      <button 
        type="button"
        onClick={() => setShowPassword(!showPassword)}
        className="absolute right-3 top-1/2 -translate-y-1/2"
      >
        {showPassword ? <EyeOff size={16} /> : <Eye size={16} />}
      </button>
    </div>
  )
}

注意:所有输入框组件默认支持暗黑模式,无需额外配置

Last Updated:: 7/25/25, 8:08 PM