个人博客地址 www.codermjjh.cn/ 大家走过路过不要错过
CSS属性 - vertical-align
深入理解vertical-align – line boxes
- 官方文档的翻译:vertical-align会影响 行内块级元素 在一个 行盒中垂直方向的位置
- 思考:一个div没有设置高度的时候,会不会有高度?
- 没有内容,没有高度
- 有内容,内容撑起来高度
- 但是内容撑起来高度的本质是什么呢?
- 内容有行高(line-height),撑起来了div的高度
- 行高为什么可以撑起div的高度?
- 这是因为line boxes的存在,并且line-boxes有一个特性,包裹每行的inline level
- 而其中的文字是有行高的,必须将整个行高包裹进去,才算包裹这个line-level
- 那么,进一步思考:
- 如果这个div中有图片,文字,inline-block,甚至他们设置了margin这些属性呢?
深入理解vertical-align – 不同情况分析
- 情况一:只有文字时,line boxes如何包裹内容?(注意:红色是包裹的div,下面也都一样)
-
情况二:有图片,有文字时,line-boxes如何包裹内容?
-
情况三:有图片,有文字,有inline-block(比图片要大)如何包裹内容?
-
情况四:有图片,有文字,有inline-block(比图片要大)而且设置了margin-bottom,如何包裹内容?
- 情况五:有图片、文字、inline-block(比图片要大)而且设置了margin-bottom并且有文字,如何包裹内容?
vertical-align的baseline
-
结论:line-boxes一定会想办法包裹住当前行中所有的内容。
-
但是,但是为什么对齐方式千奇百怪呢?
- 你认为的千奇百怪,其实有它的内在规律
- 答案就是baseline对齐
-
我们来看官方vertical-align的默认值:没错,就是baseline
-
但是baseline都是谁呢?
- 文本的baseline是字母x的下方
- Inline-block默认的baseline是margin-bottom的底部(没有,就是盒子的底部)
- Inline-block有文本时,baseline是最后一行文本的x的下方
-
一切都解释通了
vertical-align的其他值
-
现在,对于不同的取值就非常容易理解了
- baseline(默认值):基线对齐(你得先明白什么是基线)
- top:把行内级盒子的顶部跟line boxes顶部对齐
- middle:行内级盒子的中心点与父盒基线加上x-height一半的线对齐
- 并不是绝对居中,middle是相对于x高度的一半来对齐的但是相对于中线会偏差一点点
- bottom:把行内级盒子的底部跟line box底部对齐
- :把行内级盒子提升或者下降一段距离(距离相对于line-height计算\元素高度), 0%意味着同baseline一样
- :把行内级盒子提升或者下降一段距离,0cm意味着同baseline一样
-
解决图片下边缘的间隙方法:
- 方法一: 设置成top/middle/bottom
- 方法二: 将图片设置为block元素