Выберите все дочерние элементы рекурсивно в CSS


407

Как вы можете выбрать все дочерние элементы рекурсивно?

div.dropdown, div.dropdown > * {
    color: red;
}

Этот класс только выбрасывает класс на определенное className и всех непосредственных потомков. Как вы можете простым способом выбрать все дочерние узлы, как это:

div.dropdown, 
div.dropdown > *, 
div.dropdown > * > *, 
div.dropdown > * > * > *, 
div.dropdown > * > * > * > * {
    color: red;
}

Ответы:


621

Используйте пробел, чтобы соответствовать всем потомкам элемента:

div.dropdown * {
    color: red;
}

x yсоответствует каждому элементу y, который находится внутри x , каким бы глубоким он ни был - дети, внуки и так далее.

Звездочка *соответствует любому элементу.

Официальная спецификация: CSS 2.1: глава 5.5: потомки селекторов


это работает, но теперь он переопределяет все другие классы, даже если они имеют более высокий приоритет .. (они помещаются позже в файл css)
clarkk

Селектор также играет роль в том, какой приоритет имеют свойства, а не только где в файле они появляются. Вы можете попробовать добавить `! color: red !important;
Important`

Я знаю, это немного некрасиво. Вместо этого вы можете попробовать написать более точные селекторы, скорее всего, это тоже сработает. (например, #head ul#head ul#navi)
анроэсти

2
Ладно, очень простой пример: p.xyважнее p, потому что он более специфичен. jsfiddle.net/ftJVX
anroesti

1
Что делать, если я хочу, чтобы все дети имели определенный класс?
MEM

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.