下面的代码在Chrome(版本71.0.3578.98(正式版本)(64位))和Firefox(64.0(64位))中具有不同的行为。从本质上讲,红色框非常适合Firefox,但在Chrome中,红色框超出了父级。我想知道这是Chrome中的错误还是我做错了什么。
https://jsbin.com/qecolug/3/edit?html,output
div {
box-sizing: border-box;
border: 1px solid gray;
}
div.outer {
display: grid;
grid-template-rows: 36px 1fr;
height: 100px;
}
div.header {
grid-row: 1/2;
}
div.content {
grid-row: 2/3;
overflow: hidden;
}
div.userContent {
border: 1px solid tomato;
box-sizing: border-box;
height: 100%;
overflow: auto;
}
<div class="outer">
<div class="header">Header</div>
<div class="content">
<div class="userContent">
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Eveniet praesentium aperiam quo sapiente obcaecati. Tenetur, eveniet sit explicabo dolore numquam impedit nesciunt qui magnam nisi maiores voluptate officiis, excepturi praesentium!</p>
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Quidem natus hic minus obcaecati? Quidem id repellat vitae! Cupiditate, expedita laborum officia culpa nostrum corrupti incidunt ullam consequatur quidem impedit illum.</p>
<p>Lorem ipsum dolor, sit amet consectetur adipisicing elit. Non nihil rerum nobis, corrupti quae quisquam saepe. Rem eum exercitationem error provident, ipsum voluptatum aperiam inventore, numquam, quo tenetur ad ea!</p>
</div>
</div>
</div>
答案 0 :(得分:1)
问题与百分比高度的使用有关:
div.userContent {
border: 1px solid tomato;
box-sizing: border-box;
height: 100%; <---------------- problem
overflow: auto;
}
传统上,在CSS中,只有当父级上存在定义的高度(作为参考点)时,元素上的百分比高度才能起作用。
Chrome和Safari仍然遵守此规则。他们需要在父级上按定义的高度,以百分比方式对子级进行工作。
Firefox和Edge不再可用。现在,他们将计算出的高度作为孩子上身高百分比的有效参考。
这适用于所有浏览器:
div.outer {
display: grid;
grid-template-rows: 36px 1fr;
height: 100px;
}
div.content {
grid-row: 2/3;
overflow: hidden;
height: calc(100px - 36px); /* the missing link between .outer and .userContent */
}
div.userContent {
border: 1px solid tomato;
box-sizing: border-box;
height: 100%;
overflow: auto;
}
div.header {
grid-row: 1/2;
}
div {
box-sizing: border-box;
border: 1px solid gray;
}
<div class="outer">
<div class="header">Header</div>
<div class="content">
<div class="userContent">
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Eveniet praesentium aperiam quo sapiente obcaecati. Tenetur, eveniet sit explicabo dolore numquam impedit nesciunt qui magnam nisi maiores voluptate officiis, excepturi praesentium!</p>
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Quidem natus hic minus obcaecati? Quidem id repellat vitae! Cupiditate, expedita laborum officia culpa nostrum corrupti incidunt ullam consequatur quidem impedit illum.</p>
<p>Lorem ipsum dolor, sit amet consectetur adipisicing elit. Non nihil rerum nobis, corrupti quae quisquam saepe. Rem eum exercitationem error provident, ipsum voluptatum aperiam inventore, numquam, quo tenetur ad ea!</p>
</div>
</div>
</div>
更详细的解释:
答案 1 :(得分:0)
尽管我不知道为什么,但可以通过在顶部添加以下行来解决问题:<!DOCTYPE html>
https://jsbin.com/qecolug/4/edit?html,output