CSS выбрать несколько потомков другого элемента

Можно ли выбрать несколько элементов, у которых есть предок определенного класса, id и т.д. в CSS? например:

table.exams caption, tbody, tfoot, thead, tr, th, td

Если нет, есть ли способ выбрать все потомки этого элемента?

Ответы

Ответ 1

Можно ли выбрать несколько элементов, которые имеют предка определенного класса, id и т.д. в CSS?

В настоящее время, не обойдя весь селектор предков и указав всех потомков, к сожалению 1:

table.exams caption, 
table.exams tbody, 
table.exams tfoot, 
table.exams thead, 
table.exams tr, 
table.exams th, 
table.exams td

Только до тех пор, пока Селекторы 3 не были доработаны, они предложили обозначение псевдокласса для этого, и только недавно начались базовые реализации. См. этот ответ для небольшого урока истории.

Короче говоря, псевдокласс, который теперь вступил в стандарт, известен как :matches(). В отдаленном будущем, когда браузер начнет внедрять :matches(), вы сможете сделать что-то вроде этого:

table.exams :matches(caption, tbody, tfoot, thead, tr, th, td)

Если нет, есть ли способ выбрать всех потомков этого класса?

Ну, вы можете просто использовать звездочку *, которая представляет любой элемент. Учитывая, что в вашем селекторе есть th и td, вы, вероятно, имеете в виду все потомки, а не все дочерние элементы table.exams, поэтому не используйте >, вместо этого используйте пробел:

table.exams *

Но на самом деле, избегайте этого. Если вы можете, сделайте все возможное, чтобы указать, какие потомки вы хотите выбрать.


1 В частности, с таблицами вы можете уйти с table.exams > :not(.colgroup), table.exams > * > tr > *, но, как вы можете сказать, это невероятно загадочно (не говоря уже о том, что предполагается, что у вас нет script -поддерживающие элементы или вложенные таблицы в этой таблице), и вам лучше просто перечислять все потомки, которые вы хотите явно.

Ответ 2

детский селектор выглядит следующим образом:

ul > li {

}

это будет нацелено на все li, которые являются прямыми дочерними элементами ul

если вы хотите настроить таргетинг на всех потомков, используйте селектор *

Я не уверен, что понял первую часть вашего вопроса, хотя!

Ответ 3

Можно ли выбрать несколько тегов, у которых есть предок определенного класса в CSS?

Можно использовать SCSS для достижения результата, аналогичного: match, как показано в этой статье

Кроме того, некоторые браузеры частично поддерживают :matches с префиксом конкретного поставщика.