gpt4 book ai didi

html - 具有最大宽度元素的响应式 css 网格布局

转载 作者:行者123 更新时间:2023-11-28 00:53:52 25 4
gpt4 key购买 nike

我正在寻找一种自动生成网格的方法,该网格始终填充可用空间,同时缩小元素直到可以添加另一个元素。

大多数响应式网格实现都使用一些链接:

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 …

本质上,我想将图像限制在 200 像素和 400 像素之间,并始终使用尽可能大的值。我想我需要这样的东西:

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.如果您尝试一下,应该更容易理解我想做什么。

最佳答案

此时,您的媒体查询解决方案可能是您的最佳选择。

目前,CSS 网格不提供灵活的最小值。

来自规范:

minmax(min, max)

Defines a size range greater than or equal to min and less than or equal to max.

If max < min, then max is ignored and minmax(min,max) is treated as min.

As a maximum, a <flex> value sets the track’s flex factor; it is invalid as a minimum.

Note: A future level of this spec may allow <flex> minimums, and will update the track sizing algorithm to account for this correctly

您是否考虑过 flexbox:

.grid {
display: flex;
flex-wrap: wrap;
}

.grid > div {
flex: 1 0 200px; /* can grow, can't shrink, minimum width 200px */
max-width: 400px;
margin: 5px;
}

.grid-item {
width: 100%;
height: auto;
}
<div class="grid">
<div><img src="http://placehold.it/400x300" alt="" class="grid-item"></div>
<div><img src="http://placehold.it/400x300" alt="" class="grid-item"></div>
<div><img src="http://placehold.it/400x300" alt="" class="grid-item"></div>
<div><img src="http://placehold.it/400x300" alt="" class="grid-item"></div>
<div><img src="http://placehold.it/400x300" alt="" class="grid-item"></div>
<div><img src="http://placehold.it/400x300" alt="" class="grid-item"></div>
<div><img src="http://placehold.it/400x300" alt="" class="grid-item"></div>
<div><img src="http://placehold.it/400x300" alt="" class="grid-item"></div>
<div><img src="http://placehold.it/400x300" alt="" class="grid-item"></div>
<div><img src="http://placehold.it/400x300" alt="" class="grid-item"></div>
<div><img src="http://placehold.it/400x300" alt="" class="grid-item"></div>
<div><img src="http://placehold.it/400x300" alt="" class="grid-item"></div>
<div><img src="http://placehold.it/400x300" alt="" class="grid-item"></div>
<div><img src="http://placehold.it/400x300" alt="" class="grid-item"></div>
<div><img src="http://placehold.it/400x300" alt="" class="grid-item"></div>
<div><img src="http://placehold.it/400x300" alt="" class="grid-item"></div>
<div><img src="http://placehold.it/400x300" alt="" class="grid-item"></div>
<div><img src="http://placehold.it/400x300" alt="" class="grid-item"></div>
<div><img src="http://placehold.it/400x300" alt="" class="grid-item"></div>
<div><img src="http://placehold.it/400x300" alt="" class="grid-item"></div>
<div><img src="http://placehold.it/400x300" alt="" class="grid-item"></div>
</div>

revised codepen

关于html - 具有最大宽度元素的响应式 css 网格布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45880592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com