reset.css 更适合强制统一浏览器默认样式差异,因其采用“全部清零”策略,直接消除 margin、padding、font-size 等不一致;而 normalize.css 仅修复已知问题并保留合理默认。
浏览器默认样式差异(比如 margin、padding、font-size)不是 bug,而是设计选择。reset.css 的思路是“全部清零”,normalize.css 是“保留合理默认并修复已知不一致”。如果你的目标是“不同浏览器渲染出完全一样的盒模型和文字尺寸”,reset.css 更直接有效。
常见误操作是只引入 normalize.css 就以为万事大吉——它不会把 h1 的上下边距设为 0,也不会让 button 在 IE 和 Chrome 里用同一套 line-height 计算逻辑。
* { all: unset; } + 手动设置基础样式,但兼容性需验证(IE 不支持 all)reset.css 必须是整个 CSS 加载链中第一个生效的样式表,否则后续规则可能因优先级或层叠顺序绕过重置效果。
典型错误包括:
中把自定义 CSS 放在 reset.css 前面@import 引入 reset.css(它会异步加载,晚于同级 )正确写法:
除了常见的 margin、padding 归零,以下几类重置直接影响布局表现:
box-sizing: border-box 全局设置——避免 Chrome/Firefox/Safari 对
input 默认 box-sizing 解析不一致font-family: sans-serif 显式声明——防止 IE 默认用 MS Sans Serif,而 Safari 用 Helvetica
vertical-align: baseline 重置所有 img、input、button——解决行内元素基线对齐错位问题text-rendering: optimizeLegibility(可选)——改善 Firefox/Chrome 中连字和字距渲染差异即使 CSS 重置到位,iOS Safari 仍可能自动放大 input 或 select(当字体小于 16px),Android Chrome 也有类似行为。这不是 CSS 层面的问题,但会破坏你辛苦重置出来的视觉一致性。
解决方案需配合 HTML 和 meta 标签:
font-size: 16px(或更大)(注意:禁用缩放会影响可访问性)textarea 等元素加 -webkit-text-size-adjust: none(仅限旧版 iOS)这些不是 reset.css 能覆盖的,必须作为补充策略单独处理。
浏览器样式差异从来不是靠一个文件就能彻底抹平的。真正起作用的是:reset 作为起点 + 关键属性显式声明 + 移动端特殊规则兜底。漏掉任意一环,都可能在某个机型上突然“跳一下”。