What is the purpose of ~ and > in CSS? For example what does the following expression mean?
:checked ~ label ~ .content > *
Answer
Your selector means:
Select any element
that is a child of an element with the classcontent
which follows alabel
which in turn follows a:checkedinput element.
> is the child combinator. It selects elements that are children of a certain parent element. Unlike the space (the descendant combinator), it only selects immediately-nested elements. See this answer for an illustration on how it works.
~ is the general sibling combinator. It selects elements that follow after other elements within the same parent (i.e. are siblings). Unlike + (the adjacent sibling combinator), it doesn't require an element to immediately follow another in the same parent. Compare the illustration below to this other answer which covers the + combinator.
Be careful, as the ~ combinator does not just select any sibling element. It only selects an element that comes after its sibling, so :checked ~ label will not match a label that occurs before the checked input element.
An illustration:
Subheading 1
Some text
with emphasis
Some text
Subheading 1
Some text
with emphasis
Some text
What's selected and what's not:
Selected
Thish3orpelement is located directly inside a.contentparent element. That.contentelement follows at least onelabel, and thislabeloccurs after at least one input element that is:checked.Note that any of the radio buttons here can be checked, and the elements will match, because as mention above
~doesn't require a label to follow it immediately. Also, given the structure, either one of the~selectors can be swapped out for a+::checked + label ~ .content > *
:checked ~ label + .content > *But this selector:
:checked + label + .content > *Will only match if the third radio button is checked, because it's the only one that's immediately followed by a
labeland the.contentelement.Not selected
Thisemelement is nested within one of thepelements which is itself contained within.content. Based on the illustration here, it won't be selected as it's not a child of.content.Not selected
Unlike in [1], none of thelabelelements in this section follow any:checkedinput element. Therefore, nothing is selected here, because it doesn't satisfy:checked ~ label.
No comments:
Post a Comment