是否有可能总是有偶数列自动填充?
Is it possible to always have an even number of columns with auto-fill?
嘿,我是 CSS 网格的新手。看看下面的例子:
.platform {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
grid-gap: 20px;
}
.item {
width:100%;
background-color:#aaa;
padding:10px;
box-sizing:border-box;
text-align:center;
}
.wrapmed {
max-width:400px;
}
.wrapsmall {
max-width:300px;
}
<div class="platform">
<div class="item">a</div>
<div class="item">b</div>
<div class="item">c</div>
<div class="item">d</div>
</div>
<br/><br/>
<div class="wrapmed">
<div class="platform">
<div class="item">a</div>
<div class="item">b</div>
<div class="item">c</div>
<div class="item">d</div>
</div>
</div>
<br/><br/>
<div class="wrapsmall">
<div class="platform">
<div class="item">a</div>
<div class="item">b</div>
<div class="item">c</div>
<div class="item">d</div>
</div>
</div>
基本上网格效果很好。但是,我永远不想打破网格,使 3 个项目在顶部,而只有一个项目在下一行。
我想要 4 列、两列或一列。 (如何)我可以实现这种行为吗?
编辑:代码片段现在显示了三种可能的情况。情况 2 是不需要的。
你可以使用偶数或奇数的伪 class child 所以 .item nth-child(even)
您可以嵌套平台 div 以控制列的折叠方式。
我添加了一个父平台元素,将两个子平台元素并排放置或放置在另一个平台元素之上。
我在子平台元素中将这些项目成对或成对分组。
现在当屏幕尺寸缩小时,子平台元素将首先堆叠创建一个 2x2 网格。
如果屏幕进一步缩小,子平台内的项目将堆叠并创建一个 1x4 网格。
.platform {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
grid-gap: 20px;
}
.item {
width:100%;
background-color:#aaa;
padding:10px;
box-sizing:border-box;
text-align:center;
}
.wrapmed {
max-width:400px;
}
.wrapsmall {
max-width:300px;
}
<div class="platform">
<div class="platform">
<div class="item">a</div>
<div class="item">b</div>
</div>
<div class="platform">
<div class="item">c</div>
<div class="item">d</div>
</div>
</div>
<br/><br/>
<div class="wrapmed">
<div class="platform">
<div class="platform">
<div class="item">a</div>
<div class="item">b</div>
</div>
<div class="platform">
<div class="item">c</div>
<div class="item">d</div>
</div>
</div>
</div>
<br/><br/>
<div class="wrapsmall">
<div class="platform">
<div class="platform">
<div class="item">a</div>
<div class="item">b</div>
</div>
<div class="platform">
<div class="item">c</div>
<div class="item">d</div>
</div>
</div>
</div>
这是另一个迟到的答案,但我想我会在这里记录下来,以供以后遇到同样问题的观众使用!从已接受的答案中汲取灵感,我设法找到了一个对我来说效果更好的解决方案,但是改用了 flexbox。
我使用了 flexbox 而不是 CSS 网格,因为我对这个功能的要求是有几张卡片,它们只能以偶数折叠,但不要超过最大宽度,因为这会使卡片看起来当子平台最初会崩溃时很奇怪,因为它们的容器太宽并且卡片扩展到网格的宽度 - 即我被限制在列网格轨道的宽度,而使用 flexbox 你不是。
(如果有办法用网格做到这一点,请发表评论让我知道 - 我尝试设置项目的最大宽度,但随后无法让它们在网格单元格内居中,同时也在一个我选择的最小和最大宽度)
我在这里所做的是使用嵌套容器的相同想法,但是它们与接受的答案中的不同(请注意子容器 class 中的附加 flex 属性)。然后,我使用 flex: 1 0 50px
中的 flex-basis 属性 设置我想要的最小项目宽度,并使用 max-width: 100px
设置我想要的最大宽度。因此我有一个在 50-100px 之间增长的 flex 项目。
.container {
display: flex;
flex-wrap: wrap;
gap: 10px;
justify-content: space-evenly;
}
.sub-container {
display: flex;
flex-wrap: wrap;
gap: 10px;
justify-content: space-around;
flex: 1 0 50px;
}
.item {
flex: 1 0 50px;
max-width: 100px;
height: 100px;
background-color: #aaa;
padding: 10px;
text-align: center;
}
<div class="container">
<div class="sub-container">
<div class="item">a</div>
<div class="item">b</div>
</div>
<div class="sub-container">
<div class="item">c</div>
<div class="item">d</div>
</div>
</div>
嘿,我是 CSS 网格的新手。看看下面的例子:
.platform {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
grid-gap: 20px;
}
.item {
width:100%;
background-color:#aaa;
padding:10px;
box-sizing:border-box;
text-align:center;
}
.wrapmed {
max-width:400px;
}
.wrapsmall {
max-width:300px;
}
<div class="platform">
<div class="item">a</div>
<div class="item">b</div>
<div class="item">c</div>
<div class="item">d</div>
</div>
<br/><br/>
<div class="wrapmed">
<div class="platform">
<div class="item">a</div>
<div class="item">b</div>
<div class="item">c</div>
<div class="item">d</div>
</div>
</div>
<br/><br/>
<div class="wrapsmall">
<div class="platform">
<div class="item">a</div>
<div class="item">b</div>
<div class="item">c</div>
<div class="item">d</div>
</div>
</div>
基本上网格效果很好。但是,我永远不想打破网格,使 3 个项目在顶部,而只有一个项目在下一行。
我想要 4 列、两列或一列。 (如何)我可以实现这种行为吗?
编辑:代码片段现在显示了三种可能的情况。情况 2 是不需要的。
你可以使用偶数或奇数的伪 class child 所以 .item nth-child(even)
您可以嵌套平台 div 以控制列的折叠方式。
我添加了一个父平台元素,将两个子平台元素并排放置或放置在另一个平台元素之上。
我在子平台元素中将这些项目成对或成对分组。
现在当屏幕尺寸缩小时,子平台元素将首先堆叠创建一个 2x2 网格。
如果屏幕进一步缩小,子平台内的项目将堆叠并创建一个 1x4 网格。
.platform {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
grid-gap: 20px;
}
.item {
width:100%;
background-color:#aaa;
padding:10px;
box-sizing:border-box;
text-align:center;
}
.wrapmed {
max-width:400px;
}
.wrapsmall {
max-width:300px;
}
<div class="platform">
<div class="platform">
<div class="item">a</div>
<div class="item">b</div>
</div>
<div class="platform">
<div class="item">c</div>
<div class="item">d</div>
</div>
</div>
<br/><br/>
<div class="wrapmed">
<div class="platform">
<div class="platform">
<div class="item">a</div>
<div class="item">b</div>
</div>
<div class="platform">
<div class="item">c</div>
<div class="item">d</div>
</div>
</div>
</div>
<br/><br/>
<div class="wrapsmall">
<div class="platform">
<div class="platform">
<div class="item">a</div>
<div class="item">b</div>
</div>
<div class="platform">
<div class="item">c</div>
<div class="item">d</div>
</div>
</div>
</div>
这是另一个迟到的答案,但我想我会在这里记录下来,以供以后遇到同样问题的观众使用!从已接受的答案中汲取灵感,我设法找到了一个对我来说效果更好的解决方案,但是改用了 flexbox。
我使用了 flexbox 而不是 CSS 网格,因为我对这个功能的要求是有几张卡片,它们只能以偶数折叠,但不要超过最大宽度,因为这会使卡片看起来当子平台最初会崩溃时很奇怪,因为它们的容器太宽并且卡片扩展到网格的宽度 - 即我被限制在列网格轨道的宽度,而使用 flexbox 你不是。
(如果有办法用网格做到这一点,请发表评论让我知道 - 我尝试设置项目的最大宽度,但随后无法让它们在网格单元格内居中,同时也在一个我选择的最小和最大宽度)
我在这里所做的是使用嵌套容器的相同想法,但是它们与接受的答案中的不同(请注意子容器 class 中的附加 flex 属性)。然后,我使用 flex: 1 0 50px
中的 flex-basis 属性 设置我想要的最小项目宽度,并使用 max-width: 100px
设置我想要的最大宽度。因此我有一个在 50-100px 之间增长的 flex 项目。
.container {
display: flex;
flex-wrap: wrap;
gap: 10px;
justify-content: space-evenly;
}
.sub-container {
display: flex;
flex-wrap: wrap;
gap: 10px;
justify-content: space-around;
flex: 1 0 50px;
}
.item {
flex: 1 0 50px;
max-width: 100px;
height: 100px;
background-color: #aaa;
padding: 10px;
text-align: center;
}
<div class="container">
<div class="sub-container">
<div class="item">a</div>
<div class="item">b</div>
</div>
<div class="sub-container">
<div class="item">c</div>
<div class="item">d</div>
</div>
</div>