<div class="bordered" style="height: 300px; text-align: center">
<div class="bordered inline-blocked" style="height: 100px; vertical-align: middle">XXX</div>
<div class="bordered inline-blocked" style="height: 200px; vertical-align: middle">YYY</div>
</div>
Divs XXX 和 YYY 相对于彼此垂直居中,即它们在水平线上是一个,但相对于容器不垂直居中。这就是我想要的。
现在的问题:
如果我更改两个垂直对齐属性之一,就会发生奇怪的事情。
- 我删除了 XXX 垂直对齐属性。结果: XXX 向下移动并与空对齐。YYY 保持不变。
- 我将 YYY 垂直对齐属性设置为“顶部”。YYY 保持原位,XXX 与 YYY 的顶部对齐,尽管它自己的值仍然是“中间”。
- 我将 YYY 垂直对齐属性设置为“底部”。YYY 保持原位,XXX 与 YYY 的底部对齐,尽管它自己的值仍然是“中间”。
我一直认为,当一行中有多个内联元素时,它们会形成一行内联框,并且所有垂直对齐值都相对于该框应用,即内联框由 va 属性垂直定位,而不是在其父级内,但在父级内的行内框内,即在其兄弟姐妹的行内。
因此,如果我将 XXX 属性设置为“中间”,将 YYY 设置为“底部”,那么它应该与它们都设置为中间的情况完全相同,因为假想的内联框的大小和位置没有改变。但事实上,如果它们都没有垂直对齐到中间,我无法垂直居中这些框。
那么你能解释一下这个简单的例子中发生了什么吗?
我无法得到的另一件事是此示例中的定位如何受 line-height 属性的影响。
回答:
不幸的是,vertical-align: middle 不会将内联元素与行中最大元素的中间对齐(如您所料)。相反,中间值将导致元素与假设的小写“x”(也称为“x-height”)的中间对齐。所以,在我看来,这个值实际上应该被称为“text-middle”以正确识别它的作用。块引用
来自http://www.impressivewebs.com/css-vertical-align/,感谢prash和brains911。
建议:
如果弄乱了垂直对齐,请在容器中添加一些文本-它将显示用于对齐的基线。