这是关于在 Internet Explorer 11(IE11)中安全使用 CSS Grid 的三部分系列文章的第三部分也是最后一部分,不会让人抓狂。
第一部分,我介绍了一些人们对 IE11 的原生 CSS Grid 实现的常见误解。第二部分,我向世界展示了编写 IE 友好型 CSS Grid 代码实际上是多么容易。
今天,我将暂时离开 CSS Grid,向您展示一种 flexbox 技术,它可以复制基本的 CSS Grid 自动放置功能。这个 CSS Grid 复制品甚至看起来像应用了 grid-gap
。但我需要非常清楚地说明:这 *不是* 关于如何在 IE 中实现实际的 CSS Grid 自动放置。
文章系列
- 揭穿 IE Grid 的常见误解
- CSS Grid 和新的 Autoprefixer
- 模拟带间隙的自动放置网格 (本篇文章)
- 现在支持重复区域名称!
如何使用间隙创建模拟网格
步骤 1:HTML
我将使用这个基本的 HTML 作为示例
<div class="grid-wrapper">
<div class="grid">
<div class="grid-cell"></div>
<div class="grid-cell"></div>
<div class="grid-cell"></div>
<div class="grid-cell"></div>
<div class="grid-cell"></div>
<div class="grid-cell"></div>
</div>
</div>
步骤 2:边框框尺寸
在 CSS 中,我们需要做的第一件事是确保所有框的尺寸都是基于 border-box
而不是 content-box
。最好的方法是使用 box-sizing: border-box
继承技术
html {
box-sizing: border-box;
}
*, *::before, *::after {
box-sizing: inherit;
}
这将被全局应用。如果您正在处理一个没有将 box-sizing
设置为 border-box
的现有项目,则将代码段中的 html
更改为一个选择器,该选择器将目标元素转换为网格。
步骤 3:Flex
接下来,您需要开启一些 flexbox 设置
.grid {
/* Forces equal cell heights */
display: flex;
flex-wrap: wrap;
}
步骤 4:宽度
现在,设置您的列宽度。我们将创建一个简单的三列网格
.grid-cell {
/* Sets column count */
width: calc(100% / 3); /* calc() method */
width: 33.33%; /* percentage method */
}
calc()
方法允许更轻松地更改列宽度。您声明所需的列数,浏览器会为您进行计算。这在您需要更多列(例如 7 或 8 列)时特别方便。浏览器对 calc()
的支持很强,但不如原始百分比值,自 CSS 诞生以来,浏览器就支持原始百分比值。
此浏览器支持数据来自 Caniuse,其中提供了更多详细信息。数字表示浏览器在该版本及更高版本中支持该功能。
台式机
Chrome | Firefox | IE | Edge | Safari |
---|---|---|---|---|
19* | 4* | 11 | 12 | 6* |
移动设备/平板电脑
Android Chrome | Android Firefox | Android | iOS Safari |
---|---|---|---|
127 | 127 | 127 | 6.0-6.1* |
百分比方法具有稍微更好的浏览器支持,并且在 IE 中可能更稳定。如果您不需要支持 Opera Mini,我仍然建议首先使用 calc()
方法。在 IE 中测试,如果布局出现问题,首先尝试在 calc 函数中使用 99.999%
而不是 100%
(calc(99.999% / 3)
)。如果这不起作用,则尝试切换到百分比方法。在我的所有示例中,我将使用 calc()
方法。请注意,如果您使用的是 CSS 预处理器(如 SCSS),则可以通过让预处理器为您进行数学运算来实现两全其美。但这会导致您无法在浏览器开发者工具中轻松编辑或查看列计数。
/* Set column count using SCSS */
.grid-cell {
width: (100% / 3);
}
/* CSS output into the browser */
.grid-cell {
width: 33.3333333333%;
}
让我们为网格单元格添加一些高度和内部 box-shadow
,这样我们就可以看到发生了什么。我没有添加边框——我将在稍后使用它。😉
.grid-cell {
/* So that we can see the grid cells */
box-shadow: inset 0 0 0 1px #000;
height: 100px;
}
.grid-wrapper {
/* Allows us to see the edges of the grid */
box-shadow: 0 0 10px 2px green;
}
您现在应该看到这样的内容

