如何使浮动div的父级100%高度?

Nat*_*man 251 html css height

这是HTML:

<div id="outer">
    <div id="inner"></div>
    Test
</div>
Run Code Online (Sandbox Code Playgroud)

这是CSS:

#inner {
  float: left;
  height: 100%;
}
Run Code Online (Sandbox Code Playgroud)

在使用Chrome开发人员工具进行检查后,内部div的高度为0px.

如何强制它为父div的高度的100%?

Cha*_*ick 125

对于#outer基于其内容#inner的高度,并且基于其高度,使两个元素绝对定位.

更多细节可以在css height属性的规范中找到,但基本上,如果高度为,则#inner必须忽略#outer高度,除非绝对定位.然后高度将为0,除非它本身绝对定位.#outerauto #outer#inner #inner

<style>
    #outer {
        position:absolute; 
        height:auto; width:200px; 
        border: 1px solid red; 
    }
    #inner {
        position:absolute; 
        height:100%; 
        width:20px; 
        border: 1px solid black; 
    }
</style>

<div id='outer'>
    <div id='inner'>
    </div>
    text
</div>
Run Code Online (Sandbox Code Playgroud)

但是......通过#inner绝对定位,float设置将被忽略,因此您需要#inner明确选择宽度,并添加填充#outer以伪造我怀疑您想要的文本包装.例如,下面的填充#outer宽度为#inner+3.方便地(因为整个点是要达到#inner100%的高度),不需要在下面包装文本#inner,所以这看起来就像#inner是浮动的.

<style>
    #outer2{
        padding-left: 23px;
        position:absolute; 
        height:auto; 
        width:200px; 
        border: 1px solid red; 
    }
    #inner2{
        left:0;
        position:absolute; 
        height:100%; 
        width:20px; 
        border: 1px solid black; 
   }
</style>

<div id='outer2'>
    <div id='inner2'>
    </div>
    text
</div>
Run Code Online (Sandbox Code Playgroud)

我删除了之前的答案,因为它基于对您的目标的错误假设.

  • 嗯..这个问题是关于Floated div的.你回答了绝对的位置div (111认同)
  • 我永远不会惊讶于在HTML/CSS中实现疯狂简单的事情是多么复杂:) (53认同)
  • 我不知道为什么这个被接受和赞成如此之多.问题是关于浮动的div,这是我从搜索中带来的东西,而是回答绝对定位的div. (21认同)
  • 没有硬编码宽度的任何方法吗?对响应式容器不太好. (15认同)
  • 如何使浮动容器垂直装入容器?不要让它漂浮了!哈哈.实际上,很好的尝试,并且足够接近被认为是有用的. (2认同)
  • 这个答案是如此深奥,看看其他答案!"像对待桌子一样对待它"或"使用flex".这些是高质量的答案,它们相当于使用专为OP要完成的任务而设计的工具.绝对定位容易出错并且过度杀伤. (2认同)

Aip*_*hee 120

对于父母:

display: flex;
Run Code Online (Sandbox Code Playgroud)

你应该添加一些前缀http://css-tricks.com/using-flexbox/

编辑:唯一的缺点是IE像往常一样,IE9不支持flex. http://caniuse.com/flexbox

编辑2:正如@toddsby所说,对齐项目是父项,其默认值实际上是拉伸.如果你想为孩子提供不同的价值,那就是align-self属性.

编辑3:jsFiddle:https://jsfiddle.net/bv71tms5/2/

  • 我很惊讶这个解决方案没有得到更多关注,因为原始问题要求子div浮动并且所有位置:绝对解决方案在大多数使用float的情况下真正投入扳手.这个解决方案提供了一个很好的解决方案,其中position:absolute的副作用不是问题,如果你愿意进一步挖掘,可以获得一些非常好的跨浏览器兼容性. (9认同)
  • 您应该指出,这仅适用于现代浏览器,甚至需要供应商前缀. (3认同)
  • 唯一有效的解决方案,谢谢. (2认同)
  • 根据Flexbox的最新规范:请参阅https://www.w3.org/TR/css-flexbox-1/#align-items-property.`align-items:stretch;`不是必需的,因为它是默认值.它也应该在父母而不是孩子身上定义. (2认同)

