应精准重置body、h1–h6、p、blockquote、pre、ul、ol、li、dl、dt、dd等盒模型干扰标签的margin/padding,保留small、em、strong等语义标签默认样式,避免通配符误伤可访问性。

别用 * { margin: 0; padding: 0; } 清文本标签,默认样式不是“脏东西”,而是语义和可访问性的基础;真正要做的,是精准重置干扰布局的盒模型属性,同时保留字体、行高、语义层级等关键表现。
哪些文本标签必须重置 margin/padding?
浏览器对文本类标签的默认外边距差异最大,不处理会导致段落堆叠、标题塌陷、列表错位。重点盯住这几类:
-
body:Chrome/Firefox 默认margin: 8px,IE 是10px,必须显式设为0或统一值 -
h1–h6:各浏览器 margin-top/margin-bottom 不一致,但font-size和层级关系要保留 -
p、blockquote、pre:默认上下 margin 明显,pre还带换行和空格保留逻辑,不能只清 margin -
ul、ol、li:不仅有padding-left(Firefox/IE 实现不同),还有list-style,漏一项就缩进异常 -
dl、dt、dd:常被忽略,但dd默认有margin-left,在文档结构中极易撑开容器
为什么 small、em、strong 不该进重置清单?
这些标签不参与盒模型构建,也不自带 margin/padding,强行重置反而破坏语义表达:
-
small默认缩小字号(约80%),normalize.css 会保留它;若用通配符重置,它就退化成普通文本,法律条款或版权信息立刻失去视觉区分 -
em、strong默认是斜体/加粗,这是语义强调的核心表现,清掉font-style或font-weight就等于废掉标签本意 - 它们本身不触发块级流,不会撑开布局,重置
margin或padding属于无意义操作
怎么写才既轻量又不漏关键项?
推荐直接复用经过验证的最小集,按语义分组声明,避免通配符性能损耗和误伤:
立即学习“前端免费学习笔记(深入)”;
body, h1, h2, h3, h4, h5, h6, p, blockquote, pre,
ul, ol, li, dl, dt, dd, address, figure, figcaption {
margin: 0;
padding: 0;
}
ul, ol {
list-style: none;
}
blockquote, pre {
margin-block-start: 1em;
margin-block-end: 1em;
}
p {
margin-block-end: 1rem;
}这段代码只动盒模型相关属性,不碰 font-size、line-height、font-weight,后续可安全叠加语义化基础样式(比如统一 p 的行高和下边距)。
del 和 ins 标签的删除线/下划线怎么归零?
它们的默认装饰线是渲染层行为,不能靠清 margin/padding 解决,得用 all: unset 配合手动补 display:
del, ins {
all: unset;
display: inline;
text-decoration: none;
}
del {
text-decoration: line-through;
text-decoration-color: #999;
}
ins {
text-decoration: underline;
text-decoration-color: #007acc;
}注意:all: unset 会清掉 display,所以必须显式写 display: inline,否则元素会塌陷;也别对 body 或 html 用 all,它会干掉滚动条、焦点轮廓等底层行为。
最易被忽略的点是:重置不是为了“看起来干净”,而是为了让后续样式可预测——比如你给 h2 加 margin-top: 2rem,前提是它原本没有不可控的 margin-top;一旦依赖通配符,这种控制力就没了。



















