Tailwindcss 的 base / components / utilities 三条指令是什么?
· 7 min read
Tailwind v3 的三条 @tailwind 指令对应 三个不同职责,不是同级概念。
- @tailwind base:Preflight 重置,抹平浏览器默认
- @tailwind components:复合组件类(
.btn),中间层 - @tailwind utilities:原子类,按需生成,最后输出
- 级联顺序:
base → components → utilities,后写的赢 - v4 变化: 三条合并成
@import "tailwindcss",components 删
原则:重置写 base,复合组件写 components,原子类写 utilities。
一句话总结三者的差别
base 解决「默认样式在哪里」——浏览器想给 h1 加 24px、ul 加项目符号、button 加灰色凸起,Preflight 全抹掉。
components 解决「复合组件怎么复用」——你写一个 .btn-primary,多处复用,且能被 utility 覆盖。
utility 解决「样式由谁决定」——你写 text-2xl,就有 24px;你 没写的,产物里 就没有。
三个职责完全不同,经常被混在一起说,是因为它们都写在你 CSS 文件的开头:
@tailwind base; /* Preflight + 你写的 base 扩展 */
@tailwind components; /* 你写的复合组件类 */
@tailwind utilities; /* 原子类 + 你写的 utility 扩展 */
@tailwind base 干了什么
具体 Preflight 抹了哪些东西,之前 Preflight 是做什么用的? 已经写过,这里只点关键的:
- 全局
box-sizing: border-box—— 宽度算到 padding/border 内侧 - 清空
h1~h6、<p>、<ul>的默认 margin —— 别再让某段莫名其妙多了 16px - 标题不自带字号字重 ——
font-size: inherit; font-weight: inherit,纯靠 utility 类喂 <img>/<svg>/<video>/<canvas>默认 block —— 修复 inline 元素底部的 3px 空白- 表单控件继承字体 —— Safari 那套不听话的样式被统一
base 层的本质是:清成白纸,让你从零画