Flexbox can't solve this:
So the issue is that your last row would be centered if you use justify-content: center
which you don't want, and if you use flex-start
alignment, then your flexbox
will have some space at the right side.
View the below snippets in full screen such that you get two images in a row and take a look at the last image.
Giving justify-content: center
, the last image is not aligned to the left:
.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>
Giving justify-content: flex-start
there is a misalignment of the flexbox as a whole towards the left side:
.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>
This is a limitation of flexbox
as it is only a one-dimensional layout solution.
But CSS Grids can:
For a 2D solution, CSS Grid is preferred. See below demo where your issue has been solved-
A wrapping grid with 300px boxes is achieved using grid-template-columns: repeat( auto-fit, 300px)
.
For centering the grid we use justify-content: center
.
Use grid-gap
for the margins.
See demo below:
.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>