我正在为我的网格使用以下 HTML 标记。
<section class="grid">
<article class="grid-item width-2x height-2x">....</article>
<article class="grid-item">....</article>
<article class="grid-item">....</article>
<article class="grid-item width-2x">....</article>
<article class="grid-item height-2x">....</article>
<article class="grid-item">....</article>
<article class="grid-item">....</article>
<article class="grid-item width-2x height-2x">....</article>
</section>
SCSS 代码如下所示:
.grid {
display: grid;
grid-template-columns: repeat( 4, 1fr );
grid-gap: 30px;
align-items: start;
.grid-item {
&.height-2x {
grid-row: span 2;
}
&.width-2x {
grid-column: span 2;
}
}
}
由于我在我的工作流程中使用了自动前缀,它会自动添加带有 -ms
前缀的所有相关属性。我可以通过检查元素确认它。
现在,问题是这段代码在 Chrome、Firefox 和 Opera 中运行良好,但是当我在 Microsoft Edge 或 IE 11 中打开此页面时,所有网格项在第一个单元格中都相互重叠。根据 这个站点,这些浏览器支持带有 -ms
前缀的 CSS 网格布局。我为这个场景创建了一个 CodePen。
为什么它不起作用?
.grid {
display: -ms-grid;
display: grid;
-ms-grid-columns: (1fr)[4];
grid-template-columns: repeat(4, 1fr);
-ms-grid-rows: (270px)[4];
grid-template-rows: repeat(4, 270px);
grid-gap: 30px;
}
.grid .grid-item {
background-color: #000;
color: #fff;
text-align: center;
line-height: 270px;
}
.grid .grid-item.height-2x {
-ms-grid-row: span 2;
grid-row: span 2;
}
.grid .grid-item.width-2x {
-ms-grid-column: span 2;
grid-column: span 2;
}
<section class="grid">
<article class="grid-item width-2x height-2x">....</article>
<article class="grid-item">....</article>
<article class="grid-item">....</article>
<article class="grid-item width-2x">....</article>
<article class="grid-item height-2x">....</article>
<article class="grid-item">....</article>
<article class="grid-item">....</article>
<article class="grid-item width-2x height-2x">....</article>
</section>
原文由 Faisal Khurshid 发布,翻译遵循 CC BY-SA 4.0 许可协议
IE11 使用 旧版本的 Grid 规范。
您使用的属性在旧的网格规范中不存在。使用前缀没有区别。
这是我立即看到的三个问题。
repeat()
旧版规范中不存在
repeat()
功能,因此 IE11 不支持。您需要使用正确的语法,这在 这篇文章的另一个答案中 有所介绍,或者声明所有行和列的长度。
代替:
利用:
旧规范参考: https ://www.w3.org/TR/2011/WD-css3-grid-layout-20110407/#grid-repeating-columns-and-rows
span
span
关键字在旧规范中不存在,因此 IE11 不支持。您必须使用这些浏览器的等效属性。代替:
利用:
旧规范参考: https ://www.w3.org/TR/2011/WD-css3-grid-layout-20110407/#grid-row-span-and-grid-column-span
grid-gap
grid-gap
属性,以及它的长手形式grid-column-gap
和grid-row-gap
,在旧规范中不存在,因此它们不受支持IE11。你必须找到另一种方法来分隔盒子。我还没有阅读整个旧规范,所以可能有一种方法。否则,请尝试边距。网格项目自动放置
旧规范中有一些关于网格项自动放置的讨论,但该功能从未在 IE11 中实现。 (网格项目的自动放置现在是当前浏览器的标准)。
因此,除非您专门定义网格项的位置,否则它们将堆叠在单元格 1,1 中。
使用
-ms-grid-row
和-ms-grid-column
属性。