css - 网格容器中 Chrome 和 Firefox 的溢出区别

标签 css google-chrome firefox css-grid

下面的代码在 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>

最佳答案

问题与百分比高度的使用有关:

div.userContent {
    border: 1px solid tomato;
    box-sizing: border-box;
    height: 100%; <---------------- problem
    overflow: auto;
}

传统上,在 CSS 中,元素上的百分比高度只有在父元素上存在定义的高度(作为引用点)时才有效。

Chrome 和 Safari 仍然遵守这个规则。他们需要在父项上定义高度,以便在子项上工作的百分比高度。

Firefox 和 Edge 不再支持。他们现在将计算的任何高度作为 child 高度百分比的有效引用。

这适用于跨浏览器:

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>

更详细的解释:

关于css - 网格容器中 Chrome 和 Firefox 的溢出区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53965326/

相关文章:

javascript - Firefox 上的输入类型编号 : click on spin button not fire focus event

google-chrome - Selenium Chrome 抑制/取消客户端证书选择对话框

google-chrome - 在 Chrome 开发控制台中仅显示错误

javascript - 系统自时间较长的 Chrome 性能分析

javascript - 平滑旋转javascript边缘浏览器问题

javascript - 如何在 Firefox page-mod 中进行重定向?

javascript - JW Player 6 插件在 Firefox 中不工作 - Drupal

javascript - 单击容器中的链接时滚动以附加默认位置

css - Bootstrap Nav 很奇怪

html - 如何在伪元素中使用 z-index