下面是HTML:
<div id="outer">
<div id="inner"></div>
Test
</div>
这是CSS:
#inner {
float: left;
height: 100%;
}
通过Chrome开发工具检查,内部div的高度为0px。
我怎么能强迫它是父div高度的100%呢?
下面是HTML:
<div id="outer">
<div id="inner"></div>
Test
</div>
这是CSS:
#inner {
float: left;
height: 100%;
}
通过Chrome开发工具检查,内部div的高度为0px。
我怎么能强迫它是父div高度的100%呢?
#outer height基于它的内容,#inner height基于它的内容,这两个元素都是绝对定位的。
更多细节可以在css height属性的规范中找到,但本质上,如果#outer的高度是自动的,#inner必须忽略#outer height,除非#outer是绝对定位的。那么#inner height将为0,除非#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>
然而……通过绝对定位#inner,浮动设置将被忽略,所以你需要明确地为#inner选择一个宽度,并在#outer中添加填充来伪造我怀疑你想要的文本包装。例如,下面,#outer的填充是#inner的宽度+3。方便的是(因为整个重点是让#inner高度为100%),没有必要在#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>
我删除了我之前的答案,因为它基于太多关于你的目标的错误假设。
实际上,只要父元素处于定位状态,您就可以将子元素的高度设置为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>
只要你不需要支持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类的每个元素占用其父元素的全部高度。
为了解决你的问题,我杀鸡儆猴。
你必须做一个包装,浮动它,然后定位你的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"> </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的最终位置将基于父容器计算。
如果您准备使用一点jQuery,答案很简单!
$(function() {
$('.parent').find('.child').css('height', $('.parent').innerHeight());
});
这可以很好地将单个元素浮动到父元素高度100%的一侧,而其他通常环绕的浮动元素则保持在一侧。
希望这对jQuery爱好者有所帮助。
对于父节点:
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%高度
这对我很有帮助。
#outer {
position:relative;
}
#inner {
position:absolute;
top:0;
left:0px;
right:0px;
height:100%;
}
改变右:和左:设置更可取的#内部宽度。
当你需要几个具有相同高度的子元素时,类似的情况可以用flexbox解决:
https://css-tricks.com/using-flexbox/
设置显示:伸缩;对于parent和flex: 1;对于子元素,它们都具有相同的高度。
这是等高网格系统的代码示例。
#outer{
width: 100%;
margin-top: 1rem;
display: flex;
height:auto;
}
上面是外部div的CSS
#inner{
width: 20%;
float: left;
border: 1px solid;
}
上面是内部div
希望这对你有所帮助