在IE11中获取此简单的CSS网格布局

时间:2018-12-01 19:25:14

标签: html css internet-explorer-11 css-grid autoprefixer

我正在为一个简单的三面板幻灯片制作一个原型。在第二个面板上,我想使用css-grid通过一种简单的方法将面板分为4个相等且敏感的区域,即容器高度的100%。

这是演示:

http://jsfiddle.net/stratboy/obnkc2x5/1/

一些代码:

<div class="sub-grid-container">
  <div class="sub-grid-item">sub 1</div>
  <div class="sub-grid-item">sub 2</div>
  <div class="sub-grid-item">sub 3</div>
  <div class="sub-grid-item">sub 4</div>
</div>

以及相关的CSS:

.sub-grid-container{
  display:grid;
  height: 100%;

  grid-template-columns: 50% 50%;
  grid-template-rows: 50% 50%;
  background-color: red;
}

注意:我也在使用Autoprefixer,它正在编译如下内容:

.sub-grid-container {
  display: -ms-grid;
  display: grid;
  height: 100%;
  -ms-grid-columns: 50% 50%;
      grid-template-columns: 50% 50%;
  -ms-grid-rows: 50% 50%;
      grid-template-rows: 50% 50%;
  background-color: red; }

除IE11之外,所有代码都可在任何地方使用。在IE11中,我有4个网格单元重叠,并且容器的高度不是100%,宽度也不是100%。

我对CSS网格还很陌生,但是我认为我正在做一些非常基本的事情。我做错了什么?或者,也许用IE11不可能吗?

1 个答案:

答案 0 :(得分:0)

好吧,我设法解决了这个问题,并且在自动前缀修复程序的帮助下,它可以正常工作。基本上,在IE11上,您必须使用grid-rowgrid-column道具告诉单元格的开始和结束位置。另外,要使整个事情与Autoprefixer一起使用,必须添加grid-template prop,并且不要使用单个grid-template-columns / rows语句(这是最后一件事,因为否则autoprefixer不会编写单元格的-ms-grid-行/列道具):

.sub-grid-container {
  display: grid;
  height: 100%;
  // grid-template-columns: 50% 50%; // do not
  // grid-template-rows: 50% 50%; // do not
  grid-template:
    "a   b" 1fr
    "c   d" 1fr /
    1fr  1fr; // you can use fr units instead %
}

.cell-1 {
  grid-area: a;
}

.cell-2 {
  grid-area: b;
}

.cell-3 {
  grid-area: c;
}

.cell-4 {
  grid-area: d;
}

自动前缀结果将如下所示:

.sub-grid-container {
  display: -ms-grid;
  display: grid;
  height: 100%;
  -ms-grid-rows: 1fr 1fr;
  -ms-grid-columns: 1fr 1fr;
      grid-template: "a   b" 1fr "c   d" 1fr / 1fr  1fr;

}

.cell-1 {
  -ms-grid-row: 1;
  -ms-grid-column: 1;
  grid-area: a;
}

.cell-2 {
  -ms-grid-row: 1;
  -ms-grid-column: 2;
  grid-area: b;
}

.cell-3 {
  -ms-grid-row: 2;
  -ms-grid-column: 1;
  grid-area: c;
}

.cell-4 {
  -ms-grid-row: 2;
  -ms-grid-column: 2;
  grid-area: d;
}