首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使div在绝对定位的父div内部垂直居中

如何使div在绝对定位的父div内部垂直居中
EN

Stack Overflow用户
提问于 2015-02-11 21:03:26
回答 8查看 252.1K关注 0票数 187

我试图在粉色的中间得到蓝色的容器,但是在这种情况下vertical-align: middle;似乎不能完成这项工作。

代码语言:javascript
复制
<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>

结果:

期望值:

请建议我如何实现这一点。

Jsfiddle

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2015-02-11 22:24:23

首先请注意,vertical-align只适用于表格单元格和内联级别的元素。

有几种方法可以实现垂直对齐,这些方法可能满足您的需求,也可能不满足您的需求。不过,我将向您展示我最喜欢的two methods

1.使用transformtop

代码语言:javascript
复制
.valign {
    position: relative;
    top: 50%;
    transform: translateY(-50%);
    /* vendor prefixes omitted due to brevity */
}
代码语言:javascript
复制
<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>

关键点是,top上的百分比值是相对于包含块的height的;而transforms上的百分比值是相对于框本身(边界框)的大小。

如果您遇到font rendering issues (模糊字体),修复方法是将perspective(1px)添加到transform声明中,这样它就变成了:

代码语言:javascript
复制
transform: perspective(1px) translateY(-50%);

值得注意的是,CSS transform is supported in IE9+

2.使用inline-block (伪)元素

在这个方法中,我们有两个兄弟inline-block元素,它们通过vertical-align: middle声明在中间垂直对齐。

其中一个元素的height为其父元素的100%,另一个元素是我们想要将其居中对齐的元素。

代码语言:javascript
复制
.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;
}
代码语言:javascript
复制
<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>

最后,我们应该使用其中的一个available methods to remove the gap between inline-level elements

票数 427
EN

Stack Overflow用户

发布于 2016-11-25 18:54:00

使用以下命令:

代码语言:javascript
复制
.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/

票数 85
EN

Stack Overflow用户

发布于 2016-06-06 05:55:00

在随意定位的div中使用flex blox将其内容居中。

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

代码语言:javascript
复制
.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;
}
票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28455100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档