Open nfssuzukaze opened 4 years ago
content
padding
border
margin
在同样的 font-size 下, 不同的字体其 content area 的高度不同, 具体的数值与字体设计时的参数有关, 这里不深入讨论
font-size
content area
会被 vertical-align 改变对齐方式的元素, 在改变对齐方式的同时, 也可能会改变该行的行高
vertical-align
inline
baseline
x
inline-block
margin-bottom
overflow
visible
margin-top
top
line box
text-top
middle
text-bottom
bottom
normal
line-height
<number>
<length>
px
em
<percentage>
在一个元素中, 我们可以将每行看作一个 line box 在一个 line box 中, 存在至少一个 inline box , 该 inline box 的高度为其对应的 line-height 而一个 line box 的高度为 max(任意一个 inline box 的顶端到任意一个 inline box 底部的距离)
inline box
max(任意一个 inline box 的顶端到任意一个 inline box 底部的距离)
正常情况下, line-height 都比 content area height 要大, 而其多出来的长度, 一半会加到 content area 的顶部, 另一半会加到 content area 的底部
content area height
span
div
font-family
<div> <span class="first">xxx</span> <span class="second">xxx</span> </div>
div { margin: 40px; width: 400px; background-color: red; } div > .first { font-size: 50px; width: 100px; line-height: 100px; background-color: yellow; } div > .second { font-size: 50px; width: 100px; line-height: 100px; background-color: lightgreen; }
div > .seconde { font-size: 30px; width: 100px; line-height: 100px; background-color: lightgreen; }
原因:
1/2
解决方法: 将两个子元素的 inline-height 设置为相同的数值
inline-height
<div><span></span></div>
body { background-color: yellow; } div { display: block; margin: 20px; width: 500px; background-color: grey; } span { display: inline-block; height: 200px; width: 200px; background-color: #fff; }
解决方法:
display
block
0
1. 前置知识
1.1 组成一个完整的盒模型需要:
content
: 显示内容的区域padding
: 包围在内容区域外的空白区域border
: 包围内容和内边距的区域margin
: 盒子最外部的区域1.2 字体的线
1.3 content area 高度
在同样的
font-size
下, 不同的字体其content area
的高度不同, 具体的数值与字体设计时的参数有关, 这里不深入讨论1.4 inline-level element 的计算
会被
vertical-align
改变对齐方式的元素, 在改变对齐方式的同时, 也可能会改变该行的行高inline
:baseline
是该元素里面的文本(假想字母x
)的下边缘线content area
的顶部content area
的底部inline-block
:baseline
:baseline
的位置就是margin-bottom
overflow
的值为visible
时,baseline
的位置就是里面最后一个内容元素的baseline
overflow
的值不为visible
时,baseline
的位置就是margin-bottom
margin-top
margin-bottom
2. vertical-align
2.1 vertical-align 的取值(主要)
baseline
: 默认值, 使元素的 'baseline' 与其父元素的baseline
对齐top
: 使该元素及其后代元素的顶部与对应的line box
的顶部对齐text-top
: 使对应元素的顶部与其父元素字体的content area
的顶部对齐middle
: 使元素的绝对中点与其父元素的x
字体的交点水平平行, 而不是与content area
的绝对中点水平平行text-bottom
: 使对应元素的底部与其父元素字体的content area
的底部对齐bottom
: 使对应元素及其后代元素的底部与对应的line box
的底部对齐3. line-height
3.1 line-height 的取值
normal
:line-height
的默认值, 大部分时候都为 1.2 左右(参考MDN), 然而这并不是一个具体的数值, 根据字体的不同, 其取值也会有不同<number>
: 设定一个数字,line-height
的具体值为 number * font-size, 大部分情况下, 这是设置line-height
的推荐方法<length>
: 直接设定px
,em
之类的值<percentage>
: 通过百分数设定在一个元素中, 我们可以将每行看作一个
line box
在一个line box
中, 存在至少一个inline box
, 该inline box
的高度为其对应的line-height
而一个line box
的高度为max(任意一个 inline box 的顶端到任意一个 inline box 底部的距离)
正常情况下,
line-height
都比content area height
要大, 而其多出来的长度, 一半会加到content area
的顶部, 另一半会加到content area
的底部4. 由 line-height 与 vertical-align 导致的问题
1. 当仅两个
span
在div
中, 且span
的font-family
相同,line-height
相同时, 更改font-size
会导致div
元素的高度改变1.1 原代码
1.2 将第二个
span
中的font-size
变小原因:
vertical-align
的属性默认是baseline
, 所以在同一行中, 两个span
的x
字母的baseline
会对齐,x
的font-size
相对较小, 那么自然其content area
的高度会缩小,baseline
在content area
中所处的位置偏下, 所以在baseline
之下的content area
高度的缩小幅度小于总缩小幅度的1/2
而baseline
之上的content area
高度的缩小幅度大于总缩小幅度的1/2
,line-height
多出来的值又会各分1/2
分别添加到content area
的顶部与底部inline box
的顶部与底部都降低了line box
的顶部不变(较大字体inline box
的顶部) , 而底部降低(较小字体inline box
的底部)line box
高度增高解决方法: 将两个子元素的
inline-height
设置为相同的数值2. 放一张图片或一个
inline-block
元素进没有指定高度的元素中, 会导致子元素底部还会有一点空隙解决方法:
display
改为block
vertical-align
设置为middle
或top
或bottom
line-height
设置为0
font-size
设置为0