这很无聊吧?每个人都知道怎么做。这些我一直提到的网格间隙在哪里?我想要我的间隙!!!
步骤 5:边框
这就是有趣的地方。由于我们将 box-sizing
设置为 border-box
,因此 33.33% 的宽度现在 *包含* 边框。这意味着我们可以开始安全地混合固定单位和百分比单位!😃
.grid {
/* Creates an equal outer gap */
padding: 20px 0 0 20px;
}
.grid-cell {
/* Creates gaps */
border: 0 solid transparent;
border-width: 0 20px 20px 0;
}
这将产生看起来像具有等间距的网格的东西

为了帮助您更好地了解发生了什么,请查看以下图片

网格顶部和左侧的蓝色区域是 .grid
元素的填充。黄色轮廓显示每个 .grid-cell
元素占据的区域。每个单元格底部和右侧的红色区域是每个 .grid-cell
元素的边框。
这可能正是您想要的样式。另一方面,这与具有 grid-gap
设置的网格并不相同。这就是为什么我们还有另一个步骤。
步骤 6:边距和溢出
为了让网格紧贴容器的边缘,我们需要负边距和 overflow: hidden
的帮助
.grid {
/* Pulls grid cells hard against edges */
margin: -20px;
}
.grid-wrapper {
/* Prevents odd margin behavior */
overflow: hidden;
}
我们需要将 overflow: hidden
应用于容器,以防止这种情况发生

应用负边距和 overflow: hidden
将使我们获得这个美丽的复制品,它模拟了基本的 grid-gap
功能

网格的顶部和左侧填充实际上是可选的。如果您愿意,您可以选择不使用填充并更改边距值,如下所示
.grid {
/* Margin needs to be this if leaving off the top and left .grid padding */
margin: 0 -20px -20px 0;
}
但是,等等!工作还没有完全结束。看看如果我们在其中一个网格单元格中添加背景颜色会发生什么

这并不是我们想要的,所以还有一个步骤。
步骤 7:background-clip
为了防止网格单元格背景渗透到我们的模拟 grid-gap
中,我们需要向它添加 background-clip: padding-box
。
.grid-cell {
/* Prevents background bleed */
background-clip: padding-box;
}
现在我们有了这个

如果您以前从未听说过 background-clip
属性,您可能会担心浏览器支持……好吧,别担心。background-clip
自 IE9 以来就一直存在!
此浏览器支持数据来自 Caniuse,其中提供了更多详细信息。数字表示浏览器在该版本及更高版本中支持该功能。
台式机
Chrome | Firefox | IE | Edge | Safari |
---|---|---|---|---|
15 | 4 | 9 | 12 | 7 |
移动设备/平板电脑
Android Chrome | Android Firefox | Android | iOS Safari |
---|---|---|---|
127 | 127 | 4.4 | 7.0-7.1 |
步骤 8:媒体查询!
大多数情况下,网格需要能够在它们增长和缩小时改变它们的列数。使用其他方法可能是非常痛苦的。你可能不得不计算一堆 nth-childs,以便你可以删除正确的边距或其他东西。使用这种方法,你只需要改变一个值!😃
.grid-cell {
/* Sets the default column count */
width: calc(100% / 1); /* 1 column */
}
@media (min-width: 400px){
.grid-cell {
width: calc(100% / 2); /* 2 columns */
}
}
@media (min-width: 600px){
.grid-cell {
width: calc(100% / 3); /* 3 columns */
}
}



这是我们将它们放在一起时的样子
查看 假网格,由 Daniel Tonon (@daniel-tonon) 在 CodePen 上创建。
没人有时间干这个!
与现代网格可以用三行 CSS 代码完成的工作相比,这已经很多了!为了简化任务,我创建了一个名为 Gutter Grid 的 SCSS 支持的混合器。一旦 Gutter Grid 安装到项目中,你就可以快速创建具有 20 像素间隙的三列网格,使用以下 SCSS 代码
.grid-wrapper {
overflow: hidden; /* Need this for the chrome bug */
}
.grid {
@include grid($cols: 3, $gutter: 20px);
}
如果这对你来说太冗长,你可以像这样写得更短
.grid-wrapper {
overflow: hidden;
}
.grid {
@include grid(3, 20px);
}
Gutter Grid 预先内置了一些断点集,因此如果你网格跨越整个页面,你可能根本不需要编写任何断点!但是,如果你确实需要自定义断点,那么 Gutter Grid 允许你像这样轻松地自定义它们
// Verbose custom breakpoints
@include grid($cols: 7, $gutter: 20px, $breakpoints: (
4 : 960px, // At 960px or below, there will be 4 columns
2 : (max, 600px), // You can use mq-scss syntax here as well
1 : 480px,
));
// Short version
@include grid(7, 20px, (
4 : 960px,
2 : 600px,
1 : 480px,
));
你可能已经注意到,在示例中,Gutter Grid 也支持一个叫做 mq-scss 的东西使用的相同媒体查询语法。如果你想知道这是什么,那么它是一个我创建的 Sass 混合器,它使得编写和管理媒体查询变得容易很多。使用 mq-scss 语句来指示列数,可以对列数何时改变进行非常精细的控制。
向网格单元添加阴影
由于我们现在正在处理阴影,我将从示例图像中去除方框阴影。我们的起始网格现在看起来像这样

