CSS ile optik illüzyonu yeniden yaratmanın eğlenceli bir keşfi.
Bu gönderide biraz eğleneceğiz! Bu optik illüzyona ulaşmanın 100 yolu olmalı. Size sadece düşüncelerimi paylaşacağım ama stilinizi denemenizi tavsiye ederim. Demoyu deneyin ve kaynağı görüntüleyin.
Videoyu tercih ediyorsanız bu yayının YouTube sürümünü burada bulabilirsiniz:
Genel bakış
Bu illüzyonun adı Kafe Duvarı İllüzyonu'dur. Hiçbir yerde eğik çizgi bulunmasa da gözlerimiz eğimleri algılıyor. İnanması zor olabilir, ama onu yeniden geliştirmek illüzyonu görmenize yardımcı olacaktır.
Markup
Bunun HTML'si basit satırlar ve sütunlardır. <body>
, alt öğeler için <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
CSS ızgarasını seçtim, çünkü satırların sunum stiline uygun görünüyordu. Ayrıca, satır alt öğelerini dengelemek için iyi bir yöntem 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
öğelerini kullandım. Satır boyutları için gördüğünüz calc()
, her bir satırdaki kenarlığı dikkate alır 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 yine ızgarayı seçtim, ancak ızgarayla satır oluşturmak yerine yönü sütunlar olarak değiştirmek için grid-auto-flow: column
değerini kullandım. Daha sonra, kutuların görüntü alanı kenarına taşmaması için sütun boyutlarını tanımlayıp satıra biraz satır içi dolgu ekliyorum. Ardından, belirli satırları hedefleyip içeriği center
veya end
olarak gerekçelendiriyorum. Böylece illüzyonu pekiştiren bu ofseti 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 geriye kalan tek şey karelerin rengini değiştirmek ve bir kenarlık eklemektir:
.square {
border-inline: 4px solid gray;
background: black;
}
Sonuç
Nasıl yaptığımı artık bildiğine göre sen ne yaparsın? 🙂 Kayan mı? Flexbox mı? Gradyan?!
Yaklaşımlarımızı çeşitlendirelim ve web'de geliştirme yapmanın tüm yollarını öğrenelim.
Bir demo oluşturun, bana tweet atın bağlantıları, aşağıdaki topluluk remiksleri bölümüne ekleyeceğim.
Topluluk remiksleri
- Renk geçişleriyle Botları İşaretleyin: demo ve kod