Yüksek çözünürlüklü cam efekti için CSS oluşturucu
(glass3d.dev)- CSS kodu ile yüksek çözünürlüklü cam (glass) efektinin nasıl uygulanacağını sunuyor
- blur, parlaklık (brightness), doygunluk (saturate) gibi görsel filtreler ve çok katmanlı gölgeler uygular
- pseudo-element kullanarak ön ve arka yüz için katman efektleri ile doku (texture) işlemesini hayata geçirir
- Yalnızca tek ve sade bir CSS sınıfıyla çeşitli UI'lara uygulanabilir ve özelleştirilebilir
- Yüksek çözünürlüklü cam efektini web projelerine hızlı ve modern biçimde dahil etmek için elverişlidir
Giriş
Bu CSS kodu, web UI'da yüksek çözünürlüklü cam (glass) efekti oluşturmak için özelleştirilmiş bir yapılandırmadır. Mevcut glassmorphism efektlerine göre daha ince ayarlı ve daha derinlikli bir görünüm sunar; CSS'te tek bir sınıf uygulanarak sonuç doğrudan görülebilir.
Başlıca içerik
.glass3dsınıfında blur (32px), parlaklık (0.85), doygunluk (2.5) gibi çeşitli görsel filtre efektleri ile renk ve gürültü dokusu eklenir- Birden çok aşamalı box-shadow yapısıyla gerçekçi, üç boyutlu bir cam hissi oluşturulur
::beforepseudo-element içinde backdrop-filter, renkler ve gürültü arka plan görseli üst üste bindirilerek arka plan saydamlığı ve üç boyutlu doku hissi verilir::afterpseudo-element içinde iç (inset) gölge eklenerek gerçek cam yüzeyinde ışık yansıyormuş etkisi sağlanır- z-index ayrımıyla katmanların birbirinin efektleriyle çakışmadan düzgün görüntülenmesi için yapılandırılmıştır
.glass3d > *seçicisiyle alt öğelerin içerik kısmı her zaman en üstte görünecek şekilde ayarlanır
Kullanım bağlamı ve avantajlar
- Kütüphane ya da harici bağımlılık olmadan yalnızca tek bir CSS sınıfı ile modern ve trend bir cam efektli UI oluşturulabilir
- UI tasarım sistemleri, kartlar, açılır pencereler ve butonlara kolayca uygulanıp genişletilebildiği için web frontend geliştiricileri açısından oldukça kullanışlıdır
- Gerçek desen görselleriyle oluşturulan doku, farklı renk kombinasyonları ve çok aşamalı gölge efektleri sayesinde mevcut glassmorphism tekniklerine kıyasla derinlik ve ışık-gölge ifadesinde güçlüdür
1 yorum
Hacker News yorumu
JavaScript ile sayfadaki öğelere gerçek kırılma efekti uygulayan bir sürüm yapılmış, bakmanızı öneririm: https://real-glass.vercel.app/
Bu efektin, yalnızca yüzeyin hemen arkasındaki pikselleri bulanıklaştırma gibi bir sınırı var; bu durumu iyi açıklayan Josh Comeau yazısına (https://www.joshwcomeau.com/css/backdrop-filter/#the-issue) ve Hacker News tartışmasına (https://news.ycombinator.com/item?id=42302907) bakmanızı öneririm. Arka plan hareketliyse bu epey önemli bir mesele, ama sabitse genelde çok önemli olmuyor.
border-radiusuygularken sorun yaşadım. Sabit kodlanmış öğelerde iyi çalıştı, ancak marka/container query'lerine göreborder-radius'ı değişen tüm bir bileşen kütüphanesinde kullanmak için hâlâ bir yöntem arıyorum.Oldukça iyi yapılmış gibi görünüyor, ama camın kırılma efekti olmayınca Liquid Glass'ın güçlü katmanlı görsel ayrışma hissi kayboluyor. Material'ın tasarım kaynaklarına bakarsanız, uygulamanın tutarlı biçimde hareket eden 3D katmanlardan oluşması gerektiğini vurguluyor. Ama bunu pratikte 2D olarak uygulayıp tüm öğeleri birbirine karıştırınca, katmanları ayırt etmek çok zorlaşıyor; insanlar köşelerdeki aksiyon butonlarını sık sık bulamıyor. Hareket, chrome ile içeriği ayırmaya yardımcı oluyor ama görsel olarak pek öne çıkmıyor. Bence Liquid Glass'ın en büyük avantajı edge distortion. İçerik hareket ettiğinde insan görmesinin anında yakaladığı doğrusal olmayan bir hareket üretiyor ve hareket varken katman ayrımı daha belirgin oluyor. Buradaki önemli kırılma bileşeni eksik. SVG filtreleriyle edge distortion yapmak kolay değil ve sonuçta oldukça karmaşık bir iş. Karmaşıklığı görmek için https://atlaspuplabs.com/blog/liquid-glass-but-in-css/… adresindeki adım adım açıklamaya bakabilirsiniz. Ayrıca Liquid Glass için çeşitli uygulama denemelerini toplayan bir CodePen Spark koleksiyonu da buldum; sabit kodlanmış SVG ile fena olmayan bir referans da öneririm: https://codepen.io/spark/453 https://codepen.io/lucasromerodb/pen/vEOWpYM
Efektin kendisi güzel ama bana pek cam hissi vermiyor. Hemen fark edilen şey, ışığın bevel'e hiç tepki vermemesi. Ayrıca ışığın camdan yansıyarak aydınlatmayı/rengi etkilemesini de beklersiniz; bunu yalnızca blur efektiyle yapmak zor. Cam aynı zamanda kendine özgü gölgeler de üretebilir, özellikle de caustics, ama Apple bile bu kısma pek odaklanmamış gibi görünüyor. Şu anki gölgeler basit bir drop shadow gibi duruyor, bu da 3D bir nesneden çok düz bir kart hissini güçlendiriyor. Bu, son trendin özünden sapıyor. Böyle bir şeyi yalnızca CSS ile yapmak zor; bunu GPU'da shader olarak çalıştırmak daha uygun olabilir.
div'e uygulamak mümkün mü ondan da emin değilim. Temel HTML'e doğrudan GPU efektleri ekleyemiyorsak, o zaman özel bir canvas benzeri yapıyla baştan yeni bir render motoru yazmak daha mantıklı olabilir. Zaten HTML artık anlamını kaybetti,<p>etiketiyle metni verip geri kalan her şeyi reklama çevirdik; belki de yalnızca<p>'yi bırakıp GPU entegrasyonu daha iyi olan tamamen yeni bir başlangıç gerekiyor.Bu tür tasarım örneklerini topluyorum: https://github.com/swyxio/spark-joy
Bununla ilgili birkaç kaynak daha önereyim:
Mobilde kutuları gizleme ya da daraltma seçeneği olsaydı kullanılabilirlik çok daha iyi olurdu diye düşünüyorum. Kutular tüm ekranı kapladığı için arkadaki etki pek görünmüyor. Yine de ilginç geldi, büyük ekranda tekrar denemeyi düşünüyorum. Kutuları gizleme seçeneği çok yardımcı olurdu.
Benim glass uygulamama benzer bir teknik kullanılmış gibi görünüyor: https://news.ycombinator.com/item?id=42225481 Özellikle box shadow'u yoğun kullanan yaklaşım benziyor.
Web arka planı olarak etkili kullanılmış.
Benim telefonda kaydırma oldukça yavaş. Acaba bilerek eklenmiş başka bir yavaş kaydırma efekti mi var, yoksa glass efektinin bir yan etkisi mi merak ettim.
Gerçekten çok iyi yapılmış. Bilgisayar grafiğinin "özel tek bir yöntem" değil de aslında "üst üste binmiş 5 kat hile" olması beni her seferinde şaşırtıyor. Tarayıcılar arası destek de büyük bir meydan okuma. En çok hangi kısmın kaynak tükettiğine dair bir fikriniz var mı? Tahminim
backdrop-filterolabilir.backdrop-filteriçindeki blur işlemi. Blur değeri yükseldikçe, render için çevredeki daha fazla piksel bilgisinin incelenmesi gerekiyor. Bir diğer kaynak tüketen bölüm de sayfa kaydırılırken ya da video arka plan değişirken glass görünümünün gerçek zamanlı olarak güncellenmesi.