text-indent 是段落首行缩进的正确选择,但无语义;禁用空格缩进因破坏可访问性、粘贴失效、响应式异常;失效常见于 inline/float/absolute 元素、重置覆盖或 rtl 方向未适配;语义缩进应优先用 blockquote/section 等标签,并配合 aria-level 和 em/ch 单位确保动态可访问。

text-indent 是段落首行缩进的正确选择,但它本身不传递语义,屏幕阅读器不会因此读出“此处缩进”——缩进只是视觉提示,不是结构信号。
为什么不能用 实现首行缩进
连写多个 看似简单,但实际会破坏可访问性:
- 屏幕阅读器把
当作普通空格朗读(或跳过),无法表达“这是段落起始”的意图 - 复制粘贴时,
常被编辑器转成普通空格,缩进消失 - 响应式断点下,
2可能撑开容器、触发意外换行,而text-indent: 2em始终按字体比例缩放 - WCAG 不禁止,但属于“绕过语义的视觉补丁”,审核时容易被标记为低优先级可访问性风险
text-indent 失效的常见场景
即使写了 text-indent: 2em,也可能没效果,原因往往和 display 模式或继承有关:
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
- 父元素设置了
display: inline或display: inline-block,子p的text-indent会被忽略 -
p被设为float: left或position: absolute,该属性失效 - 显式重置了
text-indent: 0,且未用!important覆盖(比如某些 CSS 重置库) - 父容器设置了
direction: rtl,但未同步调整text-indent方向逻辑(此时应配合direction和unicode-bidi)
缩进 ≠ 引用,别混淆语义与样式
如果缩进是为了表示引文、摘录或层级关系,优先用语义化标签,再叠加样式:
- 引用内容用
<blockquote></blockquote>,而非给p加text-indent - 带作者信息的引文,套
<figure><blockquote><figcaption></figcaption></blockquote></figure>组合 - 多级文档大纲中的子章节,用
<section></section>+<h2></h2>/<h3></h3>,而不是靠缩进来模拟层级 - 若必须用缩进表达层级(如树形菜单文字项),应额外加
aria-level属性,例如<div role="treeitem" aria-level="3"> <p>真正容易被忽略的是:缩进值本身是否随字号动态变化。固定写 <code>text-indent: 20px在用户放大字体后会显得过小,而2em或2ch才能跟随可访问性设置自然伸缩。










