text-indent是唯一正统的首行缩进手段,但仅对块级元素生效,在flex/grid容器中常失效;应优先用padding-left替代,并注意单位选择、继承性及line-height协调。
text-indent 是唯一正统、语义正确的首行缩进手段,但它只对块级元素生效,且在 flex/grid 容器里大概率失效——别硬套,先看场景。
浏览器根本不会渲染 <span style="text-indent: 2em">文字</span> 的缩进。它只认生成 block box 的元素:<p>、<div>、<h3>,或显式设了 display: block 的元素。
<span> 或 <a> 直接加 text-indent,页面毫无反应display: block 包一层,或换 padding-left
text-indent: 2em,子 <p> 也会缩进,需手动 text-indent: 0 重置当 <p> 是 display: flex 或 display: grid 的直接子元素时,它的块级盒行为被格式化上下文覆盖,text-indent 常常不触发。
padding-left: 2em 替代,视觉效果一致,且完全可控text-indent,得额外加 display: block 并确认没被 align-self 或 justify-content 干扰text-indent “假装缩进”,那本质是布局间距问题,该调 margin 或 padding
2em 是当前 font-size 的两倍水平尺寸,不是字符数。SimSun、Microsoft YaHei 等中文字体下,一个汉字实际宽度往往略大于 1em,导致缩进偏大;而等宽字体下又可能偏小。
立即学习“前端免费学习笔记(深入)”;
text-indent: 2ch(取“0”的宽度为单位),但注意 ch 在中文环境仍非绝对精准text-indent: 1.6rem,配合根字号统一调控,比纯 em 更稳定em 缩进会同比放大,可能撑破容器,建议加 max-width 限制或用视口单位兜底text-indent 只移动首行文字起始位置,不改变行高计算逻辑。当 line-height 设置过小(如 1 或 1.2),尤其配合大字号时,首行末尾和第二行开头容易视觉重叠。
line-height: 1.5 ~ 1.7,中文段落推荐 1.6
margin-bottom 补偿视觉间隙,而不是强行缩小 line-height
text-indent 行为可能和屏幕不一致,务必实测导出结果真正麻烦的不是怎么写 text-indent,而是判断它该不该出现——很多你以为是“缩进”的需求,其实是 padding、margin 或容器布局的问题。先看清结构,再动属性。