Combinators - Learn web development 编辑
The final selectors we will look at are called combinators, because they combine other selectors in a way that gives them a useful relationship to each other and the location of content in the document.
Prerequisites: | Basic computer literacy, basic software installed, basic knowledge of working with files, HTML basics (study Introduction to HTML), and an idea of how CSS works (study CSS first steps.) |
---|---|
Objective: | To learn about the different combinator selectors that can be used in CSS. |
Descendant combinator
The descendant combinator — typically represented by a single space (
) character — combines two selectors such that elements matched by the second selector are selected if they have an ancestor (parent, parent's parent, parent's parent's parent, etc) element matching the first selector. Selectors that utilize a descendant combinator are called descendant selectors.
body article p
In the example below, we are matching only the <p>
element which is inside an element with a class of .box
.
Child combinator
The child combinator (>
) is placed between two CSS selectors. It matches only those elements matched by the second selector that are the direct children of elements matched by the first. Descendent elements further down the hierarchy don't match. For example, to select only <p>
elements that are direct children of <article>
elements:
article > p
In this next example, we have an unordered list, nested inside of which is an ordered list. I am using the child combinator to select only the <li>
elements which are a direct child of a <ul>
, and have given them a top border.
If you remove the >
that designates this as a child combinator, you end up with a descendant selector and all <li>
elements will get a red border.
Adjacent sibling combinator
The adjacent sibling selector (+
) is used to select something if it is right next to another element at the same level of the hierarchy. For example, to select all <img>
elements that come right after <p>
elements:
p + img
A common use case is to do something with a paragraph that follows a heading, as in my example below. Here we are looking for a paragraph which is directly adjacent to an <h1>
, and styling it.
If you insert some other element such as a <h2>
in between the <h1>
and the <p>
, you will find that the paragraph is no longer matched by the selector and so does not get the background and foreground color applied when the element is adjacent.
General sibling combinator
If you want to select siblings of an element even if they are not directly adjacent, then you can use the general sibling combinator (~
). To select all <img>
elements that come anywhere after <p>
elements, we'd do this:
p ~ img
In the example below we are selecting all <p>
elements that come after the <h1>
, and even though there is a <div>
in the document as well, the <p>
that comes after it is selected.
Using combinators
You can combine any of the selectors that we discovered in previous lessons with combinators in order to pick out part of your document. For example if we want to select list items with a class of "a", which are direct children of a <ul>
, I could use the following.
ul > li[class="a"] { }
Take care however when creating big lists of selectors that select very specific parts of your document. It will be hard to reuse the CSS rules as you have made the selector very specific to the location of that element in the markup.
It is often better to create a simple class and apply that to the element in question. That said, your knowledge of combinators will come in very useful if you need to get to something in your document and are unable to access the HTML, perhaps due to it being generated by a CMS.
Test your skills!
We have covered a lot in this article, but can you remember the most important information? You can find some further tests to verify that you've retained this information before you move on — see Test your skills: Selectors.
Moving on
This is the last section in our lessons on selectors. Next we will move on to another important part of CSS — the CSS Box Model.
In this module
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论