Como construir layouts de alvenaria sem costura com CSS Grid e ajuste de objeto: capa

CSS Grid facilita a vida dos desenvolvedores, pois permite a criação de layouts exclusivos sem esforço. No tutorial de hoje, usaremos CSS Grid para construir uma grade de imagem responsiva que seguirá um layout estilo alvenaria em telas de desktop.

Nosso layout de alvenaria de imagem

Como sempre, veja nosso projeto finalizado:

Certifique-se de verificar a versão em tela cheia e redimensionar a janela do navegador para observar como o layout muda dependendo do tamanho da tela.

informação

Este é um layout de alvenaria 100% CSS – sem necessidade de JavaScript!

1. Decidir sobre o layout

A demo de hoje é dedicada ao Marrocos. Nossa grade de imagens revelará a beleza deste país fascinante através de 11 impressionantes Abrir fotos.

Em telas de até 849px, teremos um layout de duas colunas como este:

A grade de imagens em telas pequenasA grade de imagens em telas pequenasA grade de imagens em telas pequenas

Como você pode ver, apenas para tornar o layout um pouco mais distinto, uma das imagens (a nona) ficará em sua própria linha e será duas vezes maior que as outras.

Em telas com pelo menos 850px, nossas imagens ficarão dentro de um layout de alvenaria como este:

A grade de imagens em telas grandesA grade de imagens em telas grandesA grade de imagens em telas grandes

O verdadeiro poder do CSS Grid é que ele nos dá a capacidade de modificar o layout acima com apenas algumas modificações de estilo. Por exemplo, aqui está outra versão dele:

Uma versão alternativa da grade de imagensUma versão alternativa da grade de imagensUma versão alternativa da grade de imagens

No passado, para construir esses tipos de layouts, os desenvolvedores precisavam usar uma biblioteca JavaScript como Maçonaria.js.

2. Definir a marcação HTML

Para desenvolver essa grade, tudo o que precisamos é de uma lista não ordenada. Cada imagem ficará dentro de um item de lista.

Aqui está a estrutura necessária:

Considere como essa marcação é limpa. CSS Grid é ideal para esses tipos de layouts. Se você tentar construí-lo com outro método de layout como flexbox, você terá que inserir elementos aninhados. E o mais importante, outras soluções simplesmente não são flexíveis o suficiente. Para atualizar o layout, você precisará reestruturar a marcação e não apenas modificar os estilos.

3. Especifique os estilos principais

A melhor maneira de se familiarizar com nossos estilos relacionados à grade é inspecionando o console do navegador, direcionando a lista não ordenada e verificando as linhas e colunas usando um inspetor de grade.

As linhas de gradeAs linhas de gradeAs linhas de grade

Aqui estão as coisas notáveis ​​sobre nossos estilos:

  • A lista será nosso contêiner de grade.
  • Em telas pequenas (<850px), como dissemos anteriormente, teremos um layout de duas colunas. Especificaremos o tamanho das colunas por meio do grid-template-columns propriedade enquanto usaremos o grid-auto-rows propriedade para definir o tamanho das linhas criadas implicitamente.
  • Em telas grandes (850px), teremos um layout de cinco colunas. Novamente, aqui, não criaremos linhas explicitamente por meio do grid-template-rows mas continue dimensionando as linhas por meio do grid-auto-rows propriedade.
  • Para posicionar e dimensionar as colunas no layout desktop e a nona coluna no mobile, usaremos o grid-row e grid-column propriedades.
  • Nós vamos usar o object-fit: cover valor da propriedade para colocar as imagens dentro de sua coluna. Dessa forma, as imagens se encaixarão perfeitamente dentro de seu contêiner sem perder sua proporção.

O que é ajuste ao objeto: capa?

Esse último ponto é muito importante. Sem object-fit: cover nossas imagens serão forçadas a se ajustarem às dimensões das células da grade, assim:

nenhum exemplo de ajuste de objetonenhum exemplo de ajuste de objetonenhum exemplo de ajuste de objeto
As coisas parecem um pouco esmagadas

Mas com object-fit podemos definir como a imagem é tratada. Com o cover valor, cada imagem será cortada para que mantenha sua proporção, enquanto sua menor dimensão (altura ou largura) se encaixa perfeitamente no contêiner. Será cobrir o espaço disponível.

Proporções perfeitas com ajuste ao objeto: capaProporções perfeitas com ajuste ao objeto: capaProporções perfeitas com ajuste ao objeto: capa
Proporções perfeitas e cortadas

Estilos finais

Com isso dito, aqui estão todos os estilos de layout de alvenaria:

Isso nos dará o seguinte resultado:

4. Padrões dinâmicos

Ótimo trabalho até agora, pessoal! Conseguimos criar um layout de alvenaria atraente, repleto de imagens. Mas podemos ir um pouco mais longe e automatizar as coisas. O objetivo é fazer com que esse layout fique ótimo com mais fotos do Unsplash (33) como esta:

A nova grade de imagensA nova grade de imagensA nova grade de imagensCom isso em mente, precisamos fazer três coisas:

  • Identifique cada item dentro dos blocos de imagem (três blocos de 11) por meio de uma variável CSS inline (n). Usaremos essa variável para colocá-la na linha da direita.
  • Use o :nth-child() Pseudoclasse CSS para criar padrões que selecionarão dinamicamente novos itens à medida que forem adicionados à grade.
  • Automatize a localização dos itens dentro de uma linha de grade pegando seus n Variável CSS.

Ao colocar tudo isso no lugar, estamos levando a essa grade totalmente dinâmica:

Tire algum tempo para ver o que está acontecendo aqui. Novamente, a melhor maneira de entender isso é usando as ferramentas do seu navegador para examinar o posicionamento de cada item dentro da grade!

Conclusão

Mais um exercício chegou ao fim, pessoal! Obrigado por acompanhar. Felizmente, você aprendeu uma ou duas coisas novas sobre como criar galerias de imagens criativas com nada além de CSS.

Você pode estender essa ideia usando-a não apenas para galerias, mas também para listas de postagens e ter um botão Load More para revelar diferentes grupos de elementos através do AJAX, ou talvez combinando esse layout com rolagem infinita:

Como sempre, muito obrigado por ler!

[ad_2]

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *