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, Есть ли способ сделать это?

2 ответа

Решение

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

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

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

Было несколько предложений для CSSWG в списке рассылки www-style@w3.org, как и в предыдущем комбинаторе: мой один (2012), другой 1,2 (2013).

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

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

Другие вопросы по тегам