V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Can I use?
http://caniuse.com/
Less
http://lesscss.org
Cool Libraries
Bootstrap from Twitter
Jetstrap
he2020
V2EX  ›  CSS

如何解释 vertical-align 的这个现象?

  •  
  •   he2020 · 352 天前 · 903 次点击
    这是一个创建于 352 天前的主题,其中的信息可能已经有所发展或是发生改变。
    运行地址: https://jsbin.com/mipexucegi/edit?html,css,output
    

    vertical-align.jpg

    3 条回复    2023-05-19 21:01:32 +08:00
    jasonyang9
        1
    jasonyang9  
       351 天前   ❤️ 1
    还没仔细分析但请参考: https://news.ycombinator.com/item?id=35361628

    另外很多人建议用 Flexbox 实现这类布局
    tt2020
        2
    tt2020  
       348 天前   ❤️ 1
    题主对 vertical-align 理解的不到位.

    vertical-align 是定义元素相对于父元素来对齐的. 比如: 例子里,可以加 font-size: 4em; 看看效果

    见文档: https://developer.mozilla.org/zh-CN/docs/Web/CSS/vertical-align
    chnwillliu
        3
    chnwillliu  
       345 天前 via Android   ❤️ 1
    vertical-align 定义的是行级元素即 display inline 或 inline-box ,inline-flex 等,在行盒内垂直方向如何对齐。行盒高度由 line-height 决定,想象成英语作业本的四线三格,vertical-align 不同取值就是指定行盒内的行内盒子怎么和该行的四线三格对齐。

    inline 元素创建出来的行内盒子比较简单,想象它自己也创建了个四线三格,默认 baseline 对齐行盒的 baseline 。上下标对齐就是行内盒的基线对齐行盒四线中的其他位置。你也就能理解 css 怎么做到一行内不同大小字体文字怎么实现的混排了。

    对于 inline-block 元素就麻烦了,因为 inline-block 内部可以包括无限的其他元素,可以有各种行啊块啊,它作为一个行内盒子和行盒的四线三格怎么个对齐法呢?但 inline-block 内部总归是一堆块啊行啊的吧。spec 规定 inline-block 元素的 baseline 定义为内部常规流中的最后一个行盒的 baseline ,absolute 和 float 不在该列。如果 inline-block 内部没有行盒,那么 baseline 就是 margin 盒子的底边。

    好了现在就可以分析你的 test1 了。test1 创建了一个行盒,line-height 从 body 继承。icon1 默认 baseline 对齐 test1 创建的行盒的 baseline ,也就是 40px 的底部,span1 创建的盒子要把中线对齐行盒的四线三格的中间,也就是基线往上一半格。行盒必须包含住行内所有盒子的高度,所以行的四线三格外会因为内部参差不齐导致实际高度比 line-height 高,test1 只有这一个行盒因此高度就是 test1 内容盒子的高度。你可以根据浏览器默认 body 上的 font-size 和 line-height 进而算出 test1 有多高,看看跟实际渲染的高度是否一致。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1827 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 16:29 · PVG 00:29 · LAX 09:29 · JFK 12:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.