Я, наверное, отвечаю на свой вопрос, но мне очень любопытно.
Я знаю, что CSS может выбирать отдельных потомков родителя, но есть ли поддержка стиля дочерних элементов контейнера, если у его родителя есть определенное количество потомков.
например
container:children(8) {
// style the parent this way if there are 8 children
}
Я знаю, это звучит странно, но мой менеджер попросил меня проверить это, не нашел ничего самостоятельно, поэтому я решил обратиться к SO, прежде чем закончить поиск.
css
css-selectors
Броди
источник
источник
Ответы:
Разъяснение:
Из-за предыдущей фразы в первоначальном вопросе несколько граждан SO выразили обеспокоенность тем, что этот ответ может вводить в заблуждение. Обратите внимание, что в CSS3 стили нельзя применять к родительскому узлу в зависимости от количества дочерних узлов . Однако стили могут быть применены к дочерним узлам в зависимости от количества их братьев и сестер .
Оригинальный ответ:
Невероятно, но теперь это возможно только в CSS3.
Хитрость заключается в том, чтобы выбрать первого ребенка, когда он также является последним дочерним элементом. Это эффективно выбирает в зависимости от количества братьев и сестер.
Кредит на эту технику достается Андре Луису (открыто) и Леа Веру (изысканно).
Разве вы не просто любите CSS3? 😄
Пример CodePen:
Источники:
источник
:first-child:nth-last-child(1)
вас также можно использовать:only-child
.Нет, не совсем. Есть пара селекторов, которые могут немного приблизить вас, но, вероятно, не сработают в вашем примере и не имеют лучшей совместимости с браузером.
:only-child
Это
:only-child
один из немногих селекторов с истинным счетом в том смысле, что он применяется только тогда, когда есть один дочерний элемент родительского элемента. Используя ваш идеализированный пример, он действует как,children(1)
вероятно, будет.:nth-child
:nth-child
Селектор может реально получить , где вы хотите пойти в зависимости от того, что вы действительно хотите сделать. Если вы хотите стилизовать все элементы, если есть 8 детей, вам не повезло. Однако, если вы хотите применить стили к 8-му и более поздним элементам, попробуйте это:К сожалению, это, вероятно, не те решения, которые вы ищете. В конце концов, вам, вероятно, потребуется использовать некоторые Javascript Wizardry для применения стилей, основанных на количестве - даже если бы вы использовали один из них, вам нужно было бы внимательно взглянуть на совместимость браузера, прежде чем переходить с чистого CSS решение.
W3 CSS3 Spec по псевдоклассам
РЕДАКТИРОВАТЬ Я читаю ваш вопрос немного по-другому - есть пара других способов стилизации родителей , а не детей. Позвольте мне добавить несколько других селекторов по-вашему:
:empty
и:not
Это стили элементов, которые не имеют детей. Не очень полезно само по себе, но в сочетании с
:not
селектором вы можете стилизовать только те элементы, которые имеют дочерние элементы:Вы не можете сосчитать, сколько детей доступно с чистым CSS, но это еще один интересный селектор, который позволяет вам делать классные вещи.
источник
ПРИМЕЧАНИЕ. Это решение возвращает дочерние элементы наборов определенной длины, а не родительский элемент, как вы просили. Надеюсь, это все еще полезно.
Андре Луис разработал метод: http://lea.verou.me/2011/01/styling-children-based-on-their-number-with-css3/ К сожалению, он работает только в IE9 и выше.
По сути, вы комбинируете: nth-child () с другими псевдоклассами, которые имеют дело с позицией элемента. Этот подход позволяет указывать элементы из наборов элементов с определенной длиной .
Например,
:nth-child(1):nth-last-child(3)
соответствует первый элемент в наборе, а также является третьим элементом от конца набора. Это делает две вещи: гарантирует, что набор имеет только три элемента и что у нас есть первый из трех. Чтобы указать второй элемент из набора из трех элементов, мы будем использовать:nth-child(2):nth-last-child(2)
.Пример 1. Выберите все элементы списка, если set имеет три элемента:
Пример 1 альтернативы от Lea Verou:
Пример 2 - целевой последний элемент множества с тремя элементами списка:
Пример 2 варианта:
Пример 3 - целевой второй элемент множества с четырьмя элементами списка:
источник
li:nth-child(3):nth-last-child(1) { transform: rotate(120deg); } li:nth-child(2):nth-last-child(2) { transform: rotate(240deg); }
и так далее ...Отрабатывая решение Мэтта, я использовал следующую реализацию Compass / SCSS.
Это позволяет быстро расширить количество предметов.
источник
да, мы можем сделать это с помощью nth-child, как так
Это заставит восьмого ребенка в возрасте становиться красным. Надеюсь это поможет...
Кроме того, если кто-то скажет: «эй, они не могут быть выполнены в стиле css, используйте JS !!!» Сомневайся в них немедленно. CSS чрезвычайно гибок в наше время
Пример :: http://jsfiddle.net/uWrLE/1/
В примере первые 7 детей - синие, затем 8 лет - красные ...
источник
Если вы собираетесь делать это в чистом CSS (используя scss), но у вас есть разные элементы / классы внутри одного родительского класса, вы можете использовать эту версию !!
источник
Нет, в CSS нет ничего подобного. Вы можете, однако, использовать JavaScript для вычисления количества детей и применения стилей.
источник