CSS :has() seçicisi ne işe yarar? Örnek kullanımlar verin.

Cevap

:has() "içinde şu olan elemanı seç" anlamına gelen ilişkisel bir pseudo-class'tır; uzun süre istenen "parent selector" ihtiyacını karşılar. 2023 sonundan beri tüm modern tarayıcılarda desteklenir.

/* Görseli olan kartlar farklı layout alsın */
.card:has(img) { grid-template-columns: 120px 1fr; }

/* Geçersiz input içeren form alanını kırmızı çerçevele */
.field:has(input:user-invalid) { border-color: crimson; }

/* Checkbox işaretliyse etiketi üstü çizili yap */
label:has(input[type="checkbox"]:checked) { text-decoration: line-through; }

/* Modal açıkken sayfa kaymasın */
body:has(dialog[open]) { overflow: hidden; }

/* Kardeş ilişkisi: başlığın hemen ardından paragraf geliyorsa */
h2:has(+ p) { margin-bottom: 0.25rem; }

Neden önemli?

Eskiden bu tür durumlar için JavaScript ile parent'a class eklemek gerekiyordu. :has() ile durum bağımlı stiller tamamen CSS'te kalır.

Dikkat edilecekler

  • Specificity, içindeki en spesifik argümanın specificity'sine eşittir.
  • body:has(...) gibi çok geniş seçiciler büyük DOM'larda stil hesaplamasını yavaşlatabilir; mümkün olduğunca dar kapsamlı kullanın.
  • Destekleyip desteklemediğini kontrol için: @supports selector(:has(a)) { ... }.

İlgili modern seçiciler: :is() ve :where() (seçici listelerini gruplar, :where specificity'yi 0 yapar), :user-invalid (kullanıcı etkileşiminden sonra geçersiz alan), :focus-visible (klavye odağı).

  1. Semantik HTML nedir, neden önemlidir?KolayHTML & CSSFrontend
  2. CSS box model nedir? box-sizing: border-box ne işe yarar?KolayHTML & CSSFrontend
  3. position değerleri nelerdir?KolayHTML & CSSFrontend
  4. Flexbox ile Grid arasındaki fark nedir? Hangisini ne zaman seçersiniz?OrtaHTML & CSSFrontend
  5. CSS specificity nasıl hesaplanır?OrtaHTML & CSSFrontend
  6. Pseudo-class ile pseudo-element arasındaki fark nedir?OrtaHTML & CSSFrontend

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle