【问题标题】:How to fix this complex CSS grid of photos based on 4 columns?如何修复这个基于 4 列的复杂 CSS 网格照片?
【发布时间】:2021-10-05 14:19:06
【问题描述】:

我设计了这个 1-4 / 4-1 / 1 网格并尝试使用基于 4 列的完整 CSS 网格解决方案来实现它:

正如你在下面的sn-p中看到的,它几乎在那里,除了第4和第5以及第8和第9张照片需要在其他小图像下。我尝试使用网格模板行,但它变得非常棘手并且很快就变得混乱。
网格图案将从第 12 个元素开始重复。

.grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  grid-gap: 56px 40px;
  margin: 40px;
}

.photo img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

/* 1st photo = 2 columns, 2 first rows */
.photo:nth-of-type(11n+1) {
  grid-column: 1 / span 2;
}


/* 2nd photo and other small ones */
.photo:nth-of-type(11n+1) {
  grid-column: 1 / span 2;
}

/* 11th photo = 2 columns */
.photo:nth-of-type(11n+10) {
  grid-column: 3 / span 2;
}

/* 11th photo = 4 columns */
.photo:nth-of-type(11n) {
  grid-column: 1 / span 4;
}
<div class="grid">
  <div class="photo">
    <img src="https://via.placeholder.com/800x533" width="800" height="533" alt="Photo">
  </div>
  <div class="photo">
    <img src="https://via.placeholder.com/800x533" width="800" height="533" alt="Photo">
  </div>
  <div class="photo">
    <img src="https://via.placeholder.com/800x533" width="800" height="533" alt="Photo">
  </div>
  <div class="photo">
    <img src="https://via.placeholder.com/800x533" width="800" height="533" alt="Photo">
  </div>
  <div class="photo">
    <img src="https://via.placeholder.com/800x533" width="800" height="533" alt="Photo">
  </div>
  <div class="photo">
    <img src="https://via.placeholder.com/800x533" width="800" height="533" alt="Photo">
  </div>
  <div class="photo">
    <img src="https://via.placeholder.com/800x533" width="800" height="533" alt="Photo">
  </div>
  <div class="photo">
    <img src="https://via.placeholder.com/800x533" width="800" height="533" alt="Photo">
  </div>
  <div class="photo">
    <img src="https://via.placeholder.com/800x533" width="800" height="533" alt="Photo">
  </div>
  <div class="photo">
    <img src="https://via.placeholder.com/800x533" width="800" height="533" alt="Photo">
  </div>
  <div class="photo">
    <img src="https://via.placeholder.com/800x533" width="800" height="533" alt="Photo">
  </div>
</div>

