text-indent默认值为0,无天然缩进;失效主因是元素非块级(如inline)、父容器为flex/grid、首行含内联替换元素、white-space干扰或高权重样式覆盖,推荐用2em单位并用开发者工具验证computed值。

HTML段落本身没有“默认缩进”,text-indent 默认值是 0;你看到的所谓“缩进”其实是视觉错觉或外部样式干扰,真正要改的是你主动加上的那个 text-indent 值。
为什么改了 text-indent 却没反应
不是代码写错了,而是浏览器压根没按你预期渲染首行:
-
display被设成inline或inline-block——text-indent只对块级盒(display: block)生效 - 父容器用了
display: flex或display: grid,且没触发 BFC,导致子<p></p>的块级行为被降级 - 段落开头是
<img>、<svg></svg>这类内联替换元素,缩进发生在它左边,看起来像“没动” - 某处样式写了
p { text-indent: 0 !important }(富文本编辑器输出常见) -
white-space: nowrap或white-space: pre破坏了换行,“首行”概念失效
最快验证方式:打开开发者工具 → 找到目标 <p></p><div class="aritcle_card flexRow artxards">
<div class="artcardd flexRow">
<a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill7761" title="Article To Html"><img
src="https://img.php.cn/upload/skill/000/000/081/179168408018805.jpg" alt="Article To Html" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a rel="nofollow" href="/xiazai/skill7761" title="Article To Html" class="overflowclass">Article To Html</a>
<p class="overflowclass">文章转信息图。将文章/笔记转化为手机可读的 HTML 信息图,自动匹配视觉风格。触发场景:文章转图、笔记转图、信息图、转小红书图、做张图、可视化这篇文章、文生图。</p>
</div>
<a rel="nofollow" href="/xiazai/skill7761" title="Article To Html" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
</a>
</div>
</div> → 切到 Computed 标签页 → 看 display 是不是 block,且 text-indent 最终计算值不是 0。
text-indent 单位选错会导致“缩进不对劲”
单位决定缩进是否随字体/缩放自适应,选错就等于白调:
- 用
2em:最稳妥。1em = 当前font-size,缩进始终≈两个汉字宽,系统放大、DPI 变化时仍自然 - 用
2ch:语义更准(1ch ≈ 字符 “0” 宽度),但 IE 不支持,且多数中文字体里 1ch 远小于一个汉字 - 避免
32px或20px:固定像素,在高 DPI 屏或用户 zoom 到 150% 时,缩进会明显变窄 - 别用
2%:按父容器宽度算,窄屏下可能只剩几像素,完全不够两格 - 慎用
2rem:若项目用 JS 动态改html { font-size }(比如夜间模式),缩进会意外跳变
表格里 <td> 的 <code>text-indent 经常失效
<td> 默认是 <code>display: table-cell,浏览器对它的首行盒生成很保守,尤其在单行未换行时:
- 直接加
padding-left: 2em更可靠 —— 不依赖“首行”概念,所有浏览器都认 - 如果必须保留语义(比如导出 PDF 需要首行缩进),就包一层
<div>:<code><td><div style="text-indent: 2em">内容</div></td> - 注意
text-align: center或right会把缩进后的文字再拉回,看起来像没缩进 -
p:first-of-type { text-indent: 0; }:适合结构固定、首段总在最前的页面(如博客正文) -
.intro p:first-child { text-indent: 0; }:更精准,只作用于特定容器下的第一个<p></p> - 别只清
text-indent,顺手把顶边距也去掉:p:first-of-type { text-indent: 0; margin-top: 0; },避免顶部多出空白
首段不缩进怎么安全跳过
导语、标题后第一段通常需要视觉起始感,硬写全局 text-indent: 0 容易漏掉或冲突:
真正难的不是设数值,而是确认这个值在各种布局、字体、缩放和设备下都稳定生效——text-indent 表面简单,背后全是渲染条件博弈。










