vertical-align
是用来设置行内元素对齐方式的。或者说display
属性值为inline、inline-block、inline-table
另加一个table-cell
的元素
基线
基线的位置并不是固定的:
在文本之类内联元素中,基线是字符的下边缘位置
在像
img
元素中基线就是下边缘。在
inline-block
元素中,也分两种情况inline-block
元素盒子里,没有内容(流内内容),是一个空的盒子时,baseline
位置就是该盒子margin-bottom
的边界(没有margin-bottom
值,就是盒子的边界值)。如下图左侧divinline-block
元素盒子里,有内容元素,并且overflow
属性值为visible
时(默认值),那么该盒子的baseline
位置就是里面最后一个内容元素的baseline
。如下图中间divinline-block
元素盒子里,有内容元素,并且overflow
属性值为非visible
时 (比如overflow: hidden;
),那么该盒子的baseline
位置就是该盒子margin-bottom 的边界。如下图右侧 div
属性取值
- baseline: 默认值,就是基线对齐
1
2
3
4
5
6<div style="background: blue">
x
<img src="./box.png">
<span style="display: inline-block;">vertical</span>
<span style="display: inline-block; overflow: hidden;height: 80px;">123</span>
</div>
最下面将会出现空隙,被默认行高撑开的
middle: 让子元素盒子垂直中点与行盒子的
baseline
加 字母 X 高度的一半对齐text-top: 子元素盒子的顶部和行盒子里内容区域的顶部对齐
text-bottom: 子元素盒子的底部和行盒子里内容区域的底部对齐
sub: 降低子元素盒子的基线到父元素盒子下标的位置
super: 升高子元素盒子的基线到父元素盒子上标的位置
top: 子元素盒子的顶部相对行盒子的顶部对齐
bottom: 子元素盒子的底部和行盒子的底部对齐
实例
1 | <style> |
图片默认间隙问题
1 | <style> |
原因:图片为行内元素,默认垂直对齐方式 vertical-align: baseline
,所以底边留有空隙
解决办法:
- 图片的元素类型进行转换
1
2
3img {
display: block;
} - 改变对齐方式
1
2
3img {
vertical-align: middle;
} - 设置
font-size
没有默认空文本内容在旁干扰
1
2
3#root {
font-size: 0;
}