首先请注意,这vertical-align
仅适用于表单元格和内联级元素。
有两种方法可以实现垂直对齐,这可能会或可能不会满足您的需求。但是,我将从我的收藏夹中向您展示两种 方法:
1.使用transform
和top
.valign {
position: relative;
top: 50%;
transform: translateY(-50%);
/* vendor prefixes omitted due to brevity */
}
<div style="position: absolute; left: 50px; top: 50px;">
<div style="text-align: left; position: absolute;height: 56px;background-color: pink;">
<div class="valign" style="background-color: lightblue;">test</div>
</div>
</div>
关键是百分比值on top
相对于height
包含块的百分比;而transform
s 上的百分比值是相对于框本身(边界框)的大小而言的。
如果遇到字体渲染问题(模糊字体),则解决方法是将其添加perspective(1px)
到transform
声明中,使其变为:
transform: perspective(1px) translateY(-50%);
值得注意的transform
是IE9 +支持 CSS 。
2.使用inline-block
(伪)元素
在此方法中,我们有两个同级inline-block
元素,它们通过vertical-align: middle
声明在中间垂直对齐。
其中一个具有其父级的a height
,100%
另一个是我们想要的元素,我们希望将其在中间对齐。
.parent {
text-align: left;
position: absolute;
height: 56px;
background-color: pink;
white-space: nowrap;
font-size: 0; /* remove the gap between inline level elements */
}
.dummy-child { height: 100%; }
.valign {
font-size: 16px; /* re-set the font-size */
}
.dummy-child, .valign {
display: inline-block;
vertical-align: middle;
}
<div style="position: absolute; left: 50px; top: 50px;">
<div class="parent">
<div class="dummy-child"></div>
<div class="valign" style="background-color: lightblue;">test</div>
</div>
</div>
最后,我们应该使用一种可用的方法来消除内联级元素之间的差距。
position: absolute
各处使用它是有原因的?