CSS 网格 : content to use free space but scroll when bigger

标签 css styling grid-layout css-grid

我一直在使用 CSS Grid Layouts第一次,他们很棒。但是,现在我无法控制其中一个网格单元。

我想要的是有一个元素占用现有的可用空间并且不再,当内容变得太大时滚动。我的理解是,在计算完所有其他内容后,1fr 的网格大小会占用统一数量的可用空间。我尝试了各种尺寸,例如 minmax(auto, 1fr) 但无济于事 - 1fr 似乎会扩展以适应我不想要的内容。设置像 100px 这样的最大尺寸也不好,因为我希望尺寸由网格中的其他元素决定。

例子如下:

.container {
  display: grid;
  grid-template-rows: auto 1fr auto;
  grid-template-columns: 1fr 1fr;
}

.container>div {
  border: 1px solid blue;
  border-radius: 5px;
}

.left {
  grid-column: 1;
  grid-row: 1/4;
}

.header {
  grid-column: 2;
  grid-row: 1;
}

.problem-child {
  grid-column: 2;
  grid-row: 2;
  overflow-y: scroll;
}

.footer {
  grid-column: 2;
  grid-row: 3;
}
<div class="container">
  <div class="left">left<br>I don't want this one to scroll<br>this should<br>determine<br>the height of the whole grid container</div>
  <div class="header">column header</div>
  <div class="problem-child">problem child:<br>I<br>want<br>this<br>to<br>scroll<br>rather<br>than<br>making<br>everything<br>tall</div>
  <div class="footer">column footer</div>
</div>

我可以使用什么网格声明(如果有的话)让“有问题的 child ”在溢出时滚动而不是展开?

最佳答案

您可以使用 max-height:100%;min-height 来保留足够的高度以显示正确的滚动条。(firefox会做,chrome 目前不会)

.container {
  display: grid;
  grid-template-rows: auto minmax(1fr, 25vh) auto;
  grid-template-columns: 1fr 1fr;
}

.container>div {
  border: 1px solid blue;
  border-radius: 5px;
}

.left {
  grid-column: 1;
  grid-row: 1/4;
}

.header {
  grid-column: 2;
  grid-row: 1;
}

.problem-child {
  grid-column: 2;
  grid-row: 2;
  min-height:4em;
  max-height:100%;
  overflow-y: auto;
}

.footer {
  grid-column: 2;
  grid-row: 3;
}
<div class="container">
  <div class="left">left<br>I don't want this one to scroll<br>this should<br>determine<br>the height of the whole grid container</div>
  <div class="header">column header</div>
  <div class="problem-child">problem child:<br>I<br>want<br>this<br>to<br>scroll<br>rather<br>than<br>making<br>everything<br>tall</div>
  <div class="footer">column footer</div>
</div>


作为解决方法,您还可以在 absolute 位置使用额外的包装器将其从流中移除并将其调整为行的高度:(这两种情况都需要一个最小高度在需要时正确显示滚动条)

.container {
  display: grid;
  grid-template-rows: auto 1fr auto;
  grid-template-columns: 1fr 1fr;
}

.container>div {
  border: 1px solid blue;
  border-radius: 5px;
}

.left {
  grid-column: 1;
  grid-row: 1/4;
}

.header {
  grid-column: 2;
  grid-row: 1;
}

.problem-child {
  grid-column: 2;
  grid-row: 2;
  position:relative;
  min-height:4em;
  }

.problem-child >div {
  position:absolute;
  top:0;
  left:0;
  right:0;
  max-height:100%;
  overflow:auto ;
}

.footer {
  grid-column: 2;
  grid-row: 3;
}
<div class="container">
  <div class="left">left<br>I don't want this one to scroll<br>this should<br>determine<br>the height of the whole grid container</div>
  <div class="header">column header</div>
  <div class="problem-child">
    <div>problem child:<br>I<br>want<br>this<br>to<br>scroll<br>rather<br>than<br>making<br>everything<br>tall</div>
  </div>
  <div class="footer">column footer</div>
</div>

关于CSS 网格 : content to use free space but scroll when bigger,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43352501/

相关文章:

html - CSS 属性未出现在电子邮件中

javascript - 在 React 中切换暗模式和亮模式

jquery - 删除之前动态添加的小部件

html - 如何在不移动到下方的情况下将列从三列减少到两列 - bootstrap

html - 使一行内的方形 div 成为垂直矩形?

javascript - HTML 5 中的现代 UI (Metro) 风格磁贴?

CSS 悬停没有反应

javascript - 如何按一定时间间隔一次显示数组中的一个类?

html - 对齐社交媒体共享按钮以看起来不错

html - 停止嵌入的 CSS 作用于 html 页面而不是覆盖外部 CSS 属性