I am trying to vertical align images in a grid. I am using the <figure>
HTML element with caption for the images. The images replace checkboxes.
My code:
/* @media (min-width: 600px) { */
.grid {
display: grid;
grid-template-columns: 1fr 1fr 1fr 1fr;
gap: 2%;
padding: 1%;
}
/* } */
figure.item {
border: 1px solid #000;
/* To horizontally center images and caption */
text-align: center;
margin: 0;
padding: 0;
}
/* hack to make images flexible: width: 100%;*/
img {
width: 100%;
}
.caption {
/* visibility: hidden; */
}
img,
figcaption {
transition-duration: 0.2s;
transform-origin: 50% 50%;
opacity: 0.5;
}
:checked+label img,
:checked+label figcaption {
opacity: 1;
}
input[type=checkbox] {
display: none;
}
<div class="grid">
<figure class="item">
<input type="checkbox" id="1" class="box" />
<label for="1">
<img src="https://picsum.photos/seed/100/100" />
<figcaption>Text below the image1</figcaption>
</label>
</figure>
<figure class="item">
<input type="checkbox" id="2" class="box" />
<label for="2">
<img src="https://picsum.photos/seed/100/100" />
<figcaption>Text below the image1</figcaption>
</label>
</figure>
<figure class="item">
<input type="checkbox" id="3" class="box" />
<label for="3">
<img src="https://picsum.photos/seed/100/100" />
<figcaption>Text below the image1</figcaption>
</label>
</figure>
<figure class="item">
<input type="checkbox" id="4" class="box" />
<label for="4">
<img src="https://picsum.photos/seed/100/100" />
<figcaption>Text below the image1</figcaption>
</label>
</figure>
</div>
As you can see the 4 images are in a row (which is correct) but on top of the page. I want it verticaly centered (also when another row is added, both rows should be aligned in the middle). I have tried things like:
display: flex;
align-items: center;
But nothing seems to work. What am I missing?