重学CSS----文本属性

682 阅读6分钟

开发过程中,经常用到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>

image.png

水平对齐

水平对齐属性

  • 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>

image.png

垂直对齐

  • 属性名:vertical-align
  • 值:baseline|sub|super|top|text-top|middle|bottom|text-bottom
  • 初始值:baseline
  • 应用于:行内元素和表单元格
  • 继承性:无
  • 功能:将行内元素盒模型与其行内元素容器垂直对齐;垂直对齐表格单元内容

相关概念

在介绍垂直对齐前,先了解一些相关概念。

  • 字体:字体度量都是基于顶线ascender、底线descender、capital height、x-height 、linegap等设置的。 image.png
  • 基线:英文字母“x”的下端沿
  • 行高:line-height属性是指文本行基线之间的距离。
  • 行间距:line-height值和字体大小之差就是行间距。
  • 内容区:是由字体大小确定。假设font-size为14像素高,内容区相应的高度也是14像素。
  • 行内框:将行间距的一半,分别应用到内容区的顶部和底部,其结果就是该元素的行内框。
  • 行框:行框的高度是恰好包含最高行内框的顶端和最低行内框的低端。
  • 替换元素: 替换元素如图像/表单输入元素。这些元素没有基线。将替换元素的低端作为基线。 image.png

垂直对齐文本

基线对齐
  • 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的点对齐。 各属性设置示例代码 image.png

字间隔和字母间隔

word-spacing修改字间间隔

  • 属性: word-spacing
  • 值:<lenth>|normal|inherit
  • 初始值:normal
  • 应用于:所有元素
  • 计算值:normal为绝对长度0,否则为绝对长度

各属性设置示例代码

image.png

letter-spacing修改字母/字符间距

  • 属性: letter-spacing
  • 值:<lenth>|normal|inherit
  • 初始值:normal
  • 应用于:所有元素
  • 计算值:normal为绝对长度0,否则为绝对长度

各属性设置示例代码

image.png

文本转换

text-transform处理文本的大小写

  • 属性:text-transform
  • 值:uppercase|lowercase|capitalize|none|inhert
  • 初始值: none
  • 应用于:所有元素
  • uppercase:将文本转换为大写
  • lowercase: 将文本转换为小写
  • capitalize:将文本首字母大写

image.png

文本装饰

text-decoration给文本加上效果

  • 属性:text-decoration
  • 值:none|underline|overline|line-through
  • 初始值: none
  • 应用于:所有元素 image.png

文本阴影

text-shadow可以为文本定义多个阴影,每个阴影都是由一个颜色和三个长度来定义。颜色是定义阴影的颜色,第一个长度定义了阴影和文本的水平偏移距离,第二个长度定义了阴影和文本的垂直偏移距离,第三个长度定义了模糊半径。

  • 属性:text-shadow
  • 值:none|[<color>||<length><length><length>?,]*
  • 初始值: none
  • 应用于:所有元素

image.png

处理空白符

white-space属性,会影响用户代理对文档中的空格/换行和tab字符的处理。

  • 属性:white-space
  • 值:normal|nowrap|pre|pre-wrap|pre-line|inherit
  • 初始值: normal
  • 应用于:所有元素

image.png 原文包含空白符/换行符

image.png

不同属性效果展示

image.png