javascript - 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。
解决方案
您可能希望将 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;
}
}
}
推荐阅读
- php - Ajax Request status as Canceled
- java - com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column '' in 'field list' 使用spring boot和JPA
- php - 为 imgur 生成嵌入代码
- database - SQLite 版本控制不清楚
- c++ - 无法从 const char* 转换为 const char *&
- jenkins - 如何将文件作为构建参数上传到詹金斯管道作业
- python - JSON转换错误csv
- angular - 如何在 Angular 2+ 中进行图像库拖动和排序?
- reactjs - 如何在 chartist.js 中使用插件?
- android - 为 cmake 执行外部原生构建