CSS 之文本属性

设置文本属性是 CSS 样式表中重要的部分之一,文本的格式对页面的可读性有着非常显著的影响。

1. 文本属性

1.1 文本缩进

CSS 属性 text-indent 能够帮助我们实现文本的缩进。通过使用该属性,所有元素的第一行都可以缩进一个给定的长度,甚至该长度可以是负值。

text-indent 属性有 3 种值可选:
① (length):使用固定的长度值来指定文本的缩进。允许使用负值。
② (percentage):使用父元素宽度的百分比作为缩进。
③ inherit:继承父元素的缩进值。

text-indent 属性使用过程中有以下注意几点:
text-indent 属性可以应用在所有块级元素中,但是无法应用于行内元素,图像之类的替换元素中。如果想为一个行内元素设置缩进,可以使用内边距或外边距来达到这种效果。
② 在为 text-indent 设置负值的时候,可能会超出浏览器边界,所以为避免这种情况的出现,最好针对负缩进再设置一个外边距或者内边距。
③ 即使插入了换行符,这种缩进也只是应用于一个元素的第一行。

1.2 水平对齐

CSS 使用 text-align 来控制一个元素中文本行相互之间的对齐方式。

text-align 属性有 5 个值可选:
① left:使元素内容左对齐。
② center:使元素内容居中对齐。
③ right:使元素内容右对齐。
④ justify:使元素内容两端对齐。使文本展开,改变单词之间的差距,使所有文本行的宽度相同。
⑤ inherit:继承父元素的对齐方式。

PS:text-align 属性只应用在块级元素中,且不会控制元素对齐,而只影响其内部内容。若想将块级元素或表元素居中,要通过在这些元素上适当地设置左、右外边距来实现。

1.3 垂直对齐

CSS 使用 vertical-align 来对控制元素的垂直对齐方式,但是它的取值有时与 line-height 息息相关,所以我们同时介绍这两种属性。

1.3.1 line-height

line-height 属性即为行高,指文本基线「字符排列的基准线」之间的距离,而不是字体的大小,它决定了将各个元素框的高度增加或者减少多少。

在该属性应用到块级元素时,它定义了元素中文本基线之间的最小距离。line-height 控制着行间距,它和字体大小的差就是行间距。
line-height 属性有 5 种值可选:
① (length):使用固定的长度值来指定文本的行高。不允许使用负值。
② (percentage):相对于元素的 font-size 值计算。
③ (number):即缩放因子。指定缩放因子时,元素会根据自己的 font-size 值进行行高的计算。
④ normal:即默认值,用户代理会给定一个合适的行高。
⑤ inherit:继承父元素行高的计算值。

1.3.2 vertival-align

vertical-align 属性只能应用于行内元素或者替换元素,且不影响块级元素中内容的对齐。

vertical-align 属性有 11 种值可选:
① baseline:即基线对齐。要求元素的基线与父元素的基线对齐,也是默认属性。
② sub、super:即上下标。要求元素的基线(若为替换元素则为其底端)相对于父元素的基线降低或上升。
③ bottom、text-bottom:即底端对齐。bottom 指元素行内框底端与行框底端对齐。text-bottom 指与行内文本对齐,替换元素或其他类型的非文本元素会忽略这个值,其行内框底端会与以父元素 font-size 值得到的一个文本框底端进行对齐。
④ top、text-top:即顶端对齐。与底端对齐相反。
⑤ middle:即居中对齐。要求行内元素框的中点与父元素基线上方 0.5ex处的一个点对齐,这里的 1ex 相对于父元素的 font-size 定义。
⑥ (percentage):该百分数为元素 line-height 值的百分数,而不是相对于其父元素的 line-height 值。
⑦ (length):使用固定的长度值来垂直对齐。
⑧ inherit:继承父元素的垂直对齐的值。

PS:垂直对齐的文本并不会成为另一行的一部分,也不会覆盖其他行中的文本。

1.4 字间隔

CSS 使用 word-spacing 来控制字之间的间隔。

