Uma exploração divertida de maneiras de recriar uma ilusão de ótica com CSS.
Nesta postagem, vamos nos divertir um pouco! Existem 100 maneiras de criar essa ilusão de ótica, e vou compartilhar com você apenas minhas ideias, mas incentivo você a tentar seu estilo. Teste a demonstração e veja a fonte.
Se preferir vídeo, confira uma versão desta postagem no YouTube:
Visão geral
O nome dessa ilusão é Ilusão da parede do café. Não há linhas tortas em lugar nenhum, mas nossos olhos percebem inclinações. Pode ser difícil de acreditar, mas reconstruir a confiança vai ajudar você a enxergar a verdade.
Marcação
O HTML para isso é simples: linhas e colunas. O <body>
é o contêiner com <div class="row">
para crianças. Cada linha contém cinco elementos <div
class="square">
.
<div class="row">
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
</div>
…
Estilos
Escolhi a grade CSS porque ela parecia adequada ao estilo de apresentação das linhas e também apresenta justify-content
, que parecia uma boa maneira de compensar os filhos das linhas.
Estilos de carroceria
Começando com os estilos do corpo, usei display: grid
e grid-auto-rows
para
fornecer os layouts de linha. O calc()
que você vê para os tamanhos de linha considera a borda em cada linha e ajuda o efeito a se ajustar à janela de visualização completa.
body {
display: grid;
grid-auto-rows: calc(20vh - 4px);
gap: 4px;
background: gray;
margin: 0;
}
Estilos de linha
Aqui, escolhi a grade de novo, mas em vez de criar linhas com ela, usei
grid-auto-flow: column
para mudar a direção para colunas. Em seguida, defino os tamanhos das colunas e adiciono um pouco de padding inline à linha para que as caixas não entrem na borda da janela de visualização. Depois, eu segmentava determinadas linhas e justificava o conteúdo como center
ou end
, criando o deslocamento que alimenta a ilusão.
.row {
display: grid;
grid-auto-flow: column;
grid-auto-columns: 9vw;
padding-inline: 4vw;
gap: 10vw;
background: white;
}
.row:nth-child(even) {
justify-content: center;
}
.row:nth-child(3n) {
justify-content: end;
}
Estilos quadrados
Agora, basta mudar a cor dos quadrados e adicionar uma borda:
.square {
border-inline: 4px solid gray;
background: black;
}
Conclusão
Agora que você sabe como eu fiz isso, como você faria? 🙂 Flutuantes? Flexbox? Gradiente?!
Vamos diversificar nossas abordagens e aprender todas as maneiras de criar na Web.
Crie uma demonstração, me envie um tweet com o link, e eu vou adicionar à seção de remixes da comunidade abaixo.
Remixes da comunidade
- Mark Boots com gradientes: demonstração e código