Селектор CSS для получения предыдущего брата

Можно ли использовать чистый CSS (3), чтобы выбрать элемент, являющийся предшествующим родством одного элемента с определенным классом?

то есть:.

HTML:

<div id='element-to-find'></div>
<div id='box1'></div>
<!-- a bunch more DOM elements between here --->
<div id='box2'>
      <div id='inner-box'></div>
</div>

CSS

#box1{ /*some styling*/ }
#box2{ /*some styling*/ }

#box2.active .....

Теперь, когда # box2 имеет класс active, я хочу выбрать и сделать что-то в стиле #element-to-find. Есть ли способ выполнить это?

Ответы

Ответ 1

Не зная больше ваших селекторов, вы можете использовать селектор CSS: not().

div:not(#box1), div:not(#box2) {
    /*some style here*/
}

Я просто предлагаю дать вам класс #element-to-find, когда вы выберете box2 и у вас будет готовый стиль.

Ответ 2

В CSSWG было представлено несколько предложений в списке рассылки [email protected], как и в предыдущем сборнике: мой один (2012), еще 1, 2 (2013).

Общий ответ от Аткинса похож на "у нас уже есть индикатор для этого". Для выбора потомков предыдущего брата (что было бы тривиально с комбинатором предыдущих слов, например, .example - UL > LI), он предлагает использовать функциональный псевдокласс :matches(), например. :matches(!UL + .example) > LI. Оба объекта индикатора и :matches() в настоящее время находятся в черновом состоянии и еще не могут использоваться в реальном мире.

Итак, вы должны добавить обычный класс к элементу element-to-find или (что гораздо менее желательно, если ваш класс active добавлен не через JS) использует JavaScript для эмуляции функций предыдущего-брата-комбинатора.