css - CSS Grid Nesting 导致子网格从父网格单元格中溢出
问题描述
我正在我的个人网站上工作,我正在使用 CSS Grid 来处理与布局相关的所有内容。我正在尝试使我的网格系统尽可能灵活以允许嵌套(以防我真的需要它)。
我的问题如下:我有一个有 2 行的网格,每行有 2 列,分别有 3 列。我试图基本上嵌套相同的网格,在第一列的 3 列中。我认为由于差距太大,他们会被父母吹走。
下面的代码:
.grid {
display: grid;
width: 100%;
grid-template-columns: repeat(12, minmax(0, 1fr));
grid-gap: 50px;
}
.grid__col-12 { grid-column-end: span 12; }
.grid__col-4 { grid-column-end: span 4; }
.grid__col-3 { grid-column-end: span 3; }
.grid__col-6 { grid-column-end: span 6; }
<div class="grid">
<div class="grid__col-6">hey</div>
<div class="grid__col-6">hey</div>
<div class="grid__col-4">hey</div>
<div class="grid__col-4">hey</div>
<div class="grid grid__col-4">
<div class="grid__col-6">hey</div>
<div class="grid__col-6">hey</div>
<div class="grid__col-4">hey</div>
<div class="grid__col-4">hey</div>
<div class="grid__col-4">hey</div>
</div>
</div>
我真的不明白为什么会这样,所以希望得到一些澄清。
十分感谢!
解决方案
第二个网格有溢出div
元素的原因是因为你的grid-gap
. grid-gap
浏览器将值优先于fr
您现有的单位。因此,您的浏览器总是试图确保您拥有grid-gap: 50px
,而不管父元素(或屏幕)的宽度如何。
因此,如果您的屏幕宽度(例如)为 375 像素(iPhone 11 Pro 尺寸),浏览器将尽其所能获得grid-gap
50 像素,但您会遇到div
尺寸问题,因为浏览器正在尝试查找任何空间留给你的div
元素。在这种情况下,您留下的空间量将非常少,因此您必须使用@media
查询来更改网格在不同屏幕宽度下的功能......也就是说,如果您坚持保持 50px grid-gap
。
另一个解决方案是让你grid-gap
的百分比。这样,无论您拥有的父元素(或屏幕)宽度如何,它都会是动态的。
总而言之,您的嵌套网格没有足够的空间容纳其div
元素,因为嵌套网格已经很小了。浏览器优先考虑grid-gap: 50px
,因此嵌套网格中没有空间留给其他列。
推荐阅读
- spring - 在 JUnit 5 中自动装配的 applicationContext 为空
- python - 创建 2 个列表的 Pythonic 方法,其中一个是一组重复的字符串并变成一个 dict
- swift - 如何在交换卡片时在卡片上添加不喜欢的图像 Koloda,swift
- reactjs - 在 useEffect 中重置 useState 限制请求(重置为值更改的初始限制)
- javascript - 通过其键值从嵌套 JSON 中查找和删除对象
- php - 如果 updated_at 则显示更新时间 如果没有 created_at
- python - 哪种数据类型最适合在 Redis 中存储和轻松检索具有重复项的对 [(name,number)]?
- bash - 使用 Bash 脚本删除最近的文件
- javascript - JCanvas:擦除画布不会擦除可拖动元素
- html - Flutter 使用 html 解析从 img src 获取数据