【问题标题】:Vertical Auto Margin within a Divdiv 内的垂直自动边距
【发布时间】:2013-09-30 03:10:52
【问题描述】:

我现在正在尝试另一个奇怪且不起作用的东西:vertical 孩子div 的自动对齐。

我希望contentpanel 中垂直居中,因为panel 有一个适合窗口大小的height,所以严格对齐对我来说非常重要。

好的,这是我的代码:JSFiddle

HTML

<div id="panel">
    <div id="content">
    </div>
</div>

CSS

html, body
{
    height: 100%;
    background-color: #273034;
    margin: 0;
}

#panel
{
    height: 100%;
    width: 380px;
    margin: auto;
    background-color: rgba(255,255,255,0.3);
}

#content
{
    height: 100px;
    width: auto;
    background-color: rgba(117,169,56,0.9);
}

为什么这么简单的事情行不通?

希望有人可以帮助我,我已经尝试了以下解决方案:margin : auto not working vertically? 但实际上并没有成功

【问题讨论】:

  • 啊,是的。众多变幻莫测的 HTML/CSS 之一。水平很容易,垂直很成问题。这是一个非常好的讨论 - phrogz.net/css/vertical-align
  • 请参阅stackoverflow.com/editing-help 获取有关格式化帖子的帮助。此外,您不是在写电子邮件或信函,因此不需要称呼或签名。
  • 如果您解决了问题,请将您的解决方案添加为答案,以便其他人也可以从中受益。
  • 实际上帮助我的是这个讨论:phrogz.net/css/vertical-align/<br> 感谢 TimSPQR!
  • 如果您需要垂直和水平居中,您可能还想看看Absolute Centering 技术。

标签: html css


【解决方案1】:

这是一个简单的垂直对齐解决方案,使用纯 CSS 而不修复任何上边距、上边距。所以它完全响应。

看到这个Working Fiddle

HTML:(相同)

<div id="panel">
    <div id="content">
    </div>
</div>

CSS:

html, body
{
    height: 100%;
    background-color: #273034;
    margin: 0;
}

#panel
{
    height: 100%;
    width: 380px;
    margin: 0 auto;
    background-color: rgba(255,255,255,0.3);
}

/*this is new*/
#panel:before
{
    content: '';
    height: 100%;
    margin-left: -5px;
    vertical-align: middle;
    display: inline-block;
}

#content
{
    vertical-align: middle;     /*this is new*/
    display: inline-block;    /*this is new*/
    height: 100px;
    width: 100%;    /*this is new*/
    background-color: rgba(117,169,56,0.9);
}

【讨论】:

  • 非常好的一个!我承认我从未听说过 ":before" 和 "content: ''" 属性和值,但是非常酷的解决方案。实际上,您正在将元素从块转换为内联,然后使用 'vertical-align: middle' 将其居中?
  • 它有点复杂。我创建了一个空的内联元素,它占用容器的 100% 高度,并将其垂直对齐设置为中间,然后将您的 div 设为 inline-block 并将其垂直对齐设置为中间。使他准确地居中在 100% 高度的中间。