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 yanılsamayı elde etmenin 100 yolu olmalı. Ben sadece düşüncelerimi paylaşacağım ancak sizi kendi tarzınızı denemeye teşvik edeceğim. Demoyu deneyin ve kaynağı görüntüleyin.
Video tercih ediyorsanız bu yayının YouTube versiyonunu aşağıda bulabilirsiniz:
Genel Bakış
Bu yanılsamanın adı Cafe Wall Illusion'dır. Hiçbir yerde eğri çizgiler olmamasına rağmen gözlerimiz eğimleri algılar. Buna inanmak zor olabilir ancak güveni yeniden inşa etmek, bu yanılsamayı görmenize kesinlikle yardımcı olacaktır.
Brüt kar
Bunun HTML'si basit satırlar ve sütunlardan oluşur. <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 stiline uygun göründüğü için CSS grid'i seçtim. Ayrıca, satır alt öğelerini dengelemek için iyi bir yol gibi görünen justify-content
özelliğini de içeriyor.
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ığı dikkate alır ve efektin tam görüntü alanı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 ızgarayı seçtim ancak satır oluşturmak yerine yönü sütunlara değiştirmek için grid-auto-flow: column
kullandım. Ardından sütun boyutlarını tanımlıyorum ve satıra biraz satır içi dolgu ekliyorum. Böylece kutular, görünüm alanı kenarına ulaşmıyor. Ardından belirli satırları hedefleyip içeriği center
veya end
ile hizalayarak yanılsamayı besleyen dengeyi 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 stilleri
Şimdi yapmanız gereken tek şey karelerin rengini değiştirmek ve kenarlık eklemek:
.square {
border-inline: 4px solid gray;
background: black;
}
Sonuç
Benim nasıl yaptığımı öğrendiğinize göre, siz nasıl yapardınız? 🙂 Kayanlar? Flexbox? Gradyan?!
Yaklaşımlarımızı çeşitlendirelim ve web'de içerik oluşturmanın tüm yollarını öğrenelim.
Bir demo oluşturun, bağlantıları bana tweet atın. Ben de bu bağlantıları aşağıdaki topluluk remiksleri bölümüne ekleyeyim.
Topluluk remiksleri
- Gradyenlerle Mark Boots: demo ve kod