与 Reset 的暴力清零不同,normalize.css 的哲学是保留有价值的默认样式:标题该加粗还加粗、列表缩进保留、链接颜色逻辑保留,只针对各浏览器不一致的地方(行高、边距、字体渲染、表单元素基线)做最小修正,并修复 button 在 Safari、SVG 溢出等已知 bug,让所有浏览器从同一个合理起点出发。
它源码里每条规则都附带注释解释为什么要修正,读一遍相当于上完浏览器兼容性速成课。现代项目常把它作为 reset 基底,再往上叠加自己的设计系统;Tailwind 的 Preflight 同样是在它基础上改造的。也有 modern-normalize 这类后续方案,只面向现代浏览器、体积更小,适合不需要兼容老环境的项目直接替换。
<style> /* normalize.css 的典型片段 */ body { margin: 0; } /* 统一 body 外边距 */ button, input { font-family: inherit; /* 表单继承字体 */ font-size: 100%; } h1 { font-size: 2em; margin: .67em 0; /* 保留标题默认层级 */ font-weight: bold; } </style> <h1>标题保留默认层级</h1> <button>按钮继承页面字体</button>