Menu

HTML 文字居中:text-align、垂直居中与缩进

在 HTML 中用 CSS 的 text-align: center 属性让文字居中。了解它应该写在哪里,为什么对 span 不起作用,如何在盒子里垂直居中文字,如何让文字对齐到开头、末尾或两端,以及如何缩进段落。

本页包含可运行的编辑器。编辑、运行,立即查看输出。

如何在 HTML 中让文字居中

在包含文字的元素上使用 CSS 属性 text-align: center:

text-align 会让元素内的每一行都居中,包括链接、图片和按钮这类行内内容。它是可继承的,所以在容器上设置它,容器里所有内容的文字都会居中。

写在块元素上,而不是 span 上

text-align 作用于块级容器:<p>、<div>、标题、表格单元格。在 <span> 或 <a> 上它不起作用,因为行内元素只和它的文字一样宽,没有可以居中的空间:

解决办法永远是同一个:把 text-align: center 移到父级块元素上。

块居中,行左对齐

对于有好几行的段落,完全居中的文字很难阅读,因为每一行的起点都不一样。一种常见的做法是让这个块在页面上居中,而块里的文字保持对齐到开头:

margin-inline: auto 让有宽度的块居中,text-align 让块里的行居中。盒子的居中方法(用 flexbox、grid 或外边距)在 div 居中页面中有介绍。

文字垂直居中

text-align 只在水平方向起作用。要在盒子里垂直居中文字,就把盒子设为弹性容器:

align-items: center 负责垂直居中,justify-content: center 负责水平居中,有多行文字时,text-align: center 仍然会让各行彼此居中对齐。line-height 的技巧只适用于已知高度盒子里的单行文字。

text-align 的所有取值

值效果
start(默认值)各行从起始边开始:在中文和英文中是左边,在阿拉伯语和希伯来语中是右边
end各行在结束边结束
center各行居中
justify各行拉伸到两边对齐(最后一行除外)
left、right无论哪种语言,始终靠左或始终靠右

优先使用 start 和 end,而不是 left 和 right:在从右到左书写的语言中,它们会自动翻转,就像最后一个盒子展示的那样。

旧的 center 标签

旧页面会用 <center> 或 align 属性让文字居中:

<center>Old way</center>
<p align="center">Also old</p>

两者都已废弃。浏览器仍会渲染它们,以免旧网站出问题,但它们在当前的 HTML 中是不合法的,还把布局混进了标记里。请在 CSS 中使用 text-align: center。

缩进文字

HTML 没有缩进标签,输入的空格也会被合并(参阅 HTML 空格)。缩进要用 CSS 实现:

缩进方式CSS
只缩进第一行text-indent: 2em
缩进整个块padding-inline-start: 2em 或 margin-inline-start: 2em
悬挂缩进(第一行突出)padding-inline-start: 2em; text-indent: -2em

em 让缩进与字号挂钩,所以它会随文字一起缩放。

常见错误

  • 在行内元素上使用 text-align。 把它写在父级块元素上。
  • 指望 text-align 能让盒子居中。 它让文字和行内内容居中,而不是有宽度的块。盒子请用 margin-inline: auto 或 flexbox。
  • 使用 <center> 或 align="center"。 已经废弃,请用 CSS。
  • 让长段落居中。 标题和短句可以居中,正文保持对齐到开头。
  • 用 &nbsp; 或空格缩进。 请用 text-indent 或内边距。

常见问题

如何在 HTML 中让文字居中?

给包含文字的元素加上 text-align: center,例如 <p style="text-align: center">,或者写一条 CSS 规则,如 h1 { text-align: center; }。它会让该元素内的每一行文字和行内内容都居中。

为什么 text-align: center 对我的 span 不起作用?

span 是行内元素,它的宽度只和文字一样宽,没有可以居中的空间。把 text-align: center 写在父级块元素上(包着它的 <p> 或 <div>),或者把 span 设为 display: block。

如何让文字垂直居中?

把容器设为弹性盒子:display: flex; align-items: center;(再加上 justify-content: center 就能同时水平居中)。如果是固定高度盒子里的单行文字,让 line-height 等于高度也可以。

<center> 标签还能用吗?

不能。<center> 和 align="center" 属性都已废弃。浏览器为了兼容旧页面仍会渲染它们,但新代码应该在 CSS 中使用 text-align: center。

如何在 HTML 中缩进文字?

使用 CSS。text-indent: 2em 缩进段落的第一行,padding-inline-start: 2em 或 margin-inline-start: 2em 缩进整个块。在文字里加空格或 &nbsp; 并不是可靠的缩进方式。

Coddy 编程语言插图

和 Coddy 一起学编程

开始