CSS3 セレクターに関するW3C ドキュメントを読んだ後、私はまだ少し混乱しています。EF セレクターと E ~ F セレクターの違いは何ですか。
E F an F element descendant of an E element
E ~ F an F element preceded by an E element
私の意見では、それらはまったく同じです。
CSS3 セレクターに関するW3C ドキュメントを読んだ後、私はまだ少し混乱しています。EF セレクターと E ~ F セレクターの違いは何ですか。
E F an F element descendant of an E element
E ~ F an F element preceded by an E element
私の意見では、それらはまったく同じです。
E F
F
の子 (子孫) である Element を選択しE
ます。したがって、ネストされた構造があり、E
は の親(祖先) ですF
。
<!-- E F will match: -->
<e>
<f></f>
</e>
これは、が直接の子であるE > F
場合にのみ一致する(間に他の要素がない)と似ています。F
E
その間
E ~ F
F
elementが先行する Element を選択しますE
。この場合、ネストされていない構造があり、E
Siblingsです。F
<!-- E ~ F will match: -->
<e></e>
<f></f>
これも に似てE + F
いますが、ここでは、直接F
続く必要がありますE
(間に他の要素はありません)。
後者では、「E」と「F」の 2 つの要素は、親/子孫ではなく、兄弟でなければなりません。
これは一致しE F
ます:
<e> ... <f> </f> ... </e>
そしてこれは一致しますE ~ F
<e> </e> ... <f> </f>
どちらの場合も、選択されるのは要素 "F" です。要素 "E" は、どの要素 "F" を制約するためだけに機能します。
ここで混乱を招くのは家系図の比喩 (「子」、「親」、「子孫」など) です。それでは、それなしで問題を見てみましょう:
要素はサブ要素を持つことができます。たとえば、リスト (または)li
内のリスト項目 ( )はそのサブ要素です。セレクターは、一致する要素と一致し、のサブ要素です。セレクターは非常に異なります: 一致する要素が要素Xのサブ要素である場合に一致するため、Xにも一致するサブ要素があり、一致するものに先行します。単純な型セレクターを考えると、これは次のようなことを意味しますul
ol
E F
F
E
E ~ F
F
E
F
<X>...<E>...</E>...<F>this matches E ~ F</F>...</X>
ドキュメント ツリーに関しては、通常どおりルートが一番上にあるように視覚化されます。これは、 が構造内の直下E F
の anに一致するのに対し、 an と同じレベルの同じブランチにあり、その前にある an に一致することを意味します。F
E
E ~ F
F
E
前者は、E の子孫であるすべての F を選択します。後者は、E の兄弟であり、その後の任意の時点に出現するすべての F を選択します。
違いは、最初のケースでは F は E内のどこかになければならないのに対し、2 番目のケースでは Fは Eの親の直接の子でなければならないということです。
実際、F 要素がE 要素内にある場合、E の親の直接の子になることは不可能です。これは、2 つのセレクターが異なるだけでなく、相互に排他的であることを意味します。
例E F
:
<e> <f> <f> </e>
_______
例E ~ F
:
<e> </e> <g> </g> <f> </f>
________
答えは質問にあります:
<p>
<span id="1"></span>
</p>
<span id="2"></span>
p span{
/* this matches the span with id=1 */
}
p ~ span{
/* this matches the span with id=2 */
}
したがって、最初のケース ( p span
) では、p
はスパンの親です。
2 番目のケース ( p ~ span
) では、p
はスパンの兄弟です。