Pemilih CSS Child vs Descendant


298

Saya agak bingung antara 2 penyeleksi ini.

Apakah pemilih turunan :

div p

pilih semua pdalam satu divatau tidak itu merupakan keturunan langsung? Jadi jika pada di dalam yang lain divmasih akan dipilih?

Kemudian pemilih anak :

div > p

Apa bedanya? Apakah seorang anak berarti anak langsung ? Misalnya.

<div><p>

vs.

<div><div><p>

apakah keduanya akan dipilih, atau tidak?


Saya sudah mencoba menjelaskan di sini secara rinci, dapat merujuk hanya jika itu bermanfaat bagi siapa pun ...
Tn. Alien

Jawaban:


468

Coba pikirkan apa arti kata "child" dan "descendant" dalam bahasa Inggris:

  • Anak perempuan saya adalah anak dan keturunan saya
  • Cucu perempuan saya bukan anak saya, tetapi dia adalah keturunan saya.

49
Satu catatan penting adalah bahwa pemilih anak akan lebih cepat daripada pemilih keturunan, yang dapat memiliki pengaruh yang terlihat pada halaman dengan 1000-an elemen DOM.
Jake Wilson

Jawaban yang bagus, tetapi saya hanya menambahkan jawaban langsung pada contoh-contohnya dalam pertanyaan juga - hanya untuk membuatnya jelas sekali.
JoeCool


23

Pada dasarnya, " ab " memilih semua b di dalam a, sementara " a> b " memilih b yang hanya anak-anak dari a , itu tidak akan memilih b apa anak dari b apa anak dari a .

Contoh ini menggambarkan perbedaan:

div span{background:red}
div>span{background:green}

<div><span>abc</span><span>def<span>ghi</span></span></div>

Warna latar belakang abc dan def akan berwarna hijau, tetapi ghi akan memiliki warna latar belakang merah.

PENTING: Jika Anda mengubah urutan aturan menjadi:

div>span{background:green}
div span{background:red}

Semua huruf akan memiliki latar belakang merah, karena pemilih keturunan memilih anak juga.


Bagian "Penting" yang Anda tambahkan menjadikan jawaban ini lengkap. Terima kasih!
Aakash Verma

10

Secara teori: Anak => keturunan langsung leluhur (mis. Joe dan ayahnya)

Keturunan => elemen apa pun yang diturunkan dari leluhur tertentu (mis. Joe dan buyutnya)

Dalam praktiknya: coba HTML ini:

<div class="one">
  <span>Span 1.
    <span>Span 2.</span>
  </span>
</div>

<div class="two">
  <span>Span 1.
    <span>Span 2.</span>
  </span>
</div>

dengan CSS ini:

span { color: red; } 
div.one span { color: blue; } 
div.two > span { color: green; }

http://jsfiddle.net/X343c/1/


Menarik di browser mana Anda mengujinya, karena tampaknya memang berfungsi
yoel halb

3
FYI, CSS sebagai jawaban tidak cocok dengan CSS di JSFiddle ( reddan blueditukar).
Pang

7

Ketahuilah bahwa pemilih anak tidak didukung di Internet Explorer 6. (Jika Anda menggunakan pemilih dalam pemilih jQuery / Prototype / YUI dll daripada dalam style sheet, ia tetap berfungsi)


Saya pikir saya menggunakannya dalam css. tapi di jquery saya mendeteksi jika browser IE6 (di jquery bisa saya melakukan ini atau apakah saya perlu menggunakan? <! - [if IE 6]>) dan menambahkan kelas
iceangel89

2
jquery melakukan fitur sniffing daripada sniffing browser jadi saya tidak berpikir Anda dapat mendeteksi apakah browser adalah IE6. Dan seharusnya tidak. Yang terbaik adalah memasukkan style sheet tambahan untuk ie6 dengan komentar bersyarat seperti yang Anda jelaskan.
rlovtang

4
div p 

Memilih semua elemen 'p' di mana induknya adalah elemen 'div'

div> p

Ini berarti anak-anak langsung Memilih semua elemen 'p' di mana orang tua adalah elemen 'div'


-1

Pemilihan dan penerapan gaya CSS untuk elemen tertentu dapat dilakukan melalui melintasi elemen dom [Contoh

Contoh

.a .b .c .d{
    background: #bdbdbd;
}
div>div>div>div:last-child{
    background: red;
}
<div class='a'>The first paragraph.
 <div class='b'>The second paragraph.
  <div class='c'>The third paragraph.
   <div class='d'>The fourth paragraph.</div>
   <div class='e'>The fourth paragraph.</div>
  </div>
 </div>
</div>
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.