Notice: Trying to access array offset on value of type null in /home1/boomo210/public_html/noticia_v2.php on line 105

Notice: Trying to access array offset on value of type null in /home1/boomo210/public_html/noticia_v2.php on line 120

Warning: session_start(): Cannot start session when headers already sent in /home1/boomo210/public_html/noticia_v2.php on line 245
Como criar uma galeria em mosaico com CSS sem Javascript e responsivo - Boomo
Como criar uma galeria em mosaico com CSS sem Javascript e responsivo

Como criar uma galeria em mosaico com CSS sem Javascript e responsivo

Tutoriais
Tecnologia
Felipe

Oi eu sou o Felipe! Sou artista digital. Nesse blog falo sobre o que gosto e o que me inspira. Compartilho curiosidades sobre o mundo geek, tutoriais e muito mais.

Instagram: @lipemo_

Neste tutorial irei ensinar como criar uma galeria de fotos em mosaico assimétrico utilizando apenas CSS sem javascript e ainda sendo responsivo. Sim é possível e é mais simples do que você pensa.

É muito comum encontrarmos diversas soluções de mosaico utilizando Javascript  e libs prontas, Masonry é uma das mais conhecidas. Mas no CSS é possível fazer muita coisa de forma mais leve e de forma criativa chegar a resultados bem parecidos ou até melhores. Com CSS puro acabamos carregando menos código e tendo um site mais leve e rápido. Então vamos lá?

Veja o resultado e o código no JSFiddle

Estude e desenvolva seu HTML e CSS

Comprar

Livro de HTML e CSS

Crie uma página em HTML básica

Utilize o seu editor  para criar uma página simples é a partir dela que vamos construir nossa galeria de imagens mosaico.

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">        
        <meta name="author" content="Boomo - Felipe Moreira">
        <meta name="description" content="Tutorial Mosaico. Boomo - por Felipe Moreira">      
        <link rel="shortcut icon" href="favicon.ico">        
        <title>Tutorial Mosaico. Boomo - por Felipe Moreira</title>        
    </head>
<body>    
       
    </body>
</html>

 

Adicione a DIV que será o nosso container de imagens

No código abaixo nós criamos uma <div> com o id grid, e dentro dela colocamos diversas imagens <img> apenas com o src para imagem, repare que algumas imagens possuem a classe span-2 que falaremos mais tarde nesse tutorial. Adicione esse código dentro do body na página criada na etapa anterior.

<div id="grid">
        <img src="https://boomo.com.br/images/noticias/operacao-big-hero-png-c799.png">
        <img src="https://boomo.com.br/images/noticias/peanuts-png-c977.png">
        <img class="span-2" src="https://boomo.com.br/images/noticias/naruto-funko-pop-jpg-c163.jpg">
        <img src="https://boomo.com.br/images/noticias/angry-birds-png-c939.png">
        <img src="https://boomo.com.br/images/noticias/como-treinar-o-seu-dragao-png-c348.png">
        <img src="https://boomo.com.br/images/noticias/detona-ralph-png-c286.png">
        <img src="https://boomo.com.br/images/noticias/divertidamente-png-c684.png">
        <img class="span-2" src="https://boomo.com.br/images/noticias/naruto-funko-pop-2-jpg-c571.jpg">
        <img src="https://boomo.com.br/images/noticias/familia-futuro-png-c618.png">
        <img class="span-2" src="https://boomo.com.br/images/noticias/seto-kaiba-yu-gi-oh-funko-pop-boneco-jpg-c119.jpg">
        <img src="https://boomo.com.br/images/noticias/frozen-png-c476.png">
        <img src="https://boomo.com.br/images/noticias/meu-malvado-favorito-png-c518.png">
        <img src="https://boomo.com.br/images/noticias/the-order-2-temporada-10-png-c992.png">
        <img class="span-2" src="https://boomo.com.br/images/noticias/naruto-rasengan-funko-pop-jpg-c879.jpg">
        <img src="https://boomo.com.br/images/noticias/the-order-2-temporada-8-png-c764.png">
        <img src="https://boomo.com.br/images/noticias/the-order-2-temporada-9-png-c437.png">    
        <img src="https://boomo.com.br/images/noticias/the-order-2-temporada-1-png-c901.png">
        <img class="span-2" src="https://boomo.com.br/images/noticias/joey-wheeler-yu-gi-oh-funko-pop-boneco-jpg-c328.jpg">
        <img src="https://boomo.com.br/images/noticias/the-order-2-temporada-2-png-c539.png">
        <img class="span-2" src="https://boomo.com.br/images/noticias/dragao-branco-de-olhos-azuis-yu-gi-oh-funko-pop-boneco-jpg-c914.jpg">
        <img src="https://boomo.com.br/images/noticias/the-order-2-temporada-3-png-c209.png">
        <img src="https://boomo.com.br/images/noticias/the-order-2-temporada-4-png-c457.png">
        <img class="span-2" src="https://boomo.com.br/images/noticias/naruto-sexy-no-jutsu-funko-pop-jpg-c248.jpg">
        <img src="https://boomo.com.br/images/noticias/the-order-2-temporada-5-png-c577.png">
        <img class="span-2" src="https://boomo.com.br/images/noticias/pegasus-yu-gi-oh-funko-pop-boneco-jpg-c256.jpg">
        <img src="https://boomo.com.br/images/noticias/the-order-2-temporada-6-png-c801.png">
        <img src="https://boomo.com.br/images/noticias/the-order-2-temporada-7-png-c637.png">
        <img class="span-2" src="https://boomo.com.br/images/noticias/exodia-yu-gi-oh-funko-pop-boneco-jpg-c686.jpg">
        <img src="https://boomo.com.br/images/noticias/mago-negro-yu-gi-oh-funko-pop-boneco-jpg-c600.jpg">
    </div>

