この質問では、次のマークアップを使用しています。
<body>
<p>1</p> <!-- Paragraph 1 -->
<p>2</p> <!-- Paragraph 2 -->
<p>3</p> <!-- Paragraph 3 -->
</body>
セレクター レベル 3 仕様から、次のセレクター ルールが適用されます。
* any element
E + F an F element immediately preceded by an E element
E ~ F an F element preceded by an E element
これに基づいて、次のことが発生するはずです。
body + * { } /* Selects nothing as no elements precede body */
body ~ * { } /* As above. */
p + * { } /* Selects Paragraph 2 and Paragraph 3 as these are preceded by p */
p ~ * { } /* As above. */
* + * { } /* As above. */
* ~ * { } /* As above. */
間違い!
* + *
そして* ~ *
、どういうわけか段落 1 を 2 と 3 と一緒に選択することができます! 段落 1 の前には何もないため、アクセスできないはずです。
body + * { background: #000; }
body ~ * { background: #000; }
p ~ * { color: #f00; }
p + * { font-weight: bold; }
* + * { text-decoration: underline; }
* ~ * { font-style: italic; }
結果:
ご覧のとおり、段落 1 の前にbody
または ファントムp
はありませんが、何かが前にあるようです。カスタム スタイルがまったく適用されていないはずですが、最後の 2 つのセレクターの影響を受けています。この背後にあるロジックは何ですか?