Tailwind CSS 速查表 - Tailwind CSS 类名大全

原子化 CSS 的门槛不在记住类名,而在理解它的约束条件:类名写在标记里,所以变体(断点、暗色、状态)只能以前缀形式出现,也没法在运行时拼字符串。这张表按布局、Flexbox、Grid、间距与尺寸、排版、颜色与背景、响应式与交互、边框与特效分组,把最容易记混的几组对照摆出来——gap 与 space-x、flex-1 与 grow。判断依据是能不能把它塞进已有组件而不新增样式表:如果一个需求的实现要写出自定义 CSS,通常是 Tailwind 的表达没找对,而不是非它不可。什么时候翻它:搭响应式栅格、接入 design token 做暗色主题、用 group-hover 与 peer-* 处理父子状态联动、或者做 hover 动画与裁剪。与语义化 class 混写时约定要提前定死,否则组件目录里会同时存在两套命名规则。

Web 服务·共 61 条命令·最后更新 2026-07-21
tailwindcss前端框架utility

典型使用场景

面向用 Tailwind 做界面开发、需要在明暗双主题下保持一致性的前端工程师。本表把原子类按「布局→Flexbox→Grid→间距尺寸→排版→颜色背景→响应式交互→边框特效」八条线排开,重点钉住四个高频判断:一维用 Flex、二维用 Grid;间距优先用 gap 而不是给每个子元素写 margin;颜色分 50-900 十档,数字越大越深,深色模式用 dark: 前缀成对改写;断点是移动优先,sm: 表示 ≥640px 往大屏扩展。做卡片列表、导航栏、表单这类常规界面时,按本表从容器到排版逐层拼类即可;遇到「样式不生效」「深色模式对比度不够」「子元素为什么没间距」,直接对照易错点排查。

布局 Layout 7

container
响应式容器,自动居中并设置 max-width
block / inline-block / inline
显示类型
hidden
隐藏元素(display: none)
relative / absolute / fixed / sticky
定位方式
overflow-auto / overflow-hidden
溢出处理
visible / invisible
可见性控制
z-10 / z-50 / z-[-1]
层叠顺序

Flexbox 7

flex
启用弹性布局
flex-row / flex-col
主轴方向(行/列)
flex-wrap / flex-nowrap
是否换行
justify-start / justify-center / justify-between / justify-end
主轴对齐
items-start / items-center / items-end
交叉轴对齐
flex-1 / flex-auto / flex-none
弹性伸缩
gap-4 / gap-x-4 / gap-y-4
元素间距

Grid 7

grid
启用网格布局
grid-cols-3 / grid-cols-12
定义列数
grid-rows-3
定义行数
col-span-2 / col-span-full
跨列
row-span-2 / row-span-full
跨行
place-items-center / place-content-center
整体对齐
gap-4
网格间距

间距与尺寸 8

p-4 / px-4 / py-2 / pt-4
内边距 padding
m-4 / mx-auto / my-2 / mt-4
外边距 margin(mx-auto 水平居中)
space-x-4 / space-y-4
子元素间距
w-64 / w-1/2 / w-full / w-screen
宽度
h-64 / h-1/2 / h-full / h-screen
高度
max-w-lg / max-w-7xl / max-w-screen-xl
最大宽度
min-h-screen / min-h-0
最小高度
size-8 / size-16
同时设置宽高(Tailwind 3.4+)

排版 Typography 9

text-xs / text-sm / text-base / text-lg / text-xl / text-2xl ... text-9xl
字体大小
font-thin / font-normal / font-medium / font-bold / font-black
字重
leading-none / leading-tight / leading-relaxed / leading-loose
行高
tracking-tight / tracking-wide / tracking-wider
字间距
text-left / text-center / text-right / text-justify
文本对齐
underline / line-through / no-underline
文本装饰
uppercase / lowercase / capitalize
文本大小写转换
truncate
文本溢出省略(单行)
whitespace-nowrap / break-words
空白符处理

颜色与背景 7

text-red-500 / text-blue-600 / text-gray-900
文本颜色(50-900 层级)
bg-white / bg-gray-100 / bg-blue-500
背景颜色
border-gray-300 / border-red-500
边框颜色
ring-2 ring-blue-500
聚焦环颜色和宽度
shadow-sm / shadow-md / shadow-lg / shadow-xl
盒子阴影
opacity-50 / opacity-100
透明度
bg-gradient-to-r from-blue-500 to-purple-500
渐变背景

