Нет. Это невозможно через CSS. Он принимает «Каскад» близко к сердцу; -).
Однако, если вы можете добавить JavaScript на свою страницу, чуть-чуть jQuery может привести вас к конечной цели.
Вы можете использовать jQuery find
, чтобы выполнить предварительный просмотр целевого элемента / класса / идентификатора, а затем вернуться назад, чтобы выбрать цель.
Затем вы используете jQuery для перезаписи DOM (CSS) для вашего элемента.
Основано на ответе Майка Бранта ,
следующий фрагмент jQuery может помочь.
$('p + ul').prev('p')
Сначала выбираются все <ul>
с, следующие сразу за <p>
.
Затем он «возвращается», чтобы выбрать все предыдущие <p>
с из этого набора <ul>
с.
Фактически, «предыдущий брат» был выбран с помощью jQuery.
Теперь используйте функцию .css
, чтобы передать новые значения CSS для этого элемента.
В моем случае я искал способ выбрать DIV с идентификатором #full-width
, но ТОЛЬКО если он имел (косвенный) потомок DIV с классом .companies
.
Я контролировал весь HTML-код под .companies
, но не мог изменить ни один из HTML-кодов над ним.
И каскад идет только в 1 направлении: вниз.
Таким образом, я могу выбрать ВСЕ #full-width
с.
Или я могу выбрать .companies
, который следует только за #full-width
.
Но я мог не выбрать только #full-width
с, которые продолжались .companies
.
И, опять же, я не смог добавить .companies
выше в HTML. Эта часть HTML была написана извне и обернула наш код.
Но с помощью jQuery я могу выбрать необходимые #full-width
с, а затем назначить соответствующий стиль:
$("#full-width").find(".companies").parents("#full-width").css( "width", "300px" );
Это находит все #full-width .companies
и выбирает только те .companies
, аналогично тому, как селекторы используются для нацеливания на определенные элементы в стандарте в CSS.
Затем он использует .parents
для «возврата» и выбора ВСЕХ родителей .companies
,
но фильтрует эти результаты, чтобы сохранить только #fill-width
элементов, так что в итоге
он выбирает элемент #full-width
, только если у него есть потомок класса .companies
.
Наконец, он присваивает новое значение CSS (width
) результирующему элементу.
$(".parent").find(".change-parent").parents(".parent").css( "background-color", "darkred");
div {
background-color: lightblue;
width: 120px;
height: 40px;
border: 1px solid gray;
padding: 5px;
}
.wrapper {
background-color: blue;
width: 250px;
height: 165px;
}
.parent {
background-color: green;
width: 200px;
height: 70px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<html>
<div class="wrapper">
<div class="parent">
"parent" turns red
<div class="change-parent">
descendant: "change-parent"
</div>
</div>
<div class="parent">
"parent" stays green
<div class="nope">
descendant: "nope"
</div>
</div>
</div>
Target <b>"<span style="color:darkgreen">parent</span>"</b> to turn <span style="color:red">red</span>.<br>
<b>Only</b> if it <b>has</b> a descendant of "change-parent".<br>
<br>
(reverse cascade, look ahead, parent un-descendant)
</html>
Справочные документы jQuery:
$ () или jQuery () : элемент DOM.
. find : Получить потомков каждого элемента в текущем наборе соответствующих элементов, отфильтрованных селектором, объектом jQuery или элементом.
. parent : Получить непосредственно предшествующего брата каждого элемента в наборе соответствующих элементов. Если указан селектор, он извлекает предыдущего родного брата, только если он соответствует этому селектору (фильтрует результаты, чтобы включить только перечисленные элементы / селекторы).
. css : установить одно или несколько свойств CSS для набора соответствующих элементов.