【发布时间】:2017-08-25 11:41:28
【问题描述】:
我正在寻找一种自动生成网格的方法,它始终填充可用空间,同时缩小项目直到可以添加另一个项目。
大多数响应式网格实现都使用以下链接:
grid-template-colums: repeat(auto-fill, minmax(120px, 1fr));
这很好用,除了它使用最小值作为默认图像大小,这会导致网格内的图像插值。我想做相反的事情——设置一个最大宽度并在必要时缩小图像。
假设我的网格项目的最大宽度应为 400 像素。以下是我想要获得的一些值:
400px available space: One image with a width of 400px
402px available space: Two images with a width of 201px
800px available space: Two images with a width of 400px
and so on …
基本上我想将图像限制在 200px 和 400px 之间,并始终使用可能的最大值。我想我需要这样的东西:
min(max(200px, 1fr), 400px)
到目前为止,我能够做到这一点的唯一方法是生成一些媒体查询。
/* This example adjusts items to a max-width of 400px with a 10px grid-gap.*/
@media (min-width: 401px) {
.grid {
grid-template-columns: repeat(auto-fill, calc((100% - 10px) / 2));
}
}
@media (min-width: 811px) {
.grid {
grid-template-columns: repeat(auto-fill, calc((100% - 20px) / 3));
}
}
我写了一个Sass mixin 来使这个过程更加灵活,但是这个解决方案有一些缺点:
- 您必须生成任意数量的查询才能处理多种屏幕尺寸,这可能会导致死代码
- 您必须知道用于媒体查询的网格容器的可用空间(或用于计算可用空间的已用空间)
我正在寻找一种没有这些缺点的方法。
编辑:
Here is a CodePen of my current code.如果你玩弄它应该更容易理解我想要做什么。
【问题讨论】: