首页 > 解决方案 > HTML - 将图像放入多行以适合视口

问题描述

我正在开发一个网站,在其中显示 N 数量的图像。我想如何展示它们的一个很好的例子是DeviantArt是如何做到的。图像以这样的方式显示在行中,即它填充当前视口的宽度并且不会使任何图像变形。

我的尝试如下:

#CSS
  .item {
    display: inline-block;
    vertical-align: top;
    position: relative;
    overflow: hidden;
    padding: 0.5em;
    background: lightcoral;
    border: black solid 1px;
  }
  .item img{
    max-height: 200px;
    object-fit: scale-down;
  }
HTML
    <div style="display: block; width: 100%">
      <!-- A vue directive, used in this example to render this element n amount of times per images -->
      <div class="item" v-for="(i, index) in images" :key="index">
        <img :src="i.url">
        <div style="display: flex; flex-direction: column;">
          <div>{{i.title}}</div>
          <div>By User1234</div>
        </div>
      </div>
    </div>

结果如下: 在此处输入图像描述

如您所见,每行的末尾都留有空隙。我希望每一行能够适合所有可能的图像,以便网格适合视口,如下所示:

在此处输入图像描述

我很想知道如何实现这一点,如果需要,可以使用纯 HTML/CSS 或 Javascript。

标签: javascripthtmlcss

解决方案


您可能希望将 flexbox 与 flex-grow 一起使用。CSS-Tricks 在这里有一篇很棒的文章:https ://css-tricks.com/piecing-together-approaches-for-a-css-masonry-layout/

这是文章中的代码笔:

密码笔

    body {
  margin: 0;
  padding: 1rem;
}

.masonry-with-columns {
  display: flex;
  flex-wrap: wrap;
  div {
    height: 150px;
    line-height: 150px;
    background: #EC985A;
    color: white;
    margin: 0 1rem 1rem 0;
    text-align: center;
    font-family: system-ui;
    font-weight: 900;
    font-size: 2rem;
    flex: 1 0 auto;
  } 
  @for $i from 1 through 36 { 
    div:nth-child(#{$i}) {
      $h: (random(400) + 70) + px;
      width: $h;
    }
  }
}

推荐阅读