【问题标题】:CSS grid's multi row item pushes single rowCSS 网格多行项推送单行
【发布时间】:2018-07-29 00:23:31
【问题描述】:

我在 CSS 网格中遇到了多行项目的问题。我不确定这是设计使然还是奇怪的行为。

.container {
    display: grid;
    grid-template-columns: 65% 35%;
    grid-template-rows: min-content auto;
    grid-template-areas: "head side" "body side";
}
.item-head {
    grid-area: head;
}
.item-body {
    grid-area: body;
}
.item-side {
    grid-area: side;
}

基本上,item-side 跨越右侧的两行。虽然head块在左侧第一行,所以head的高度应该是它的最小内容,但它实际上是被side内的内容推动的>.

这是codepen上的演示

这是我所做的修复之一,尝试使用 auto 作为 head。 auto.

但是当网格行是自动时,它还有其他问题。 here 是在 body 没有足够内容的情况下演示的示例。

我想出的最终版本是this。不使用 2x2 网格,而只有两列。

MDN可以看出min-content是一个关键字,代表了占据网格轨道的网格项的最大最小内容贡献。

这有道理,但它怎么会被多行内容推开呢?如果一个项目跨越 2 行,那么它应该只推动那两行的高度,而不是第一行的高度。我对此有点困惑,如果有人能解释发生了什么,那就太好了。

编辑: 如果我们将 1fr 用于body 片段,则内容显示正确。现在,fr 单位,也称为剩余空间的分数,仅在MDN 中被 IE Edge 支持。虽然来自CSS-Tricks 评论的其他一些来源,但人们说它与网格布局结合使用。

我已经在最新的 Firefox 和 chrome 上测试了 fr 单元,它工作正常。

但问题仍然存在,side 区域覆盖 2 行,其上下文为 2 行,而头部和身体的上下文为 1 行。这些 1 行内容之间的线由 2 行区域的内容调整。无论auto 进行何种计算,它都应该忽略任何不相关的内容。

这个问题的关键是,跨两行的单元格应该只影响两行的总高度,而不会对单个行造成任何改变。我从未在 WPF 网格系统上遇到过同样的问题,但在 CSS 网格中,这是我见过的奇怪行为之一。

【问题讨论】:

  • 我不明白这个问题。你能提供一个草图或其他东西来说明吗?
  • 如果你看我在here创建的demo,绿色背景的单元格的高度不是由绿色单元格的内容决定的,而是由蓝色单元格的内容决定的。蓝色单元格是跨两行的区域,里面的内容不应该影响那些单行单元格。您需要在桌面内查看该演示。

标签: html css


【解决方案1】:

这很奇怪:当我(使用 Opera 54.0)为项目端取消设置溢出时,结果会有所不同。但仍然无法弄清楚是什么定义了高度......

无论如何:我在某处读到,最小内容和最大内容不适用于列 - 仅适用于行。这可以解释奇怪的行为。

那里提到了这个来源: https://drafts.csswg.org/css-sizing-3/#sizing-values

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-04
    • 1970-01-01
    • 1970-01-01
    • 2019-01-14
    • 2018-11-15
    • 2019-06-20
    • 1970-01-01
    • 2019-02-02
    相关资源
    最近更新 更多