CSS子セレクターと子孫セレクター


298

これら2つのセレクターの間で少し混乱しています。

子孫セレクタは:

div p

それが直系の子孫pであるdivかどうかに関係なく、すべてを選択しますか?では、p別のdivものの中にある場合でも選択されますか?

そして、セレクタ:

div > p

違いは何ですか?子供は身近な子供を意味ますか?例えば。

<div><p>

<div><div><p>

両方が選択されますか?


私はここで詳細に説明しようとしましたが、誰かに役立つ場合に備えて参考にすることができます...
エイリアン氏

回答:


468

英語で「子供」と「子孫」という単語の意味を考えてみてください。

  • 私の娘は私の子供であり、私の子孫でもあります
  • 私の孫娘は私の子供ではありませんが、彼女は私の子孫です。

49
重要な注意点の1つは、子セレクターが子孫セレクターよりも高速になることです。これは、何千ものDOM要素を持つページに目に見える影響を与える可能性があります。
ジェイクウィルソン

良い答えですが、質問の彼の例に対する直接の答えも単純に付け加えます-とんでもないほど明確にするためです。
JoeCool 2013年


23

Bascailly、「AB」ながら「選択すべてのBの内側に、a> bの」選択のBだけに子供であるかaが、それは選択しないだろうbはの子であるかBの子は何か。

この例は違いを示しています:

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

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

abcdefの背景色は緑になりますが、ghiの背景色は赤になります。

重要:ルールの順序を次のように変更した場合:

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

子孫セレクタが子も選択するため、すべての文字の背景が赤になります。


追加した「重要」セクションにより、この回答は完全になります。ありがとう!
Aakash Verma 2017

10

理論上: 子=>祖先の直系の子孫(例:ジョーと彼の父親)

子孫=>特定の祖先の子孫である要素(例:ジョーと彼の偉大な祖父)

実際には、次の HTMLを試してください。

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

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

このCSSで:

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

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


実際に動作しているように見えるため、どのブラウザーでテストしたかが興味深い
yoel halb

3
ちなみに、答えのCSSはJSFiddleのCSSと一致しません(redそしてblue入れ替えられました)。
パンジュン

7

子セレクターはInternet Explorer 6ではサポートされていないことに注意してください(セレクターをスタイルシートではなくjQuery / Prototype / YUIなどのセレクターで使用する場合でも、引き続き機能します)。


私はそれをCSSで使用すると思っています。しかし、jqueryではブラウザがie6かどうかを検出し(jqueryではこれを実行できますか?または<!-[if IE 6]>を使用する必要があります)、クラスを追加します
iceangel89

2
jqueryはブラウザーのスニッフィングではなくスニッフィングを行うので、ブラウザーがie6であるかどうかを検出できないと思います。そして、そうすべきではありません。最良のことは、あなたが説明したような条件付きコメント付きのie6の追加のスタイルシートを含めることです。
rlovtang '26 / 07/26

4
div p 

親が「div」要素であるすべての「p」要素を選択します

div> p

これは、直接の子が親が「div」要素であるすべての「p」要素を選択することを意味します


-1

CSSの選択と特定の要素へのスタイルの適用は、dom要素をトラバースすることで実行できます[例

.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>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.