Glassmorphism CSS efekti, son birkaç yıldır arayüz tasarımında sıkça gördüğümüz, içinden geçen arka planı bulanıklaştırarak buzlu bir cam izlenimi veren bir görsel dildir. İşin sırrı tek bir mucize özellikte değil; yarı saydam bir arka plan rengi, backdrop-filter ile uygulanan bulanıklık, ince bir kenarlık ve yumuşak bir gölgenin birlikte çalışmasında. Bu yazıda efekti sıfırdan, performansı ve erişilebilirliği gözeterek kuracağız.
Glassmorphism nedir ve hangi katmanlardan oluşur
Bir cam panele baktığında dört şeyi aynı anda algılarsın: arkadaki bulanık görüntü, camın hafif rengi, kenarındaki parlama ve yüzeyin yüzdüğü hissi. CSS'te bunları şu katmanlarla taklit ederiz:
- Bulanıklık:
backdrop-filter: blur(...)elemanın arkasındaki pikselleri bulanıklaştırır. - Saydamlık:
rgba()veyahsl(... / 0.x)ile düşük opaklıkta bir dolgu rengi. - Kenar: 1px'lik, yarı saydam beyaz bir
bordercamın kenarındaki ışığı taklit eder. - Derinlik: geniş ve yumuşak bir
box-shadowpanelin yüzdüğü hissini verir.
Önemli bir nokta: efektin görünür olması için panelin arkasında bulanıklaştırılacak bir şey olmalı. Düz, tek renkli bir arka planda glassmorphism kaybolur; renkli bir gradyan, fotoğraf ya da blob şekilleri gerekir.
Temel glassmorphism CSS kartı
En sade haliyle bir cam kart şöyle görünür. Önce arka planı renklendiriyor, sonra kartı kuruyoruz:
body {
min-height: 100vh;
background: linear-gradient(135deg, #6a11cb 0%, #2575fc 100%);
display: grid;
place-items: center;
}
.glass {
background: rgba(255, 255, 255, 0.12);
-webkit-backdrop-filter: blur(12px);
backdrop-filter: blur(12px);
border: 1px solid rgba(255, 255, 255, 0.25);
border-radius: 16px;
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.25);
padding: 2rem;
color: #fff;
}
-webkit-backdrop-filter satırını boşuna eklemiyoruz: Safari uzun süre yalnızca ön ekli sürümü destekledi ve mobil Safari'de hâlâ güvenli tarafta kalmak gerekir. Ön ekli satırı her zaman standart satırdan önce yaz.
backdrop-filter'ı ince ayar etmek
backdrop-filter sadece blur() almaz; birden çok filtreyi boşlukla zincirleyebilirsin. Camı biraz daha canlı göstermek için doygunluğu artırmak çok işe yarar:
.glass {
backdrop-filter: blur(12px) saturate(160%);
-webkit-backdrop-filter: blur(12px) saturate(160%);
}
Birkaç pratik öneri:
- Blur miktarı: 8–16px aralığı çoğu kart için ideal. 30px üzeri bulanıklık hem yavaşlar hem de "cam" hissini kaybeder.
- Dolgu opaklığı: açık temada 0.10–0.20, koyu temada 0.05–0.10 arası genelde dengeli durur.
- Doygunluk:
saturate(150%–180%)arkadaki renkleri pop ettirir; gerçek camın ışık kırma hissine yaklaştırır.
Kenar parlamasını gerçekçi yapmak
Düz tek renk bir kenarlık biraz yapay durur. Gerçek camda ışık üstten gelir, bu yüzden üst kenar alt kenardan daha parlaktır. Bunu tek renk yerine bir gradyan kenarlıkla taklit edebilirsin:
.glass {
border: 1px solid transparent;
background:
linear-gradient(rgba(255,255,255,0.12), rgba(255,255,255,0.12)) padding-box,
linear-gradient(135deg, rgba(255,255,255,0.6), rgba(255,255,255,0.1)) border-box;
}
Burada iki katmanlı bir background kullanıyoruz: ilk gradyan padding-box ile dolguyu boyar, ikincisi border-box ile kenarlığı boyar. Böylece kenar köşeden köşeye parlaklık geçişi yapar.
Erişilebilirlik ve okunabilirlik
Glassmorphism'in en büyük tuzağı kontrasttır. Yarı saydam bir yüzeyin üstündeki metin, arkadaki renge göre okunamaz hâle gelebilir. Birkaç koruyucu önlem:
- Metin için arka planla en az 4.5:1 kontrast oranını hedefle (WCAG AA, normal metin).
- Çok değişken bir arka plan üstündeysen metne hafif bir
text-shadowekle ya da panelin opaklığını biraz artır. - İkili güvence:
backdrop-filterdesteklenmezse panelin tamamen şeffaf kalıp metni kaybolmasın diye, yedek olarak biraz daha opak bir arka plan ver.
.glass {
background: rgba(30, 30, 50, 0.6); /* yedek: daha opak */
}
@supports ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
.glass {
background: rgba(255, 255, 255, 0.12); /* cam: daha şeffaf */
backdrop-filter: blur(12px) saturate(160%);
-webkit-backdrop-filter: blur(12px) saturate(160%);
}
}
@supports sorgusu sayesinde tarayıcı backdrop-filter'ı destekliyorsa şeffaf cam görünümünü, desteklemiyorsa okunaklı kalan opak yedeği kullanır. Bu, ilerlemeli iyileştirmenin (progressive enhancement) ders kitabı örneğidir.
Performans: nerede dikkatli olmalı
backdrop-filter ucuz bir efekt değildir; tarayıcının her karede arkadaki bölgeyi yeniden bulanıklaştırması gerekir. Şu noktalara dikkat et:
- Sayıyı sınırla: Aynı ekranda onlarca cam panel yerine birkaç tane kullan. Uzun listelerdeki her satıra blur uygulamak mobilde gözle görülür şekilde yavaşlatır.
- Animasyondan kaçın:
backdrop-filterdeğerini her karede değiştiren animasyonlar pahalıdır; bunun yerine panelitransformya daopacityile hareket ettir. - Hareketi azalt:
prefers-reduced-motionve düşük güçlü cihazları düşün; gerekiyorsa@supportsdışında basit bir opak panel sun.
Sık Sorulan Sorular
backdrop-filter tüm tarayıcılarda çalışıyor mu?
Güncel Chrome, Edge, Firefox ve Safari sürümlerinde destekleniyor; Safari'de uzun süre -webkit- ön eki gerekti, bu yüzden ön ekli satırı eklemek hâlâ iyi bir alışkanlık. Eski tarayıcılar için yukarıdaki @supports yedeğini mutlaka kullan.
backdrop-filter ile filter arasındaki fark ne?
filter elemanın kendisini (içeriği dahil) bulanıklaştırır; backdrop-filter ise elemanın arkasındaki pikselleri bulanıklaştırır, içeriği net bırakır. Cam efekti için ikincisi gerekir.
Efekt görünmüyor, neden?
En yaygın iki neden: panelin arkasında bulanıklaştırılacak içerikli bir arka plan yok (düz renk üstünde fark edilmez) ya da panelin dolgusu tamamen opak ve bulanık katmanı örtüyor. Renkli bir gradyan kullan ve dolgu opaklığını düşür.
Arayüzüne modern bir cam dokunuşu mu istiyorsun? Performanslı, erişilebilir ve markana uygun glassmorphism bileşenleri tasarlayıp kodlayabilirim — benimle iletişime geç ve fikrini birlikte hayata geçirelim.