【问题讨论】:

    标签: css css-grid


    【解决方案1】:

    你可以像下面这样简化你的代码:

    .grid {
      display: grid;
      grid-template-columns: repeat(4, 1fr);
      grid-gap: 10px;
      margin: 10px;
    }
    
    .photo img {
      display: block;
      width: 100%;
      height: 100%;
      object-fit: cover;
    }
    
    .photo:nth-child(11n + 1){
      grid-area:span 2/span 2;
    }
    .photo:nth-child(11n + 10) {
      grid-area:3/3/span 2/span 2
    }
    .photo:nth-child(11n + 11){
      grid-column:span 4;
      margin-top:10px;
    }
    
    .photo:nth-child(11n + 1),
    .photo:nth-child(11n + 4),
    .photo:nth-child(11n + 5){
      margin-bottom:10px;
    }
    <div class="grid">
      <div class="photo">
        <img src="https://via.placeholder.com/800x533" width="800" height="533" alt="Photo">
      </div>
      <div class="photo">
        <img src="https://via.placeholder.com/800x533" width="800" height="533" alt="Photo">
      </div>
      <div class="photo">
        <img src="https://via.placeholder.com/800x533" width="800" height="533" alt="Photo">
      </div>
      <div class="photo">
        <img src="https://via.placeholder.com/800x533" width="800" height="533" alt="Photo">
      </div>
      <div class="photo">
        <img src="https://via.placeholder.com/800x533" width="800" height="533" alt="Photo">
      </div>
      <div class="photo">
        <img src="https://via.placeholder.com/800x533" width="800" height="533" alt="Photo">
      </div>
      <div class="photo">
        <img src="https://via.placeholder.com/800x533" width="800" height="533" alt="Photo">
      </div>
      <div class="photo">
        <img src="https://via.placeholder.com/800x533" width="800" height="533" alt="Photo">
      </div>
      <div class="photo">
        <img src="https://via.placeholder.com/800x533" width="800" height="533" alt="Photo">
      </div>
      <div class="photo">
        <img src="https://via.placeholder.com/800x533" width="800" height="533" alt="Photo">
      </div>
      <div class="photo">
        <img src="https://via.placeholder.com/800x533" width="800" height="533" alt="Photo">
      </div>
    </div>

    【讨论】:

    • 这很酷,谢谢 Temani!唯一的问题是网格行间隙适用于每张照片,而不是每组 5 张照片,如果你明白我的意思的话。在视觉上,它有助于眼睛在我感觉到的每个块图案后有更多的空间。
    • @flks查看更新,可以玩margin来拉大差距
    • 太棒了!感谢您的帮助和反应
    【解决方案2】:

    我修复了你的 CSS。您现在还可以拥有 n*11 图像,它会工作。 在 codepen 中,您会看到使用 22 张图片的代码:https://codepen.io/yourbraineatsyou/pen/xxroWWg

    .grid {
      display: grid;
      grid-template-columns: repeat(4, 1fr);
      grid-gap: 56px 40px;
      margin: 40px;
    }
    
    .photo img {
      display: block;
      width: 100%;
      height: 100%;
      object-fit: cover;
    }
    
    /* 1st photo = 2 columns, 2 first rows */
    .photo:nth-of-type(11n+1) {
      grid-column: 1 / span 2;
      grid-row: span 2;
    }
    
    /* 9th photo = 2 columns, last rows */
    .photo:nth-of-type(11n+8) {
      grid-column: 3 / span 2;
      grid-row: span 2;
    }
    
    /* 11th photo = 4 columns */
    .photo:nth-of-type(11n) {
      grid-column: 1 / span 4;
    }
    <div class="grid">
      <div class="photo">
        <img src="https://via.placeholder.com/800x533" width="800" height="533" alt="Photo">
      </div>
      <div class="photo">
        <img src="https://via.placeholder.com/800x533" width="800" height="533" alt="Photo">
      </div>
      <div class="photo">
        <img src="https://via.placeholder.com/800x533" width="800" height="533" alt="Photo">
      </div>
      <div class="photo">
        <img src="https://via.placeholder.com/800x533" width="800" height="533" alt="Photo">
      </div>
      <div class="photo">
        <img src="https://via.placeholder.com/800x533" width="800" height="533" alt="Photo">
      </div>
      <div class="photo">
        <img src="https://via.placeholder.com/800x533" width="800" height="533" alt="Photo">
      </div>
      <div class="photo">
        <img src="https://via.placeholder.com/800x533" width="800" height="533" alt="Photo">
      </div>
      <div class="photo">
        <img src="https://via.placeholder.com/800x533" width="800" height="533" alt="Photo">
      </div>
      <div class="photo">
        <img src="https://via.placeholder.com/800x533" width="800" height="533" alt="Photo">
      </div>
      <div class="photo">
        <img src="https://via.placeholder.com/800x533" width="800" height="533" alt="Photo">
      </div>
      <div class="photo">
        <img src="https://via.placeholder.com/800x533" width="800" height="533" alt="Photo">
      </div>
    </div>

    【讨论】:

    • 这太疯狂了!谢谢你。只是一件事,我想有一个与 1-1-2、2-1-1 组的网格列间隙不同的网格行间隙,我试过但随后它将间隙应用于每张照片.你有什么想法吗?
    猜你喜欢
    • 2019-01-06
    • 2017-10-27
    • 1970-01-01
    • 2017-08-22
    • 1970-01-01
    • 2019-06-26
    • 2021-07-03
    • 1970-01-01
    • 2021-09-30
    相关资源
    最近更新 更多