I have the following snippet which creates a nice image "grid" using CSS columns
.
.gallery {
columns: 4;
column-gap: 5px;
}
.gallery-item {
display: inline-block;
vertical-align: top;
position: relative;
}
.gallery-item > img {
width: 100%;
}
<div class="gallery">
<div class="gallery-item">
<img src="https://via.placeholder.com/350">
</div>
<div class="gallery-item">
<img src="https://via.placeholder.com/350x400">
</div>
<div class="gallery-item">
<img src="https://via.placeholder.com/350x100">
</div>
<div class="gallery-item">
<img src="https://via.placeholder.com/850x400">
</div>
<div class="gallery-item">
<img src="https://via.placeholder.com/450x300">
</div>
<div class="gallery-item">
<img src="https://via.placeholder.com/350x450">
</div>
<div class="gallery-item">
<img src="https://via.placeholder.com/400x250">
</div>
<div class="gallery-item">
<img src="https://via.placeholder.com/600x400">
</div>
<div class="gallery-item">
<img src="https://via.placeholder.com/500x800">
</div>
<div class="gallery-item">
<img src="https://via.placeholder.com/350x200">
</div>
<div class="gallery-item">
<img src="https://via.placeholder.com/550">
</div>
<div class="gallery-item">
<img src="https://via.placeholder.com/450x250">
</div>
<div class="gallery-item">
<img src="https://via.placeholder.com/650x300">
</div>
<div class="gallery-item">
<img src="https://via.placeholder.com/350">
</div>
<div class="gallery-item">
<img src="https://via.placeholder.com/350">
</div>
</div>
However, when there are less elements, images aren't distributed across all columns, at least using Chrome Version 81.0.4044.138 on mac os.
.gallery {
columns: 4;
column-gap: 5px;
}
.gallery-item {
display: inline-block;
vertical-align: top;
position: relative;
}
.gallery-item > img {
width: 100%;
}
<div class="gallery">
<div class="gallery-item">
<img src="https://via.placeholder.com/350">
</div>
<div class="gallery-item">
<img src="https://via.placeholder.com/350x400">
</div>
<div class="gallery-item">
<img src="https://via.placeholder.com/350x100">
</div>
<div class="gallery-item">
<img src="https://via.placeholder.com/850x400">
</div>
<div class="gallery-item">
<img src="https://via.placeholder.com/450x300">
</div>
</div>
The same happens with even less elements, and of equal height.
.gallery {
columns: 4;
column-gap: 5px;
}
.gallery-item {
display: inline-block;
vertical-align: top;
position: relative;
}
.gallery-item > img {
width: 100%;
}
<div class="gallery">
<div class="gallery-item">
<img src="https://via.placeholder.com/350">
</div>
<div class="gallery-item">
<img src="https://via.placeholder.com/350">
</div>
<div class="gallery-item">
<img src="https://via.placeholder.com/350">
</div>
</div>
Is there a way that I can force fewer elements to be distributed across all 4 columns? Or 3 columns if I have 3 elements, etc.
On Safari and Firefox, it behaves the way I want.
The problem here is .gallery-item { display: inline-block; ...
set display: block;
img {
width: 100%;
vertical-align: middle;
}
.gallery-wrapper {
padding: 1.5em;
max-width: 960px;
margin-right: auto;
margin-left: auto;
}
.gallery {
column-count: 1;
column-gap: 10px;
}
.gallery-item {
display: block;
margin-bottom: 10px;
}
.gallery-item,
.gallery-content {
border-radius: 4px;
overflow: hidden;
}
@media (min-width: 768px) {
.gallery {
column-count: 2;
}
}
@media (min-width: 1024px) {
.gallery {
column-count: 3;
}
}
<div class="gallery-wrapper">
<div class="gallery">
<div class="gallery-item">
<img src="https://via.placeholder.com/350">
</div>
<div class="gallery-item">
<img src="https://via.placeholder.com/350x400">
</div>
<div class="gallery-item">
<img src="https://via.placeholder.com/350x100">
</div>
<div class="gallery-item">
<img src="https://via.placeholder.com/850x400">
</div>
<div class="gallery-item">
<img src="https://via.placeholder.com/450x300">
</div>
</div>
</div>