【问题标题】:CSS grid behaviour different in Chrome and Firefox [duplicate]Chrome和Firefox中的CSS网格行为不同[重复]
【发布时间】:2020-02-05 15:40:38
【问题描述】:

我有一个 2 列和 3 行的 CSS 网格。由于角度 ngif 子句,第三行内容并不总是存在。图像出现在跨越 3 行的第一列中。尽管如此,我在 Chrome(80.0.3987.87,这是我发布的最新稳定版)和 Firefox 中得到了 2 个不同的结果。

有没有办法控制行,使其表现得像在 Firefox 中一样,即当图像高度大于 2 个第一行高度的总和时,第三行会增长。

.grid {
  width:400px;
  display:grid;
  grid-template-columns: 40px 1fr;
  grid-template-rows: minmax(0, auto) minmax(0, auto) minmax(0, 1fr);
}

.image {
  width:40px;
  height:100px;
  grid-column:1;
  grid-row:1 / span 3;
  background-color: #f00;
}

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

.text2 {
  grid-column:2;
  grid-row:2;
}
<div class="grid">
  <div class="image"></div>
  <div class="text1">Text 1</div>
  <div class="text2">Text 2</div>
</div>

这是您可以在 Chrome 和 Firefox 中查看的codepen

这里有一张图片来显示差异:

如您所见,Chrome 增加了第 1 行和第 2 行的高度(第 3 行保持为 0)。 Firefox 只增加 row2 的高度,即最后一个可见的内容行。

请注意,我尝试将 grid-template-rows 设置为“minmax(0, auto) minmax(0, auto) 1fr”,但随后第 3 行会有一个奇怪的高度,使网格高度大于其内容。

更新:啊!能够在以前的 Chrome 版本 (79) 上尝试它,这次我得到了与 Firefox 相同的结果。所以似乎80改变了它。这里有人可以确认一下吗?

【问题讨论】:

  • 在我的 OP 中添加了一张图片
  • 我在 Chrome 上看到了 firefox 结果。你能添加你的版本吗?
  • 添加了我的 chrome 版本,这是我发布的最新版本。
  • 这很奇怪:在我的计算机上,我在 Firefox 和 Chrome 中得到完全相同的结果...您的浏览器是最新的吗?您是否在其中一个上安装了一个您不会在另一个上安装的扩展?
  • @NicolasCadilhac 我将我的 chrome 更新到 80,我看到了差异。

标签: css google-chrome firefox css-grid chromium


【解决方案1】:

您可以像下面这样更新您的代码。它似乎在 Chrome 80 和 firefox 中工作相同。值得注意的是,1fr 等于 minmax(auto, 1fr),这确实与 minmax(0,1fr) 不同,但仍然不知道究竟是什么让两者的行为不同。

.grid {
  width:400px;
  display:grid;
  grid-template-columns: 40px 1fr;
  grid-template-rows: auto auto 1fr;
}

.image {
  width:40px;
  height:100px;
  grid-column:1;
  grid-row:1 / span 3;
  background-color: #f00;
}

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

.text2 {
  grid-column:2;
  grid-row:2;
}
<div class="grid">
  <div class="image"></div>
  <div class="text1">Text 1</div>
  <div class="text2">Text 2</div>
</div>

【讨论】:

    【解决方案2】:

    您提到容器的网格模板行的方式在 chrome 中无效。我想这就是问题

    试试这个 css 看看;

    <style>
    .grid {
        display: grid;
        grid-template-columns: repeat(2, 1fr);
    }
    
    .image {
        height: 100px;
        grid-row: 1/4;
        background-color: #f00;
    }
    
    .text1 {
        grid-column: 2;
        grid-row: 1;
    }
    
    .text2 {
        grid-column: 2;
        grid-row: 2;
    }
    </style>
    

    希望有帮助!!

    【讨论】:

    • 你能解释一下Chrome中什么是无效的并提供参考吗?
    • 请注意,它没有帮助。一旦我明确添加第三行,就好像所有行都是 1fr。所以我需要 grid-template-rows 定义。
    • 我认为在这种情况下,您必须提到一个 CSS 类,其 grid-column 为 2,这样您添加的任何新项目都会自动进入第二列。
    猜你喜欢
    • 2018-07-04
    • 2015-02-27
    • 1970-01-01
    • 2017-06-04
    • 2011-03-24
    • 2016-02-09
    • 1970-01-01
    • 2013-03-23
    • 2018-02-16
    相关资源
    最近更新 更多