IE中Css Grid中的项目相互叠加

Vla*_*iuk 9 css internet-explorer css3 css-grid

IE 11中的Css Grid中的项目相互叠加.在Chrome,FF和Safari中,一切都运行正常,但不是IE 11.

铬: 在此输入图像描述

IE: 在此输入图像描述

码:

.content-item__image {
  height: 210px;
  width: 100%;
  background-size: cover;
  background-position: center center;
  background-repeat: no-repeat;
}

.content-item__description {
  padding: 16px 28px;
}

.content-grid {
  display: grid;
  display: -ms-grid;
  grid-template-columns: 1fr 1fr 1fr;
  -ms-grid-columns: 1fr 1fr 1fr;
  grid-template-rows: 1fr 1fr;
  -ms-grid-rows: 1fr 1fr;
  grid-gap: 1rem;
}
Run Code Online (Sandbox Code Playgroud)
<div class="content-grid">
  <div class="content-item">
    <div class="content-item__backdrop"></div>
    <div class="content-item__image"></div>
    <div class="content-item__description">Cos’è il Texas holdem</div>
  </div>
  <div class="content-item">
    <div class="content-item__backdrop"></div>
    <div class="content-item__image"></div>
    <div class="content-item__description">Cos’è il Texas holdem</div>
  </div>
  <div class="content-item">
    <div class="content-item__backdrop"></div>
    <div class="content-item__image"></div>
    <div class="content-item__description">Cos’è il Texas holdem</div>
  </div>
  <div class="content-item">
    <div class="content-item__backdrop"></div>
    <div class="content-item__image"></div>
    <div class="content-item__description">Cos’è il Texas holdem</div>
  </div>
  <div class="content-item">
    <div class="content-item__backdrop"></div>
    <div class="content-item__image"></div>
    <div class="content-item__description">Cos’è il Texas holdem</div>
  </div>
  <div class="content-item">
    <div class="content-item__backdrop"></div>
    <div class="content-item__image"></div>
    <div class="content-item__description">Cos’è il Texas holdem</div>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

可能是什么问题以及解决问题的方法?将不胜感激任何帮助.

小智 16

首先.坏消息是 - 它也发生在Edge上.因此,IE和Edge浏览器的问题并不好,因为Edge现在似乎是非常现代的浏览器(编辑:MS Edge最终完全支持CSS网格[版本16+]).根据Microsoft 文档,它应该可以正常工作......但事实并非如此.尝试了一些-ms前缀修复,但它仍然被打破,看起来非常糟糕.css grid这些浏览器似乎没有很好的实现.让我们考虑如何解决这个问题,因此IE/Edge用户的页面看起来不错.


基本问题解释

这些项目相互叠加,因为在IE和Edge网格项目始终堆叠在第一个单元格中.如果您确切知道项目的数量,则可以使用css grid属性之一轻松修复它:

.content-item:nth-child(2) {
    -ms-grid-column: 2;
}

.content-item:nth-child(3) {
    -ms-grid-column: 3;
}
Run Code Online (Sandbox Code Playgroud)

等等......问题是当内容是动态的,你不知道将在网格父元素中出现多少项.


HTML中的条件注释

我曾经使用条件注释来为IE浏览器提供特殊的CSS文件.

<!--[if IE ]>
  <link href="iecss.css" rel="stylesheet" type="text/css">
<![endif]-->
Run Code Online (Sandbox Code Playgroud)

它不会帮助你了.自IE10以来,Internet Explorer和Edge 都不支持 HTML中的条件语句.太糟糕了,这个解决方案只涵盖IE9及以下版本.


工作解决方案!(仅限CSS)

解决Microsoft浏览器问题的一种方法是使用@supports@media查询来捕获正确的浏览器.

只获得IE使用

@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
    Grid fixes for IE goes here...
}
Run Code Online (Sandbox Code Playgroud)

要仅获取Edge浏览器,请使用

@supports (-ms-ime-align: auto) {
    Grid fixes for Edge goes here...
}
Run Code Online (Sandbox Code Playgroud)

更多关于@supports指令 - 这里.不幸的是你不能使用@supports来捕获IE,因为它不支持它 - caniuse.我们选择Edge by -ms-ime-align属性,因为Edge仅支持此属性,因此使用它是安全的.


希望能帮助到你.这是工作的DEMO.

  • 基督!请微软这是痛苦的! (2认同)