Object değişkeni, anahtar-değer çiftlerini tek bir isim altında gruplar. Söz dizimi tektir; ancak iki farklı amaç için kullanılır:
- CSS property objesi — key'ler CSS property adıdır,
var(--obj)ile tam açılım yapılabilir - Token objesi — key'ler özel token adıdır, her zaman
var(--obj.key)ile erişilir
Derleyici her ikisini aynı şekilde işler. Ayrım, key içeriklerinin amacındadır.
Tanımlama
Section titled “Tanımlama”--isim: { key: değer; key: değer; }; söz dizimiyle tanımlanır.
/* CSS property objesi */--cardBase: { color: #fff; font-size: 16px; };
/* Token objesi */--colors: { brand: #2060ff; muted: #6b7280; surface: #f4f6fb; };CSS Property Objesi
Section titled “CSS Property Objesi”Key'ler geçerli CSS property adlarından oluşur. var(--obj) ile nesnenin tüm property'leri çağrıldığı yere açılır.
--cardBase: { color: #1a1a2e; font-size: 16px; padding: 16px; };
.card { var(--cardBase); margin: 8px;}Üretilen CSS:
.card { color: #1a1a2e; font-size: 16px; padding: 16px; margin: 8px;}Nesnenin yalnızca belirli bir key'ine de erişilebilir:
--cardBase: { color: #1a1a2e; font-size: 16px; padding: 16px; };
.card-compact { color: var(--cardBase.color); font-size: var(--cardBase.fontSize);}Üretilen CSS:
.card-compact { color: #1a1a2e; font-size: 16px;}Nesting İçinde Tam Açılım
Section titled “Nesting İçinde Tam Açılım”CSS property objesi nested bloklarla birlikte de kullanılabilir:
--primary: #2060ff;--cardBase: { color: #fff; font-size: 16px; };
.card { var(--cardBase);
.title { color: var(--primary); }
.body { font-size: 14px; }}Üretilen CSS:
:root { --primary: #2060ff;}
.card { color: #fff; font-size: 16px;}
.card .title { color: var(--primary);}
.card .body { font-size: 14px;}Bu örnekte var(--cardBase) üst blok içinde tam açılım yapar; nested selector'lar normal şekilde alt selector olarak çıkar.
Token Objesi
Section titled “Token Objesi”Key'ler CSS property adı değil, özel token adıdır. Bu tür nesnelerde var(--obj) ile tam açılım yapılmamalıdır — geçersiz CSS üretir. Her zaman var(--obj.key) söz dizimiyle erişilmelidir.
--colors: { brand: #2060ff; muted: #6b7280; surface: #f4f6fb; };
.btn { background: var(--colors.brand); color: var(--colors.surface);}
.label { color: var(--colors.muted);}Üretilen CSS:
.btn { background: #2060ff; color: #f4f6fb;}
.label { color: #6b7280;}Key Normalizasyonu
Section titled “Key Normalizasyonu”Key erişiminde camelCase ve kebab-case karşılıklı çözümlenir. Tanımda hangi biçimi kullandığınızdan bağımsız olarak her iki erişim biçimi de çalışır.
| Tanımda yazılan | Erişim biçimi |
|---|---|
font-size | var(--obj.fontSize) |
lineHeight | var(--obj.lineHeight) |
border-radius | var(--obj.borderRadius) |
--typography: { background: #acacac; lineHeight: 1.5; letter-spacing: 0.01em; };
.body-text { background: var(--typography.background); line-height: var(--typography.lineHeight); letter-spacing: var(--typography.letterSpacing);}Üretilen CSS:
.body-text { background: #acacac; line-height: 1.5; letter-spacing: 0.01em;}Numeric Key'ler
Section titled “Numeric Key'ler”Key'ler sayı veya sayı+harf karışımı da olabilir.
--tone: { 100: #f8faff; 200: #dbe9ff; 900: #0a1628; };
.bg-light { background: var(--tone.100);}
.bg-dark { background: var(--tone.900);}Üretilen CSS:
.bg-light { background: #f8faff;}
.bg-dark { background: #0a1628;}200a, 2xl gibi alfanümerik key'ler de desteklenir:
--space: { 1: 4px; 2: 8px; 2xl: 24px; };
.gap-2xl { gap: var(--space.2xl);}Object body içinde @for ile key üretimi de yapılabilir:
--factor: 2;--range: [1-4];
--spacing: { @for(i, var(--range)) { ${i}: ${i * var(--factor)}px; }};
.space-2 { margin: var(--spacing.2);}Üretilen CSS:
.space-2 { margin: 4px;}Array İçindeki Object Öğelerinde Erişim
Section titled “Array İçindeki Object Öğelerinde Erişim”Array değişkeni içindeki nesne öğelerine de aynı noktalı erişim söz dizimi geçerlidir.
--breakpoints: [ { name: sm; size: 640px }, { name: md; size: 768px }];
.container { max-width: var(--breakpoints[0].size);}Üretilen CSS:
.container { max-width: 640px;}CSS Property Objesi mi, Token Objesi mi?
Section titled “CSS Property Objesi mi, Token Objesi mi?”| CSS Property Objesi | Token Objesi | |
|---|---|---|
| Key içeriği | CSS property adı | Özel token adı |
var(--obj) tam açılım | ✓ Geçerli | ✗ Geçersiz CSS üretir |
var(--obj.key) erişim | ✓ Geçerli | ✓ Geçerli |
| Tipik kullanım | Paylaşılan stil seti | Tasarım token'ları (renkler, boşluklar…) |