word-spacing 属性有 3 种值可选:
① (length):使用固定的长度值来增加或缩短字之间的间隔。允许使用负值。
② normal:即默认值,由当前字体和或浏览器定义。
③ inherit:继承父元素的字间隔值。

PS:word-spacing 的值可能会受 text-align 的属性值影响。如果一个元素是两端对齐的,字母和字之间的空间可能会调整,以便文本在整行中刚好能放下。

1.5 字母间隔

CSS 使用 letter-spacing 来控制字符或字母之间的间隔,通常用于突出强调。

letter-spacing 属性有 3 种值可选:
① (length):使用固定的长度值来增加或缩短字符或字母之间的间隔。允许使用负值。
② normal:即默认值,表示间隔为 0。
③ inherit:继承父元素的字符或字母的间隔值。

PS:letter-spacing 的值不会受 text-align 的属性值影响。但如果 letter-spacing 的值为 normal,字符间的间隔就可能会改变。

1.6 文本转换

CSS 使用 text-transform 来处理文本的大小写。

text-transform 属性有 5 种值可选:
① uppercase:将文本转化为全大写的字符。
② lowercase:将文本转化为全小写的字符。
③ capitalize:只对每个单词的首字母大写。
④ none:即默认值,不作任何改动。
⑤ inherit:继承父元素的值。

1.7 文本装饰

CSS 使用 text-decoration 来对文本进行一些装饰。

text-decoration 属性有 3 种值可选:
① none:默认值,即关闭元素上的所有装饰。
② underline 指底端加一条下划线;overline 指顶端加一个上划线;line-through 指加一条贯穿文本的线;blink 指让文本闪烁(通常不可取)。
③ inherit:继承父元素的文本装饰。

PS:一个元素中可以同时有多种装饰,用空格进行分隔;当有规则冲突时,会进行替换而不是叠加;没有办法去除父元素生成的文本装饰,只能为其添加自己的装饰以覆盖父元素的文本装饰。

1.8 文本阴影

CSS 使用 text-shadow 来为文本添加阴影。

text-shadow 属性有 3 种值可选:
① none:默认值,即不是用文本阴影。
② color length length length:分别代表阴影颜色、阴影水平偏移距离、阴影垂直偏移距离、阴影模糊半径。可以定义多组阴影,用逗号分隔即可。
③ inherit:继承父元素的文本阴影。

PS:水平偏移向右为正,垂直偏移向下为正;模糊半径值越大,阴影也就越大越淡;颜色先后指定都可以。

1.9 文本换行

CSS 提供了两种属性来对文本进行断行处理。对于西方文字,浏览器会在半角空格或者连字符的地方进行换行;对于中文,可以在任何一个中文字后面进行换行。

1.9.1 word-break

CSS 使用 word-break 来让文字自动换行。

word-break 属性有 4 种值可选:
① normal:使用浏览器默认的换行规则。
② keep-all:CJK(CJK 指中文 / 日文 / 韩文)文本不断行。 Non-CJK 文本表现同 normal。
③ break-all:可在任意处断行。
③ inherit:继承父元素的文本换行方式。

1.9.1 word-wrap

CSS 使用 word-wrap 来让长单词或者字符串自动换行。

word-wrap 属性有 3 种值可选:
① normal:使用浏览器默认的换行规则。
② break-word:表示如果行内没有多余的地方容纳该单词到结尾,则那些正常的不能被分割的单词会被强制分割换行。
③ inherit:继承父元素的文本换行方式。

1.10 空白符的处理

CSS 使用 white-space 来处理文档中的空格、换行和 tab 字符的处理。

white-space 属性有 6 种值可选:
① normal:连续的空白符会被合并,换行符会被当作空白符来处理。。
② nowrap:连续的空白符会被合并,但文本内的换行无效,除非使用了 br 元素。
③ pre:连续的空白符甚至回车都会被保留。
④ pre-wrap:连续的空白符会被保留,但文本会进行正常的换行。
⑤ pre-line:连续的空白符会被合并,但会保留换行符。
⑥ inherit:继承父元素处理空白符的方式。

white-space 属性的行为总结如下:

2. 参考文档

[1] CSS 权威指南
[2] 基本文本和字体样式