CSS ile optik illüzyon oluşturmanın yollarını eğlenceli bir şekilde keşfedin.
Bu yayında biraz eğleneceğiz. Bu optik illüzyonu başarmanın 100 yolu vardır. Ben yalnızca kendi düşüncelerimi paylaşacağım ama tarzınızı denemenizi öneririm. Demoyu deneyin ve kaynağı görüntüleyin.
Video kullanmayı tercih ederseniz bu gönderinin YouTube versiyonunu kullanabilirsiniz:
Genel Bakış
Bu illüzyonun adı Cafe Duvar İlüzyonu'dur. Hiçbir yerde kesik çizgi yok ama eğimleri gözlerimiz algılıyor. Buna inanmak zor olabilir ancak yeniden inşa etmek, illüzyonu görmenize kesinlikle yardımcı olacaktır.
Brüt kar
Bunun HTML'si basit satırlar ve sütunlardır. <body>
, çocuklara yönelik <div class="row">
içeren kapsayıcıdır. Her satırda beş <div
class="square">
öğesi bulunur.
<div class="row">
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
</div>
…
Stiller
Satırların sunum stili göz önüne alındığında CSS ızgara'yı seçtim. Ayrıca, satır alt öğelerini dengelemek için iyi bir yöntem olan justify-content
özelliğini de kullandım.
Gövde stilleri
Gövde stillerinden başlayarak satır düzenlerini sağlamak için display: grid
ve grid-auto-rows
kullandım. Satır boyutları için gördüğünüz calc()
, her satırdaki kenarlığı hesaba katar ve efektin görüntü alanının tamamına sığmasına yardımcı olur.
body {
display: grid;
grid-auto-rows: calc(20vh - 4px);
gap: 4px;
background: gray;
margin: 0;
}
Satır stilleri
Burada tekrar ızgara seçtim ancak ızgarayla satır oluşturmak yerine grid-auto-flow: column
simgesini kullanarak yönü sütunlara değiştirdim. Ardından sütun boyutlarını tanımlar ve kutuların görünüm kenarına taşmaması için satıra biraz satır içi dolgu eklerim. Ardından belirli satırları hedefliyorum ve içeriği center
veya end
değerine göre hizalayarak illüzyonu destekleyen bir kaydırma oluşturuyorum.
.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;
}
Kare stiller
Şimdi tek yapmanız gereken karelerin rengini değiştirmek ve bir kenarlık eklemektir:
.square {
border-inline: 4px solid gray;
background: black;
}
Sonuç
Bunu nasıl yaptığımı öğrendiğinize göre, siz ne yapardınız? 🙂 Yüzen mi? Flexbox mı? Gradyan mı?
Yaklaşımlarımızı çeşitlendirelim ve web'de uygulama geliştirmenin tüm yollarını öğrenelim.
Bir demo oluşturun, bağlantılarını bana tweetleyin. Ardından, aşağıdaki topluluk remiksleri bölümüne ekleyeceğim.
Topluluk remiksleri
- Gradyanlarla botları işaretleme: demo ve kod