gpt4 book ai didi

html - 即使有前缀,CSS 网格布局在 IE11 中也不起作用

转载 作者:技术小花猫 更新时间:2023-10-29 11:35:49 24 4
gpt4 key购买 nike

我正在为我的网格使用以下 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 前缀的所有相关属性。我可以通过 inspect element 确认。

现在,问题是此代码在 Chrome、Firefox 和 Opera 中运行良好,但当我在 Microsoft Edge 或 IE 11 中打开此页面时,所有网格元素在第一个单元格中相互重叠。根据this site这些浏览器支持带有 -ms 前缀的 CSS Grid 布局。我已经为这个场景创建了一个 CodePen。

CodePen Link

为什么它不起作用?

.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>

最佳答案

IE11 使用 older version of the Grid specification .

您正在使用的属性在旧的网格规范中不存在。使用前缀没有区别。

这是我立即看到的三个问题。


重复()

repeat() 函数在旧规范中不存在,因此 IE11 不支持它。

您需要使用正确的语法,这在 another answer to this post 中有所介绍。 , 或声明所有行和列的长度。

代替:

.grid {
display: -ms-grid;
display: grid;
-ms-grid-columns: repeat( 4, 1fr );
grid-template-columns: repeat( 4, 1fr );
-ms-grid-rows: repeat( 4, 270px );
grid-template-rows: repeat( 4, 270px );
grid-gap: 30px;
}

使用:

.grid {
display: -ms-grid;
display: grid;
-ms-grid-columns: 1fr 1fr 1fr 1fr; /* adjusted */
grid-template-columns: repeat( 4, 1fr );
-ms-grid-rows: 270px 270px 270px 270px; /* adjusted */
grid-template-rows: repeat( 4, 270px );
grid-gap: 30px;
}

旧规范引用: https://www.w3.org/TR/2011/WD-css3-grid-layout-20110407/#grid-repeating-columns-and-rows


跨度

旧规范中不存在 span 关键字,因此 IE11 不支持它。您必须为这些浏览器使用等效的属性。

代替:

.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;
}

使用:

.grid .grid-item.height-2x {
-ms-grid-row-span: 2; /* adjusted */
grid-row: span 2;
}
.grid .grid-item.width-2x {
-ms-grid-column-span: 2; /* adjusted */
grid-column: span 2;
}

旧规范引用: https://www.w3.org/TR/2011/WD-css3-grid-layout-20110407/#grid-row-span-and-grid-column-span


网格间隙

grid-gap 属性,以及它的简写形式 grid-column-gapgrid-row-gap,在旧规范中不存在,因此 IE11 不支持它们。你必须找到另一种方法来分开盒子。我还没有阅读整个旧规范,所以可能有一种方法。否则,请尝试边距。


网格元素自动放置

有一些discussion in the old spec about grid item auto placement ,但该功能从未在 IE11 中实现。 (自动放置网格元素现在是当前浏览器的标准)。

因此,除非您专门定义网格项的位置,否则它们将堆叠在单元格 1,1 中。

使用 -ms-grid-row-ms-grid-column 属性。

关于html - 即使有前缀,CSS 网格布局在 IE11 中也不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45786788/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com