Для этого вопроса я использую следующую разметку:
<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. */
False
* + *
и * ~ *
каким-то образом могут выбрать пункт 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
или phantom p
, но ему, очевидно, предшествует что-то. Он не должен иметь никакого специального стиля, применяемого к нему вообще, но каким-то образом затрагиваются эти последние два селектора. Какова логика этого?