İçeriğe geç

Selector / Pseudo Değişkenler

Bu değişken ailesi selector tabanlı parçaları tekrar kullanmak içindir. Normal değer değişkenlerinden farkı şudur:

  • :root içine yazılmaz
  • CSS custom property üretmez
  • derleme zamanında açılır

Söz dizimiNe yapar?
var(--x)Selector bloğunu bağımsız veya nested context içinde açar
&var(--x)Çözümlenen selector parçasını önceki metne boşluksuz ekler

Bu ayrım aynı aile içindeki iki kullanım biçimidir.


Bir selector bloğunu değişken olarak saklayıp var(--x) ile açabilirsiniz:

--card: .card { color: #ccc; };
var(--card);

Üretilen CSS:

.card {
color: #ccc;
}

Nested context içinde:

--card: .card { color: #ccc; };
.card-top {
padding: 16px;
var(--card);
}

Üretilen CSS:

.card-top {
padding: 16px;
}
.card-top .card {
color: #ccc;
}

Bu çağrıda .card selector'ı üst bloğun altına açılır.


Pseudo selector veya modifier parçaları için &var(--x) kullanılır:

--hovered: :hover { opacity: 0.85; };
.btn&var(--hovered);

Üretilen CSS:

.btn:hover {
opacity: 0.85;
}

Bu kullanımda :hover, .btn sonuna boşluksuz eklenir.

Nested context içinde:

--hovered: :hover { opacity: 0.85; };
.card {
padding: 16px;
&var(--hovered);
}

Üretilen CSS:

.card {
padding: 16px;
}
.card:hover {
opacity: 0.85;
}

Aynı blok içinde hem selector açma hem composition kullanılabilir:

--card: .card { color: #1a1a2e; };
--hovered: :hover { opacity: 0.85; };
.card-top {
padding: 16px;
var(--card);
&var(--hovered);
}

Üretilen CSS:

.card-top {
padding: 16px;
}
.card-top .card {
color: #1a1a2e;
}
.card-top:hover {
opacity: 0.85;
}

Burada:

  • var(--card) alt selector açar
  • &var(--hovered) aynı selector üzerinde composition yapar

--open: .is-open { max-height: 500px; };
.drawer&var(--open);

Üretilen CSS:

.drawer.is-open {
max-height: 500px;
}
--focused: :focus-visible { outline: 2px solid #2060ff; outline-offset: 2px; };
.btn&var(--focused);

Üretilen CSS:

.btn:focus-visible {
outline: 2px solid #2060ff;
outline-offset: 2px;
}

&var(...) ile üretilen final selector kuyruğuna ? veya ?! eklenebilir. Yani composition açıldıktan sonra oluşan selector observed olarak işlenir.

--hovered: :hover { opacity: 0.85; };
--active: .is-active { outline: 2px solid #2060ff; };
.card &var(--hovered)? { transform: translateY(-2px); }
.card &var(--active)?! { box-shadow: 0 10px 26px rgba(22, 61, 120, 0.18); }

Bu örneklerin selector karşılığı şudur:

  • .card:hover?
  • .card.is-active?!

Kural değişmez:

  • marker en sonda olmalı
  • boşluksuz yazılmalı
  • pseudo ve modifier class composition aynı şekilde observed olabilir

&var(...) yalnızca selector'larda değil, declaration değerlerinde de çalışır.

--letters: [A-F];
.token {
color: #AA&var(--letters[2]);
}

Üretilen CSS:

.token {
color: #AAC;
}

Burada C değeri #AA sonuna boşluksuz eklenir.


CSS DeğişkenleriSelector / Pseudo Değişkenler
:root içine yazılır mı?EvetHayır
CSS custom property olur mu?EvetHayır
Yaşam süresiTarayıcıda çalışırDerleme sırasında açılır
Tipik amaçRenk, spacing, scalar değerlerSelector bloğu, pseudo, modifier, composition
Tipik söz dizimivar(--x)var(--x) veya &var(--x)