如果我们现在尝试向每个网格单元添加一个外部 box-shadow
……好吧,它看起来并不那么好

让我们来修复它。
步骤 1:新的 HTML
为了创建漂亮的阴影,我们需要在每个网格单元中添加一个额外的 div。你不能真正为此使用 ::before
或 ::after
,因为它们无法在其中包含 HTML 内容。
<div class="grid-wrapper">
<div class="grid">
<div class="grid-cell">
<div class="grid-cell-inner"></div>
</div>
<div class="grid-cell">
<div class="grid-cell-inner"></div>
</div>
<div class="grid-cell">
<div class="grid-cell-inner"></div>
</div>
<div class="grid-cell">
<div class="grid-cell-inner"></div>
</div>
<div class="grid-cell">
<div class="grid-cell-inner"></div>
</div>
<div class="grid-cell">
<div class="grid-cell-inner"></div>
</div>
</div>
</div>
步骤 2:使其灵活
现在,我们需要使每个网格单元成为一个 flex 容器。这将允许网格单元的内部部分占用其父级的全部高度。我们还需要将内部元素设置为 100% 的宽度。这将确保它水平和垂直地占用其父级的全部尺寸
.grid-cell {
/* Forces inner to take up full grid cell height */
display: flex;
}
.grid-cell-inner {
/* Forces inner to take up full grid cell width */
width: 100%;
}
让我们看看,如果我们尝试向内部元素添加方框阴影,我们会得到什么
.grid-cell-inner {
box-shadow: 0 0 10px 3px blue;
}

这很好看,但它还没有完全到位。我们用来防止 Chrome 错误的隐藏溢出正在妨碍。
步骤 3:hacky 填充
因此,我们需要允许溢出,但仍然避免这种奇怪的边距行为。我发现的唯一其他安全方法是使用填充。通过向外部网格包装器元素的顶部和底部添加 1 像素的填充,它将修复 Chrome 错误。
.grid-wrapper {
/* Prevents odd margin behaviour in Chrome */
padding: 1px 0;
}
这需要以在网格的顶部和底部增加 1 像素的空间为代价。下面的图片演示了最终的样子。阴影已经变淡,以便更清晰地显示 1 像素的间隙。

**注意:**你可以通过选择不包含网格元素上的顶部填充间隙值来避免 1 像素的顶部填充。但 1 像素的底部填充无法避免。
应用到外部网格包装器的边框宽度也可以,所以从技术上讲,我不需要在上面的示例中应用填充。大多数情况下,如果我们向网格单元应用阴影,那么我们可能不想看到围绕它们的边框。上面的示例更多地是演示了填充是多么微小。
**更新:**你可以通过使用 0.1 像素的填充而不是 1 像素来完全避免奇怪的边距行为。这将在浏览器中被四舍五入到 0 像素,但仍然可以防止奇怪的边距行为发生。这意味着网格的边缘可以紧贴其容器的边缘,同时仍然允许溢出内容可见!感谢 Lu Nelson 在评论中 提出的建议!😁
这是没有外部边框的网格的样子



