Estou usando o seguinte código para criar um álbum (dentro do WordPress, mas para este exemplo isso é irrelevante):
É assim que acontece:
O que eu esperava fazer é que as imagens da última linha sempre se estendessem por essa linha. Assim, quando houver apenas uma imagem, deixe-a com 100% de largura e maior em altura, e para duas imagens, com 50% de largura e maior em altura.
O número de imagens é diferente para cada página. Alguma dica de como fazer isso?
.gallery {
display: grid;
grid-template-columns: auto auto auto;
gap: 8px;
}
.gallery>.img {
width: 100% !important;
position: relative;
padding-bottom: 75%;
}
.gallery img {
object-fit: cover;
object-position: 50%;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
height: 100%;
width: 100%;
}
<div class="gallery">
<div class="img">
<img src="https://fastly.picsum.photos/id/266/200/300.jpg?hmac=nAZYC6vsnq4fuOzfge00Ylvi9ALRMbMA8wxBxIPTjs0">
</div>
<div class="img">
<img src="https://fastly.picsum.photos/id/266/200/300.jpg?hmac=nAZYC6vsnq4fuOzfge00Ylvi9ALRMbMA8wxBxIPTjs0">
</div>
<div class="img">
<img src="https://fastly.picsum.photos/id/266/200/300.jpg?hmac=nAZYC6vsnq4fuOzfge00Ylvi9ALRMbMA8wxBxIPTjs0">
</div>
<div class="img">
<img src="https://fastly.picsum.photos/id/266/200/300.jpg?hmac=nAZYC6vsnq4fuOzfge00Ylvi9ALRMbMA8wxBxIPTjs0">
</div>
<div class="img">
<img src="https://fastly.picsum.photos/id/266/200/300.jpg?hmac=nAZYC6vsnq4fuOzfge00Ylvi9ALRMbMA8wxBxIPTjs0">
</div>
<div class="img">
<img src="https://fastly.picsum.photos/id/266/200/300.jpg?hmac=nAZYC6vsnq4fuOzfge00Ylvi9ALRMbMA8wxBxIPTjs0">
</div>
<div class="img">
<img src="https://fastly.picsum.photos/id/266/200/300.jpg?hmac=nAZYC6vsnq4fuOzfge00Ylvi9ALRMbMA8wxBxIPTjs0">
</div>
</div>
A partir do seu código, explicado por Temani Afif, você deve começar com um layout de grade de seis colunas, para que os elementos possam abranger um terço, metade ou uma linha inteira.
O snippet abaixo usa o mesmo método proposto anteriormente usando seu código . O CSS funciona com uma quantidade desconhecida de filhos para contêineres
.gallery
comdiv.img
X.Também troquei algumas regras CSS:
grid
em vez deabsolute
, easpect-ratio
em vez depadding-bottom
. Você pode manter as suas próprias para o dimensionamento e posicionamento, isto é apenas para informação.Abaixo, um exemplo de trecho de código que vai de 6 para 1 elemento. A posição dos últimos elementos na grade é filtrada via https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes#tree-structural_pseudo-classes e https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_selectors/Selectors_and_combinators#subsequent-sibling_combinator
Você pode confiar em
:nth-child
direcionar imagens específicasComo funciona
A grade tem 3 colunas.
A lógica do PHP calcula quantas imagens estão na última linha ($remaining).
Com base nisso, atribuímos uma classe personalizada às imagens da última linha.
Em CSS, usamos grid-column: span X para fazer com que as imagens da última linha ocupem a linha inteira (para 1 imagem) ou metade (para 2 imagens).
Também ajustamos o preenchimento inferior para torná-los mais altos e proporcionar equilíbrio visual.