我试图在粉红色的中间得到蓝色的容器,但似乎垂直对齐:中间;在这种情况下是没用的。

<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>

最后,我们应该使用一种可用的方法来删除内联级元素之间的间隙。


使用flex blox在你的绝对定位div居中它的内容。

参见示例https://plnkr.co/edit/wJIX2NpbNhO34X68ZyoY?p=preview

.some-absolute-div {    
  display: -webkit-box;
  display: -webkit-flex;
  display: -moz-box;
  display: -moz-flex;
  display: -ms-flexbox;
  display: flex;

  -webkit-box-pack: center;
  -ms-flex-pack: center;
  -webkit-justify-content: center;
  -moz-justify-content: center;
  justify-content: center;

  -webkit-box-align: center;
  -ms-flex-align: center;
  -webkit-align-items: center;
  -moz-align-items: center;
  align-items: center;
}

用这个:

.Absolute-Center {
    margin: auto;
    position: absolute;
    top: 0; left: 0; bottom: 0; right: 0;
}

参考这个链接:https://www.smashingmagazine.com/2013/08/absolute-horizontal-vertical-centering-css/


下面是使用Top对象的简单方法。

如果元素的绝对大小是60px。

.absolute-element { 
    position:absolute; 
    height:60px; 
    top: calc(50% - 60px);
}

垂直和水平居中:

.parent{
  height: 100%;
  position: absolute;
  width: 100%;
  top: 0;
  left: 0;
}
.c{
  position: absolute;
  top: 50%;
  left: 0;
  right: 0;
  transform: translateY(-50%);
}

另外一个简单的解决方案

HTML:

<div id="d1">
    <div id="d2">
        Text
    </div>
</div>

CSS:

#d1{
    position:absolute;
    top:100px;left:100px;
}

#d2{
    border:1px solid black;
    height:50px; width:50px;
    display:table-cell;
    vertical-align:middle;
    text-align:center;  
}

你可以使用display:table;在父div和display: table-cell;vertical-align:中间;在子div中

< div风格= "显示:表;" > < span style=" font - family:宋体;高度:56 px;背景颜色:粉色;显示:表格单元;vertical-align:中间;" > < span style=" font - family:宋体;“>测试< / div > < / div > < / div >


仅适用于垂直中心

< span style=" font - family:宋体;位置:相对,高度:56px,背景-颜色:粉色;" > < span style=" font - family:宋体;变换:translateY (-50%);“>测试< / div > < / div >

我总是这样做,这是一个非常简短和容易的代码,水平和垂直居中

.center { 位置:绝对的; 上图:50%; 左:50%; 转换:翻译(-50%,-50%); } <div class="center">Hello居中世界!< / div >