响应式与交互 9

sm: / md: / lg: / xl: / 2xl:
响应式断点前缀(移动优先)
hover:bg-blue-500
鼠标悬停状态
focus:outline-none focus:ring-2
聚焦状态
active:scale-95
激活/点击状态
dark:bg-gray-800 dark:text-white
暗色模式
transition / transition-all / transition-colors
过渡动画
hover:scale-110 / hover:rotate-6
变换动画
animate-spin / animate-ping / animate-pulse / animate-bounce
内置动画
cursor-pointer / cursor-not-allowed
鼠标样式

边框与特效 7

border / border-2 / border-4 / border-b-2
边框宽度
border-solid / border-dashed / border-dotted / border-none
边框样式
rounded-sm / rounded / rounded-lg / rounded-xl / rounded-full
圆角
ring / ring-2 ring-inset
轮廓环(常用于聚焦状态)
shadow / shadow-md / shadow-lg / shadow-xl / shadow-2xl
阴影大小
outline / outline-2 outline-offset-2
轮廓线
blur-sm / blur-lg / brightness-50 / contrast-125 / grayscale
滤镜特效

参数矩阵

参数作用示例
container响应式容器,自动居中并设 max-width<div class="container">
flex / grid启用弹性布局 / 网格布局<div class="flex">
flex-row / flex-col主轴方向:行 / 列class="flex flex-col"
justify-between / justify-center主轴对齐方式class="flex justify-between"
items-center交叉轴居中对齐class="flex items-center"
flex-1 / flex-none弹性伸缩 / 不伸缩class="flex-1"
flex-wrap空间不足时换行class="flex flex-wrap"
gap-4 / gap-x-4 / gap-y-4子元素间距(全部 / 水平 / 垂直)class="flex gap-4"
grid-cols-3 / grid-cols-12定义 3 列 / 12 列网格class="grid grid-cols-3"
col-span-2 / col-span-full跨越 2 列 / 占满整行class="col-span-full"
place-items-center网格整体对齐(行列同时居中)class="grid place-items-center"
p-4 / px-4 / pt-4内边距:四边 / 水平 / 上class="px-4 pt-2"
mx-auto外边距水平自动,块级元素水平居中class="mx-auto"
space-x-4 / space-y-4仅给直接子元素加相邻间距class="space-y-4"
w-full / w-64 / w-1/2宽度:撑满 / 固定 16rem / 一半class="w-full"
h-64 / h-full / min-h-screen固定高 / 撑满父级 / 至少一屏class="min-h-screen"
max-w-lg / max-w-7xl限制最大宽度class="max-w-7xl"
size-8同时设置宽高(Tailwind 3.4+)class="size-8"
text-xs ... text-2xl字号阶梯 xs/sm/base/lg/xl/2xlclass="text-lg"
font-normal / font-medium / font-bold字重class="font-bold"
leading-tight / leading-relaxed行高:紧凑 / 宽松class="leading-relaxed"
tracking-tight / tracking-wider字间距class="tracking-wider"
truncate单行溢出显示省略号class="truncate"
whitespace-nowrap / break-words禁止换行 / 长词断行class="whitespace-nowrap"
uppercase / capitalize文本大小写转换class="uppercase"
text-gray-900 / bg-gray-100文本色 / 背景色(50-900 层级)class="text-gray-900"
ring-2 ring-blue-500聚焦环宽度与颜色class="focus:ring-2 ring-blue-500"
shadow-sm / shadow-lg阴影层级class="shadow-lg"
opacity-50整体透明度class="opacity-50"
bg-gradient-to-r from-blue-500 to-purple-500横向渐变背景class="bg-gradient-to-r from-blue-500 to-purple-500"
sm: / md: / lg: / xl: / 2xl:响应式断点前缀(移动优先)class="grid-cols-1 md:grid-cols-3"
hover:bg-blue-500鼠标悬停态样式class="hover:bg-blue-500"
focus:outline-none focus:ring-2聚焦态样式,常用于表单可访问性class="focus:outline-none"
active:scale-95点击激活态缩放反馈class="active:scale-95"
dark:bg-gray-800 dark:text-white暗色模式专用样式class="dark:bg-gray-800"
transition / transition-colors过渡动画(全属性 / 仅颜色)class="transition-colors"
hover:scale-110 / hover:rotate-6悬停变换动画class="hover:scale-110"
animate-spin / animate-ping / animate-pulse / animate-bounce内置循环动画class="animate-spin"
rounded / rounded-lg / rounded-full圆角:小 / 大 / 全圆class="rounded-full"
border / border-2 / border-b-2边框宽度class="border-2"
border-dashed / border-dotted虚线 / 点线边框class="border-dashed"
blur-sm / grayscale / contrast-125滤镜特效class="grayscale"

