css - 最适合容器的子 div(行和列)
问题描述
我正在尝试找出基于父容器中的可用空间自动调整 div 大小的最佳方法,以避免出现一堆空白。我也希望,无论存在多少 div,该解决方案都应该有效(即 - 数量会随着时间而变化)。
它不必完美契合,也可以使用垂直滚动,但我试图尽可能多地避免空白。我玩弄了这个脚本,它让我很接近,但我觉得使用 css-grids 自动调整大小功能有更好的解决方案:
if (size.width > size.height && divCount.length < 13) {
columnSize = Math.round(12 / (divCount.length / 2));
}
if (size.width < size.height && divCount.length < 13) {
columnSize = 6;
}
let colClass = 'col-6 col-sm-4 col-md-' + columnSize;
入门文件,我为缺少代码而道歉 - 我真的不知道从哪里开始: https ://codepen.io/liamb/pen/KKVqvdz
解决方案
不确定您希望达到的准确预期结果。但是有一些想法。
- 您可以使用类
.container-fluid
而不是.container
完整的宽度。 - 如果你想要方形
col
- 我做了一个例子如何使用padding-top
.container-fluid{
background: yellow;
width: 100vw;
height:100vh;
}
.row{
padding:15px;
height: 100%;
}
.row > div {
border: 1px solid #000;
padding: 0;
}
.row > div::after {
content: '';
display: block;
position: relative;
z-index: 1;
padding-top: 100%;
}
.row > div .col-in {
position: absolute;
z-index: 2;
left: 0;
right: 0;
width: 100%;
height: 100%;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.0/css/bootstrap.min.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.0/js/bootstrap.min.js"></script>
<div class="container-fluid">
<div class="row align-items-start">
<div class="col-3">
<div class="col-in">
Div 1
</div>
</div>
<div class="col-3">
<div class="col-in">
Div 2
</div>
</div>
<div class="col-3">
<div class="col-in">
Div 3
</div>
</div>
<div class="col-3">
<div class="col-in">
Div 4
</div>
</div>
</div>
</div>
这是使用grid-template-columns
and auto-fill
and的示例auto-fit
(尝试调整它的大小以获得最佳体验)。
body {
padding: 1em;
}
hr {
margin: 50px;
}
.grid-container {
display: grid;
/*just to resize the example, optional*/
resize: horizontal;
overflow: hidden;
}
.grid-container-fill {
grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));
}
.grid-container-fit {
grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
}
.grid-element {
background-color: #000;
padding: 20px;
color: #fff;
border: 1px solid #fff;
}
<h2>auto-fill</h2>
<div class="grid-container grid-container-fill">
<div class="grid-element">
1
</div>
<div class="grid-element">
2
</div>
<div class="grid-element">
3
</div>
<div class="grid-element">
4
</div>
<div class="grid-element">
5
</div>
<div class="grid-element">
6
</div>
<div class="grid-element">
7
</div>
</div>
<hr>
<h2>auto-fit</h2>
<div class="grid-container grid-container-fit">
<div class="grid-element">
1
</div>
<div class="grid-element">
2
</div>
<div class="grid-element">
3
</div>
<div class="grid-element">
4
</div>
<div class="grid-element">
5
</div>
<div class="grid-element">
6
</div>
<div class="grid-element">
7
</div>
</div>
尽管我已经为方形 parent 编写了一个有趣的解决方案。
如果以上所有信息都不能让您满意 - 请描述
推荐阅读
- vue.js - 如何在 Vue.js 上获取导入组件的数据?
- django - 我可以覆盖 rest_framework 权限类中的 http 状态吗?
- angular - 第一个 http 请求在第二个之后结束。如何解决?
- tensorflow - 如何使用 Tensorflow Keras api 从预训练模型中复制特定层权重?
- cygwin - cygwin中strace的输出格式
- c# - WPF DataGrid - 动态两种方式绑定到 ObservableCollection 中的 T 实例
- kubernetes - 如何在 helm repo 下列出所有可用的图表?
- c - 为什么这个 C 代码会导致分段错误?试图理解指针
- google-apps-script - 如何使用 UrlFetchApp 为 Transloadit API 格式化 JSON 参数
- jupyter-notebook - Jupyter 笔记本没有运行代码。卡在 [*] 直到被打断并再次运行