Código HTML completo

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">        
        <meta name="author" content="Boomo - Felipe Moreira">
        <meta name="description" content="Tutorial Mosaico. Boomo - por Felipe Moreira">      
        <link rel="shortcut icon" href="favicon.ico">        
        <title>Tutorial Mosaico. Boomo - por Felipe Moreira</title>        
    </head>    <body>    
       <div id="grid">
        <img src="https://boomo.com.br/images/noticias/operacao-big-hero-png-c799.png">
        <img src="https://boomo.com.br/images/noticias/peanuts-png-c977.png">
        <img class="span-2" src="https://boomo.com.br/images/noticias/naruto-funko-pop-jpg-c163.jpg">
        <img src="https://boomo.com.br/images/noticias/angry-birds-png-c939.png">
        <img src="https://boomo.com.br/images/noticias/como-treinar-o-seu-dragao-png-c348.png">
        <img src="https://boomo.com.br/images/noticias/detona-ralph-png-c286.png">
        <img src="https://boomo.com.br/images/noticias/divertidamente-png-c684.png">
        <img class="span-2" src="https://boomo.com.br/images/noticias/naruto-funko-pop-2-jpg-c571.jpg">
        <img src="https://boomo.com.br/images/noticias/familia-futuro-png-c618.png">
        <img class="span-2" src="https://boomo.com.br/images/noticias/seto-kaiba-yu-gi-oh-funko-pop-boneco-jpg-c119.jpg">
        <img src="https://boomo.com.br/images/noticias/frozen-png-c476.png">
        <img src="https://boomo.com.br/images/noticias/meu-malvado-favorito-png-c518.png">
        <img src="https://boomo.com.br/images/noticias/the-order-2-temporada-10-png-c992.png">
        <img class="span-2" src="https://boomo.com.br/images/noticias/naruto-rasengan-funko-pop-jpg-c879.jpg">
        <img src="https://boomo.com.br/images/noticias/the-order-2-temporada-8-png-c764.png">
        <img src="https://boomo.com.br/images/noticias/the-order-2-temporada-9-png-c437.png">    
        <img src="https://boomo.com.br/images/noticias/the-order-2-temporada-1-png-c901.png">
        <img class="span-2" src="https://boomo.com.br/images/noticias/joey-wheeler-yu-gi-oh-funko-pop-boneco-jpg-c328.jpg">
        <img src="https://boomo.com.br/images/noticias/the-order-2-temporada-2-png-c539.png">
        <img class="span-2" src="https://boomo.com.br/images/noticias/dragao-branco-de-olhos-azuis-yu-gi-oh-funko-pop-boneco-jpg-c914.jpg">
        <img src="https://boomo.com.br/images/noticias/the-order-2-temporada-3-png-c209.png">
        <img src="https://boomo.com.br/images/noticias/the-order-2-temporada-4-png-c457.png">
        <img class="span-2" src="https://boomo.com.br/images/noticias/naruto-sexy-no-jutsu-funko-pop-jpg-c248.jpg">
        <img src="https://boomo.com.br/images/noticias/the-order-2-temporada-5-png-c577.png">
        <img class="span-2" src="https://boomo.com.br/images/noticias/pegasus-yu-gi-oh-funko-pop-boneco-jpg-c256.jpg">
        <img src="https://boomo.com.br/images/noticias/the-order-2-temporada-6-png-c801.png">
        <img src="https://boomo.com.br/images/noticias/the-order-2-temporada-7-png-c637.png">
        <img class="span-2" src="https://boomo.com.br/images/noticias/exodia-yu-gi-oh-funko-pop-boneco-jpg-c686.jpg">
        <img src="https://boomo.com.br/images/noticias/mago-negro-yu-gi-oh-funko-pop-boneco-jpg-c600.jpg">
    </div>
    </body>