易错点与避坑指南

现象flex 容器的子元素之间完全没有间距,但明明写了 margin 类

原因给父容器写了 margin 只影响父级与外部的关系,不影响子元素之间的间隔;子元素间距要用 gap 或 space-*。

处置在 flex 容器上写 gap-4(或 space-x-4 / space-y-4),不要逐个子元素加 margin。

现象加了 md: 或 lg: 前缀的样式在浏览器里没生效,窗口已明显变宽

原因断点是移动优先的 min-width 语义:未加前缀的样式是大屏之外的默认值,加了前缀的样式只在该宽度及以上才覆盖;且类名必须拼写完整。

处置确认前缀拼写正确(md:grid-cols-3 而非 md:grid-cols-three),并把基础单列写法放在类列表前、宽屏写法放在后面。

现象暗色模式下文字和背景几乎同色,整页看不清

原因只改了背景色(如 dark:bg-gray-800)却没同时改文字色,深底上默认的深色文字就消失了。

处置背景色与文字色成对设置,例如 class="bg-white text-gray-900 dark:bg-gray-800 dark:text-white"。

现象长文本撑破卡片或按钮,布局被顶出横向滚动条

原因缺少单行溢出或断词处理,flex 子项默认 min-width:auto 也不会自动收缩到内容以下。

处置给文本容器加 truncate 或 break-words;需要严格控制时给 flex 子项加 min-w-0。

现象hover 效果在手机上点不动,元素看起来像坏了

原因hover 是指针设备特有伪类,触屏上没有稳定的 hover 状态,点击后样式不变化。

处置关键交互加 active: 态作为触屏回退,配合 transition-colors 让状态切换有可见反馈。

现象写的工具类完全没有生成到样式表里,构建产物里找不到

原因Tailwind 默认按扫描到的文件内容生成类名,类名写在了模板字符串拼接、动态变量或 content 未配置的路径里就扫不到。

处置把类名写成完整静态字面量,或把相关路径加入 content 配置,确保扫描范围覆盖该文件。

现象flex-1 的两个子元素宽度不对齐,或某个子元素被挤成零宽

原因父容器没设 flex-wrap 且子元素内容宽度差异大,叠加 min-width 默认值后伸缩比例与预期不符。

处置在父容器加 flex-wrap,并为需要压缩的子项加 min-w-0,避免内容最小宽度撑破布局。

现象absolute 定位的元素跑到页面边缘或被裁掉,z-index 加了也没用

原因absolute 会相对最近的定位祖先(position 非 static)定位;若祖先没有 relative/absolute,元素就相对更外层甚至初始包含块定位,同时可能被 overflow-hidden 裁剪。

处置给预期作为参照的父容器加 relative 定位,再调整 z-10 / z-50 的层叠顺序。