这里有一个演示最终产品的 Pen
查看 带有阴影的假网格,由 Daniel Tonon (@daniel-tonon) 在 CodePen 上创建。
Gutter Grid 阴影
让我们来了解如何在 Gutter Grid 单元中添加阴影。你可以使用与前一个示例中相同的 HTML 结构。
现在,应用此 SCSS 来创建一个具有 20 像素间隙的三列网格
.grid {
@include grid(3, 20px, $inners: true);
}
这个新的 $inners: true
属性告诉 Gutter Grid,每个网格单元都有一个子元素,需要占用其父网格单元的全部高度和宽度。
不要使用 overflow: hidden
,而是在包装器元素上使用 0.1 像素的底部填充(根据 Lu Nelson 的建议 更新)。
.grid-wrapper {
padding-bottom: 0.1px;
}
如果 Gutter Grid 不需要,它不会输出一个顶部的外部间隙。这有助于避免负边距问题的出现。毕竟,如果没有一个负边距来抵消的顶部外部间隙,那么就没有需要担心的错误。但是,底部的外部间隙仍然是一个问题,这就是为什么我们需要 0.1 像素的底部填充。这 0.1 像素的底部填充将在浏览器中被四舍五入到 0 像素,同时仍然可以修复边距问题,导致网格底部没有间隙。
现在,添加你的阴影,你就拥有了一个带有阴影单元的 Gutter Grid!
.grid-cell-inner {
box-shadow: 0 0 10px 3px blue;
}

