为什么Safari中CSS网格行高不同?

kis*_*lle 7 css safari css-grid

我使用CSS Grid布局了困难的网格布局,其中网格项目的高度和宽度都不同。网格行1fr的高度设置为与网格高度成比例。某些网格项目具有grid-row: span 2grid-row: span 3

网格元素绝对位于包装纸的内部,并带有填充物,以保持长宽比。

在-ms-前缀的帮助下,这一切在Chrome和Firefox甚至IE中都可以完美运行。

在Safari中,情况有所不同:

但是,在Safari中,网格行的计算方式似乎并不相同-Safari浏览器中的行高比任何其他浏览器都长很多,短得多,这破坏了布局。为什么是这样?

从栅格元素删除绝对位置不会更改行高。但是,似乎放在height: 0网格包装上的行为会使行高在Safari中的行为与在Chrome和Firefox中的行为相同。这是什么原因呢?

码:

Codepen:https://codepen.io/katrina-isabelle/pen/rRqvXq

.grid-wrapper {
  position: relative;
  padding-bottom: 60%;
}

.grid {
  display: grid;
  grid-gap: 2px;
  grid-template-columns: 29% 21% 21% 29%;
  grid-auto-rows: 1fr;
  position: absolute;
  width: 100%;
  height: 100%;
}

.grid-item {
  width: 100%;
  color: #ccc;
  background: #ccc;
}
.grid-item--1 {
  grid-row: span 2;
}
.grid-item--2 {
  grid-row: span 3;
}
.grid-item--3 {
  grid-row: span 2;
}
.grid-item--4 {
  grid-row: span 3;
}
.grid-item--5 {
  grid-row: span 2;
}
.grid-item--6 {
  grid-row: span 3;
}
.grid-item--7 {
  grid-row: span 2;
}
.grid-item--8 {
  grid-row: span 2;
}
.grid-item--9 {
  grid-row: span 1;
}
Run Code Online (Sandbox Code Playgroud)
<div class="grid-wrapper">
  <div class="grid">
    <div class="grid-item grid-item--1">
      Grid item
    </div>
    <div class="grid-item grid-item--2">
      Grid item
    </div>
    <div class="grid-item grid-item--3">
      Grid item
    </div>
    <div class="grid-item grid-item--4">
      Grid item
    </div>
    <div class="grid-item grid-item--5">
      Grid item
    </div>
    <div class="grid-item grid-item--6">
      Grid item
    </div>
    <div class="grid-item grid-item--7">
      Grid item
    </div>
    <div class="grid-item grid-item--8">
      Grid item
    </div>
    <div class="grid-item grid-item--9">
      Grid item
    </div>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

小智 12

我在 Safari 12+ 中遇到了类似的问题,因为我还使用填充来强制基于网格的布局中的纵横比。我不确定这是否与您遇到的问题完全相同,但以下修复对我在 Safari 中的笔上适用。

TLDR:放在display:grid网格容器周围的 div 上。这是在行动:https : //codepen.io/harrison-rood/pen/rNxXWPb

在为此撕了几个小时的头发后,我决定尝试将display:grid包装纸放在我的主网格周围,效果很好!我不知道为什么这会解决它,但我的猜测是它在父容器上为 Safari 提供了更多上下文,并且允许height:100%引用网格上下文而不是父容器,类似于 Chrome 和 Firefox 在默认情况下的处理方式. 这让我感到非常沮丧,以至于我觉得有义务创建一个 SO 帐户,以便我可以发布此内容!希望能帮助到你!

  • 感谢您分享这个解决方案!正如我在 OP 中提到的,您还可以添加 `height: 0` 来修复它。非常神秘。我认为“display: grid”感觉是一个更好的方法,但无论哪种方式,拥有多个选项总没有坏处 (2认同)