我试图在粉红色的中间得到蓝色的容器,但似乎垂直对齐:中间;在这种情况下是没用的。
<div style="display: block; position: absolute; left: 50px; top: 50px;">
<div style="text-align: left; position: absolute;height: 56px;vertical-align: middle;background-color: pink;">
<div style="background-color: lightblue;">test</div>
</div>
</div>
结果:
预期:
请建议我怎样才能做到这一点。
杰斯菲德尔
编辑:10/22现在,显示flex或网格被广泛实现,我建议使用其中一个(display:table/table-cell仍然可以工作,如果你需要与旧的或外来的浏览器兼容,比如我的电视…)
flex
。{
位置:绝对的;
左:50 px;
上图:50 px;
}
。b {
显示:flex;
对齐项目:中心;
背景颜色:粉色;
高度:56 px;
}
c {
background - color: lightblue;
}
/*移动flex演示*/
.a.b{左:100 px}
你甚至需要更少的加价
< div class = " " >
< div class = " b " >
< div class = " c " > < / div >测试
< / div >
< / div >
<div class="a b">
< div class = " c " > < / div >测试
< / div >
网格(与此相似)
。{
位置:绝对的;
左:50 px;
上图:50 px;
}
。b {
显示:网格;
对齐项目:中心;
背景颜色:粉色;
高度:56 px;
}
c {
background - color: lightblue;
}
/*移动网格演示*/
.a.b{左:100 px}
你甚至需要更少的加价
< div class = " " >
< div class = " b " >
< div class = " c " > < / div >测试
< / div >
< / div >
<div class="a b">
< div class = " c " > < / div >测试
< / div >
原始答案02/2015(仍然在任何地方都有效)用于非常老的或外来的浏览器,还没有实现flex或网格
你可以使用display:table/table-cell;
。{
位置:绝对的;
左:50 px;
上图:50 px;
显示:表;
}
。b {
text-align:左;
显示:表格单元;
高度:56 px;
vertical-align:中间;
背景颜色:粉色;
}
c {
background - color: lightblue;
}
< div class = " " >
< div class = " b " >
<div class="c" >test</div>
< / div >
< / div >
首先请注意,垂直对齐只适用于表格单元格和内联级元素。
有几种方法可以实现垂直对齐,可能满足也可能不满足您的需求。不过,我将向你展示我最喜欢的两个方法:
1. 使用transform和top
.valign {
位置:相对;
上图:50%;
变换:translateY (-50%);
/*由于简洁而省略了供应商前缀*/
}
< span style=" font - family:宋体;左:50 px;上图:50 px;" >
< span style=" font - family:宋体;位置:绝对,高度:56px,背景-颜色:粉色;" >
< span style=" font - family:宋体;"测试> < / div >
< / div >
< / div >
关键在于顶部的百分比值是相对于包含块的高度的;而转换的百分比值是相对于框本身(边界框)的大小。
如果你遇到字体渲染问题(模糊的字体),修复是添加透视(1px)转换声明,使它成为:
transform: perspective(1px) translateY(-50%);
值得注意的是,IE9+支持CSS转换。
2. 使用内联块(伪)元素
在这个方法中,我们有两个兄弟的内联块元素,它们通过vertical-align: middle声明在中间垂直对齐。
其中一个的高度是其父元素的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>
最后,我们应该使用一种可用的方法来删除内联级元素之间的间隙。