IE11的CSS网格自动重复列flexbox替代品

时间:2019-09-12 02:28:50

标签: html css internet-explorer css-grid

我的网站上有以下布局

.container{
  width: 100%;
  min-height: 100vh;
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(350px, 1fr));
  grid-template-rows: max-content;
}

.item{
  background: red;
  border: 1px solid black;
  height: 350px;
}
<div class="container">
  <div class="item">1</div>
  <div class="item">2</div>
  <div class="item">3</div>
  <div class="item">4</div>
  <div class="item">5</div>
  <div class="item">6</div>
  <div class="item">7</div>
  <div class="item">8</div>
  <div class="item">9</div>
</div>

基本上,有些卡片会根据设备的宽度进行缩放,因此每行可能有1张卡片,或者连续有10张卡片,它们会按照我的代码段所示在底部(保持相同的宽度)进行缠绕

现在,除了IE11(我不必支持任何以前的版本)外,这都很棒有效。我在这里有什么选择?我可以用flexbox做类似的事情吗?我知道我可以指定每张卡的宽度并进行一堆媒体查询..但我不希望..希望有一个更好的解决方案。

编辑

因此,在快速浏览之后,我能够提出类似的解决方案。

.container{
  width: 100%;
  min-height: 100vh;
  display: flex;
  flex-wrap: wrap;
}

.item{
  background: red;
  border: 1px solid black;
  height: 350px;
  flex: 1;
  min-width: 350px;
}
<div class="container">
  <div class="item">1</div>
  <div class="item">2</div>
  <div class="item">3</div>
  <div class="item">4</div>
  <div class="item">5</div>
  <div class="item">6</div>
  <div class="item">7</div>
  <div class="item">8</div>
  <div class="item">9</div>
</div>

但是,正如您所看到的,当我希望它们与其他卡片保持相同的宽度时,该行的最后一个项目会延伸整个行的宽度,因此我知道卡片的最小宽度应为{ {1}}-但是350px可能会在屏幕自动换行之前达到屏幕允许的最大大小,因此我无法指定max-width

编辑2

此帖子here提到使用伪像这样的

max-width

但是它实际上并不能正常工作,我已经看到了一些依赖于浏览器宽度的解决方案,但是我有一个可折叠的侧边栏,该边栏会更改该父容器的宽度,因此我无法依靠屏幕宽度。这就是为什么网格解决方案如此出色的原因

编辑

通过添加具有相同的.container::after{ content: ''; flex: auto; } flex: 1的额外“不可见”项目,我能够创建一个真正的hacky修复程序

2 个答案:

答案 0 :(得分:1)

我尝试使用IE 11测试您的示例,并对其进行一些测试。

比我尝试这样设置flex flex:flex:0 0 33.3333%;; item 类中使其在IE 11中起作用。

修改后的代码:

<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
<style>
.container{
  width: 100%;
  min-height: 100vh;
  display: flex;
  flex-wrap: wrap;

}

.item{
  background: red;
  border: 1px solid black;
  height: 350px;
  flex: flex: 0 0 33.3333%;;

  min-width: 350px;

}
</style>
</head>
<body>

<div class="container">
  <div class="item">1</div>
  <div class="item">2</div>
  <div class="item">3</div>
  <div class="item">4</div>
  <div class="item">5</div>
  <div class="item">6</div>
  <div class="item">7</div>
  <div class="item">8</div>
  <div class="item">9</div>
</div>

</body>
</html>

IE 11中的输出:

enter image description here

答案 1 :(得分:-1)