Normalize vs Reset
UA 样式解决了「有默认」,但带来新麻烦:不同浏览器的 UA 样式略有出入(h1 的 margin、button 的字体、表单控件外观各家不一),而且这些默认有时也不合你的设计。于是有了你主动引入的 Level 3 / 4——它们都是普通 author 样式表,只是约定俗成跑在最前面:
Normalize(修平):保留有用的默认,只把跨浏览器的不一致和明显 bug 抹平——h1 依然大而粗、列表依然有符号。代表作 normalize.css。
Reset(推平):清零几乎所有默认——margin/padding 归零、标题不再加粗放大、列表去掉符号,把一切拉回同一条起跑线,样式完全由你重建。代表作 Eric Meyer 的 reset.css。
对照 User-Agent Stylesheet 页:那里「剥离 UA」用的是 all: initial,连 display:block 都没了,结构整体退化为 inline。而这里的 Reset 只清外观(margin/字号/符号),保留 UA 给的 display:block——块级结构仍在,只是外观默认值被清除。两者程度不同。
1 · 现代实践:小而精的 reset
今天很少全量引 Meyer reset(把 margin 全清零反而要到处加回来)。更常见的是一份几条规则的现代 reset,例如 Andy Bell 的 Modern CSS Reset,只挑真正值得改的:
*, *::before, *::after { box-sizing: border-box; } /* padding 不再撑大盒子 */
* { margin: 0; } /* 只清 margin, 留 padding */
body { min-height: 100vh; line-height: 1.5; }
img, picture { max-width: 100%; display: block; }
input, button, textarea, select { font: inherit; } /* 表单控件继承字体 */
思路是「少即是多」:保留无害的默认,只清掉真正造成问题的(撑大盒子的 content-box、到处冒出的 margin、表单控件不继承字体)。Normalize 与 Reset 不是二选一的教条,而是一段你完全掌控的 author 样式。
延伸阅读:Eric Meyer's CSS Reset——经典「推平式」reset 的原文;再对照 normalize.css(修平差异)与 A (more) Modern CSS Reset(小而精),正好是本页三种取向的源头。