Menu

CSS Sözde Sınıflar (pseudo-class): nth-child, not, focus

Sözde sınıflar elementleri konumlarına ya da durumlarına göre seçer: :nth-child(), :first-child, :not(), :focus, :checked, :has() ve daha fazlası. Söz dizimini, canlı test aracıyla an+b formülünü ve nth-child ile nth-of-type farkını öğren.

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

Sözde sınıf nedir

Bir sözde sınıf, iki noktadan sonra gelen ve elementleri belgedeki konumlarına ya da durumlarına göre seçen bir anahtar kelimedir. Onu normal bir seçiciye eklersin: li:first-child, input:focus, a:hover.

Linkler ve fare için durum sözde sınıflarının (:hover, :active, :visited) kendi sayfası var: CSS hover.

:nth-child() ve an+b formülü

:nth-child() bir sayı, bir anahtar kelime ya da an+b formülü alır. Tarayıcı n = 0, 1, 2, ... değerlerini dener ve formülün ürettiği her konumla eşleşir (konumlar 1'den başlar).

FormülEşleştiği konumlarAnlamı
33Üçüncü çocuk
odd ya da 2n+11, 3, 5, ...Tek sıralar
even ya da 2n2, 4, 6, ...Çift sıralar
3n3, 6, 9, ...Her üçüncü
n+44, 5, 6, ...Dördüncü ve sonrası
-n+31, 2, 3İlk üç
3n+11, 4, 7, ...İlkinden başlayarak her üçüncü

Bir formül yaz ve hangi öğelerin eşleştiğini izle:

odd, even, 4, n+7, -n+5 ve 2n+3 dene. Geçersiz bir formül hiçbir şeyle eşleşmez.

Sondan sayan ikizi :nth-last-child()'dır: li:nth-last-child(-n+2) son iki öğeyi seçer.

nth-child ve nth-of-type farkı

:nth-child(), etiketi ne olursa olsun her kardeş elementi sayar ve ancak ondan sonra seçicinin geri kalanını kontrol eder. :nth-of-type() yalnızca aynı etiketteki kardeşleri sayar. Fark, kardeşler karışık olduğu anda ortaya çıkar:

Uçlar için de aynı çiftler vardır: :first-child / :first-of-type, :last-child / :last-of-type, :only-child / :only-of-type.

:not(), :is() ve :where()

Sözde sınıfÖrnekEşleştiği
:not(X)li:not(.done)X ile eşleşmeyen elementler
:is(X, Y):is(h1, h2, h3) aListedekilerden biriyle eşleşen elementler
:where(X, Y):where(ul, ol) li:is() ile aynı, özgüllüğü sıfır
:has(X)li:has(> input:checked)X ile eşleşen bir şey içeren elementler

Her gün kullanılan :not()'tır, örneğin öğeler arasına ayırıcı koyup sonuncusundan sonra koymamak için:

Durum sözde sınıfları: focus, checked, disabled, invalid

Sözde sınıfEşleştiği
:focusKlavye ya da fare odağına sahip element
:focus-visibleOdaklanmış ve tarayıcının bir halka göstermeye karar verdiği element (genelde klavye odağı)
:focus-withinOdaklanmış elementi içeren bir element
:checkedİşaretli bir checkbox, radio ya da seçili bir <option>
:disabled / :enabledDevre dışı olan (ya da olmayan) form kontrolleri
:required / :optionalrequired taşıyan ya da taşımayan input'lar
:invalid / :validDeğeri doğrulamadan kalan ya da geçen input'lar
:user-invalidGeçersiz, ama yalnızca kullanıcı onunla etkileşime girdikten sonra
:placeholder-shownŞu anda placeholder'ını gösteren bir input
:emptyMetin bile olmayan, hiç çocuğu olmayan bir element
:targetid'si URL'deki #fragment ile eşleşen element

E-posta alanına tıkla: etiketi :focus-within sayesinde maviye döner. E-posta olmayan bir şey yaz ve alandan çık: :user-invalid kenarlığı kehribar rengine çevirir. Düz :invalid ise boş olan zorunlu alanı sen dokunmadan kehribar rengiyle işaretlerdi.

:focus ile ne yaparsan yap, görünür bir odak stili bırak. Outline'ı yerine bir şey koymadan kaldırmak, klavye kullanıcılarının nerede olduklarını görememesine neden olur.

:has(), ebeveyn seçici

:has() bir elementi içerdiği şeye göre eşleştirir. Uzun zamandır istenen "ebeveyn seçici" budur ve güncel Chrome, Firefox ve Safari'de çalışır.

Diğer planı seç: bütün kart, hiç JavaScript olmadan radio butonunu takip eder.

Sık yapılan hatalar

  • İki noktadan önce boşluk. li :first-child, "bir li içindeki ilk çocuk" anlamına gelir. li:first-child yaz.
  • p:nth-child(1)'in "ilk p" anlamına gelmesini beklemek. "İlk çocuk, eğer bir p ise" anlamına gelir. İlk p için :first-of-type kullan.
  • 0'dan saymak. Konumlar 1'den başlar: :nth-child(0) hiçbir şeyle eşleşmez.
  • Odak çerçevelerini kaldırmak. Yerine bir şey konmadan yazılan :focus { outline: none } klavyeyle gezinmeyi bozar.
  • : ile ::'yi karıştırmak. :before, ::before sözde elementinin eski yazımıdır; sözde sınıflar her zaman tek iki nokta kullanır.

Sıkça Sorulan Sorular

CSS'te pseudo-class (sözde sınıf) nedir?

İki noktadan sonra gelen ve elementleri adlarına göre değil, durumlarına ya da konumlarına göre seçen bir anahtar kelimedir: a:hover, li:first-child ya da input:focus gibi. Normal bir seçiciye eklenir ve çoğu sözde sınıf özgüllükte bir class gibi sayılır (:where() sıfır sayılır).

CSS'te nth-child nasıl çalışır?

:nth-child(an+b), kardeşleri arasındaki konumu n = 0, 1, 2 ve devamı için a×n+b olan elementlerle eşleşir, sayım 1'den başlar. :nth-child(3) üçüncü çocuktur, :nth-child(odd) ya da 2n+1 her tek sıradakidir, :nth-child(n+4) ise dördüncü ve sonrasıdır.

nth-child ile nth-of-type arasındaki fark nedir?

:nth-child() bütün kardeş elementleri sayar, sonra seçicinin geri kalanını kontrol eder; :nth-of-type() yalnızca aynı türdeki kardeşleri sayar. Bir h2 ve ardından paragraflardan oluşan bir listede p:nth-child(1) hiçbir şeyle eşleşmez, p:nth-of-type(1) ise ilk paragrafla eşleşir.

CSS'te :not() nasıl kullanılır?

Hariç tutulacak seçiciyi parantez içine yaz: li:not(.done), done class'ı olmayan her liste öğesiyle eşleşir. Liste de kabul eder: input:not([type="checkbox"], [type="radio"]).

Sözde sınıf ile sözde element arasındaki fark nedir?

Bir sözde sınıf (tek iki nokta, :hover) belirli bir durumdaki mevcut bir elementin tamamını seçer. Bir sözde element (çift iki nokta, ::before) bir elementin bir parçasını hedefler ya da üretilmiş içerik oluşturur.

Coddy programming languages illustration

Coddy ile kodlamayı öğren

BAŞLA