排障路径

  1. 1确认单列到多列的断点是否生效

    class="grid grid-cols-1 md:grid-cols-3 lg:grid-cols-4 gap-4"

    把三档断点同时写上并依次收窄,在浏览器里拖动窗口宽度即可看到列数在 md(≥768px)与 lg(≥1024px)处切换。若始终只有一列,先检查前缀拼写与类名是否被扫描生成。

  2. 2定位「间距为零」的根因

    class="flex flex-col sm:flex-row gap-4" → 去掉 gap 换成 space-y-4 对比

    先用 gap-4 建立统一间距;需要仅在纵向排列时留白、切换到横向自动清除,就换成 space-y-4(仅影响相邻子元素),避免子元素首尾出现多余外边距。

  3. 3明暗双主题成对设置

    class="bg-white text-gray-900 dark:bg-gray-800 dark:text-white"

    把基础(亮)与 dark:(暗)两组色值成对写,检查每一处背景色改动是否都有对应的文字色或边框色改动;缺一项就是对比度崩掉的来源。

  4. 4长文本溢出处理

    class="truncate" / class="break-words" / 父级 "flex" + 子项 "min-w-0"

    单行截断用 truncate,允许换行用 break-words;卡片内 flex 布局下的子元素要加 min-w-0,否则其最小内容宽度会顶破容器产生横向滚动。

  5. 5悬停与触屏反馈

    class="transition-colors hover:bg-blue-500 active:scale-95"

    transition-colors 让状态切换平滑;hover 负责指针设备,active 覆盖触屏点击瞬间,两者配合可确认是选择器缺失还是仅仅在触屏上不触发。

  6. 6阴影与聚焦环对比

    class="shadow-lg ring-2 ring-blue-500 focus:outline-none focus:ring-2"

    shadow 提供静态层次感,ring 用于聚焦与交互态提示;对比两者在同一元素上的视觉重量,可以判断是否层级混乱——通常静态卡片用 shadow,表单控件用 ring。

命令示例

一行类名做出水平垂直居中卡片

<div class="flex items-center justify-center min-h-screen bg-gray-100"> <div class="w-64 rounded-lg shadow-lg bg-white p-6"> <h2 class="text-lg font-bold text-gray-900">Title</h2> </div> </div>

min-h-screen 给外层撑满视口,flex + items-center + justify-center 完成双轴居中;内层 w-64 固定宽度配 rounded-lg 与 shadow-lg 就是标准卡片外观,不需要一条 CSS。

移动优先的三列响应式栅格

<div class="grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3"> <div class="rounded bg-white p-4">A</div> <div class="rounded bg-white p-4">B</div> <div class="rounded bg-white p-4">C</div> </div>

不带前缀的 grid-cols-1 是手机样式,sm: 与 lg: 断点向上覆盖,无需写 max-width 媒体查询。因为是移动优先,桌面端的规则只会在更宽时生效,不会反过来漏掉小屏。

单行省略号

<p class="truncate max-w-sm"> A very long description that should collapse into one line with an ellipsis </p>

truncate 内部已经包含 overflow-hidden、text-ellipsis 与 whitespace-nowrap 三个属性,前提是元素宽度有上限;父级若没有 max-w-* 或 flex 约束,省略号永远不出现。

带暗色模式的按钮

<button class="px-4 py-2 rounded bg-blue-500 text-white transition hover:bg-blue-600 focus:outline-none focus:ring-2 active:scale-95 dark:bg-gray-800"> Save </button>

状态类按 hover → focus → active 的顺序写在同一串里,顺序不同最终样式不同。focus:outline-none 去掉默认焦点框时必须补一个 focus:ring-2,否则键盘用户看不到焦点位置。

flex 列表的间距与伸展

<ul class="flex flex-col divide-y"> <li class="flex items-center justify-between px-4 py-3"> <span class="flex-1 truncate">Label</span> <span class="text-sm text-gray-500">Value</span> </li> </ul>

flex-1 让左侧标签吃掉多余宽度并配合 truncate 省略,右侧值固定不被压缩,这是表格行不换行的标准写法;用 gap-4 而不是逐个 margin 可以避免首尾多出的边距。

常见坑与注意事项

  • 类名写错不会报错,只会静默失效:truncate、size-8 这类名字拼错时页面照常渲染,只是样式没生效,排查时必须去 DevTools 确认类是否真在 CSS 里。
  • size-* 只在 Tailwind 3.4 及以上存在,低版本项目里写了等于没写,需退回 w-* h-*。
  • 用 fixed 定位时父级带 transform 或 filter 会让 fixed 改为相对该父级定位,元素会跑到意料之外的位置。
  • 类名中不能出现空格来表示多个类,动态拼接字符串时漏掉分隔符会得到一个不存在的长类名,样式整体静默失效。
  • tailwind.config 的 content 扫描不到动态拼接出来的完整类名(如 `text-${color}-500`),这些样式不会被打进产物,构建后大面积丢失颜色。
  • dark: 默认跟随系统偏好(media),若产品要求手动开关必须配 darkMode: "class";两种模式写法混用会出现「手动切了却没变化」。

