text-indent仅对块级元素首行生效,需用class或id精准控制;整段缩进应改用padding-left或margin-left。

用 text-indent 控制段落首行缩进,但只作用于块级元素
HTML 中没有“段落缩进”这个原生属性,真正起效的是 CSS 的 text-indent。它只影响块容器(如 <p></p>、<div>)的第一行文本,对内联元素或换行后的后续行无效。
<p>常见误操作是给 <code><span></span> 或 <em></em> 加 text-indent,结果完全没反应——因为它们默认不是块级元素。
- 要缩进某一个
<p></p>,直接加内联样式:<p style="text-indent: 2em;">这里是首行缩进的段落</p> - 若需复用,优先用 class:
<p class="indent-1">...</p>,再在 CSS 中定义.indent-1 { text-indent: 2em; } -
text-indent支持em、px、rem,但慎用百分比(%),它基于容器宽度计算,容易导致意外偏移
想缩进整段(不只是首行)?改用 padding-left 或 margin-left
如果目标是让整个段落向右“挪”,包括所有行(比如模拟中文出版物的段前空两字+整体缩进),text-indent 就不够用了。这时该用 padding-left(内容区域左内边距)或 margin-left(外边距)。
-
padding-left更稳妥:不会触发外边距合并,且文字始终在 padding 区内,视觉更可控 -
margin-left可能和相邻元素产生外边距塌陷,尤其在<p></p>堆叠时 - 示例:
<p style="padding-left: 2em;">整段都向右缩进,每行都生效</p>
用 ID 或 class 精准定位指定段落,避免全局污染
直接写 p { text-indent: 2em; } 会把所有段落都缩进,这不是“单独修改”。必须靠选择器限定范围。
- 最简单:给目标段落加唯一
id,如<p id="intro">...</p>,然后写#intro { text-indent: 2em; } - 更推荐 class:多个同类段落(如章节导语)共用
class="lead-paragraph",CSS 中统一控制 - 避免用嵌套过深的选择器(如
article > div > p:first-child),可维护性差,且一旦 HTML 结构微调就失效
注意 direction 和 rtl 场景下的行为反转
当页面或父容器设了 direction: rtl(如阿拉伯语、希伯来语),text-indent 默认向右缩进会变成向左——它始终朝“行首方向”缩进,而不是固定朝左。
- 若需强制左缩进,不管书写方向,可用
text-indent: 2em dir(ltr);(部分新浏览器支持) - 更兼容的做法:对 RTL 容器单独重置,例如
[dir="rtl"] .indent-1 { text-indent: -2em; padding-left: 2em; } - 这点极易被忽略,上线后才发现多语言版段落缩进反了











