提前声明:这里有一些复杂,算是css中最复杂的知识点之一、
文字
文字是通过一些文字制作软件制作的,比如fontforge
制作文字时,会有几根参考线,不同的文字类型,参考线不一样。同一种文字类型,参考线一致。
例如;Consolas字体
font-size
字体大小,设置的是文字的相对大小
我们编程时,设置的仅仅是字体的相对大小!!!
当我们设置了相对尺寸为200px,实际尺寸为234px。
文字的相对大小:1000、2048、1024(有点像活字印刷术造字的框框,不等于字体实际大小)
计算机中和现实中不太一样,造字的框框的尺寸(相对大小)往往比得到的字体尺寸(实际尺寸)小一些。
文字顶线(图中的ascent)到底线的(descent)距离,是文字的实际大小(称作content-area,内容区)
行盒的背景,覆盖content-area。
这就是为什么我们给行盒设置背景色时,会在上下多出一部分来。因为覆盖的是内容区。
至此,font-size结束了。
行高
顶线向上延申的空间,和底线向下延申的空间,两个空间相等,该空间叫做line-gap(空隙)
如图所示:
line-gap默认情况下,是字体设计者决定,大多数line–gap是正值,但也有0和负值。
top到bottom(看ppt图),叫做virtual-area(虚拟区)。
行高,就是virtual-area:
实际开发中,我们通过设置行高,间接的设置了line-gap的值。
line-height:normal,默认值,使用文字默认的line-gap(默认值是由字体设置者决定的)。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
span{
font-family: consolas;
font-size: 200px;
background-color: lightblue
}
p{
background-color: red;
}
</style>
</head>
<body>
<p>
<span>
M
</span>
</p>
</body>
</html>
上图中span背景色刚好遮住红色,说明line-gap为0。
接下来我们改变字体为Arial
我们发现span背景色之间出现了间隙,但我们是没有设置行高的。这时用的是默认行高,及Arial这个字体是有line-gap的。(实际上Arial字体的line-gap为67)。
我们手动将Consolas字体的行高设置为1.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
span{
font-family: consolas;
font-size: 200px;
background-color: lightblue;
line-height: 1;
}
p{
background-color: red;
}
</style>
</head>
<body>
<p>
<span>
M
</span>
</p>
</body>
</html>
如何显示?
分析:font-size为200px,相对大小为200,实际大小为234px,即ascent到descernt的大小为234px,但是行高又设置成了200px,即top到bottom到200px,则line-gap为负值呢。
现在虚拟区小于内容区,效果如下:
因此,将line-height设置为1可能会出现一些问题!这时候多行时候会出现字体重叠。如下图所示:
因此,不想动行高的话将line-height设置为normal即可。
文字一定出现一行的最中间吗?
不会,文字出现在这个框框的什么位置,完全由设计者决定
content-area一定出现在virtual-area的中间吗?
对的,上下line-gap是一样的。但可能出现virtual-area比content-area小。但他们的中线也是重合的!
很多字体的实际大小都是大于相对大小的(我们设置的font-size是相对大小,但不同字体实际大小和font-size之间的比例关系是不确定的),因此line-height设置为1会出问题:即虚拟区小于内容区。
设置为normal更合理一些。