【发布时间】:2020-10-16 18:32:18
【问题描述】:
有没有办法用任意数量的正方形、相同大小的孩子(少至五个,多至 50 个)填充给定容器,以便孩子:
- 装满容器,尽可能少地留出垂直和水平空间;和
- 不要溢出容器?
例如,想象一盒 17 个圆形头像,每个头像都按比例放大,直到任何进一步的尺寸增加都将导致它们包裹并溢出容器底部。
我知道我可以使用 JS 来计算填充容器的孩子的最佳比例,但我觉得 flex 或 grid 都内置了这个功能。
这与我得到的差不多:
.container {
border: 1px solid tomato;
display: flex;
flex-wrap: wrap;
gap: 1vw;
height: 100vh;
justify-content: center;
width: 100vw;
}
.container > div {
background-color: coral;
flex: 0 0 12%;
margin: .5em;
}
.container .div::before {
content: '';
display: block;
padding-top: 100%;
}
<div class="container">
<!-- 32 children -->
<div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>
<div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>
<div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>
<div></div><div></div>
</div>
抱歉,如果这是重复的。在提问之前,我已尽我最大的努力寻求答案。
[编辑:添加细节]
这是显示具有 FIXED 大小的框和项目大小直到容器完全装满的所需结果。如果盒子的大小与此不同,或者里面有不同数量的物品,则这些物品会缩放,直到它们都装在里面而不会溢出。最后两个孤儿的对齐方式并不重要,但它们必须与其余项目的大小相同。
【问题讨论】:
-
这些都没有这样的功能。 Javascript 是这里的最佳选择。
-
如果不知道具体数字或计算父级的尺寸,Css 无法计算子级的大小。这就是为什么需要 Javascript。
-
你能说明填充应该如何发生吗?看来您正在寻找已经完美地做到这一点的 flex-grow(除了默认的拉伸对齐)
-
@TemaniAfif :我用显示所需结果的图像更新了问题。