🏗️ 前端工程搭建
技术栈选择
- Vite:新一代前端构建工具,提供极速的开发体验
- React:用于构建用户界面的 JavaScript 库
- Tailwind CSS:原子化 CSS 框架,通过工具类快速构建 UI
- Lucide React:精美、轻量的图标库
📦 Tailwind CSS 项目配置
初始化 Vite + React 项目
使用 Vite 快速创建 React 项目:
npm init vite
按照提示选择:
- 项目名称:tailwindcss-demo
- 框架:React
- 变体:JavaScript
安装 Tailwind CSS 依赖
使用 pnpm 安装 Tailwind CSS 及其 Vite 插件:
pnpm install tailwindcss @tailwindcss/vite
Vite 配置
在 vite.config.js 中引入并配置 Tailwind CSS 插件:
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import tailwindcss from '@tailwindcss/vite'
// https://vite.dev/config/
export default defineConfig({
plugins: [
react(),
tailwindcss()
],
})
CSS 配置
在 src/index.css 中导入 Tailwind CSS:
@import "tailwindcss";
使用 Tailwind CSS
配置完成后,在 App.jsx 中就可以直接使用 Tailwind 的工具类了,只需要写类名即可!
安装 Lucide React 图标库
pnpm install lucide-react
🔐 登录业务实现
受控组件
React 的受控组件是指表单元素的值由 React 状态控制。通过 useState 管理表单数据,实现数据与视图的双向绑定。
Lucide React 图标库
Lucide React 提供了一套精美、一致的 SVG 图标。可以按需引入需要的图标,如 Lock、Mail、Eye、EyeOff 等。
抽象的表单事件处理
通过抽象的事件处理函数,可以统一处理多种表单元素(文本输入、密码输入、复选框等)的变化。根据元素的 type 属性来区分是使用 value 还是 checked。
密码显示隐藏功能
界面不是静态的,而是由数据驱动的。通过 showPassword 状态控制密码输入框的 type 属性在 password 和 text 之间切换,同时配合图标切换。
Loading 登录中状态
同样,界面状态由数据驱动。通过 isLoading 状态控制登录按钮的加载状态,提供良好的用户体验。
🎯 Tailwind CSS 业务实践
常用工具类
- min-h-screen:最小高度 100vh(100% 视口高度)
- w-full:宽度 100%
- max-w-md:最大宽度 420px
- rounded-3xl:圆角 24px
- shadow-slate-200/60:阴影,透明度 0.6
- space-y-6:垂直间距 24px(除第一个元素外,其他元素间距 6 个单位)
- placeholder:、focus: 等伪类选择器
- 响应式设计:使用
sm、md、lg、xl、2xl等断点前缀,采用 Mobile First(移动端优先)策略
📚 附录:Tailwind CSS 常用类名对照总结
Tailwind CSS 是一个 原子化(utility-first) 的 CSS 框架,它通过大量简短的类名(utility classes)来直接在 HTML 中构建 UI。这些类名通常是 缩写形式,背后对应标准的 CSS 属性。
🧭 一、通用命名规则
| 缩写 | 全称 / 含义 | 示例 |
|---|---|---|
p | padding | p-4 → padding: 1rem |
m | margin | m-2 → margin: 0.5rem |
w | width | w-full → width: 100% |
h | height | h-screen → height: 100vh |
bg | background | bg-blue-500 → 背景色 |
text | color / font-size / align 等文本相关 | text-center, text-lg, text-red-600 |
flex | display: flex | flex, flex-col, justify-between |
grid | display: grid | grid, grid-cols-3 |
border | border 相关 | border, border-t, border-red-500 |
rounded | border-radius | rounded-lg, rounded-full |
shadow | box-shadow | shadow-md, shadow-lg |
font | font-weight / family | font-bold, font-sans |
gap | flex/grid 间距 | gap-4 |
z | z-index | z-10 → z-index: 10 |
opacity | 透明度 | opacity-50 → opacity: 0.5 |
overflow | 溢出控制 | overflow-hidden, overflow-x-auto |
cursor | 鼠标指针 | cursor-pointer |
📏 二、间距系统(Spacing)
Tailwind 使用 统一的间距比例尺(默认基于 0.25rem = 4px):
| 类名 | 实际值(默认) | CSS |
|---|---|---|
p-0 | 0 | padding: 0 |
p-1 | 0.25rem (4px) | padding: 0.25rem |
p-2 | 0.5rem (8px) | padding: 0.5rem |
p-3 | 0.75rem (12px) | padding: 0.75rem |
p-4 | 1rem (16px) | padding: 1rem |
p-5 | 1.25rem (20px) | padding: 1.25rem |
| ... | ... | ... |
p-10 | 2.5rem (40px) | padding: 2.5rem |
支持方向细分:
pt-4→ padding-toppb-4→ padding-bottompl-4→ padding-leftpr-4→ padding-rightpx-4→ padding-left + padding-rightpy-4→ padding-top + padding-bottom
同样适用于 m(margin)。
🎨 三、颜色系统
颜色采用 {color}-{shade} 格式:
| 类名 | 含义 |
|---|---|
text-blue-500 | 文字颜色为蓝色 500 |
bg-gray-100 | 背景灰色 100 |
border-green-300 | 边框绿色 300 |
hover:bg-red-600 | 悬停时背景变红 |
默认调色板包含:
slate,gray,red,orange,amber,yellow,lime,green,emerald,teal,cyan,sky,blue,indigo,violet,purple,fuchsia,pink,rose
📐 四、响应式前缀(Breakpoints)
| 前缀 | 断点(默认) | 含义 |
|---|---|---|
| (无) | 所有屏幕 | 移动优先 |
sm: | ≥640px | small |
md: | ≥768px | medium |
lg: | ≥1024px | large |
xl: | ≥1280px | extra large |
2xl: | ≥1536px | 2x extra large |
示例:
<div class="text-center md:text-left">
<!-- 小屏居中,中屏及以上左对齐 -->
</div>
⚙️ 五、状态变体(Pseudo-class Variants)
| 前缀 | 含义 | 示例 |
|---|---|---|
hover: | 鼠标悬停 | hover:bg-blue-600 |
focus: | 获得焦点 | focus:outline-none |
active: | 激活状态 | active:scale-95 |
disabled: | 禁用状态 | disabled:opacity-50 |
group-hover: | 父元素悬停 | <div class="group">...<span class="group-hover:text-white"> |
peer-*: | 相邻兄弟元素状态 | peer:checked:opacity-100 |
📦 六、常见组合速查表
| 功能 | Tailwind 类名 |
|---|---|
| 居中(水平+垂直) | flex items-center justify-center |
| 文字截断(省略号) | truncate(等价于 overflow-hidden text-ellipsis whitespace-nowrap) |
| 圆形头像 | rounded-full w-10 h-10 |
| 按钮样式 | px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600 |
| 卡片阴影 | bg-white rounded-lg shadow-md p-4 |
| 响应式网格 | grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4 |
| 隐藏元素 | hidden 或 sr-only(仅屏幕阅读器可见) |
✅ 小贴士
- Tailwind 的类名设计高度可预测:基本是
属性-值或属性-方向-值。 - 使用 Tailwind Cheat Sheet 或官方文档快速查询。
- 可通过
tailwind.config.js自定义主题、扩展颜色、间距等。