html - 将一个 div 在另一个 div 中垂直居中

标签 html css

<分区>

我想将一个位于另一个 div 内的 div 居中。

<div id="outerDiv">
    <div id="innerDiv">
    </div>
</div>

这是我目前正在使用的 CSS。

    #outerDiv {
        width: 500px;
        height: 500px;
        position: relative;
    }
    
    #innerDiv {
        width: 284px;
        height: 290px;
        position: absolute;
        top: 50%;
        left: 50%;
        margin-top: -147px;
        margin-left: -144px;
    }

如您所见,我现在使用的方法取决于#innerDiv 的宽度和高度。如果宽度/高度发生变化,我将不得不修改 margin-topmargin-left 值。是否有任何通用解决方案可用于使 #innerDiv 居中而不依赖其大小?

我发现使用 margin: auto 可以将 #innerDiv 水平对齐到中间。但是垂直对齐呢?

最佳答案

tl;dr

垂直居中对齐可行,但您必须在父元素上使用 table-cell 并在子元素上使用 inline-block

此解决方案不适用于 IE6 和 7。
您的方法是更安全的方法。
但由于您使用 CSS3 和 HTML5 标记了您的问题,我认为您不介意使用现代解决方案。

经典方案(表格布局)

这是我原来的回答。它仍然可以正常工作,并且是获得最广泛支持的解决方案。表格布局将 impact your rendering performance所以我建议您使用一种更现代的解决方案。

Here is an example


测试于:

  • FF3.5+
  • FF4+
  • Safari 5+
  • Chrome 11+
  • IE9+

HTML

<div class="cn"><div class="inner">your content</div></div>

CSS

.cn {
  display: table-cell;
  width: 500px;
  height: 500px;
  vertical-align: middle;
  text-align: center;
}

.inner {
  display: inline-block;
  width: 200px; height: 200px;
}

现代解决方案(转换)

因为变换是 fairly well supported now有一种更简单的方法。

CSS

.cn {
  position: relative;
  width: 500px;
  height: 500px;
}

.inner {
  position: absolute;
  top: 50%; left: 50%;
  transform: translate(-50%,-50%);
  width: 200px;
  height: 200px;
}

Demo


♥ 我最喜欢的现代解决方案 (flexbox)

我开始越来越多地使用flexbox its also well supported now这是迄今为止最简单的方法。

CSS

.cn {
  display: flex;
  justify-content: center;
  align-items: center; 
}

Demo

更多示例和可能性: Compare all the methods on one pages

关于html - 将一个 div 在另一个 div 中垂直居中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40960426/

上一篇:html - 添加悬停效果时响应列不起作用

下一篇:javascript - 根据附加到图像的计时器更改的 URL

相关文章:

html - 使用 BeautifulSoup 将以 HTML 编码的 JSON 转换为 JSON

javascript - 将标签放在 div 标签内

javascript - 有没有办法防止位于 <head> 中的第三方 JS 代码在不可用的情况下关闭网站?

css - 图像右侧的透明箭头

jquery - 将网站转换为移动网站

html - 放大和缩小时如何使 wrapper 保持居中?

html - Chrome 和 Firefox 之间的水平高度不同

php - MySQL/PHP/JS 动态填充下拉菜单

html - 标签式导航

html - 来自按钮的神秘填充