应让 normalize.css 或 reset.css 优先加载,即作为第一个生效的样式表;二者不可共存,normalize.css 温和修复浏览器差异,reset.css 暴力清零,错误顺序或额外重置会导致覆盖失效。
必须让 reset.css 或 normalize.css 成为整个 CSS 加载链中「第一个生效的样式表」,否则后续自定义样式会覆盖它们的重置逻辑,导致你看到的“样式被重置”其实是“没被重置成功”。
reset.css 是暴力清零:把所有元素的 margin、padding、font-size 等设为 0 或统一值,依赖它之后手动补全样式normalize.css 是温和修复:保留有用的默认行为(比如 h1 有字体加粗、audio 有默认控件),只修正浏览器间不一致的地方normalize.css,就别再引入 reset.css;反之亦然常见错误是把业务 CSS 放在重置 CSS 前面,例如:
这样 style.css 里的 body { margin: 0; } 会被 normalize.css 里更宽泛的 body { margin: 8px; } 覆盖,结果页面反而出现意外外边距。
normalize.css 或 reset.css 在最前 或 @import 在它之前执行@import 引入重置文件,要确认它在 main.css 的第一行,且没有被 CSS-in-JS 库(如 styled-components)动态插入的样式抢先打开 Elements 面板,选中一个异常元素(比如 h1 字体太小),看右侧 Styles 标签页:
normalize.css 的规则显示为被划掉(strikethrough),说明有更高优先级的样式覆盖了它h1 { font-size: 1em; } 这种来自你自己的 CSS,且它的选择器权重比 normalize.css 中的 h1 { font-size: 2em; } 更高normalize.css,它们之间会打架——此时应禁用框架内置重置(如 Bootstrap 5 的 $enable-reboot: false)@import 不仅性能差(阻塞并行加载),还会改变层叠顺序:它总是按代码书写顺序生效,但权重低于同级 link。所以即使写成:
@import 'normalize.css'; @import 'base.css';
如果 HTML 中还有 ,那 theme.css 仍会覆盖前面两个 @import 的规则。
,且放在 最顶部@import(比如 Sass 中),确保整个项目只有一处入口 CSS,并在里面最先 @import 重置文件css-loader 默认不解析 @import 外部 URL,容易静默失败——检查控制台是否有 Failed to load resource 提示