S söz dizimiyle :nth-child() seçimleri üzerinde daha fazla kontrol

An+B mantığını uygulamadan önce bir grup alt öğeyi önceden filtreleyin.

:nth-child() ve :nth-last-child() sözde sınıf seçicileri

:nth-child() sözde sınıf seçicisi ile DOM'daki Öğeler dizinlerine göre seçilebilir. An+B microsyntax'i kullanarak hangi öğeleri seçeceğiniz üzerinde ayrıntılı kontrol sahibi olursunuz.

  • :nth-child(2): 2. çocuğu seçin.
  • :nth-child(2n): Çift sayıları (2., 4., 6., 8. vb.) seçin.
  • :nth-child(2n+1): Tüm tek numaralı alt öğeleri (1., 3., 5., 7. vb.) seçin.
  • :nth-child(5n+1): 1. (=(5×0)+1), 6. (=(5×1)+1), 11. (=(5×2)+1), … çocuğu seçin.
  • :nth-child(5n+2): 2. (=(5×0)+2), 7. (=(5×1)+2), 12. (=(5×2)+2), … öğeyi seçin.

Ancak A parametresini çıkarırsanız daha fazla yaratıcı seçim yapabilirsiniz. Örneğin:

  • :nth-child(n+3): Üçüncüden itibaren tüm alt öğeleri seçin (3., 4., 5. vb.).
  • :nth-child(-n+5): 5. öğeye kadar olan tüm alt öğeleri seçin (1., 2., 3., 4., 5.).

Bu :nth-child() seçimlerden birkaçını birleştirerek öğe aralıkları seçebilirsiniz:

  • :nth-child(n+3):nth-child(-n+5): Üçüncüden beşinciye kadar olan tüm alt öğeleri seçin (3., 4., 5.).

:nth-last-child() kullanarak benzer seçimler yapabilirsiniz ancak saymaya baştan başlamak yerine sondan başlarsınız.

of S söz dizimiyle önceden filtreleme seçimleri

CSS Seçiciler Düzey 4'teki yeniliklerden biri, isteğe bağlı olarak :nth-child() ve :nth-last-child()'ye seçici listesi iletme özelliğidir.

:nth-child(An+B [of S]?) :nth-last-child(An+B [of S]?) 

of S belirtildiğinde, An+B mantığı yalnızca verilen seçici listesiyle S eşleşen öğelere uygulanır. Bu, An+B işlemi yapmadan önce çocukları önceden filtreleyebileceğiniz anlamına gelir.

Browser Support

  • Chrome: 111.
  • Edge: 111.
  • Firefox: 113.
  • Safari: 9.

Örnekler

Örneğin, :nth-child(2 of .highlight), .highlight sınıfına sahip ikinci eşleşen öğeyi seçer. Başka bir deyişle: .highlight sınıfındaki tüm çocuklar arasından ikinci çocuğu seçin.

Bu, .highlight:nth-child(2) sınıfına sahip .highlight öğesini ve ikinci alt öğe olanı seçen .highlight:nth-child(2) ile karşılaştırılır.

Aşağıdaki demoda bu farkı görebilirsiniz:

  • :nth-child(2 of .highlight) ile eşleşen öğenin pembe bir ana hattı var.
  • .highlight:nth-child(2) ile eşleşen öğenin çevresinde yeşil bir dış çizgi görünür.
(Kalem oNMRaQq, Codepen'de web-dot-dev tarafından)

S, seçici listesi olduğundan virgülle ayrılmış birden fazla seçiciyi kabul eder. Örneğin, :nth-child(4 of .highlight, .sale), kardeşler kümesindeki .highlight veya .sale olan dördüncü öğeyi seçer.

Aşağıdaki demoda, :nth-child(4 of .highlight, .sale) ile eşleşen öğeye turuncu bir ana hat uygulanmıştır.

Zebra çizgileri, yeniden

:nth-child() öğesinin kullanıldığı klasik bir örnek, zebra çizgili tablo oluşturmaktır. Tablonun her satırının farklı renkte olduğu görsel bir tekniktir. Normalde bu durum şu şekilde ele alınır:

tr:nth-child(even) {   background-color: lightgrey; } 

Bu yöntem statik tablolar için sorunsuz çalışsa da tablo içeriklerini dinamik olarak filtrelemeye başladığınızda sorunlar ortaya çıkar. Örneğin, ikinci satır gizlendiğinde birinci ve üçüncü satırlar görünür hale gelir ve her ikisi de aynı arka plan rengine sahip olur.

(Codepen'de web-dot-dev tarafından oluşturulan Pen WNKBaLN adlı öğeyi inceleyin)

Bu sorunu düzeltmek için :nth-child(An+B [of S]?) işlevinden yararlanarak gizli satırları An+B mantığının dışında tutabiliriz:

tr:nth-child(even of :not([hidden])) {   background-color: lightgrey; } 

Harika, değil mi?

Unsplash'teki Markus Spiske'nin fotoğrafı