开发过程中,经常用到css文本属性,比如首行缩进、水平居中、垂直居中等,奇怪的是有时候这些属性好用,有时候就达不到预期效果,每次调整样式时,都是试探性的一个个属性的试错。这说明我并没用深刻掌握各个属性使用的场景,因此梳理一下这些文本属性的使用场景,希望本文能对你有帮助。
缩进
缩进属性
- text-indent
- 值:<length>|<percentage>
- 应用于:块级元素
- 初始值: 0
- 继承性:有
- 功能:将块元素的第一行缩进指定长度。
缩进示例
div{
width: 250px;
text-indent: 20px;
border: 1px solid #ccc;
}
.p1{
text-indent: 50%
}
.p2{
text-indent: 2em
}
<div>
<p>这是一个段落,他继承了父元素的缩进值是20px。</p>
<p class="p1">这是一个段落,首行缩进值是50%,缩进值占块元素宽度的50%。</p>
<p class="p2">这是一个段落,首行缩进值是两个字体大小,也就是首行缩进两个字。</p>
<span>这是一个行内元素,首行缩进只对块级元素起作用,对行内元素不起作用。</span>
</div>
水平对齐
水平对齐属性
- text-align
- 值:left|center|right|justify
- 初始值:用户代理特定值;取决于书写方向
- 应用于:块级元素
- 继承性: 有
- 功能:设置一个元素中的文本行相互之间的对齐方式。
水平对齐示例
div{
width: 250px;
text-align: right;
border: 1px solid #ccc;
}
.p1{
text-align: center;
}
.p2{
text-align: left;
}
.p3{
text-align: justify;
}
span{
text-align: left;
}
<div>
<p>这是一个段落,他继承了父元素text-align: right;,文本行按照右侧对齐的方式对齐。</p>
<p class="p1">这是一个段落,text-align: center; 文本行之间是按照中间对齐的方式对齐。</p>
<p class="p2">这是一个段落,text-align: left;,文本行之间是按照左侧对齐的方式对齐。</p>
<p class="p3">这是一个段落,text-align: justify,文本行是按照两端对齐的方式对齐。</p>
<span>这是一个行内元素,由于text-align只对块级元素起作用,因此设置了 text-align: left;是无效的。该行内元素是按照父元素text-align: right;对齐。</span>
</div>
垂直对齐
- 属性名:vertical-align
- 值:baseline|sub|super|top|text-top|middle|bottom|text-bottom
- 初始值:baseline
- 应用于:行内元素和表单元格
- 继承性:无
- 功能:将行内元素盒模型与其行内元素容器垂直对齐;垂直对齐表格单元内容
相关概念
在介绍垂直对齐前,先了解一些相关概念。
- 字体:字体度量都是基于顶线ascender、底线descender、capital height、x-height 、linegap等设置的。
- 基线:英文字母“x”的下端沿
- 行高:line-height属性是指文本行基线之间的距离。
- 行间距:line-height值和字体大小之差就是行间距。
- 内容区:是由字体大小确定。假设font-size为14像素高,内容区相应的高度也是14像素。
- 行内框:将行间距的一半,分别应用到内容区的顶部和底部,其结果就是该元素的行内框。
- 行框:行框的高度是恰好包含最高行内框的顶端和最低行内框的低端。
- 替换元素: 替换元素如图像/表单输入元素。这些元素没有基线。将替换元素的低端作为基线。
垂直对齐文本
基线对齐
- vertical-align:baseline:将元素的基线与父元素的基线对齐。
- vertical-align:sub:将元素的基线相对于父元素的基线下降(下降值取决于用户代理)。
- vertical-align:super:将元素的基线相对于父元素基线上升(上升值取决于用户代理)。
顶部/底部对齐
- vertical-align:top:将元素的行内框顶端与父元素行框顶端对齐。
- vertical-align:text-top:将元素的行内框顶端与父元素行内文本顶端对齐。
- vertical-align:bottom:将元素的行内框低端与父元素行框低端对齐。
- vertical-align:text-bottom:将元素的底部与父元素行内文本低端对齐。
居中对齐
- vertical-align:middle 会把行内框中点,与父元素基线上方加1/2个x-height的一个点对齐(小x的交叉点。)
百分数对齐
- vertical-align: n% 会把元素的基线相对于父元素基线升高或降低指定值(该值为该元素line-height的百分数)
长度对齐
- vertical-align: npx,会把元素的基线相对于父元素基线升高或降低指定值。
小结
- baseline/sub/super/百分数对齐/长度对齐,这些值都元素基线相对于父元素基线升高或降低指定值。
- top/text-top/bottom/text-bottom,是元素的行内框的顶部/底部相对于父元素的行框顶端/文本顶端/行框低端/文本底端对齐。
- middle:是行框中点相对于父元素基线上方加二分之一x-height的点对齐。
各属性设置示例代码
字间隔和字母间隔
word-spacing修改字间间隔
- 属性: word-spacing
- 值:<lenth>|normal|inherit
- 初始值:normal
- 应用于:所有元素
- 计算值:normal为绝对长度0,否则为绝对长度
letter-spacing修改字母/字符间距
- 属性: letter-spacing
- 值:<lenth>|normal|inherit
- 初始值:normal
- 应用于:所有元素
- 计算值:normal为绝对长度0,否则为绝对长度
文本转换
text-transform处理文本的大小写
- 属性:text-transform
- 值:uppercase|lowercase|capitalize|none|inhert
- 初始值: none
- 应用于:所有元素
- uppercase:将文本转换为大写
- lowercase: 将文本转换为小写
- capitalize:将文本首字母大写
文本装饰
text-decoration给文本加上效果
- 属性:text-decoration
- 值:none|underline|overline|line-through
- 初始值: none
- 应用于:所有元素
文本阴影
text-shadow可以为文本定义多个阴影,每个阴影都是由一个颜色和三个长度来定义。颜色是定义阴影的颜色,第一个长度定义了阴影和文本的水平偏移距离,第二个长度定义了阴影和文本的垂直偏移距离,第三个长度定义了模糊半径。
- 属性:text-shadow
- 值:none|[<color>||<length><length><length>?,]*
- 初始值: none
- 应用于:所有元素
处理空白符
white-space属性,会影响用户代理对文档中的空格/换行和tab字符的处理。
- 属性:white-space
- 值:normal|nowrap|pre|pre-wrap|pre-line|inherit
- 初始值: normal
- 应用于:所有元素
原文包含空白符/换行符
不同属性效果展示