首页 > 解决方案 > 在最后一行包装弹性项目

问题描述

我有一个img-gallery现在正确集中的。问题是当图像换行时,它也与中心对齐。换行后,图像应与上一行中的第一个图像垂直排列。

.gallery-links {justify-content: flex-start;}

这使它几乎解决了。但是镜像包裹之后,整体img-gallery就不是中心化的了。查看fiddle和摘录:

.gallery-links {
  display: flex;
  flex-flow: row wrap;
  justify-content: center;
  align-items: center;
}

.gallery-img {
  flex-basis: 300px;
  margin: 10px;
}

.gallery-img img {
  width: 100%;
}
<section class="gallery-links">
  <img class="gallery-img" src="https://www.w3schools.com/howto/img_forest.jpg" alt="img1">
  <img class="gallery-img" src="https://www.w3schools.com/howto/img_forest.jpg" alt="img2">
  <img class="gallery-img" src="https://www.w3schools.com/howto/img_forest.jpg" alt="img3">
  <img class="gallery-img" src="https://www.w3schools.com/howto/img_forest.jpg" alt="img4">
</section>

标签: htmlcssflexbox

解决方案


Flexbox无法解决这个问题

所以问题是,如果你使用你不想要的,你的最后一行会居中,如果你使用对齐,那么你将在右侧有一些空间。justify-content: centerflex-startflexbox

全屏查看下面的片段,这样您就可以连续获得两张图像并查看最后一张图像。

  1. 给出justify-content: center,最后一个图像不左对齐:

    .gallery-links {
      display: flex;
      flex-flow: row wrap;
      justify-content: center;
      align-items: center;
      border: 1px solid;
    }
    
    .gallery-img {
      flex-basis: 300px;
      margin: 10px;
    }
    
    .gallery-img img {
      width: 100%;
    }
    <section class="gallery-links">
      <img class="gallery-img" src="https://www.w3schools.com/howto/img_forest.jpg" alt="img1">
      <img class="gallery-img" src="https://www.w3schools.com/howto/img_forest.jpg" alt="img2">
      <img class="gallery-img" src="https://www.w3schools.com/howto/img_forest.jpg" alt="img3">
      <img class="gallery-img" src="https://www.w3schools.com/howto/img_forest.jpg" alt="img4">
      <img class="gallery-img" src="https://www.w3schools.com/howto/img_forest.jpg" alt="img1">
     
    </section>

  2. justify-content: flex-start考虑到弹性盒作为一个整体向左侧错位:

    .gallery-links {
      display: flex;
      flex-flow: row wrap;
      justify-content: flex-start;
      align-items: center;
      border: 1px solid;
    }
    
    .gallery-img {
      flex-basis: 300px;
      margin: 10px;
    }
    
    .gallery-img img {
      width: 100%;
    }
    <section class="gallery-links">
      <img class="gallery-img" src="https://www.w3schools.com/howto/img_forest.jpg" alt="img1">
      <img class="gallery-img" src="https://www.w3schools.com/howto/img_forest.jpg" alt="img2">
      <img class="gallery-img" src="https://www.w3schools.com/howto/img_forest.jpg" alt="img3">
      <img class="gallery-img" src="https://www.w3schools.com/howto/img_forest.jpg" alt="img4">
      <img class="gallery-img" src="https://www.w3schools.com/howto/img_forest.jpg" alt="img1">
     
    </section>

这是一个限制,flexbox因为它只是一个一维布局解决方案。


但是 CSS 网格可以

对于 2D 解决方案,首选CSS Grid 。请参阅下面的演示,您的问题已解决 -

  1. 使用. _ _grid-template-columns: repeat( auto-fit, 300px)

  2. 为了使网格居中,我们使用justify-content: center.

  3. 用于边距grid-gap_

请参阅下面的演示:

.gallery-links {
  display: grid;
  grid-template-columns: repeat( auto-fit, 300px);
  justify-content: center;
  grid-gap: 10px;
  border: 1px solid;
}

.gallery-img {
  width: 100%;
}
<section class="gallery-links">
  <img class="gallery-img" src="https://www.w3schools.com/howto/img_forest.jpg" alt="img1">
  <img class="gallery-img" src="https://www.w3schools.com/howto/img_forest.jpg" alt="img2">
  <img class="gallery-img" src="https://www.w3schools.com/howto/img_forest.jpg" alt="img3">
  <img class="gallery-img" src="https://www.w3schools.com/howto/img_forest.jpg" alt="img4">
  <img class="gallery-img" src="https://www.w3schools.com/howto/img_forest.jpg" alt="img1">
  <img class="gallery-img" src="https://www.w3schools.com/howto/img_forest.jpg" alt="img2">
  <img class="gallery-img" src="https://www.w3schools.com/howto/img_forest.jpg" alt="img3">
</section>


推荐阅读