当前位置: 首页 > 面试题库 >

CSS网格布局即使在带有前缀的IE11中也不起作用

王楚青
2023-03-14
问题内容

我正在为网格使用以下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中运行正常,但是当我在MicrosoftEdge或IE11中打开此页面时,所有网格项在第一个单元格处都相互重叠。根据该站点的介绍,这些浏览器支持带-ms前缀的CSS网格布局。我已经为这种情况创建了一个CodePen。

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;

}


<secthtml" target="_blank">ion 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使用较旧版本的Grid规范。

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

我立即看到了三个问题。

repeat()

repeat()功能在较早的规范中不存在,因此IE11不支持该功能。

代替:

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

span

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

grid-gap

grid-gap属性及其长期形式grid-column-gapgrid-row- gap在较早的规范中不存在,因此IE11不支持它们。您将必须找到另一种分隔框的方法。我还没有阅读完整的旧规范,因此可能有一种方法。否则,请尝试边距。

网格项目自动放置

但是该功能从未在IE11中实现。(在当前浏览器中,网格项目的自动放置现在是标准的)。

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

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



 类似资料:
  • 问题内容: 我正在尝试让我的粘性标头具有过渡效果,因此它不仅易于移动,而且易于释放。 我究竟做错了什么? 基本上,以下代码将tiny类添加到我的包装器类中,这很好。 这是CSS部分: 所以标题确实会收缩,但是没有动画,我是否错过了某些东西,或者转换根本不适用于网格? 这是css-grid文档的链接。 问题答案: 根据规范,过渡应该在和上进行。 7.2。 明确的轨道尺寸:和 属性 可动画的: 作为长

  • 问题内容: 我想使我的网站使用CSS网格系统,但似乎无法正常工作。这是我的代码: 问题答案: 使用该属性时,字符串值必须具有相同的列数。 您可以使用句点或句点的不间断行来表示一个空单元格(规范参考)。 从网格规范: [7.3。 命名区域:属性] 所有字符串的列数必须相同,否则声明无效。 如果命名的网格区域跨越多个网格单元,但是这些单元不形成单个填充矩形,则声明无效。 在此模块的将来版本中,可能会允

  • 问题内容: 我认为使用Flexbox无法实现这一点,因为每一行只能是适合其元素的最小高度,但是可以使用更新的CSS Grid来实现吗? 明确地说,我希望网格中所有行的所有元素的高度相等,而不仅仅是每行。基本上,最高的“单元格”应规定所有单元格的高度,而不仅仅是其行中的单元格。 问题答案: 简短答案 如果目标是创建具有相等高度的行的网格,而网格中最高的单元格将设置所有行的高度,那么这是一种快速简单的

  • 我认为使用Flexbox是不可能实现这一点的,因为每一行只能是适合其元素所需的最小高度,但使用较新的CSS网格可以实现这一点吗? 明确地说,我希望网格中的所有元素在所有行上的高度相等,而不仅仅是每一行。基本上,最高的“单元格”应该指示所有单元格的高度,而不仅仅是其行中的单元格。

  • 我对spring boot和创建我的第一个应用程序非常陌生。创建数据源时,我使用了带有前缀的@ConfigurationProperties和要从Application.Property中读取的属性。 但是,这个设置似乎对我不起作用,我的程序没有运行。 我的pom.xml文件包含: 我的存储库类: 我的主要类: 请让我知道如果我需要提供任何其他信息以及。

  • 随着CSS网格布局模块即将在Firefox和Chrome中发布,我想我应该尝试一下如何使用它。 我尝试创建一个简单的网格,其中一个项目横跨所有行的左侧,其他项目(、、、等)横跨各个行的右侧。横过行右侧的项的数量是可变的,因此可能存在、、、等的任何组合,因此我使用了属性。因此,我无法为定义要跨转的固定行数,但我希望跨转所有可用行。 null null 要使跨越所有行而不知道最终会有多少行,我应该做什