为什么CSS网格间隙会影响fr单位?

Why CSS grid gap affects fr unit?

提问人:Qimat Luo 提问时间:11/13/2023 最后编辑:Paulie_DQimat Luo 更新时间:11/13/2023 访问量:26

问:

准备

<div class="g">
  <div>a</div>
  <div>b</div>
  <div>c</div>
  <div>d</div>
  <div>e</div>
  <div>f</div>
</div>
.g {
  display: grid;
  grid-template-areas:
    "a e"
    "b e"
    "c e"
    "d f";
  grid-template-columns: 1fr 2fr;
  grid-template-rows: 1fr 1fr 1fr 3fr;
}
.g > div:nth-of-type(1) {grid-area: a; background: red;}
.g > div:nth-of-type(2) {grid-area: b; background: orange;}
.g > div:nth-of-type(3) {grid-area: c; background: yellow;}
.g > div:nth-of-type(4) {grid-area: d; background: green;}
.g > div:nth-of-type(5) {grid-area: e; background: blue;}
.g > div:nth-of-type(6) {grid-area: f; background: purple;}

https://jsfiddle.net/ghbz9osy/

截面 e(蓝色)和 f(紫色)的高度相同,这是预期的。

问题

https://jsfiddle.net/ghbz9osy/1/

如果我添加它,它的高度将不一样。gap: 10px

问题

据我所知,gap 应该可以与 *fr 一起使用。

为什么当我添加间隙会打破它时?

注意

目前我的解决方案是将 a、b、c 部分包装到另一个网格中。

但是我想知道为什么上面的版本不起作用。

https://jsfiddle.net/ghbz9osy/2/

css css -网格

评论


答:

1赞 tacoshy 11/13/2023 #1

分数占用剩余空间(网格容器间隙填充后的空间)。因此,从不计算差距。如果一个元素跨越多个行或列,它也必须跨越与它的间隙。

您可以做的是让紫色元素跨越 3 行:

.g {
  display: grid;
  grid-template-areas:
    "a e"
    "b e"
    "c e"
    "d f"
    "d f"
    "d f";
  grid-template-columns: 1fr 2fr;
  grid-auto-rows: 1fr;
  gap: 0.5em;
}
.g > div:nth-of-type(1) {grid-area: a; background: red;}
.g > div:nth-of-type(2) {grid-area: b; background: orange;}
.g > div:nth-of-type(3) {grid-area: c; background: yellow;}
.g > div:nth-of-type(4) {grid-area: d; background: green;}
.g > div:nth-of-type(5) {grid-area: e; background: blue;}
.g > div:nth-of-type(6) {grid-area: f; background: purple;}
<div class="g">
  <div>a</div>
  <div>b</div>
  <div>c</div>
  <div>d</div>
  <div>e</div>
  <div>f</div>
</div>