父 div 没有扩展到孩子的高度

Posted

技术标签:

【中文标题】父 div 没有扩展到孩子的高度【英文标题】:Parent div not expanding to children's height 【发布时间】:2013-10-22 22:22:34 【问题描述】:

如您所见,我有一个 div (#innerPageWrapper) 环绕包含内容的 div。 #innerPageWrapper 在视觉上也充当布局中的半透明边框。

我的问题是#innerPageWrapper 不会扩展以适应里面的孩子,更不用说扩展以填充页面的其余部分了。

这是#innerPageWrapper的代码

#innerPageWrapper 
    width: 1100px;
    height: 100%;
    display: inline-block;
    padding: 0 50px 0 50px;
    background: rgba(0, 0, 0, 0.75) url(navShadow.png) repeat-x top;
    -webkit-border-top-left-radius: 20px;
    -webkit-border-top-right-radius: 20px;
    -moz-border-radius-topleft: 20px;
    -moz-border-radius-topright: 20px;
    border-top-left-radius: 20px;
    border-top-right-radius: 20px;

我尝试了很多事情(包括使用 calc() 计算 div 高度)都没有成功。我想避免使用 jQuery。

【问题讨论】:

【参考方案1】:

首先,您使用的是height:100%;在您的情况下是错误的。有关为什么不使用height:100% 的说明,请查看this 文章;

要了解原因,您需要了解浏览器如何解释 高度和宽度。 Web 浏览器计算总可用宽度为 浏览器窗口打开宽度的函数。如果你不设置 文档上的任何宽度值,浏览器将自动 使内容流动以填满窗口的整个宽度。

但是高度的计算方式不同。事实上,浏览器不会评估 除非内容太长以至于超出 视口(因此需要滚动条)或者如果网页设计师设置 页面上元素的绝对高度。否则,浏览器 只是让内容在视口的宽度内流动,直到 它到了尽头。高度根本不计算。问题 当您在父元素上设置百分比高度时发生 元素没有设置高度。换句话说,父元素 有一个默认高度:auto;。实际上,您是在询问浏览器 从未定义的值计算高度。因为那将等于 一个空值,结果是浏览器什么都不做。

其次,要让外层 div(在本例中为 #innerPageWrapper)包裹子元素,您应该在此包裹器上使用 overflow:hidden

要使此功能成功运行,您的子元素必须#contentMain#contentSidebar 那样为 position:absolute,而不是制作这些 floatsfloat:leftfloat:right)并在 #contentSidebar div 关闭后,添加一个<div style="clear:both"></div> 清除浮动,让父级完美环绕它们。

我已将所需的 CSS 放在 thisPastebin 中,请注意,您必须使用我上面提到的 div 清除浮动。

【讨论】:

有效!谢谢。那篇文章也很好读。考虑到这些准则,我将从头开始重写我的代码。谢谢 包装器上的 overflow:hidden 在我的情况下起到了作用。对于像我这样想知道为什么的人,这里有一个关于这个主题的讨论:***.com/q/19972790/3136474 确保孩子没有得到 position:absolute 检查是否有line-height 指令,它也可以强制执行高度。【参考方案2】:

尝试将父元素的宽度和高度设置为自动。 简化示例:

http://jsfiddle.net/kimgysen/8nWDE/

#innerPageWrapper 
    width:auto;
    height:auto;
    background:red;


#innerPageWrapper p
    width: 100px;
    height: auto;
    margin: 10px auto;
    background: yellow;

编辑:

查看这个小提琴以获得更高级的示例,包括水平和垂直中心:http://jsfiddle.net/kimgysen/8nWDE/1/

父元素会动态适应子元素的边界。 您还可以在子元素上设置动态宽度和高度。

.outerDiv
    display: table-cell;
    background-color: yellow;
    width: auto; 
    height: auto;
    vertical-align: middle;
    text-align: center;


.innerDiv
    display: inline-block;
    background-color: red; 
    width: 100px;
    height: 100px;
    margin: 20px;

【讨论】:

在最佳答案中的所有其他数百万个修复程序中,这对我有用。只需将父母的身高设置为自动!

以上是关于父 div 没有扩展到孩子的高度的主要内容,如果未能解决你的问题,请参考以下文章

防止绝对孩子扩展父母

孩子比父母大,最大高度。溢出没有影响

HTML/CSS:将浮动左元素扩展到父元素的剩余宽度

父 div 的高度为零,即使它有有限高度的孩子

将相对div拉伸到其静态父级的高度

如何扩展 iFrame/将内容从 iFrame 移动到 div? [复制]