html - 2列CSS网格,直到一定宽度
问题描述
我正在尝试为 CSS 网格建模
我希望它是 2x2
xx yy
ww zz
虽然屏幕的宽度至少为 N,但我希望每个单元格占据 50% 的宽度,中间有一个间隙。
xxxx yyyy
wwww zzzz
当屏幕达到某个最小宽度时,我希望网格堆叠
x
y
w
z
如果我从这个网格开始
.grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(50%, 1fr));
grid-column-gap: 32px;
grid-row-gap: 32px;
}
.grid-item {
width: 100%;
height: 100%;
}
<div class="grid">
<div class="grid-item"/>
<div class="grid-item"/>
<div class="grid-item"/>
<div class="grid-item"/>
</div>
网格总是垂直堆叠,因为永远不会有足够的空间容纳 2 个 50% 的单元格,具有 32px 的静态列间隙。
如果我将其更改为
.grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(49%, 1fr));
grid-column-gap: 32px;
grid-row-gap: 32px;
}
然后网格将是 2x2,直到某个最小屏幕宽度,它们将垂直堆叠。这是我想要的行为,除了网格垂直堆叠似乎有些意外之外,因为它只是由于grid-column-gap
. 我实际上并没有为我的网格单元定义最小宽度,它只是导致我的列间隙占用超过 2% 空间的任何宽度。
如果我想明确定义网格折叠的像素限制怎么办?如果我想要这种行为而没有列间隙怎么办?
解决方案
也许解决这个问题的好方法是使用 CSS 的媒体查询和百分比。您可以使用如下代码:
<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
<style>
.grid{
width:100%;
}
@media only screen and (min-width: 600px) {
.grid-item {
display:inline-block;
width:46%;
padding: 1%;
}
}
@media only screen and (max-width: 599px) {
.grid-item {
width:100%;
display:block;
padding: 32px;
}
}
</style>
</head>
<body>
<div class="grid">
<div class="grid-item">one</div>
<div class="grid-item">two</div>
<div class="grid-item">three</div>
<div class="grid-item">four</div>
</div>
</body>
另一种更简单的方法可能是使用Bootstrap 的网格,但由于您的问题没有 Bootstrap 标签,所以我没有提到它。
推荐阅读
- javascript - 当我尝试应用动态 css 大小属性时,应用程序渲染大于视口
- php - 在 PHP 中添加被覆盖的超链接
- android - 我的 Java 函数中的 2 行不想在 Android 应用程序中执行
- java - 正则表达式查找具有条件的子字符串
- java - Domino 9 FP10 xpages 外部 JAR
- android - 即使在 EditText 获得焦点后也显示对话框全屏
- javascript - 如何从 SharePoint 连接到 OAuth
- javascript - react-native-datepicker 中的当前日期值为空
- prolog - 为什么你在prolog中定义了两次规则
- ruby-on-rails - 如何在 Rails 6 中将 i18n-js 与 webpacker 一起使用?