按照预定义的模式将图像彼此相邻对齐 css

align images with css next to eachother on predifined pattern

我有以下图像布局,其中图像并排对齐。

CSS

      <style>
* {
  box-sizing: border-box;
}

.column {
  float: left;
  width: 33.33%;
  padding: 4px;
}


.row::after {
  content: "";
  clear: both;
  display: table;
}
.res-img {
   width:100%;
  height: auto;
  border-style:solid;
  border-color:gray;
}

  </style>

但我希望它像下图一样显示,最好是响应式的,这意味着图像在小屏幕上相互堆叠。有人可以告诉我如何实现吗?

HTML

<div class="row">
  <div class="column">
    <img src="img.jpg" alt="" class="res-img">
  </div>
  <div class="column">
    <img src="img.jpg" alt="" class="res-img">
  </div>
  <div class="column">
    <img src="img.jpg" alt="" class="res-img">
  </div>
</div>

您可以使用 CSS 网格布局: 检查 CSS 网格布局:https://cssgrid-generator.netlify.app/

.row {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: repeat(2, 1fr);
grid-column-gap: 10px;
grid-row-gap: 10px;
height:200px;
}
.div1 { grid-area: 1 / 1 / 2 / 2;}
.div2 { grid-area: 1 / 2 / 2 / 3;}
.div3 { grid-area: 2 / 1 / 3 / 2;}
.div4 { grid-area: 2 / 2 / 3 / 3;}
.div5 { grid-area: 1 / 3 / 3 / 4;}
.col{
  height:100%; width:100%;
  border:1px solid #000;
}
<div class="row">
<div class="div1 col">img1 </div>
<div class="div2 col">img2 </div>
<div class="div3 col">img3 </div>
<div class="div4 col">img4 </div>
<div class="div5 col">img5 </div>
</div>

做一个wrapper-element并使用grid-template-rows: 1fr 1frgrid-template-columns: 1fr 1fr 1fr,这是一个3列2行的布局。您可以选择将它们的值设置为 auto,因为您已经在网格中使用 span 来制作布局(进一步阅读以了解详情)。

.wrapper {
  display: grid;
  grid-template-rows: 1fr 1fr;
  grid-template-columns: 1fr 1fr 1fr;
  gap: 10px;
}

确保每个 img 都包装到一个容器中,以便更好地控制布局。没有必要,但我认为更可取。将 flex 添加到 img-容器,然后应用 object-fit: cover,这样图像就不会拉伸。这将导致图像被裁剪一些,但不会被拉伸 - 我认为这也是可取的,但不是必需的。

此外,请确保在 img 元素上应用 max-width: 100%height: auto,这样图像会自动响应并且不会溢出容器。

.item {
  border: 1px solid black;
  display: flex;
}

.item img {
  object-fit: cover;
  max-width: 100%;
  height: auto;
}

对于需要2行高度的元素,可以使用grid-span。 要将元素设置为最后一列(第 3 列),请使用 grid-column: 3/3。使用 grid-row: 1 / span 2 使项目进入布局的第 1 行并扩展到第二行。

.item.large {
  grid-column: 3 / 3;
  grid-row: 1 / span 2;
}

为了使整个事情响应,只需将 .item.large 元素上的值修改为自动,同时在 media-query:

中设置您喜欢的列和行的数量
@media only screen and (max-width: 768px) {
  .wrapper {
    display: grid;
    grid-template-rows: auto;
    grid-template-columns: 1fr;
  }
  .item.large {
    grid-column: auto;
    grid-row: auto;
  }
}

.wrapper {
  display: grid;
  grid-template-rows: 1fr 1fr;
  grid-template-columns: 1fr 1fr 1fr;
  gap: 10px;
}

.item {
  border: 1px solid black;
  display: flex;
}

.item img {
  object-fit: cover;
  max-width: 100%;
  height: auto;
}

.item.large {
  grid-column: 3 / 3;
  grid-row: 1 / span 2;
}

@media only screen and (max-width: 768px) {
  .wrapper {
    display: grid;
    grid-template-rows: auto;
    grid-template-columns: 1fr;
  }
  .item.large {
    grid-column: auto;
    grid-row: auto;
  }
  .item img {
    width: 100%;
  }
}
<div class="wrapper">
  <div class="item"><img src="https://www.fillmurray.com/640/360"></div>
  <div class="item"><img src="https://www.fillmurray.com/640/360"></div>
  <div class="item large"><img src="https://www.fillmurray.com/640/360"></div>
  <div class="item"><img src="https://www.fillmurray.com/640/360"></div>
  <div class="item"><img src="https://www.fillmurray.com/640/360"></div>
</div>