Una divertida exploración de las formas de recrear una ilusión óptica con CSS.
¡En esta publicación nos vamos a divertir un poco! Debe haber 100 maneras de lograr esta ilusión óptica, y solo te compartiré mis pensamientos, pero te alentaré a que pruebes tu estilo. Prueba la demostración y mira la fuente.
Si prefieres ver un video, aquí tienes una versión de YouTube de esta publicación:
Descripción general
El nombre de esta ilusión es Ilusión en la pared del café. No hay líneas torcidas por ninguna parte, pero nuestros ojos perciben inclinaciones. Puede ser difícil de creer, pero reconstruirla definitivamente te ayudará a ver a través de la ilusión.
Marca
El código HTML para esto consiste en filas y columnas directas. <body>
es el contenedor con <div class="row">
para los elementos secundarios. Cada fila contiene 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
Elegí la cuadrícula de CSS porque parecía apropiada debido al estilo de presentación de las filas y también presenta justify-content
, que parecía una buena manera de desplazar los elementos secundarios de las filas.
Tipos de carrocería
Comenzando con los diseños de cuerpo, usé display: grid
y grid-auto-rows
para proporcionar los diseños de filas. El calc()
que ves para los tamaños de fila tiene en cuenta el borde de cada fila y ayuda a que el efecto se ajuste a todo el viewport.
body {
display: grid;
grid-auto-rows: calc(20vh - 4px);
gap: 4px;
background: gray;
margin: 0;
}
Estilos de fila
Aquí elegí la cuadrícula de nuevo, pero en lugar de crear filas con ella, usé grid-auto-flow: column
para cambiar la dirección a las columnas. Luego, defino los tamaños de las columnas y agrego un poco de padding intercalado a la fila, para que los cuadros no queden en el borde del viewport. Luego, oriento ciertas filas y justifica el contenido en center
o end
, lo que crea el desplazamiento que alimenta la ilusión.
.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 cuadrados
Todo lo que falta ahora es cambiar el color de los cuadrados y agregar un borde:
.square {
border-inline: 4px solid gray;
background: black;
}
Conclusión
Ahora que sabes cómo lo hice, ¿cómo lo harías? 🙂 ¿Flotantes? ¿Flexbox? ¿gradiente?
Diversifiquemos nuestros enfoques y aprendamos todas las formas de desarrollar en la Web.
Crea una demostración, twittea vínculos y la agregaré a la sección de remixes de la comunidad a continuación.
Remixes de la comunidad
- Marcar inicios con gradientes: demostración y código