Menu

CSS Değişkenleri: Custom Properties, :root ve var()

CSS değişkenleri (custom properties) bir değeri bir kez saklar ve var() ile tekrar kullanır. Onları :root içinde tanımlamayı, kapsamlarını ve ezilmelerini, yedek değer vermeyi, JavaScript ile tema değiştirmeyi ve geçersiz değer tuzağından kaçınmayı öğren.

Bu sayfada çalıştırılabilir editörler var - düzenle, çalıştır ve sonucu anında gör.

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 */
}
KuralAyrı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ğerNeredeyse her şey: bir renk, bir uzunluk, bir liste, bir metin. Kullanılana kadar kontrol edilmez.
Nerede tanımlanırHerhangi bir kuralda. Globaller için :root, yerel değerler için bileşenin seçicisi.
MirasCustom property'ler miras alınır, bu yüzden bir çocuk atalarının değerlerini görür.
var() nerede çalışırYalnı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şkenleriSass değişkenleri
Söz dizimi--brand: #2563eb; ve var(--brand)$brand: #2563eb;
Ne zaman çözülürTarayıcıda, canlıDerleme anında, çıktıda kalmaz
Element başına değişimEvet, miras yoluylaHayır
Bir class ya da medya sorgusuyla değişimEvetHayır
JavaScript ile değişimEvetHayır
Seçicilerde ya da medya koşullarında kullanımHayırEvet

İ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 -brand olarak 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ından margin: var(--gap)px, 10px üretmez. calc(var(--gap) * 1px) kullan ya da 10px sakla.
  • 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.

Coddy programming languages illustration

Coddy ile kodlamayı öğren

BAŞLA