セレクターdiv + p(プラス)とdiv〜p(チルダ)の違い


89

方法W3Schoolsのはそれフレーズを、彼らは同じに聞こえます。

W3SchoolsのCSSリファレンス

div + p
<p>要素の直後に配置される すべての要素を選択し<div>ます

div ~ p
<p>要素が前にある すべての要素を選択し<div>ます

<p>要素が要素の直後にある場合、<div>それは<p>要素の前に要素があることを意味しません<div>か?

とにかく、与えられた要素の直前ある要素を選択できるセレクターを探しています。


5
+即時の隣にあるp要素と~なる全ての次のp要素(各後div素子)
VSYNC

2
できませんbefore。不可能な。javascriptでのみ。あなたはそれを探す必要があります、そしてそれbeforeはあなたのCSSでターゲットにするクラスのものすべてです。
vsync

7
また、w3schoolsを避けるようにしてください:) w3fools.com
Alex Char

3
視覚的な説明についてはこれを参照してください
マークB

2
この質問の興味深い点の1つは、これまで質問されたことがなかったことです。少なくとも、SOで同様の質問は見つかりませんでした。
Hashem Qolami 2014年

回答:


120

隣接する兄弟セレクターX + Y

隣接する兄弟セレクターの構文は次のとおりです。E1+ E2、ここでE2はセレクターのサブジェクトです。E1とE2がドキュメントツリーで同じ親を共有し、E1がE2の直前にあり、要素以外のノード(テキストノードやコメントなど)を無視する場合、セレクターは一致します。

ul + p {
   color: red;
}

この例では、前の要素の直前にある要素のみを選択します。この場合、各ulの後の最初の段落にのみ赤いテキストが表示されます。

一般的な兄弟セレクターX〜Y

〜コンビネータは2つのセレクターを分離し、最初の要素が前にある場合にのみ2番目の要素と一致し、両方が共通の親を共有します。

ul ~ p {
   color: red;
}

この兄弟コンビネータはX + Yに似ていますが、それほど厳密ではありません。隣接するセレクター(ul + p)は、前のセレクターの直前にある最初の要素のみを選択しますが、これはより一般化されています。上記の例を参照すると、ulに続く限り、任意のp要素が選択されます。

ソース

code.tutsplus

一般的な兄弟セレクターMDN

隣接する兄弟セレクターw3


6
この答えは別の記事の引用に過ぎず、目前の特定の質問に対処する試みはありません。与えられた例は、質問に対処するのにもあまり良い仕事をしていません。
–BoltClock

1
@BoltClockありがとう私はあなたのポイントを取得します。私はいつもあなたからのフィードバックを歓迎します。しかし、私の答えは、これらのセレクターの違いをOPに説明していると思います。
Alex Char

それは本当だ。この質問には完全には対応していませんが、2つのセレクターの違いを説明するのに合理的な役割を果たします。
–BoltClock

@AlexCharへのより良いこれら二つの違いを示して、あなたはX + YとX〜Yの両方に同じHTMLの例を利用すべきである
thecoolmacdude

@thecoolmacdude完了。フィードバックをお寄せいただきありがとうございます。今、私はより明確だと思います。
Alex Char

22

<p>要素が要素の直後にある場合、<div>それは<p>要素の前に要素があることを意味しません<div>か?

正解です。言い換えると、div + pはの適切なサブセットです。前者に一致するものdiv ~ pはすべて、必要に応じて後者に一致します。

との違いは+、両方が同じ親を共有している限り、最初の要素からの近接度に関係なく、後続のすべての兄弟に一致する~こと~です。

これらのポイントは両方とも、各ルールが異なるプロパティを適用する1つの例で最も簡潔に示されています。のp直後に続くものにdivは、両方のルールが適用されていることに注意してください。

div + p {
    color: red;
}

div ~ p {
    background-color: yellow;
}
<section>
    <div>Div</div>
    <p>Paragraph</p>
    <p>Paragraph</p>
    <p>Paragraph</p>
</section>
<section>
    No div
    <p>Paragraph</p>
    <p>Paragraph</p>
    <p>Paragraph</p>
</section>

とにかく、与えられた要素の直前ある要素を選択できるセレクターを探しています。

残念ながら、まだありません


8

この例を考えてみましょう。

p + p { /* the first p immediately after a preceding p */
   color: red; 
} 

p ~ p { /* all p's after a preceding p */
   font-weight: bold;
} 
<div>
   	<p>1</p>
	<div>separator</div>
   	<p>2</p> <!-- only ~ is applied here -->
  	<p>3</p> <!-- both + and ~ are applied here -->
</div>


0

1)隣接する兄弟セレクター(S1 + S2)

隣接する兄弟セレクターは、別の指定された要素のすぐ隣にある指定された要素を選択するために使用されます。両方の要素が同じレベルにある必要があります。

div + p {
    color:red;
}

隣接する兄弟セレクターの例

2)一般的な兄弟セレクター(S1〜S2)

一般的な兄弟セレクターは、別の指定された要素の指定されたすべての兄弟要素を選択するために使用されます。

div ~ p {
   color:red;
}

一般的な兄弟セレクターの例

隣接する兄弟(S1 + S2)と一般的な兄弟(S1〜S2)セレクター:

隣接する兄弟(S1 + S2)セレクターは、直接の兄弟要素のみを選択しますが、一般的な兄弟(S1〜S2)セレクターは、別の指定された要素のすべての兄弟要素を選択します。どちらの場合も、両方の要素(S1とS2)は同じレベルにある必要があります。

残りのセレクターについては、https//www.csssolid.com/35-css-selectors-to-remember.htmlで説明されています

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