Nat*_*erg 76

实际上,只要定位了父元素,就可以将子元素的高度设置为100%.即,如果您不希望父母绝对定位.让我进一步解释一下:

<style>
    #outer2 {
        padding-left: 23px;
        position: relative; 
        height:auto; 
        width:200px; 
        border: 1px solid red; 
    }
    #inner2 {
        left:0;
        position:absolute; 
        height:100%; 
        width:20px; 
        border: 1px solid black; 
    }
</style>

<div id='outer2'>
    <div id='inner2'>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

  • 很酷,这比Chadwick对`position:absolute`的要求(这可能会干扰网站的风格)的限制要小 (13认同)
  • 它可能只是我,但如果侧边栏大于内容我会遇到问题.背景颜色将在父容器处停止,但侧边栏内容将在父级外部溢出. (3认同)

Nat*_*man 24

只要您不需要支持早于IE8的Internet Explorer版本,您就可以使用它display: table-cell来完成此任务:

HTML:

<div class="outer">
    <div class="inner">
        <p>Menu or Whatever</p>
    </div>
    <div class="inner">
        <p>Page contents...</p>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

CSS:

.inner {
    display: table-cell;
}
Run Code Online (Sandbox Code Playgroud)

这将强制每个元素与.inner类占据其父元素的完整高度.

  • 我在这里错过了什么吗?您的问题要求浮动元素的高度为100%.浮动时,`display:table-cell;`元素不再填充其容器的高度?我一定错过了什么,因为这是你自己的问题......? (12认同)

Man*_*zul 16

了一个例子来解决你的问题.

你必须做一个包装,漂浮它,然后绝对你的div,并给它100%的高度.

HTML

<div class="container">
    <div class="left">"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." </div>
  <div class="right-wrapper">
    <div class="right">"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua." </div>
  </div>
  <div class="clear">&nbsp;</div>
</div>
Run Code Online (Sandbox Code Playgroud)

CSS:

.container {
    width: 100%;
    position:relative;
}
.left {
    width: 50%;
    background-color: rgba(0, 0, 255, 0.6);
    float: left;
}
.right-wrapper {
    width: 48%;
    float: left;
}
.right {
    height: 100%;
    position: absolute;
}
Run Code Online (Sandbox Code Playgroud)

说明: .right div是绝对定位的.这意味着它的宽度和高度,以及顶部和左侧位置将基于第一个父div绝对或相对定位来计算,如果在CSS中显式声明了width或height属性; 如果它们不是声明的,那么将根据父容器(.right-wrapper)计算这些属性.

因此,DIV的100%高度将根据.container最终高度计算,并且.right位置的最终位置将根据父容器计算.


leo*_*zon 15

这是实现这一目标的更简单方法:

  1. 设置三个元素的容器(#outer)display:table
  2. 并设置元素本身(#inner)display:table-cell
  3. 删除浮动.
  4. 成功.
#outer{
    display: table;
}
#inner {
    display: table-cell;
    float: none;
}
Run Code Online (Sandbox Code Playgroud)

感谢@Itay in Floated div,100%身高


小智 8

如果你准备使用一个小jQuery,答案很简单!

$(function() {
    $('.parent').find('.child').css('height', $('.parent').innerHeight());
});
Run Code Online (Sandbox Code Playgroud)

这适用于将单个元素浮动到具有100%高度的父级的一侧,而通常环绕的其他浮动元素保持在一侧.

希望这有助于jQuery的粉丝们.

  • 在这个布局问题上抛出javascript似乎有点过分了. (17认同)
  • 作为必须在 IE 中开发的人:谢谢! (2认同)
  • 也许有点矫枉过正,但这是一个漂亮的答案,谢谢! (2认同)
  • 我同意所有定位问题都应该在没有 JS 的情况下解决。 (2认同)
  • 使用 JS **AND** jQuery 是矫枉过正 (2认同)
  • 在这种状态下,它没有响应。如果父元素调整大小,则子元素保持不变。 (2认同)