</html>

 

Dando vida ao mosaico com o CSS

Agora vamos dar iníco a criação do arquivo em CSS, você pode fazer da maneira que preferir adicionando um arquivo separado no head ou criando a tag <style> dentro do mesmo arquivo, aqui vamos usar a tag <style> para simplificar.

Começamos adicionando um pequeno código só para tirar as margens e mudar a cor do fundo do documento. Isso não afeta em nada nosso mosaico.

html,body{
  margin: 0;
  padding: 0;
  background: #000
}

 

CSS do Container principal

Nossa div que é o container de nossas imagens tem o id grid e vamos utilizar ele no css para definir os estilos do container. Nós utilizaremos o grid layout para fazer nosso mosaico.

#grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
    grid-auto-rows: minmax(250px, auto);
    grid-auto-flow: dense;
    grid-column-gap: .5em;
    grid-row-gap: .5em;
    margin: 20px 0 0 0;
}

Então definimos o display como grid e adicionamos alguns estilos que vão definir o comportamento das imagens dentro do container.

grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); 

Esse estilo define o tamanho das imagens em linha/horizontal a função. repeat repete o tamanho para um número x de imagens, o auto-fill determina esse tamanho automaticamente e o minmax é uma função que calcula o tamanho respeitando os 300px e ignorando caso as imagens sejam maiores.

grid-auto-rows: minmax(250px, auto);

Essa linha faz o mesmo  que a anterior porém em colunas/vertical.

grid-auto-flow: dense;

Controla um algorítimo de posicionamento automático e a propriedade dense sempre tenta preencher os 'buracos'

grid-column-gap: .5em;
grid-row-gap: .5em;

Esses estilos definem os espaçamentos entre as imagens em linhas e colunas.

 

Definindo o estilo das imagens dentro do container

Aqui é mais simples, estamos aplicando um estilo para as imagens dentro do grid. Apenas estamos definindo o tamanho e a altura para 100% e o object-fit faz com que a imagem sempre preencha todo os espaço independente do tamanho dela.

#grid img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

Para finalizar nós criamos uma classe chamada span-2. Esses estilos definem qual é o espaço final que a imagem vai chegar, eu sei é um pouco confuso. Mas entenda o valor span como partes! Abaixo você consegue ver que o span na coluna é 1 ou seja ele ocupa uma parte da horizontal e 2 na vertical. Ou seja todas as imagens que tiverem com essa classe irão ocupar espaços maiores na vertical criando o mosaico.

.span-2 {
    grid-column-end: span 1;
    grid-row-end: span 2;
}

 

Quando utilizar a classe span-2?

Aqui é onde você precisará ser criativo. No meu exemplo eu defini manualmente em cada imagem a classe span-2, porém você pode fazer um código seja em PHP ou Javascript que calcule o tamanho das imagens e se a altura da imagem for maior que a largura você deve definir a classe span-2 fazendo com que todas as imagens que são altas ocupem mais espaço no mosaico.

 

Código Completo

