【发布时间】:2020-04-01 13:35:33
【问题描述】:
我有一个非常简单的 4 个图像标记,其目标是获得一个 2x2 响应式图像网格,它将:
- 在所有屏幕上保持 2x2 适合屏幕,无论大小如何,仅使用 flex。
- 保持图像居中并保持纵横比(“裁剪”它们 根据屏幕需要查看)
- 能够在悬停时变换。
- 不改变标记(也不要问为什么)
- 尝试实现单个属性(或最小数量)可以 将网格转换为 4 x 任何值(连续 4 个),这意味着不将标记更改为 2 的厨房行。
标记是:
<div class="container">
<div class="gallery">
<img class="item" src="https://source.unsplash.com/random/" alt="Example image">
<img class="item" src="https://source.unsplash.com/random/" alt="Example image">
<img class="item" src="https://source.unsplash.com/random/" alt="Example image">
<img class="item" src="https://source.unsplash.com/random/" alt="Example image">
</div>
</div>
还有CSS:
/** Add basic reset **/
.container {
display: flex;
/* flex-wrap: wrap; */
/* justify-items: center; */
justify-content: center;
/* max-height: 100vh; */
height: 100vh;
}
img {
margin: 5px;
transition: all 2s;
flex-basis: 49%;
max-height: 49vh;
align-self: center;
/* max-width: calc(49vh - 10px); */
}
.gallery {
display: flex;
flex-wrap: wrap;
flex: 1 1 49%;
align-items: center;
overflow: hidden;
}
img:hover {
transform: scale (1.1);
}
添加:
img {
object-fit: cover;
}
有点作品,但它有一种“hack-ey”的感觉,并且还有两个主要问题(1)它确实会“裁剪”图像 - 但它们没有居中,并且(2)悬停时它们会从容器中“溢出”。
我确定这不是实现我需要的正确方法,但不确定我缺少什么 flex-property,或者在这里使用错误。
编辑我更清楚地附上了我想要实现的图像,其中每个都代表不同大小的屏幕/视口,没有任何滚动。 图像需要始终居中并根据屏幕裁剪边缘(有点像全屏背景通常有效)
【问题讨论】: