gpt4 book ai didi

html - Flexbox:每行 4 个元素

转载 作者:IT老高 更新时间:2023-10-28 11:07:08 36 4
gpt4 key购买 nike

我正在使用 flexbox 来显示 8 个元素,这些元素将随我的页面动态调整大小。我如何强制它将元素分成两行? (每行 4 个)?

这是一个相关的片段:

(或者如果您更喜欢 jsfiddle - http://jsfiddle.net/vivmaha/oq6prk1p/2/)

.parent-wrapper {
height: 100%;
width: 100%;
border: 1px solid black;
}
.parent {
display: flex;
font-size: 0;
flex-wrap: wrap;
margin: -10px 0 0 -10px;
}
.child {
display: inline-block;
background: blue;
margin: 10px 0 0 10px;
flex-grow: 1;
height: 100px;
}
<body>
<div class="parent-wrapper">
<div class="parent">
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
</div>
</div>
</body>

最佳答案

容器上有 flex-wrap: wrap。这很好,因为它覆盖了默认值,即 nowrap ( source )。这就是 some cases 中的元素不换行以形成网格的原因。 .

在这种情况下,主要问题是 flex 元素上的 flex-grow: 1

flex-grow 属性实际上并不调整 flex 元素的大小。它的任务是分配容器中的空闲空间(source)。所以无论屏幕尺寸多小,每个元素都会收到成比例的部分可用空间就行了。

更具体地说,您的容器中有八个 flex 元素。使用 flex-grow: 1,每个人获得 1/8 的可用空间。由于您的元素中没有内容,它们可以缩小到零宽度并且永远不会换行。

解决方案是在元素上定义宽度。试试这个:

.parent {
display: flex;
flex-wrap: wrap;
}

.child {
flex: 1 0 21%; /* explanation below */
margin: 5px;
height: 100px;
background-color: blue;
}
<div class="parent">
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
</div>

flex-grow: 1flex 简写中定义,flex-basis 不需要为 25%,这将由于边距,实际上每行产生三个元素。

由于 flex-grow 会消耗行上的空闲空间,flex-basis 只需要足够大就可以强制执行换行。在这种情况下,使用 flex-basis: 21%,有足够的空间放置边距,但没有足够的空间放置第五个元素。

关于html - Flexbox:每行 4 个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29546550/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com