Une exploration amusante des moyens de recréer une illusion d'optique avec le CSS.
Nous allons nous amuser un peu dans ce post ! Il doit y avoir 100 façons d'obtenir cette illusion d'optique. Je vais seulement vous faire part de mes réflexions, mais je vous encourage à essayer votre style. Essayez la démonstration et affichez la source.
Si vous préférez la vidéo, voici une version YouTube de ce post:
Présentation
Le nom de cette illusion est illusion du mur du café. Il n'y a pas de lignes tordues à trouver quelque part, mais nos yeux perçoivent des inclinaisons. C'est peut-être difficile à croire, mais la reconstruire vous aidera à percer les illusions.
Markup
Pour cela, le code HTML se compose de lignes et de colonnes simples. <body>
est le conteneur contenant <div class="row">
pour les enfants. Chaque ligne contient cinq éléments <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>
…
Styles
J'ai choisi la grille CSS, car elle me semblait adaptée au style de présentation des lignes et elle présente également justify-content
, qui semblait être un bon moyen de décaler les éléments enfants de ligne.
Carrosseries
En commençant par les styles de corps, j'ai utilisé display: grid
et grid-auto-rows
pour fournir la mise en page des lignes. Le calc()
que vous voyez pour les tailles de ligne tient compte de la bordure de chaque ligne et permet à l'effet de s'adapter à l'ensemble de la fenêtre d'affichage.
body {
display: grid;
grid-auto-rows: calc(20vh - 4px);
gap: 4px;
background: gray;
margin: 0;
}
Styles de ligne
Ici, j'ai choisi une nouvelle fois la grille, mais au lieu de créer des lignes avec celle-ci, j'ai utilisé grid-auto-flow: column
pour changer la direction des colonnes. Ensuite, je définis la taille des colonnes et j'ajoute une marge intérieure intégrée à la ligne afin que les cases ne dépassent pas le bord de la fenêtre d'affichage. Ensuite, je cible certaines lignes et justifie le contenu sur center
ou end
, ce qui crée ce décalage qui alimente l'illusion.
.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;
}
Styles carrés
Il ne vous reste plus qu'à modifier la couleur des carrés et à ajouter une bordure:
.square {
border-inline: 4px solid gray;
background: black;
}
Conclusion
Maintenant que tu sais comment j'ai fait, comment tu en ferais ?! 😃 Des flotteurs ? Flexbox? Dégradé ?!
Diversissons nos approches et apprenons toutes les façons de créer sur le Web.
Créez une démo, cliquez sur les liens tweet me, et je l'ajouterai à la section "Remix" de la communauté ci-dessous.
Remix de la communauté
- Marquer les bottes avec des dégradés: démonstration et code