text-indent: 2em更可靠,因其基于当前font-size自适应缩放,适配系统放大、高对比度及响应式场景;而32px为固定像素,在缩放或字号变化时失准,且em不受根字号影响、兼容性优于ch。

text-indent 是唯一语义正确、原生支持首行缩进的 CSS 属性,但“固定”二字需要谨慎理解:它不等于“像素固定”,而应是“行为固定、单位合理、生效条件稳定”。
为什么 text-indent: 2em 比 text-indent: 32px 更可靠
中文排版要的是“视觉上约两个汉字宽度”的缩进,不是绝对像素值。用 2em 能随 font-size 自动缩放,系统字体放大、用户开启高对比度模式、或页面整体缩放时仍保持比例协调;而 32px 在 125% 缩放下会显得过窄,在移动端小字号下又可能过大。更关键的是:em 在 <p></p> 上计算稳定,不受根元素 font-size 影响(rem 会受),也比 ch 兼容性好(IE 完全不支持 ch)。
text-indent 不生效的三个高频原因
加了样式却没缩进?大概率掉进以下任一坑里:
-
<p></p>实际是display: inline或inline-block—— 浏览器根本不识别“首行”概念 - 父容器用了
display: flex或display: grid,且未给<p></p>显式设display: block和确定的width - 段落开头是
<img>、<svg></svg>等内联替换元素,缩进从容器左边缘算起,但视觉上被图片挡住,误判为“没生效”
第一段不缩进怎么安全跳过
标题后紧跟的导语段落通常不该缩进,硬写 p { text-indent: 0 } 会覆盖所有段落,容易漏掉或冲突。稳妥做法是主动排除:
- 结构固定时用
p:first-of-type { text-indent: 0; }—— 适合博客正文、文章页等首段总在最前的场景 - 需要更灵活控制时,加类
class="no-indent",再写p.no-indent { text-indent: 0; } - 避免用
!important强制覆盖,它会让后续调试和组件复用变得困难
别碰 padding-left 来模拟首行缩进
padding-left 是整段左移,第二行也会跟着右偏,完全违背中文段落规范。它还会带来副作用:
- 响应式断点下缩进量不会随字号变化,小屏文字挤在一起时缩进仍占大块空白
- 与
margin、max-width配合时容易触发意外换行或溢出 - 打印样式表中表现不稳定,部分浏览器会忽略 padding 的缩进意图
真正复杂的点在于:缩进不是孤立样式,它依赖 display 类型、上下文格式化、甚至 white-space 设置。一个看似简单的 text-indent: 2em,只有在块级、无干扰布局、无高权重覆盖的前提下,才能稳定表达“首行缩进”这个排版意图。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