Veja o código no JSFiddle

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">        
        <meta name="author" content="Boomo - Felipe Moreira">
        <meta name="description" content="Tutorial Mosaico. Boomo - por Felipe Moreira">      
        <link rel="shortcut icon" href="favicon.ico">        
        <title>Tutorial Mosaico. Boomo - por Felipe Moreira</title>   
        <style>
        html,body{
          margin: 0;
          padding: 0;
          background: #000
        }
        #grid {
            display: grid;
            grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
            grid-auto-rows: minmax(250px, auto);
            grid-auto-flow: dense;
            grid-column-gap: .5em;
            grid-row-gap: .5em;
            margin: 20px 0 0 0;
        }
        #grid img {
            width: 100%;
            height: 100%;
            object-fit: cover;
        }
        .span-2 {
            grid-column-end: span 1;
            grid-row-end: span 2;
        }
        </style>
    </head>
    <body>    
       <div id="grid">
        <img src="https://boomo.com.br/images/noticias/operacao-big-hero-png-c799.png">
        <img src="https://boomo.com.br/images/noticias/peanuts-png-c977.png">
        <img class="span-2" src="https://boomo.com.br/images/noticias/naruto-funko-pop-jpg-c163.jpg">
        <img src="https://boomo.com.br/images/noticias/angry-birds-png-c939.png">
        <img src="https://boomo.com.br/images/noticias/como-treinar-o-seu-dragao-png-c348.png">
        <img src="https://boomo.com.br/images/noticias/detona-ralph-png-c286.png">
        <img src="https://boomo.com.br/images/noticias/divertidamente-png-c684.png">
        <img class="span-2" src="https://boomo.com.br/images/noticias/naruto-funko-pop-2-jpg-c571.jpg">
        <img src="https://boomo.com.br/images/noticias/familia-futuro-png-c618.png">
        <img class="span-2" src="https://boomo.com.br/images/noticias/seto-kaiba-yu-gi-oh-funko-pop-boneco-jpg-c119.jpg">
        <img src="https://boomo.com.br/images/noticias/frozen-png-c476.png">
        <img src="https://boomo.com.br/images/noticias/meu-malvado-favorito-png-c518.png">
        <img src="https://boomo.com.br/images/noticias/the-order-2-temporada-10-png-c992.png">
        <img class="span-2" src="https://boomo.com.br/images/noticias/naruto-rasengan-funko-pop-jpg-c879.jpg">
        <img src="https://boomo.com.br/images/noticias/the-order-2-temporada-8-png-c764.png">
        <img src="https://boomo.com.br/images/noticias/the-order-2-temporada-9-png-c437.png">    
        <img src="https://boomo.com.br/images/noticias/the-order-2-temporada-1-png-c901.png">
        <img class="span-2" src="https://boomo.com.br/images/noticias/joey-wheeler-yu-gi-oh-funko-pop-boneco-jpg-c328.jpg">
        <img src="https://boomo.com.br/images/noticias/the-order-2-temporada-2-png-c539.png">
        <img class="span-2" src="https://boomo.com.br/images/noticias/dragao-branco-de-olhos-azuis-yu-gi-oh-funko-pop-boneco-jpg-c914.jpg">
        <img src="https://boomo.com.br/images/noticias/the-order-2-temporada-3-png-c209.png">
        <img src="https://boomo.com.br/images/noticias/the-order-2-temporada-4-png-c457.png">
        <img class="span-2" src="https://boomo.com.br/images/noticias/naruto-sexy-no-jutsu-funko-pop-jpg-c248.jpg">
        <img src="https://boomo.com.br/images/noticias/the-order-2-temporada-5-png-c577.png">
        <img class="span-2" src="https://boomo.com.br/images/noticias/pegasus-yu-gi-oh-funko-pop-boneco-jpg-c256.jpg">
        <img src="https://boomo.com.br/images/noticias/the-order-2-temporada-6-png-c801.png">
        <img src="https://boomo.com.br/images/noticias/the-order-2-temporada-7-png-c637.png">
        <img class="span-2" src="https://boomo.com.br/images/noticias/exodia-yu-gi-oh-funko-pop-boneco-jpg-c686.jpg">
        <img src="https://boomo.com.br/images/noticias/mago-negro-yu-gi-oh-funko-pop-boneco-jpg-c600.jpg">
    </div>
    </body>
</html>

 

Estude e desenvolva seu HTML e CSS

Comprar

Livro de HTML e CSS

 

O que você achou do post?
Gostei
Amei
Engraçado
Surpreso
Irritado
Triste
Contato