Karanlık modun altı seviyesi (2024)
(cssence.com)- Tarayıcının yerleşik özelliklerinden JavaScript medya sorgularına kadar, karanlık mod uygulama kapsamını kademeli olarak genişleten 8 seviyelik bir sınıflandırma özeti
- En basit yöntem, yalnızca
<meta name="color-scheme" content="light dark">veyacolor-scheme: light darkbildirimiyle kullanıcının renk şeması tercihini takip eden bir yapı kurmak - Daha üst seviyelerde
light-dark()fonksiyonu,@media (prefers-color-scheme: dark)ve şemaya göre ayrı stil dosyaları ile yalnızca renkler değil, görseller ve gölgeler de kapsamlı biçimde ayarlanabiliyor - Yalnızca kullanıcının sistem ayarını izlemekle kalmayıp Automatic·light·dark olmak üzere üç seçenek sunan bir değiştirici kurulabiliyor;
:has()ve gerçek meta öğesi üzerinden tema tespiti de mümkün - Safari’nin erişilebilirlik sınırları ve yazdırma sırasında
prefers-color-schemedavranışına dair gözlemler de yer alıyor; yakın dönem CSS özellikleriyle bile light/dark modu yerleşik hale getirmenin kolaylaştığı görülüyor
Karanlık modu seviyelere göre uygulamak
-
Level 1: Barebone
- CSS’de tek satır bile yazmadan light/dark ayrımını etkinleştirmek mümkün; belgenin head kısmına yalnızca
<meta name="color-scheme" content="light dark">eklemek, tarayıcının kullanıcının renk şeması tercihini izlemeye başlaması için yeterli contentniteliğindeki öğelerin sırası teorik olarak anlam taşır; renk şeması tercihi belirtmeyen kullanıcılar, boşlukla ayrılmış listedeki ilk değeri alır- Mevcut işletim sistemi ayarlarında renk şeması seçmeme gibi bir seçenek bulunmadığından, pratikte sonuç işletim sistemi ayarıyla eşleşen şemaya çıkar
contentiçinde yalnızca tek bir değer de verilebilir; bu durumda kullanıcı tercihi dikkate alınmadan ilgili şema zorla uygulanır- Bu meta etiketi, bir bakıma sonraki seviyedeki CSS yaklaşımına karşılık gelen HTML tarafındaki yöntem olarak işlev görür
- CSS’de tek satır bile yazmadan light/dark ayrımını etkinleştirmek mümkün; belgenin head kısmına yalnızca
-
Level 2: Basic
- CSS tarafında
html { color-scheme: light dark; }bildirimiyle light/dark modu ayrımı uygulanabilir - DOM’da zaten meta etiketi varsa bu bildirim gerekli değildir; HTML’i kontrol edebiliyorsanız, tarayıcının CSS’yi parse etmeden önce yönergeyi görebilmesi için meta etiketi kullanılması önerilir
- Her iki yöntem de kullanıcı aracısının varsayılan stillerini ve bunların içindeki light/dark modunu kullanabilmeyi sağlar
- Buna CSS eklerken ağırlıklı olarak CSS system colors kullanılırsa oldukça düzenli bir tasarım elde edilebilir
- Meta etiketinin her zaman tüm belgeye uygulanmasına karşılık, CSS
color-schemebildirimi kök öğe dışında başka yerlere de verilebilir; bu fark ek kullanım alanları doğurur
- CSS tarafında
-
Level 3: Benign
- CSS’ye görece yakın zamanda eklenen
light-dark()renk fonksiyonu ile basit light/dark modu ayarlamaları yapılabilir - Örnekte
background-color: light-dark(black, white);vecolor: light-dark(white, black);şeklinde kullanılır; ilk argüman light modda, ikinci argüman dark modda uygulanır - Argüman olarak doğrudan gerçek renkler verilebildiği gibi, renk olarak yorumlanan custom properties de kullanılabilir
- Yazının tamamında yalnızca bu seviyenin, yazıldığı tarih itibarıyla tarayıcı desteği yeterli değildir
- CSS’ye görece yakın zamanda eklenen
-
Level 4: Bold
- Geleneksel
@media (prefers-color-scheme: dark)medya sorgusu ile karanlık mod geçişi uygulanabilir lightya dadarktarafını sorgulamanız fark etmeksizin, yalnızca basit renk değişimiyle sınırlı olmayan en üst düzey özelleştirme mümkündür- Karanlık modda görsellere filtreyle düşük doygunluk uygulamak ya da kutu gölgelerini dış çizgiyle değiştirmek gibi ayarlamaların tümü yapılabilir
- Geleneksel
-
Level 5: Bisectional
- Medya sorguları HTML içinde de kullanılabilir;
linköğesininmedianiteliğine yazılarak şemaya göre stil dosyaları ayrılabilir - Örnek olarak
light.cssvedark.cssdosyalarının sırasıylaprefers-color-scheme: lightveprefers-color-scheme: darkile bağlanması gösterilir - Özelleştirme kapsamı genişse ayrı dosya yapısı daha uygun olabilir; tarayıcı, sorguyla eşleşmeyen CSS dosyasını yok sayabildiğinden indirilecek dosya sayısı bire düşebilir
- Medya sorguları HTML içinde de kullanılabilir;
-
Level 6: Ballistic
- JavaScript tarafında
window.matchMedia('(prefers-color-scheme:dark)')ile renk şeması medya sorgusu kullanılabilir - Diğer medya sorgularında olduğu gibi light veya dark şemanın etkin olup olmadığı sorgulanıp, sonuca göre istenen işlem yapılabilir
- Gerçek uygulamalarda önceki seviyelerdeki tekniklerden yalnızca birine bağlı kalmak yerine karma kullanım da mümkündür
- JavaScript tarafında
Kullanıcı değiştiricisi ve ileri düzey kalıplar
-
Level 7: Beyond
- Yalnızca kullanıcının sistem tercihine bağlı kalmadan bir color scheme switcher kurulabilir
- Bu değiştirici basit bir boolean değildir; başlangıç varsayılanı olarak
prefers-color-schemei izleyen bir Automatic modu gerekir - Bunun üzerine değiştirici eklendiğinde kullanıcı Automatic, light, dark olmak üzere üç moddan birini seçebilir
-
Level 8: Beguiling
- Level 7 değiştiricisini uygularken genelde HTML öğesine
.darksınıfı ya dadata-theme="dark"gibi bir nitelik eklemek yaygındır - Bunun yerine
:has()kullanılarak gerçek<meta name="color-scheme" content="dark">varlığı doğrudan sorgulanabilir - Örnekte
html:has(meta[name="color-scheme"][content="dark"])seçicisi altında--color-bg,--color-textgibi CSS değişkenleri dark mod değerlerine atanır - Ayrı bir sınıf ya da veri niteliği olmadan da tema, gerçek meta öğesine göre belirlenebilir
- Level 7 değiştiricisini uygularken genelde HTML öğesine
Ek tartışmalar ve gözlemler
-
CSS Naked Day gözlemi
- Stiller kaldırıldıktan sonra ziyaret edilen neredeyse tüm sitelerde karanlık mod eksikliği dikkat çekmiş ve bu da karanlık mod seviyeleri ayrımına yol açmış
- Yeni bir siteyi sıfırdan kurup yeni stiller yazarken, güncel CSS özellikleriyle light/dark modu yerleşik hale getirmenin çok kolaylaştığı da belirtiliyor
-
Safari erişilebilirlik sorunları
- Görece yakın zamana kadar Safari’nin karanlık modda erişilebilir bağlantı renkleri sunmadığına dikkat çekiliyor
- Önceki bir CSS Naked Day sırasında bu sorun fark edilip meta etiketi kaldırılmış ve yalnızca light renk şeması kullanılmış
- Daha sonra meta etiketi yeniden eklenmiş olsa da, eski Safari sürümlerini kullananlarda erişilebilirlikte düşüş yaşanabileceği kabul ediliyor
- Safari’nin karanlık modunda metin kutularında görünür kenarlık eksikliği de gözlemlenmiş
- Yalnızca kullanıcı aracısı stilleriyle, doğru semantik HTML kullanılsa bile tam erişilebilirlik garanti edilemediğinden, gelecekteki CSS Naked Day için de yeterli stil bırakmanın yolları düşünülüyor
-
Yazdırma ve
screen andkoşulu- Bisectional örneğinde
screen and ...kullanılmasının nedeni olarak yazıcı hedefini hariç tutma niyeti açıklanıyor - Temadan bağımsız çekirdek bir stil dosyası ya da ayrı bir yazdırma stil dosyası olduğu varsayılıyor; karanlık modun yazıcıda fazla mürekkep tüketebileceği düşünülerek güvenli bir ayrım tercih ediliyor
- Gerçek testlerde sistem karanlık modu açıkken yazdırılsa bile yalnızca siyah metin ve beyaz kâğıt çıktığı, tarayıcıların yazdırmada ilgili karanlık mod stilini uygulamadığı gözlemlenmiş
- Ek testlerde yazdırma önizlemesinde
prefers-color-schemedeğerinin her zaman light olarak raporlandığı görülmüş; bu durum Firefox ve Chromium’da doğrulanmış - Siyah kâğıt ve beyaz mürekkep kullanan bir yazıcınız varsa ne yazık ki şanssızsınız şeklinde şakacı bir ifade de yer alıyor
- Bisectional örneğinde
1 yorum
Hacker News yorumları
userContent.cssiçinde background-color belirtme yöntemini fena bulmuyorum