javascript - 在固定大小的大正方形中创建动态相等大小的小正方形网格
解决方案
这将是最通用的解决方案。根据子元素的总和,使用 CSS grid
whit 可数列和行。
JS解释:
grid.children.length
- 计算grid
div 的孩子。Math.sqrt(grid.children.length)
- 返回子长度的平方根。Math.ceil(Math.sqrt(grid.children.length))
- 将数字向上舍入到下一个最大整数。所以我们得到我们的列和行数。--cols
- 将 CSS 变量设置为我们的grid
元素。
此 JavaScript 适用于任意数量的grid
块。
for (const grid of document.querySelectorAll('.grid')) {
grid.style.setProperty('--cols', Math.ceil(Math.sqrt(grid.children.length)));
}
.grid {
--cols: 1;
width: 100px;
height: 100px;
display: inline-grid;
grid-template-columns: repeat(var(--cols), 1fr);
grid-template-rows: repeat(var(--cols), 1fr);
column-gap: 2px;
row-gap: 2px;
background: #eee;
vertical-align: top;
margin: 0 10px 10px 0;
}
.grid>div {
background: #333;
}
<div class="grid">
<div></div>
</div>
<div class="grid">
<div></div>
<div></div>
<div></div>
</div>
<div class="grid">
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
<div class="grid">
<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>
推荐阅读
- javascript - 无法在 React 中使用 useDispatch 挂钩设置状态挂钩
- prolog - Prolog beginner, combining rules question?
- c# - INotifyPropertyChanged 未使用 Entity Framework Core 正确调用
- azure-devops - 无法通过推送到 YML 管道中的另一个存储库来触发构建
- bash - 如何在终端中导出 Anaconda2 PATH
- python - Python中文件的嵌套字典
- javascript - 将文本放在页面的中心和中间
- android - Firebase:向所有旧用户添加设备令牌 ID
- flutter - 在 Flutter ThemeData 和 InputDecordation 中,focusColor 属性有什么作用?
- node.js - 从 HERE 反向地理编码 API 获取速度限制