css - 将换行限制为 n 行
问题描述
我正在尝试以一种方式在“容器”(父 div)中安排“项目”(子 div)
- 物品包装在灵活宽度的容器中,使容器尽可能窄,但最大。两排
- 容器包装在页面内(或一些包装器/容器容器内)。
这就是我要的:
┌───┐┌─────────┐┌─────┐
│ █ ││ █ █ █ █ ││ █ █ │
│ █ ││ █ █ █ ││ █ █ │
└───┘└─────────┘└─────┘
与此相反,每行的项目数是固定的,但行数是灵活的。
我的尝试是制作容器和它们的父容器display:flex
,给容器一个固定的高度,只允许两行,并给容器一个高flex-shrink
值,所以它们会尽量变窄并让它们的子项包裹起来。但是物品不是这样包装的,相反,我明白了
.wrapper {
display:flex;
flex-wrap:wrap;
font-size:2vw;
width:96vw;
}
.container {
flex:0 20 auto;
display:flex;
flex-wrap:wrap;
height:20vw;
margin:1vw;
background:skyblue;
}
.item {
position:relative;
width:10vw;
height:7vw;
margin:1vw;
background:orange;
}
<div class="wrapper">
<div class="container">
<div class="item">1a</div>
<div class="item">1b</div>
</div>
<div class="container">
<div class="item">2a</div>
<div class="item">2b</div>
<div class="item">2c</div>
<div class="item">2d</div>
<div class="item">2e</div>
<div class="item">2f</div>
<div class="item">2g</div>
</div>
<div class="container">
<div class="item">3a</div>
<div class="item">3b</div>
<div class="item">3c</div>
<div class="item">3d</div>
</div>
</div>
┌─────┐
│ █ █ │
│ │
└─────┘
┌───────────────┐
│ █ █ █ █ █ █ █ │
│ │
└───────────────┘
┌─────────┐
│ █ █ █ █ │
│ │
└─────────┘
物品不会有任何包装的冲动,而是会拉伸容器,使它们变得太宽而无法包装,大多数情况下会占据一整排。
是的,我可以在后端的帮助下暴力破解两行,但这感觉不对:o[。
(条件:定义了项目的高度和宽度。每个容器的项目数是可变的,但受到限制,以便每个容器都适合页面。)
有什么好主意吗?非常感激!谢谢。
解决方案
正如您所说,您将需要一些后端帮助。如果您能够向每个容器添加元素的数量,那么您可以像下面这样:
.wrapper {
display:flex;
flex-wrap:wrap;
font-size:2vw;
width:96vw;
}
.container {
flex-basis:calc(12vw*var(--n)/2); /* 12 = width + 2*margin */
min-width:0;
display:flex;
flex-wrap:wrap;
height:20vw;
margin:1vw;
background:skyblue;
}
.item {
position:relative;
width:10vw;
height:7vw;
margin:1vw;
background:orange;
}
<div class="wrapper">
<div class="container" style="--n:2">
<div class="item">1a</div>
<div class="item">1b</div>
</div>
<div class="container" style="--n:8"> <!-- we round to the biggest even number -->
<div class="item">2a</div>
<div class="item">2b</div>
<div class="item">2c</div>
<div class="item">2d</div>
<div class="item">2e</div>
<div class="item">2f</div>
<div class="item">2g</div>
</div>
<div class="container" style="--n:4">
<div class="item">3a</div>
<div class="item">3b</div>
<div class="item">3c</div>
<div class="item">3d</div>
</div>
</div>
推荐阅读
- python - 在这个 Python 代码片段中调用函数中的函数是如何工作的?
- neural-network - 在 DNN 中应用批规范与仅使用权重和偏差有什么区别?
- node.js - TypeError [ERR_INVALID_OPT_VALUE]:对于选项“主机名”无效
- scala - 包对象可以在scala中有一个apply方法吗?
- r - 将 R 中的向量按特定顺序转换为下/上三角矩阵
- javascript - 如何使用自定义复选框制作表单,将我定向到提交表单上的不同 html 文件?
- r - 计算数据框中多列的特定值序列的数量
- java - 解决 GRADLE 中“无法将 MANIFEST.MF 添加到 ZIP”错误的解决方案
- java - 正则表达式在 Notepad++ 中工作,但在 Java 中不工作
- css - 根据背景图像大小调整 div 大小