Yalnızca ilk doğrudan çocuk için bir CSS seçici var mı?


315

Aşağıdaki html var

<div class="section">
   <div>header</div>
   <div>
          contents
          <div>sub contents 1</div>              
          <div>sub contents 2</div>
   </div>
</div>

Ve aşağıdaki stil:

DIV.section DIV:first-child 
{
  ...
}

Nedense stil "alt içeriği 1" <div> yanı sıra "üstbilgi" uygulanmaktadır anlamıyorum <div>.

Stil üzerindeki seçicinin sadece "bölüm" adı verilen bir sınıfın ilk doğrudan çocuğuna uygulanacağını düşündüm. İstediğimi elde etmek için seçiciyi nasıl değiştirebilirim?


Yanıtlar:


519

Kelimenin tam anlamıyla yayınladığınız "Bölüm div'lerinin içindeki ve üst öğelerinin ilk çocuğu olan tüm div'leri bul" anlamına gelir. Alt, bu açıklamayla eşleşen bir etiket içeriyor.

Ana div'in her iki çocuğunu da isteyip istemediğiniz benim için net değil. Öyleyse, bunu kullanın:

div.section > div

Yalnızca üstbilgiyi istiyorsanız, şunu kullanın:

div.section > div:first-child

Kullanılması >için açıklama değiştirir: ne istiyorsun "bölümü div doğrudan torunları herhangi div'leri bul".

IE6 hariç tüm büyük tarayıcıların bu yöntemi desteklediğini lütfen unutmayın. IE6 desteği görev açısından kritikse, alt div'lere sınıflar eklemeniz ve bunun yerine bunu kullanmanız gerekir. Aksi takdirde, önemsemeye değmez.


8
: bu durumda ilk çocuk gerekli değildir.
eozzy

3
OP'nin, kuralın tüm alt div'lara neden uygulandığı kadar seçici seçmediği anlaşılıyor.
Doug Neiner

Benim yorumum, CSS mirası kavramını alması ve ilk çocuğun>> etkisi olacağını düşünmesidir. Oldukça belirsiz bir ifade.
Matchu

3
Ah, 'doğrudan azalan' seçicinin tüm sorunlarınızı çözeceğini hatırlayacak kadar yaşlı olmanın sevinci, ama IE'de çalışmadığı için kullanamazsınız . O zaman çok gereksiz hayal kırıklığı meydana gelecektir.
aroth

Bu ilk köknar çocuğun ilk çocuğu için de geçerlidir. Değişiklikleri sadece ilk çocuğa uygulamamız gerekirse, çocuğun çocukları üzerindeki değişiklikleri iptal etmeliyiz. Bunun gibi bir şey:div.section > div:first-child > div { /* Cancel Changes*/}
Mehdi J.Ansari

51

Google'da arama yaparak bu soruyu buldu. Bu, çocuğun containerne tür olduğuna bakılmaksızın sınıflı bir öğenin ilk çocuğunu döndürür .

.container > *:first-child
{
}

44

CSS, kurallar devralındığından Basamaklı Stil Sayfaları olarak adlandırılır. Aşağıdaki seçici kullanarak, olacak ebeveynin sadece direkt çocuğu seçmek ama kuralları edilecektir kalıtsal Bununla divbireyin çocukları divs:

div.section > div { color: red }

Şimdi, hem bu div hem de çocukları olacak red. Devralmasını istemiyorsanız üst öğe için ayarladığınız her şeyi iptal etmeniz gerekir:

div.section > div { color: red }
div.section > div div { color: black }

Şimdi sadece divdoğrudan bir çocuk olan bekar div.sectionkırmızı olacak, ama çocukları divshala siyah olacak.



6

Kullanın div.section > div.

Daha da iyisi, eski tarayıcıları (hakkında bilmeyen ) desteklemek ve biçimlendirmenizi semantik tutmak için <h1>başlık ve CSS'niz için bir etiket kullanın .div.section h1>


İyi fikir, maalesef IE6'yı da desteklemem gerekiyor ve h1 kullanırsam, fontun gövdeninkiyle eşleşmesi için font boyutunu ayarlamam gerekecek ve ie7 ve altı devralmayı desteklemeyecek. arg!
Jeremy

Ayrıca, çocuk div'lerim var ve h1'e çocuk div'ler koymak kuralları ihlal ediyor, IE bunu yapsa bile, diğer tarayıcıların ne yaptığından emin değilim
Jeremy

3

Durumunuzdaki doğrudan ilk çocuk için CSS seçici:

.section > :first-child

Doğrudan seçici> ve ilk çocuk seçici: ilk çocuk

Aşağıdakilerden önce bir yıldız işaretine gerek yok: diğerlerinin önerdiği gibi. Etiketi ekleyerek bu çözümü değiştirerek DOM aramasını hızlandırabilirsiniz:

div.section > :first-child
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.