Элемент стиля, основанный на количестве детей, которые есть у ребенка

Я знаю, что могу стилизовать элемент в CSS в зависимости от того, сколько у него дочерних элементов с помощью псевдокласса :has():

.wrapper:has(> :last-child:nth-child(3)) { 
  background-color: red;
}

Однако в моем случае HTML выглядит так:

<div class='list'>
  <div class='wrapper'>
    <span>Element1</span>
    <span>Element2</span>
    <span>Element3</span>
  </div>
</div>

Я хочу стилизовать класс list в зависимости от количества элементов.

Вы имеете в виду общее количество элементов, детей, внуков, правнуков… Есть ли какой-то предел глубины?

A Haworth 12.04.2024 14:39
.wrapper:has(> :last-child:nth-child(3)) этот селектор, вероятно (сейчас я не могу проверить), не будет работать, возможно, вам придется переписать его как .wrapper:has(& > :last-child:nth-child(3)), хотя это может зависеть от используемого браузера и/или ОС.
David Thomas 12.04.2024 14:58

Дает ли .list:has(.wrapper:first-child > :last-child:nth-child(3)){background-color: red;} то, что нужно? (т.е. всегда ли .wrapper является первым дочерним элементом? - если нет, удалите этого первого дочернего элемента).

A Haworth 12.04.2024 15:26

Я снова открыл вопрос, на самом деле это не дубликат. Насколько я могу судить, ОП спрашивает о внуках, а не о детях.

vals 12.04.2024 15:58

@AHaworth Я считаю, что ваш комментарий является ответом, но ОП должен уточнить, о чем на самом деле спрашивают

vals 12.04.2024 16:00

@vals дубликат по-прежнему актуален, потому что структура селектора на 90% одинакова. Нам нужно только удалить >, чтобы рассмотреть вложенные дочерние элементы.

Temani Afif 12.04.2024 23:46
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
2
6
86
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Этот фрагмент окрашивает фон .list в зависимости от того, сколько дочерних элементов у .wrapper. Он добавил, что хочет, чтобы .wrapper был первым дочерним элементом .list, как это и есть в данном коде.

.list:has(.wrapper:first-child > :last-child:nth-child(3)) {
  background-color: red;
}
<div class='list'>
  <div class='wrapper'>
    <span>Element1</span>
    <span>Element2</span>
    <span>Element3</span>
  </div>
</div>

Примечание. Если требуется какая-либо старая оболочка внутри списка, удалите :first-child.

Привет, ребята, я только что понял, что последний ответ работает в Chrome, но не в Firefox !!!

ratmalwer 12.04.2024 16:41

Какая версия Фаерфокса? FF опоздал с реализацией :has, но теперь все должно быть в порядке.

A Haworth 12.04.2024 16:58

На моем Firefox (124.0.2) в Windows10 все в порядке.

A Haworth 12.04.2024 17:04

Вы правы... Я все еще использую Firefox 115.9 на своей старой машине.

ratmalwer 12.04.2024 17:31
.list:has(:last-child:nth-child(3)) также подойдет для его HTML-структуры.
Temani Afif 12.04.2024 23:47

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

Похожие вопросы

Могу ли я с помощью CSS эффективно достичь максимальной ширины = 100% и максимальной высоты = 100% без родительского элемента, имеющего явную/фиксированную ширину и высоту, альтернативный подход?
Исключение, возникающее при попытке выбрать идентификатор CSS, содержащий "|"
Некоторые шрифты Google не импортируются в CSS в Windows
Как установить ширину всплывающего уведомления Bootstrap 4?
Таблица со строкой высотой 1 пиксель в Blazor
Создание адаптивных фигур SVG с одинаковой шириной обводки и закругленными углами
AddEventListener и удалениеEventListener в меню при изменении размера окна
Как исправить сдвиг макета для адаптивных изображений, в которых используются элементы изображения и исходного HTML?
Есть ли способ заставить элемент двигаться в определенном направлении при нажатии двух клавиш?
Как найти действительный локатор изображений с помощью Selenium?