CSS: Невозможность использования селектора "сосед" (sibling selector)
Проблема с CSS-селектором для выбора элементов без определенных соседей
Я работаю с таким HTML-кодом:
<div>
<div class="iwant" />
<div class="idontwant" />
</div>
<div>
<div class="iwant" />
</div>
Мне нужно создать селектор, который выберет все элементы с классом iwant
, у которых НЕТ соседей с классом idontwant
.
Поскольку я занимаюсь парсингом контента и не могу изменять HTML, ищу решение, которое будет работать в текущей структуре. Какой подход или селектор я могу использовать для достижения этой цели?
4 ответ(ов)
К сожалению, в CSS нет селектора-соседа, который мог бы соответствовать элементам (или не соответствовать) по классу.
Ближайший селектор, который мне приходит в голову, - это
.iwant:only-child
Тем не менее, этот селектор подразумевает, что под родительским элементом div
не может быть других дочерних элементов, кроме div class="iwant"
, независимо от их типа или класса. Это может подойти в зависимости от структуры вашего HTML, так что стоит попробовать. Если же проблема заключается в именах классов, то, к сожалению, здесь не осталось много решений, так как в CSS нет псевдокласса :only-of-class
, который бы фильтровал по классу и игнорировал остальные.
На данный момент в CSS нет селектора для отрицательных сиблингов. Вместо этого можно использовать селектор сиблингов, чтобы задать новые стили для одного элемента, а затем сбросить стили для другого элемента с помощью класса .idontwant
.
Пример кода:
div.iwant {
/* Задаем стили здесь */
display: inline;
}
div.iwant ~ div.idontwant {
/* Сбрасываем стили */
display: block; /* Значение по умолчанию для DIV — block */
}
Таким образом, мы применяем стили к элементам с классом iwant
, а для элементов с классом idontwant
, которые следуют за ними, сбрасываем эти стили к значению по умолчанию.
На StackOverflow можно ответить так:
К сожалению, нет хорошего способа выбрать элемент без конкретного соседнего элемента. Однако вы можете использовать селектор .iwant:last-child
, чтобы выбрать элементы, у которых нет последующего соседнего элемента.
Вот пример: http://codepen.io/martinkrulltott/pen/YyGgde.
Это может быть полезно - если элемент, который вам нужен, всегда является последним потомком:
div:last-child:not(.idontwant) {
}
Таким образом, этот селектор выберет последний элемент div
, который не имеет класса idontwant
.
Выбор элементов по атрибуту в CSS
Как расположить div внизу своего контейнера?
Установить фиксированную ширину столбца таблицы независимо от количества текста в ячейках?
Как сделать перенос строки с помощью CSS, не используя <br />?
Стоит ли использовать единицы px или rem в CSS? [закрыто]