我有一个奇怪的问题,绝对定位的元素设置为100%高度。在Firefox中,元素的高度变为其父级(具有position:relative
)的高度,而在Chrome中,元素的高度向下延伸超过其父级。
.outer
{
display:table;
height:150px;
width:100%;
position:relative;
background:gray;
}
.left, .right
{
position:absolute;
top:0;
height:100%;
background:yellow;
}
.item
{
display:inline-block;
}
.left
{
left:0;
}
.right
{
right:0;
}
.helper
{
display:inline-block;
height:100%;
vertical-align:middle;
}
.row
{
position:relative;
display:table-row;
background:orange;
height:100%;
}
<div class="outer">
<div class="row">
<div class="left">
<div class="helper"></div>
<div class="item">L</div>
</div>
<div class="right">
<div class="helper"></div>
<div class="item">R</div>
</div>
</div>
<div>
<p>Text in here</p>
</div>
</div>
在Firefox中,黄色L和R div与橙色相同。在Chrome中,它们向下延伸并与灰色背景div重叠。
编辑:刚刚在IE和Edge中测试过,它们与Chrome有相同的行为。
答案 0 :(得分:2)
问题是Chrome正在计算row
元素的样式为position:static
。 row
元素的父元素(outer
元素)设置为position:relative
但是这允许绝对定位的元素left
和right
来取其高度的100%,因为它是第一个定位的父元素。
在我的测试中,此问题似乎是由display:table-row
元素上的row
引起的,导致Chrome将position
属性计算为static
{{1}}。显然,the spec会将此行为留给浏览器,以确定您为什么会遇到不同的行为。
&#39;位置的影响:相对&#39;在表行组, table-header-group,table-footer-group,table-row,table-column-group, table-column,table-cell和table-caption元素未定义。