【问题标题】:Responsive Justified image gallery with Flexbox使用 Flexbox 的响应式对齐图片库
【发布时间】:2018-10-23 17:00:11
【问题描述】:

我正在尝试根据这个例子制作一个图片库:

body { margin: 0; background: #333; }
header { 
  padding: .5vw;
  font-size: 0;
  display: -ms-flexbox;
  -ms-flex-wrap: wrap;
  -ms-flex-direction: column;
  -webkit-flex-flow: row wrap; 
  flex-flow: row wrap; 
  display: -webkit-box;
  display: flex;
}
header div { 
  -webkit-box-flex: auto;
  -ms-flex: auto;
  flex: auto; 
  width: 200px; 
  margin: .5vw; 
}
header div img { 
  width: 100%; 
  height: auto; 
}
@media screen and (max-width: 400px) {
  header div { margin: 0; }
  header { padding: 0; }
  
}
<header>
<div><img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/4273/jeremiah-wilson-1.jpg" alt></div>
<div><img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/4273/jeremiah-wilson-2.jpg" alt></div>
<div><img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/4273/jeremiah-wilson-3.jpg" alt></div>
<div><img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/4273/jeremiah-wilson-4.jpg" alt></div>
<div><img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/4273/jeremiah-wilson-5.jpg" alt></div>
  <!-- images placed inside block elements to deal with a Firefox rendering bug affecting  scaled flexbox images -->
</header>

我所有的图像都是 200x200 像素,它就像一个魅力,但我需要用左侧对齐的相同固定原始图像大小替换最后一行。

按照其他答案的建议,我尝试添加一个 ::after 元素填充空白区域,但我没有成功。

最终,我正在考虑使用 Javascript 添加基于媒体查询和每行图像数量的不显示的假图像。

还有其他更好的方法来实现这一点吗?

我的代码:

.c-gallery {
    font-size: 0;
    max-width: 1600px;
    display: flex;
    flex-flow: row wrap;
    a {
        flex: auto;
        width: 150px;
        margin: 5px 5px 0 0;
          img {
              height: auto;
          }
       }
    }

【问题讨论】:

  • 请提供您的代码

标签: css flexbox gallery


【解决方案1】:

以下如何。它使用 CSS 网格。 通过使用grid-template-columns: repeat(3, 200px);,您可以更改列数。

body { margin: 0; background: #333; }
header { 
  padding: .5vw;
  font-size: 0;
  display: grid;
  grid-template-columns: repeat(3, 200px);
  grid-gap: .5vw
}

header div img { 
  width: 100%; 
  height: auto; 
}
@media screen and (max-width: 400px) {
  header div { margin: 0; }
  header { padding: 0; }
}
<header>
<div><img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/4273/jeremiah-wilson-1.jpg" alt></div>
<div><img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/4273/jeremiah-wilson-2.jpg" alt></div>
<div><img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/4273/jeremiah-wilson-3.jpg" alt></div>
<div><img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/4273/jeremiah-wilson-4.jpg" alt></div>
<div><img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/4273/jeremiah-wilson-5.jpg" alt></div>
  <!-- images placed inside block elements to deal with a Firefox rendering bug affecting  scaled flexbox images -->
</header>

【讨论】:

  • 谢谢SuperDJ,是的,我考虑过,但是出于兼容性的考虑,我不想使用CSS Grid……但是,如果没有其他方法,我可以考虑使用它使用 @support 验证,然后使用居中的 flexbox 作为后备(仍然不如不合理的最后一行)
  • @NightCoffeeLover 我认为兼容性不是那么重要,除非你想支持 caniuse.com/#search=grid
  • 是的,最好的解决方案!通过一些 hack 使其具有响应性(在 标签上使用 object-fit)和 flexbox 后备,感谢 SuperDJ! :)
  • @NightCoffeeLover 取决于您对响应式的含义,您也可以使用repeat(3, minmax(200px, 1fr))1fr 是它缩放到最大宽度,同时保留 3 列。另一方面,该列永远不会小于200px
猜你喜欢
  • 2017-08-16
  • 2017-04-30
  • 2021-09-13
  • 2017-07-11
  • 1970-01-01
  • 1970-01-01
  • 2016-12-15
  • 1970-01-01
  • 2022-01-03
相关资源
最近更新 更多