下面是HTML:

<div id="outer">
    <div id="inner"></div>
    Test
</div>

这是CSS:

#inner {
  float: left;
  height: 100%;
}

通过Chrome开发工具检查,内部div的高度为0px。

我怎么能强迫它是父div高度的100%呢?


当前回答

对于父节点:

display: flex;

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

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

编辑2: 正如@toddsby所指出的,align items是针对父元素的,它的默认值实际上是stretch。如果你想要不同的child值,有align-self属性。

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

其他回答

对于父节点:

display: flex;

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

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

编辑2: 正如@toddsby所指出的,align items是针对父元素的,它的默认值实际上是stretch。如果你想要不同的child值,有align-self属性。

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

下面是一种更简单的实现方法:

设置三个元素的容器(#outer) display: table 并设置元素本身(#inner) display: table-cell 移除浮子。 成功。

#outer{
    display: table;
}
#inner {
    display: table-cell;
    float: none;
}

感谢@Itay在浮动div, 100%高度

为了解决你的问题,我杀鸡儆猴。

你必须做一个包装,浮动它,然后定位你的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>

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;
}

说明:.right div是绝对定位的。这意味着它的宽度和高度,以及顶部和左侧的位置将基于第一个父div绝对或相对定位仅当宽度或高度属性显式声明在CSS中;如果没有显式声明,这些属性将基于父容器(.right-wrapper)进行计算。

因此,DIV的100%高度将基于.container的最终高度计算,而.right position的最终位置将基于父容器计算。

只要你不需要支持IE8之前的版本,你可以使用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>

CSS:

.inner {
    display: table-cell;
}

这将迫使具有.inner类的每个元素占用其父元素的全部高度。

这对我很有帮助。

#outer {
    position:relative;
}
#inner {
    position:absolute;
    top:0;
    left:0px;
    right:0px;
    height:100%;
}

改变右:和左:设置更可取的#内部宽度。