【发布时间】:2019-08-16 06:12:19
【问题描述】:
我使用 CSS Grid 来布置一个困难的网格布局,其中网格项目具有不同的高度和宽度。网格行的高度设置为1fr,使其与网格的高度成正比。某些网格项具有grid-row: span 2 或grid-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;
}
<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>
【问题讨论】:
-
如果我没记错的话,Safari 不喜欢你用于
.grid的单位%。一般来说,我会在 safaridisplay: flex中使用网格布局。但这只是我个人的喜好。 -
@Demian 只是想注意,如果您检查元素,您会看到
.grid元素确实扩展以填充其父元素的高度,它是网格内的行没有扩展.您将如何在 flex 中重新创建此布局? -
有父 flex 和子 inline-flex。
-
@Demian 很想看一个例子。我刚刚在
.grid上尝试了display: flex和.grid-items上的display: inline-flex,它破坏了布局