在这篇文章中,我只简单介绍了 Gutter Grid 的功能。请务必阅读 完整文档,以了解它的其他功能。
我们的 IE 网格探险之旅即将结束
我希望你已经享受了这次对 IE 和 CSS 网格世界的探索。如果你还没有,请务必阅读 第一部分 和 第二部分。阅读了所有三篇文章后,你将能够创建真正令人惊叹的布局,在 IE 中看起来和在现代浏览器中一样好。
如果你看到有人抱怨由于 IE 而无法使用 CSS 网格,你就知道该怎么做。用玩闹的方式拍拍他们的脑袋,因为他们太愚蠢了,然后把他们送到这里,让他们了解真相。
现在,我的朋友们,去创建一些网格吧!😃🎉
文章系列
- 揭穿 IE Grid 的常见误解
- CSS Grid 和新的 Autoprefixer
- 模拟带间隙的自动放置网格 (本篇文章)
- 现在支持重复区域名称!
谢谢!很棒的,非常有信息量的文章。
我不确定你为什么要在容器上使用左上角填充和负边距,以及在子元素上使用右下角边框来创建间距。在 flex-flow 容器上使用 `margin: -10px` 规则和在所有子元素上使用 `padding: 10px` 规则,也会生成一个间距为 20 像素的网格。
此外,关于包装器上的 1 像素填充规则,以取消边距折叠传播:它也应该适用于小于 1 像素的值:例如,0.01 像素不会显示,因为它会四舍五入到 0 像素,但仍然会取消边距效果。
容器上的上边距和左边距是可选的。它使负边距规则更简单,因为你可以直接编写 `margin: -20px;` 而不是 `margin: 0 -20px -20px 0;`。它也让我在文章中展示了一个额外的用例(在所有边都有相等的间距)。
是的,这可以实现,但是现在你已经用完了填充,无法在每个网格单元格的内部添加填充,除非添加一个额外的内部元素。我的 Gutter Grid 技术保留了在网格单元格元素上使用填充的能力。
另一个问题是亚像素渲染错误。如果你创建一个间距为 5 像素的网格,这意味着每个网格单元格的填充需要为 2.5 像素。这可能会四舍五入到 3 像素,或者四舍五入到 2 像素(除非它是高分辨率屏幕),并导致提前换行或导致布局错位。我的方法避免了亚像素渲染问题。
感谢你的提示!我之前没有想到这一点。我会试一试,看看会发生什么
如果它有效,我会更新 Gutter Grid,以便它总是添加填充以始终防止出现问题。
哦,还有一件事。使用填充的方式意味着你无法使用内嵌盒阴影技术在网格单元格上创建假的边框。
我已经测试了你的 0.01 像素理论。
0.01 像素不起作用……但是 0.1 像素起作用了!
它像你预期的那样向下舍入到 0。我已经将其构建到 Gutter Grid 版本 7 中,并使用此新信息更新了文章。
感谢你的提示!
这个系列文章很有趣,但是它只是证实了我的最初怀疑:你正在用 flexbox 重建网格,试图用非常复杂的方式来塞入一些额外的元素(比如间距和背景),“有点像 css-grid,但又不太像”。
这当然是一个有趣的实验,但从实际角度来看,最好直接用 Flexbox 来构建,不要费心用 “css-grid” 的方式来重新创建间距,只需直接使用填充/边距,并在需要时使用嵌套的 div 即可。这样构建和解释给初级开发人员如何工作所需的时间更少。
我承认这种 flexbox 方法有点复杂,但它允许创建比不那么复杂的方法更容易管理的布局,因为间距是固定的间距(而不是 50-50 间距),它允许完全使用填充和背景,并且它紧密地包含在它的容器内。
它也与真正的网格间距完美对齐。布局的某些部分可以使用 CSS 网格,而其他部分可以使用这种技术,所有内容都将完美对齐。
使用我创建的 Gutter Grid 插件可以将实现简化为即使是最初级的开发人员在安装到项目后也能轻松处理的程度。
我想我只能不同意你的观点。过去几周,我为一个入门主题构建并尝试了多个网格系统,到目前为止,最简单、最好的一个是用 `calc()` 来计算宽度的纯 flexbox 系统,这样你就可以在列上使用固定的边距,并使用负边距来强制间距。为什么我决定不用带 flex 备选的 css-grid?因为你无法利用任何 css-grid 特性,比如二维网格(又名跨越多行的拉伸 div)或简化的语法。而且在使用 mixin 时,初级开发人员永远不会接触到 css-grid 语法,所以他们不会从中学到任何东西。
所以感谢你进行这个有趣的实验。我很高兴你花时间测试极限并传授知识,但这是一种虚假宣传。实际结果仍然是,你并没有 “真正” 利用 css-grid 的预期潜力,你当然也没有模拟自动放置。最终,从实际构建的角度来看,这只是一个 flex 网格。
在我看来,你似乎还没有阅读第 2 部分。第 2 部分是该系列文章的主要文章,展示了如何在 IE11 中安全地使用 **真正的** CSS 网格。这篇文章只适用于你需要自动放置的用例,因为你不知道有多少行、列和单元格。
不,你无法使用 **所有** CSS 网格特性,但你可以在 IE 中用它做更多的事情,比人们给予它的评价要多得多。使用 IE 友好的 CSS 网格构建布局也比使用旧方法更快更容易。
请在此阅读第 2 部分:https://css-tricks.org.cn/css-grid-in-ie-css-grid-and-the-new-autoprefixer/
这不是虚假宣传!我在第 2 部分中详细解释了如何在 IE 中安全地使用 **真正的** CSS 网格,并且我在任何文章中都没有说过第 3 部分中的自动放置 flexbox 技巧使用了真正的 CSS 网格。
我确实阅读了第 2 部分,这就是我反对这个观点的原因。自动放置是网格系统中最受欢迎和最常用的部分。它不仅仅是 “一个功能”。没有它,一切都将崩溃,你真的无法在 IE11 中有效且安全地使用网格。
再次感谢你展示了什么是可能的,但对我来说,它清楚地表明,它不是大多数情况下所需要的,并且为了在大多数项目中实际使用它,付出的代价太大了。
从我的角度来看,我必须让 IE11 看起来与所有现代浏览器相同。使用带 flexbox 备选的自动放置网格代码不是一种选择。
我有两个选择。我可以永远不在任何项目中使用任何 CSS 网格(或者在 IE 最终消失之前还需要多长时间)。
或者,我可以现在就尽可能地使用 CSS 网格,只要我限制自己使用 IE11 可以处理的技术。
我更愿意至少能使用 **一些** CSS 网格,而不是 **完全不使用**。
不,你无法使用自动放置,这很糟糕。如果你确切地知道网格中有多少行、列和网格单元格,那么 IE 实现完全可用。这就是我试图在这些文章中表达的信息。
嘿,丹尼尔,感谢你制作的这个很棒的系列文章。
第 2 部分为 IE/Egde CSS 网格的使用打开了所有可能性,这极大地简化了我的开发工作。因为网格真的可以轻松地完成 Flexbox 做起来很丑陋的事情(反之亦然)。
至于这第三部分,它是一篇关于如何用一种巧妙的 hacky 方式使用 Flexbox 来实现实际的广泛布局群组的轻松好读文章。再次感谢。
我很高兴你喜欢它
我们也才刚刚弄清楚 Autoprefixer 如何支持 IE 中的重复区域名称。我们正在努力实现它。一旦完成,它将为 IE 中的 CSS 网格打开一个全新的世界。
无法抗拒。
“自动放置是网格系统中最受欢迎和最常用的部分”。
有时候。
我会说在 50% 的情况下。而且在 Flexbox 非常出色地完成自动放置任务的布局中,需要自动放置。
CSS 网格不是关于自动放置。不要为此使用它。它是关于任意地 (!) 重新排列网格项目。
只需一条简单的规则来区分何时使用 Flexbox 和何时使用 CSS 网格。
如果你有一个包含非唯一、非区别、数量不确定的项目的 HTML 容器,并且想要为它们创建一个易于重新流动的响应式布局,请使用 Flexbox。
例如,图片库、列表等等。
如果你有一个包含项目的容器,你可以为它们命名,因为它们不统一,功能和含义完全不同,并且很容易枚举,并且你想要在响应式网页块中为每个项目有一个任意(按你意愿)可重新排列(我知道这是个新词)的布局,请使用 CSS 网格。
例如,一个网页标题块,包含徽标、地址、电话、菜单、搜索块。当页面宽度减小时,你想要将搜索项重新定位到地址项的位置,将徽标放在电话之后。当宽度进一步减小时,你想要再次以不同的方式重新定位项目等等。
从这个意义上讲,瑞秋·安德鲁(Rachel Andrew)在第一部分中提到的视频有些误导(瑞秋,对不起,没有冒犯,对你所做的网格教学表示尊重和感谢)。它展示了应该使用 Flexbox 的用例。
这就是为什么有这么多像 “为什么我应该使用 CSS 网格,而 Flexbox 就在这里?” 这样的问题。答案就在上面。为正确的用例使用正确的工具。
如果你从最大限度地提高 IE 兼容性的角度来看,那么是的,我同意你在本评论中的观点。
如果你不考虑 IE,现代 CSS 网格是创建这种布局的更简单、更不 hacky 的方法。自动放置也是现代 CSS 网格的一个基本方面。它不仅仅是 “任意地重新排列网格项目”。
丹尼尔,即使没有IE,我所说的 CSS Grid 与 Flexbox 独一无二的地方是,它能够为网格容器项目命名并根据需要响应地重新排列它们。这就是所有这些教学中遗漏的部分。即使你关于“不自动放置”的三重部分,可能在某种程度上也暗示了“我们希望它存在”。或者至少我读起来多少有些这种感觉。
我主张“使用 CSS Grid 来随意重新排列,使用 Flexbox 来进行自动放置”。我不关心 IE 中没有自动放置,而在现代浏览器中的 CSS Grid 中存在自动放置。让我感到恼火的是,在 CSS Grid 出现之前,使用 Flexbox 我无法创建可重新排列的布局(好吧,我可以,但它远远超出了实用性的边界)。
自动放置(在某种程度上)由 Flexbox 做得很好(除了悬挂的线),只需两行代码。所以这里不需要 CSS Grid。
是的,除了 IE 之外,CSS Grid 也可以很好地完成 Flexbox 所做的事情。但是它应该像这样使用吗?
我喜欢 CSS Grid 通过区域名称重新排列内容的能力,但建议区域重新排列是 Grid 唯一应该使用的方式,这目光短浅。
现代 Grid 是为任何需要在二维空间内对齐事物的场景而设计的。
Flexbox 仅设计用于在一维空间内对齐事物。
如果 IE 不是问题,CSS Grid 使这篇文章中提到的布局比通过 Flexbox 完成要容易得多,因为 Grid 支持间隙,并且默认情况下它会尽力在水平和垂直方向上对齐所有内容。你甚至不需要媒体查询!
就这样!三行现代 CSS Grid 代码,你就得到一个完美对齐的网格,它甚至会根据可用空间调整列数。
Flexbox 不是为了这种布局而设计的。你需要强迫 Flexbox 生成等宽列。Flexbox 喜欢自由。Grid 喜欢严格的结构。
gap
技术上即将加入 Flexbox,但你如何期望gap
在使用百分比值时表现?如果你有 33.33% 的列宽,20px 的间隙放在哪里?Flexbox 没有 fr 单位(除非他们计划添加这些),所以给 33.33% 宽度的 Flexbox 项目添加 20px 间隙会导致过早换行。如果你改为实现我的 Gutter Grid 技术来添加间隙,它比 CSS Gridgrid-gap
添加间隙的方法要困难得多,而且更像是一种技巧。我只是想告诉你,CSS Grid 自动放置是 CSS Grid 规范中一个重要且不可或缺的部分,不应该被忽视。只是很可惜 IE 不支持它。☹
丹尼尔,你说得都对。
虽然我不能忽略 IE/Edge,因为我制作的所有网站都需要 IE10+。而且对我来说,这种情况没有任何改变的迹象。
再次感谢你分享更多代码片段和解释。这三篇文章和你对它们的评论都在我的桌面上。干杯! :)