应优先引入normalize.css而非通配符重置,因其修复跨浏览器差异并保留语义化默认行为;仅在封装自定义组件时用all: unset局部重置并手动补display。

别用 * { margin: 0; padding: 0; },它会直接破坏表单控件可用性、可访问性和语义层级;真正该做的是优先引入 normalize.css,只在封装自定义组件时才考虑局部重置。
为什么* { margin: 0; padding: 0; }必须避免
这个写法不是“干净”,是“失控”:
-
input和textarea失去默认内边距,文字紧贴边框,iOS 上select下拉箭头直接消失 -
button:focus的轮廓被清掉,键盘用户完全无法识别当前焦点 -
h1–h6全部退化为1em字号,标题语义层级彻底崩塌 - 强制浏览器为每个 DOM 节点执行通配符匹配,页面节点超 2000 个时,CSSOM 构建明显变慢
-
box-sizing被统一设为content-box,后续写width: 100%; padding: 12px会撑出容器
应该用normalize.css替代全局 Reset
它不归零,而是修复差异、保留有用默认行为:
-
h1–h6仍保持大小关系,只统一margin-top/margin-bottom -
ul、ol保留缩进(用padding-left),但修正了 Firefox/IE 缩进实现不一致的问题 -
input、button在 Chrome/Safari/Edge 中默认尺寸、行高、光标行为更一致 -
code、sub、sup等仍维持语义化排版表现
引入方式极简,且必须放在你自己的 CSS 文件之前:
生成可在 deepbi 沙箱 iframe 内运行或作为独立文件运行的交互式 HTML 页面,使用 `window.deepbi` JS SDK 实现数据查询、空间管理、文件浏览及用户操作。当用户提出以下需求时启用该能力: - 创建 KPI 仪表盘、数据表格、文件浏览器、成员列表、管理页面; - 明确要求“转成 dhtml”、“转译成 HTML”、“把 XX 页面转成……”、“控制台页面”、“管理后台”、“DeepBI 页面迁移”; - 提及位于 `apps/console/src/featur
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.1/normalize.min.css">
哪些场景真需要局部“归零”?用什么重置
仅当你封装完全自定义组件(如 UI 库里的 Button、Card),且明确拒绝任何父级或浏览器默认样式干扰时,才考虑局部重置:
- 用
all: unset清除继承 + 默认样式,但会丢失display,记得手动补上:.my-button { all: unset; display: inline-block; } - 用
all: revert恢复浏览器原生样式(比如让某个button回到系统默认外观) - 避免对
body或html应用all,它会影响滚动条、焦点轮廓、字体抗锯齿等底层行为
如果非要手写 Reset,只动这 5 类就够了
够用、轻量、不易踩坑:
-
body:清除默认margin(Chrome/Firefox 是 8px,IE 是 10px) -
h1–h6、p、blockquote:重置margin,保留font-size和语义 -
ul、ol、li:只设list-style: none,不碰padding -
a:移除text-decoration,但保留color继承逻辑 -
img:设vertical-align: middle,现代浏览器已默认无边框,不用加border: 0
复杂点在于:重置不是越“全”越好,而是越“准”越稳;最容易被忽略的是——normalize.css 必须加载在你所有自定义 CSS 之前,否则它修复的差异会被你后续规则无意覆盖。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










