首页 / Tailwind CSS 入门教程 / Preflight:样式重置基础

Tailwind CSS 入门教程

Preflight:样式重置基础

本教程共 50 篇 · 第 13 篇 · 更新于 2026-07-29 · 约 6 分钟阅读

Tailwind CSSTailwind CSS 入门教程Preflight样式重置normalize基础样式

13. Preflight:样式重置基础

本节目标:理解 Preflight 做了什么、为什么需要它、遇到冲突怎么处理。

你写了一个 <h1>,没加任何类名,发现它没有加粗、字号也变小了。这不是 bug,是 Preflight 干的。

什么是 Preflight

Preflight 是 Tailwind 内置的一套基础样式重置,基于 modern-normalize。它的目标是:抹平浏览器之间的默认样式差异,让你在一致的基础上开始写样式

当你写 @import "tailwindcss"; 时,Preflight 会自动注入到 base 层。

Preflight 做了什么

1. 清除所有 margin

*, ::after, ::before, ::backdrop, ::file-selector-button {
  margin: 0;
  padding: 0;
}

所有元素(包括标题、段落、列表)的内外边距归零。你看到的 <h1> 不再有大字号和加粗,因为浏览器默认样式被清掉了。

好处:你不会意外依赖浏览器默认的 margin 值,所有间距都是你显式写的。

2. 边框重置

*, ::after, ::before {
  box-sizing: border-box;
  border: 0 solid;
}

所有元素的边框变成 0 solidborder-style 默认 solid。这样你写 border 类就相当于 border-width: 1px,不需要再指定样式。

3. 标题无样式

h1, h2, h3, h4, h5, h6 {
  font-size: inherit;
  font-weight: inherit;
}

所有标题继承父元素的字号和字重,看起来跟普通文字一样。

为什么这样设计?因为浏览器默认的标题字号(h1 2em、h2 1.5em 等)不在 Tailwind 的类型刻度里。让标题无样式,你再用 text-2xl font-bold 显式定义,更可控。

4. 列表无样式

ol, ul, menu {
  list-style: none;
}

列表前面的圆点/数字没了。需要的话用 list-disclist-decimal 加回来:

<ul class="list-inside list-disc">
  <li>第一项</li>
  <li>第二项</li>
</ul>
Note

无样式的列表在 VoiceOver 等屏幕阅读器里不会被播报为列表。如果内容确实是列表,加 role="list" 保持可访问性。

5. 图片块级化

img, svg, video, canvas, audio, iframe, embed, object {
  display: block;
  vertical-align: middle;
}

图片默认 display: block,避免行内图片底部出现空隙。想恢复行内行为用 inline 类。

6. 图片自适应

img, video {
  max-width: 100%;
  height: auto;
}

图片不会溢出容器,自动保持宽高比。想覆盖用 max-w-none

扩展 Preflight

想给所有标题加个默认样式?在 CSS 里用 @layer base

@layer base {
  h1 {
    font-size: var(--text-2xl);
    font-weight: var(--font-weight-bold);
  }
  h2 {
    font-size: var(--text-xl);
  }
  a {
    color: var(--color-blue-600);
    text-decoration-line: underline;
  }
}

禁用 Preflight

如果你把 Tailwind 引入一个已有项目,Preflight 可能跟现有样式冲突。可以只导入需要的部分:

@import "tailwindcss/theme.css" layer(theme);
/* 不引入 preflight.css */
@import "tailwindcss/utilities.css" layer(utilities);

这样工具类还能用,但基础重置不会生效。

Warning

禁用 Preflight 后,border 类不会自动加 border-style: solid,你可能需要写 border border-solid

下一章我们学自动内容检测。