CSS değişkeni tanımlamak ve kullanmak
Bir CSS değişkeni, resmi adıyla bir custom property, adı -- ile başlayan bir özelliktir. Onu bir kez tanımla, genelde bütün sayfa miras alsın diye :root üzerinde, ve her yerde var() ile oku.
--brand değerini #16a34a yap, kartın kenarlığı ve buton birlikte değişir. Bütün mesele bu: tek değer, değiştirilecek tek yer. Değişkenler, butonun yan padding'inde görüldüğü gibi calc() ile de birleşir.
Söz dizimi
:root {
--name: value; /* declare */
}
.element {
color: var(--name); /* use */
color: var(--name, #111827); /* use, with a fallback */
padding: calc(var(--space) * 2); /* compute with it */
}
| Kural | Ayrıntı |
|---|---|
| Ad | -- ile başlar, ardından harfler, rakamlar, - ya da _ gelir. Büyük küçük harfe duyarlıdır: --Brand, --brand değildir. |
| Değer | Neredeyse her şey: bir renk, bir uzunluk, bir liste, bir metin. Kullanılana kadar kontrol edilmez. |
| Nerede tanımlanır | Herhangi bir kuralda. Globaller için :root, yerel değerler için bileşenin seçicisi. |
| Miras | Custom property'ler miras alınır, bu yüzden bir çocuk atalarının değerlerini görür. |
var() nerede çalışır | Yalnızca özellik değerlerinde; seçicilerde, özellik adlarında ya da @media koşullarında değil. |
:root, <html> elementiyle eşleşir. html yerine kullanılır, çünkü bir class'ın özgüllüğüne sahiptir ve gelenek olarak "global ayarlar" anlamı taşır.
Kapsam: değişkeni bileşen başına ezmek
Değişkenler miras alındığı için birini bir elementte yeniden tanımlamak, onu o element ve içindeki her şey için değiştirir. Değişkeni kullanan kural aynı kalır.
Varyantlar kenarlığın kendisini hiç ayarlamaz, yalnızca bir değişken ayarlar. Dördüncü bir varyant eklemek tek satırdır.
Yedek değerler
var(--name, fallback), değişken elementte ya da herhangi bir atasında tanımlı değilse yedek değeri kullanır. İlk virgülden sonraki her şey yedek değerdir, bu yüzden kendi içinde virgül barındırabilir (var(--font, Georgia, serif)) ve başka bir var() olabilir.
JavaScript ile değişkenleri değiştirmek: tema anahtarı
JavaScript, style.setProperty() ile herhangi bir elementte değişken ayarlayabilir. Onu document.documentElement (yani <html> elementi) üzerinde ayarla, bütün sayfa takip eder. Daha yaygın kalıp, değişkenleri yeniden tanımlayan bir class'ı açıp kapatmaktır:
Bir değişkeni getComputedStyle(element).getPropertyValue('--text') ile geri oku. setProperty'nin <html> üzerine .dark class'ını yenen inline bir stil yazdığına dikkat et; bu yüzden ikinci butona bastıktan sonra metin rengi, inline değer root.style.removeProperty('--text') ile kaldırılana kadar iki temada da sabit kalır.
HTML'den değer aktarmak
Bir style özniteliğindeki değişken, element başına veriyi stil dosyasına iletmenin en temiz yoludur. Tasarım CSS'te kalır; HTML yalnızca bir sayı sağlar.
calc(var(--value) * 1%) düz sayıyı yüzdeye çevirir. Değişkenler bir medya sorgusunun içinde de değişebilir: @media (min-width: 900px) { :root { --space: 20px; } }, --space okuyan her boşluğu geniş ekranlarda büyütür.
Geçersiz değer tuzağı
Tarayıcı, bir değişkenin onu kullanan özellik için geçerli bir değer tutup tutmadığını önceden bilemez. Tutmadığında özellik, kuraldaki önceki bildirime geri dönmez. Hesaplanan değer anında geçersiz hale gelir ve unset verilmiş gibi davranır: miras alınan özellikler ebeveynin değerini, diğerleri başlangıç değerlerini alır.
Metin <body>'den 16px miras alır ve border-width başlangıç değeri olan medium'a döner, tarayıcılar bunu 3px olarak çizer. Değişkenler olmadan geçersiz bir bildirim atılır ve ondan önceki hayatta kalır; değişkenlerle bunun için artık çok geçtir. Değişken tanımlı ama yanlış olduğunda yedek değer işe yaramaz: yedek değer yalnızca tanımsız bir değişken içindir.
CSS değişkenleri ve Sass değişkenleri
| CSS değişkenleri | Sass değişkenleri | |
|---|---|---|
| Söz dizimi | --brand: #2563eb; ve var(--brand) | $brand: #2563eb; |
| Ne zaman çözülür | Tarayıcıda, canlı | Derleme anında, çıktıda kalmaz |
| Element başına değişim | Evet, miras yoluyla | Hayır |
| Bir class ya da medya sorgusuyla değişim | Evet | Hayır |
| JavaScript ile değişim | Evet | Hayır |
| Seçicilerde ya da medya koşullarında kullanım | Hayır | Evet |
İkisi birlikte çalışır: birçok proje derleme anındaki mantık için Sass kullanır ve temalanabilen her şey için CSS değişkenleri üretir.
Sık yapılan hatalar
- İki tireyi unutmak.
var(brand)ve-brandolarak tanımlanan--brandçalışmaz. - Medya sorgusunda değişken kullanmak.
@media (min-width: var(--bp))geçerli değildir. Medya koşulları sabit değer ister. - Geçersiz bir değişkenden sonra önceki bildirimin hayatta kalmasını beklemek. Kalmaz; yukarıdaki tuzağa bak.
- Birimleri yanlış birleştirmek.
--gap: 10;ardındanmargin: var(--gap)px,10pxüretmez.calc(var(--gap) * 1px)kullan ya da10pxsakla. - Yanlış elementte tanımlamak.
.cardüzerinde tanımlanan bir değişken kardeşlerine ya da ebeveynine görünmez; paylaşılan değerleri:rootüzerinde tanımla.
Sıkça Sorulan Sorular
CSS değişkeni nasıl tanımlanır?
Bir kuralın içine adı iki tireyle başlayan bir özellik yaz; global bir değer için genelde :root kullanılır: :root { --brand: #2563eb; }. Her yerde var(--brand) ile oku, örneğin color: var(--brand);.
CSS'te :root nedir?
:root, belgenin kök elementiyle eşleşen bir sözde sınıftır; bir HTML sayfasında bu <html>'dir. Orada tanımlanan değişkenleri her element miras alır. Bir class'ın özgüllüğüne sahiptir, bu yüzden düz bir html seçicisini yener.
CSS değişkenine varsayılan değer nasıl verilir?
var()'a ikinci bir argüman ver: color: var(--accent, #2563eb);. Yedek değer, --accent elementte ya da atalarında tanımlı değilse kullanılır. Değişken, özellik için geçersiz bir değerle tanımlandığında ise kullanılmaz.
JavaScript ile CSS değişkeni nasıl değiştirilir?
Bir elementin style nesnesinde setProperty çağır: document.documentElement.style.setProperty('--brand', '#16a34a'). var(--brand) kullanan her kural anında güncellenir. Güncel değeri getComputedStyle(el).getPropertyValue('--brand') ile oku.
CSS değişkenleri ile Sass değişkenleri arasındaki fark nedir?
Sass değişkenleri stil dosyası derlenirken değerleriyle değiştirilir, bu yüzden tarayıcıda değişemezler. CSS değişkenleri tarayıcıda yaşar: miras alınır, elementten elemente farklı olabilir, medya sorgularına ve class'lara tepki verir ve JavaScript ile değiştirilebilir.
CSS değişken adları büyük küçük harfe duyarlı mı?
Evet. --Brand ve --brand iki farklı değişkendir; büyük küçük harfe duyarlı olmayan color gibi sıradan özellik adlarından farklı olarak.