Explorando um Grid Layout

Olá, pessoal! Bem-vindos a mais uma aula no Code Kong. Hoje vamos desbravar um código incrível que utiliza o poderoso Grid Layout em CSS para criar um layout visualmente atrativo.

Grid Layout em CSS

Vamos analisar cada parte desse código:

<div class="container">
    <div class="item img1"><img src="img/01.webp"></div>
    <div class="item img2"><img src="img/02.webp"></div>
    <div class="item img3"><img src="img/03.webp"></div>
    <div class="item img4"><img src="img/04.webp"></div>
    <div class="item img5"><img src="img/05.webp"></div>
    <div class="item img6"><img src="img/06.webp"></div>
</div>

Aqui temos uma estrutura HTML simples com uma div principal “container” e seis divs filhas “item” contendo imagens.

Agora, vamos mergulhar no CSS:

*{
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}
body{
    display: flex;
    justify-content: center;
    align-items: center;
    min-height: 100vh;
    background: #222;
}

.container{
    position: relative;
    display: grid;
    width: 600px;
    grid-template-columns: 1fr 1fr 1fr;
    grid-template-rows: 150px 150px 150px;
    grid-template-areas: "img1 img1 img4"
                         "img2 img3 img5"
                         "img6 img6 img5";
    grid-gap: 15px;
}

Nesse trecho, definimos um estilo de reset (*), configuramos o corpo da página para ser um contêiner flexível no centro da tela, com um fundo escuro. A div “container” é configurada como um grid de três colunas e três linhas, com áreas específicas para cada imagem.

A propriedade grid-gap: 15px; define o espaçamento entre as células (ou itens) na grade. Neste caso, ela está configurada para 15 pixels, o que significa que haverá um espaço de 15 pixels entre cada coluna e cada linha da grade, proporcionando um visual mais arejado e organizado ao layout.

.container .item{
    position: relative;
    background: #fff;
    border-radius: 10px;
}

.container .img1{
    grid-area: img1;
}
.container .img2{
    grid-area: img2;
}
.container .img3{
    grid-area: img3;
}
.container .img4{
    grid-area: img4;
}
.container .img5{
    grid-area: img5;
}
.container .img6{
    grid-area: img6;
}

Aqui, cada item na grade é configurado com um fundo branco e bordas arredondadas. Cada imagem é associada a uma área específica do grid usando as classes img1, img2, etc.

A propriedade grid-area é usada para atribuir um nome à área de uma grade, permitindo que um item específico na grade seja posicionado nessa área pelo seletor correspondente. No contexto do código que estamos usandod:

.container .img1 {
    grid-area: img1;
}

Aqui, temos uma regra CSS que se aplica aos elementos com a classe img1 dentro da classe .container. A propriedade grid-area: img1; está dizendo ao navegador que este elemento deve ocupar a área nomeada como “img1” na grade definida pela classe .container.

O uso de grid-area é especialmente útil quando você tem uma grade complexa e deseja posicionar elementos em áreas específicas de forma mais legível e sem a necessidade de especificar explicitamente as propriedades grid-row-start, grid-column-start, etc.

No código completo usamos:

.container {
    /* ... outras propriedades ... */
    grid-template-areas: "img1 img1 img4"
                         "img2 img3 img5"
                         "img6 img6 img5";
    /* ... outras propriedades ... */
}

A propriedade grid-template-areas define as áreas da grade, atribuindo nomes a essas áreas. Então, ao associar grid-area: img1; a um elemento com a classe .img1, você está indicando que esse elemento deve ocupar a área nomeada como “img1” na grade.

.container .item img{
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    cursor: pointer;
    border-radius: 10px;
    transition: 0.5s;
}

.container:hover .item img:not(:hover){
    filter: grayscale(1);
    opacity: 0.5;
}

Nesse último bloco, configuramos as imagens para ocupar 100% do espaço de seus contêineres, adicionamos um efeito de transição suave e um efeito de escala de cinza ao passar o mouse sobre a div “container”.

Grid Layout em CSS

Espero que tenham gostado dessa exploração pelo código! Agradeço a todos por acompanharem esta aula no Code Kong. Se tiverem dúvidas ou sugestões, deixem nos comentários. Até a próxima! 🚀✨