隐居以求其志,行义以达其道
css之baseline的确定
css之baseline的确定

css之baseline的确定

大家都知道vertical-align的默认取值是baseline,默认是元素放置在父元素的基线上。那么baseline到底在哪呢?

情况一:父元素里行内块元素没有文字

当父元素里有行内块元素时,baseline的取值就是在行内块元素的下边界

01.png

问题1 如果有多个行内块盒子怎么办?

答: 谁离父元素底部近听谁的,默认是谁的height比较大,baseline就在哪

02.png

问题2 如果移动行内块元素baseline会改变吗?

答: 如果使用margin-top移动了主行内块元素(也就是height最大的),那么会改变baseline位置

03.png
  • 如果使用margin-top移动其他行内块元素(也就是height不是最大的),如果移动距离小的话,还是会失效,这是为什么呢?因为就算蓝色盒子往下移动了30px,但是还是绿色盒子离父元素底部最近,所以baseline没有改变
04.png
  • 如果margin-top设置的足够大,那么就会把自己往下挤,自己就是离父元素底部最近的
055.png
  • 上移绿色主行内块,无论margin-top设置为-200px,还是-1000px都是无效,这是为什么?因为无论上移多少,最后还是要和蓝色盒子进行baseline对齐的,所以是没有效果的
09.png

问题3 只要移动了行内块元素就会起效吗?

  • position:relative移动不起效果,无论是给主行内块元素,还是其他行内块元素设置都无效, 因为posiotion:relative移动时,标准流中元素原位置还是保留的
07.png
  • position:absolute移动不起效果, 因为脱离标准流
011.png
  • transform不起效果,无论是给主行内块元素,还是其他行内块元素设置都无效,标准流中元素原位置也是保留的
08.png

情况二:父元素里行内块元素有文字

答:如果父元素里行内块元素有文字,那么这个行内块元素的baseline为最后一行文字的baseline

1.png

情况三:父元素里行内块元素嵌套行内块元素

答: 行内块元素嵌套行内块元素,那么baseline以最下面的行内块元素底部决定

066.png

如果移动嵌套的行内块元素会怎样? 答: 这时绿色盒子的baseline比蓝色盒子更接近父元素底部,所以父元素的baseline为绿色盒子的baseline 0100.png

情况四:父元素里没有行内块元素

  • 没有行内块时,baseline就比较简单了
10.png

如果文字大小不一怎么办 ? 答: 因为文字baseline更接近父元素底部,所以父元素的baseline文字baseline

099.png

结论:

  • 行内块元素行内元素默认与父元素baseline对齐
  • 行内块元素baseline为自己的底部
  • 文字的baseline就是名义上文字的baseline,没有改变
  • 谁更接近父元素底部,父元素的baseline就听谁的

注意:只能使用margin移动元素,使用transformposition移动元素,baseline不改变

作者:妹妹是娜娜莉
链接:https://juejin.cn/post/7084564059252588552
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。