Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
647 views
in Technique[技术] by (71.8m points)

css selectors - CSS select multiple descendants of another element

Is it possible to select multiple elements that have an ancestor of a certain class, id, etc in CSS? e.g:

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

If not, is there a way to select all descendants of that element?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Is it possible to select multiple elements that have an ancestor of a certain class, id, etc in CSS?

This is now possible with the :is() pseudo-class, originating as :matches() mentioned in the original version of this answer below. Be sure not to get it mixed up with :where(), which removes specificity that's otherwise critical to your selector:

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

Prior to :is(), this was not possible without duplicating the entire ancestor selector and specifying all of the descendants1:

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

It was only until late after Selectors 3 was being finalized that they proposed a pseudo-class notation to do this, and it was only recently that basic implementations have started showing up. See this answer for a little history lesson.

In short, the pseudo-class that's now entered the standard is known as :matches(). In the distant future, once browsers start implementing :matches(), you will be able to do something like this:

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

1 Specifically with tables, you can get away with table.exams > :not(colgroup), table.exams > * > tr > *, but as you can tell this is incredibly cryptic (not to mention it assumes you have no script-supporting elements or nested tables within this table) and you're better off just listing all the descendants you want explicitly.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...