提示

  • Tailwind 使用移动优先的响应式设计,sm: 表示 ≥640px,md: ≥768px,lg: ≥1024px
  • 使用 dark: 前缀实现暗色模式,如 dark:bg-gray-800
  • 使用 @apply 指令在 CSS 中复用 Tailwind 类
  • 常用颜色层级:50/100/200/300/400/500/600/700/800/900,数字越大颜色越深
  • 使用 JIT(Just-in-Time)模式,只有你使用的类才会被编译,文件极小
  • 任意值写法 p-[13px] w-[calc(100%-2rem)] 用来对齐设计稿的零散数值,比退回自定义 CSS 更轻。
  • group-hover 需要父级先标 group,peer-* 依赖兄弟元素顺序,两者写反了样式完全不生效且不报错。
  • 暗色模式切换只改 html 上的 class,组件内一律写 dark: 变体,不要在 JS 里逐个维护主题状态。

常见问题

Flex 和 Grid 都能做多列布局,什么场景该选哪个?

看是否需要同时控制两个方向。工具栏、卡片行这类「一行内排布、整体靠 justify-* 对齐」的场景用 flex:flex-row 加 gap-4 就能搞定,flex-1 让某一项吃掉剩余空间。仪表盘那种行列都要精确对齐的场景用 grid:grid-cols-12 定义骨架,col-span-2 控制每块占几列,row-span-2 处理跨行。只有一维需求时别上 grid,只有二维需求时别靠嵌套 flex 硬凑。

为什么 `sm:` 断点写在移动端样式后面却仍然生效?

因为 Tailwind 是移动优先的:基础类作用于所有屏幕,`sm:` / `md:` / `lg:` 这些前缀在 CSS 里对应 min-width 媒体查询,天然覆盖小屏默认值。sm: 是 ≥640px,md: 是 ≥768px,lg: 是 ≥1024px。因为是 min-width,多个前缀可同时命中且大的后写在层叠中胜出:写成 flex-col md:flex-row sm:flex-row-reverse 时,中等屏得到 md 的值,640px 以上再被 sm 的规则覆盖。

元素写 hidden 却还占位置,隐藏一个组件该用哪个类?

display: none 的元素既不占位也不响应交互,所以 Tailwind 的 hidden 类不会留下空间。真正出现「隐藏了却还留白」的情况,通常是误用了 invisible —— 它对应 visibility: hidden,元素继续占据原有布局位置,只是不显示,这正是它与 hidden 的关键区别。另外 overflow-hidden 只裁剪溢出内容而不隐藏元素本身;z-[-1] 把元素压到父级背景之下,也不等于隐藏。

颜色层级 50 到 900 到底怎么挑,数字大小代表什么?

同一色相下数字越大颜色越深:50-200 接近白(适合页面浅底背景),300-400 用于边框和分隔线,500-600 是正文和主按钮这类需要足够对比度的中深色,700-900 用于深色模式和文字强调。所以 bg-gray-100 配 text-gray-900 是安全组合,text-gray-400 放在白底上往往太淡;暗色模式用 dark: 前缀成对切换,如 dark:bg-gray-800 dark:text-white。同理 opacity-50 会连同文字一起变淡,需要时优先换成更浅的层级色。

长文本溢出容器时 truncate 为什么不生效,还要加哪个类?

truncate 实际是三件事的组合:overflow-hidden 裁掉溢出内容、text-ellipsis 加省略号、white-space: nowrap 禁止换行——少了 nowrap,文本会先折行,容器高度撑开,省略号永远不出现。所以父容器还需有确定宽度(w-64、max-w-lg 或在 flex/grid 里用 flex-1、min-w-0),否则元素会无限撑宽而不是溢出。多行截断不要用 truncate,改用 line-clamp 系列语义配合 overflow-hidden。

官方参考来源

下方为命令对应的官方权威文档,供你核对最新用法与深入查阅。

由 巧匠 维护

公开更新于 2026年7月21日,内容持续校对官方文档。

联系我们

命令或描述有误?提交反馈、商务合作或产品建议都可发送邮件给我们。

联系我们