html - 创建一个自动缩放的固定单元格大小的网格
问题描述
我想在我的网站上创建一个库存视图。基本上它应该是这样的:
请注意,网格的宽度(元素的倍数)始终根据设备的屏幕尺寸进行调整。此外,网格容器应始终自动适应所选网格宽度的宽度。
我尝试使用 css-grid 来做到这一点,尽管我不知道如何让 css-grid 根据屏幕大小自动确定列数。
然后我尝试简单地为每个图像设置一个固定大小,让 HTML 自然分页符处理它:
这确实有效,但是在左侧尺寸上您可以清楚地看到网格容器边距大于右侧,因为浏览器没有根据最佳列号调整容器。下面是关于我是如何做到的代码(做出反应,但这对于这个问题并不重要):
render() {
const gridCSS = {
display:"block",
}
var x=Array.from(Array(99).keys())
return (
<div style={gridCSS}>
{x.map((a)=> (
<img src="//placekitten.com/80/80" style={{border:" 2pt inset #0ff"}}/>
)
)
}
</div>
);
}
}
有没有比这更好的方法来创建具有固定大小的 elmenets 的库存视图?如果没有,我如何调整网格容器以始终适合最接近的元素倍数?
解决方案
你需要display: grid
,它为你的解决方案提供了问题。
我添加了grid-template-columns: repeat(auto-fill, 80px)
,因此它会根据视口的宽度创建宽度为 80 像素的列。重复函数的第二个参数不能是1fr
! 如果您将其指定为1fr
或任何其他 fr 值,它将不起作用。这里可以使用rem、%、em等来代替px。但是你不能在这里使用 fr 单位,因为它不会给你想要的结果。
grid-auto-rows: 80px
这个属性确保,每当为网格创建一个新的时,它的高度总是 80px。因此,无论浏览器自动生成多少行,它们的高度始终为 80px。
grid-gap: 10px
,这个属性确保我们10px
在每个网格项之间保持一个间隙。
然后是使网格项跨越网格中心的主要属性,justify-content: center
. 此属性在水平轴上对齐整个网格。
.grid {
display: grid;
grid-template-columns: repeat(auto-fill, 80px);
grid-auto-rows: 80px;
grid-gap: 10px;
justify-content: center;
}
<div class="grid">
<div class="grid-item"><img src="//placekitten.com/80/80"/></div>
<div class="grid-item"><img src="//placekitten.com/80/80"/></div>
<div class="grid-item"><img src="//placekitten.com/80/80"/></div>
<div class="grid-item"><img src="//placekitten.com/80/80"/></div>
<div class="grid-item"><img src="//placekitten.com/80/80"/></div>
<div class="grid-item"><img src="//placekitten.com/80/80"/></div>
<div class="grid-item"><img src="//placekitten.com/80/80"/></div>
<div class="grid-item"><img src="//placekitten.com/80/80"/></div>
<div class="grid-item"><img src="//placekitten.com/80/80"/></div>
<div class="grid-item"><img src="//placekitten.com/80/80"/></div>
<div class="grid-item"><img src="//placekitten.com/80/80"/></div>
<div class="grid-item"><img src="//placekitten.com/80/80"/></div>
<div class="grid-item"><img src="//placekitten.com/80/80"/></div>
<div class="grid-item"><img src="//placekitten.com/80/80"/></div>
<div class="grid-item"><img src="//placekitten.com/80/80"/></div>
<div class="grid-item"><img src="//placekitten.com/80/80"/></div>
<div class="grid-item"><img src="//placekitten.com/80/80"/></div>
<div class="grid-item"><img src="//placekitten.com/80/80"/></div>
<div class="grid-item"><img src="//placekitten.com/80/80"/></div>
<div class="grid-item"><img src="//placekitten.com/80/80"/></div>
</div>
这是 css-grid 的工作示例: https ://codepen.io/prathameshkoshti/pen/XWKOGeM
推荐阅读
- node.js - 如何在主机名而不是 ip:port 上运行节点快速服务
- php - 在电子邮件通知中显示自定义订单元数据值
- gitlab - 创建没有源代码的 Gitlab 版本
- html - 如何从tr设置的行中删除最后一个边框?
- jquery - 通过jquery迭代Gridview并生成XML输出
- javascript - 无法从 php 中的 ajax 访问 2 个或更多文件
- python - 如何在 Python 2 中从 20 个 CSV 文件创建叠加图?
- python - 在附加维度上重复 keras (tensorflow) 模型
- java - 带有 JDBC 的 Spring Session 在插入时失败
- eclipse-plugin - Eclipse插件开发:问题视图中没有出现自定义问题标记