为什么我在以下代码段中的 X 轴上有溢出?
一旦我在我的 .body
网格容器上应用 grid-gap: 10px
,就会产生溢出。
div:not(.header):not(.body):not(.row) {
border: 1px solid grey;
}
.header {
margin-top: 20px;
display: grid;
grid-gap: 10px;
grid-template-areas: "header-left header-right-up" "header-left header-right-down";
grid-template-rows: 40px 40px;
grid-template-columns: minmax(50px, 200px) auto;
}
.header-left {
grid-area: header-left;
}
.header-right-up {
grid-area: header-right-up;
}
.header-right-down {
grid-area: header-right-down;
}
.body {
margin-top: 20px;
display: grid;
grid-template-columns: 25% 50% 25%;
grid-auto-rows: 80px;
grid-gap: 10px;
}
.row-left {
}
.row-center {
}
.row-right {
}
<div class="header">
<div class="header-left">image</div>
<div class="header-right-up">content</div>
<div class="header-right-down">long content</div>
</div>
<div class="body">
<div class="row-left"></div>
<div class="row-center"></div>
<div class="row-right"></div>
<div class="row-left"></div>
<div class="row-center"></div>
<div class="row-right"></div>
<div class="row-left"></div>
<div class="row-center"></div>
<div class="row-right"></div>
</div>
</div>
https://codepen.io/anon/pen/WdJExz?editors=1100
原文由 Damiano Barbati 发布,翻译遵循 CC BY-SA 4.0 许可协议
简答
因为列的宽度加上间隙的宽度大于 100%。
解释
您有一个 3 列网格容器(
.body
):这些列的总宽度为 100%。
然后,您在列(和行)之间添加装订线:
这是以下的简写:
所以这变成了宽度计算:
因此,
请注意,
grid-*-gap
属性仅适用于网格项目之间 - 从不适用于项目和容器之间。这就是为什么我们计算两个网格间隙,而不是四个。作为 解决方案,请尝试使用
fr
单位而不是百分比单位,它仅适用于可用空间。这意味着fr
长度是在应用任何grid-gap
长度 之后 计算的。修改后的 codepen 演示
更多细节在这里: 百分比和fr单位之间的差异