【问题标题】:CSS grid - responsive galleryCSS 网格 - 响应式画廊
【发布时间】:2020-08-24 16:02:44
【问题描述】:

有没有办法用 CSS 网格制作符合以下要求的画廊?

  1. 图库应始终填满整个容器并具有响应性
  2. 图像之间的间隙已修复
  3. 每张图片都有有限的最大和最小尺寸(例如 200 像素 - 260 像素)

图库代码如下(本例中span代表图片):

/* Container */
.grid {
    display: grid;
    grid-gap: 0.25em;
    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
}
/* Image placeholder */
span {
    display: block;
    background: #eee;
    border-radius: 0.25em;
    width: 100%;
    margin: auto;
}
/* Aspect ratio */
span:before {
    content: "";
    display: block;
    padding-bottom: 100%;
}
<div class="grid">
    <div class="item"><span></span></div>
    <div class="item"><span></span></div>
    <div class="item"><span></span></div>
    <div class="item"><span></span></div>
    <div class="item"><span></span></div>
    <div class="item"><span></span></div>
    <div class="item"><span></span></div>
    <div class="item"><span></span></div>
    <div class="item"><span></span></div>
    <div class="item"><span></span></div>
    <div class="item"><span></span></div>
    <div class="item"><span></span></div>
    <div class="item"><span></span></div>
    <div class="item"><span></span></div>
</div>

当有足够的项目时,一切正常。但是当画廊只有少数几个时,项目会被拉伸,图像会变得模糊,看起来很糟糕。在这种情况下,应该有与使用自动填充一样的行为。

我们尝试了以下方法,但这些解决方案都不够好:

  • 使用auto-fill 而不是auto-fit (图像往往尽可能小而不是尽可能大)
  • 限制单个图像的大小(间隙变得不均匀)
  • 使用minmax(200px, 260px) 而不是minmax(200px, 1fr) (画廊没有填满整个容器)

有人知道如何解决这个问题吗?任何帮助将不胜感激!

【问题讨论】:

    标签: css responsive css-grid


    【解决方案1】:

    使用auto-fill 而不是auto-fit

    参考:https://css-tricks.com/auto-sizing-columns-css-grid-auto-fill-vs-auto-fit/

    .grid {
        display: grid;
        grid-gap: 0.25em;
        grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
    }
    

    【讨论】:

    • 我在问题的结尾提到了这个解决方案,不幸的是,这试图在每一行上尽可能多地放置图像,但我们需要尽可能少(因为更大的图像比更小的图像更好) )。
    • 那么你应该在 minmax 中将宽度增加 200px 甚至更高
    • 但是在某些分辨率下,图像的大小会超过 260 像素。
    • minmax(200px, 1fr) > 如果您希望图像放大但不缩小到 200 像素以下 minmax(1fr,200px) > 如果您希望图像缩小但不超过 200 像素
    • 不,不幸的是,minmax(1fr, 200px) 导致网格只有一列,同时包含 auto-fitauto-fill。一般1fr作为minmax函数的第一个参数是没有用的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 2021-08-12
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    相关资源
    最近更新 更多