Difference between div > p and first-child selector???
Are these two concepts the same thing? Since div > p would select a p that is the immediate child of the div and using a first-child selector would select the first-child of the div.
If there is a difference could you please point them out I tried it with the following example?
<!DOCTYPE HTML>
<html>
<head>
<link type="text/css" rel="stylesheet" href="stylesheet.css" />
<title>HTML Reference</title>
</head>
<body>
<p>Introduction: Cascading with CSS</p>
<div>
<p>Synopsis: When you set a property of a selector like 'p' to a certain value, that value applies to <em>all</em> p tags.
If, however, you change that same property to a different value for a more specific instance of p,
that change will <em>override</em> the 'general rule'.
</p>
<ul>
<li><p>If you say p { font-family: Garamond}, all 'p's will have the font Garamond.</p></li>
<li><p>BUT if you say li p {font-family: Verdana}, 'p's outside of 'li's will be
in Garamond, and 'p's INSIDE 'li's will be in Verdana.
</p></li>
<li><p>The more specific your selectors are, the higher importance CSS gives to the styling you apply!</p></li>
</ul>
</div>
<p>Summary: Greater specificity makes CSS prioritize that particular styling.</p>
</body>
</html>
I utilized this html content with the following CSS:
div > p {
color:red;
}
p:first-child {
color:blue;
}
And it seems that the first-child overrides the “div > p” for some reason. Can anyone provide me a explanation as to why “first-child” is more specific than “div > p”?
Answer 521f4862abf82150410035f5
First off, you misunderstood something:
Are these two concepts the same thing? Since
div > p
would select ap
that is the immediate child of thediv
and using afirst-child
selector would select the first child of thediv
They are indeed quite different.
The immediate descendant selector (div > p
) selects any <p>
that are direct children (but not “grandchildren”) of some <div>
, so not just the first one.
The :first-child
pseudo-class selects an element that is the first child of its parent, and that parent can be anything, for instance, <body>
, <div>
, or <li>
. So p:first-child
selects almost all <p>
elements in your HTML (with the exception of the second p
child of your <div>
, see JSBin).
Now to the question why the first <p>
inside the <div>
is blue, even though the div > p
selector tries to make it red. The p:first-child
is indeed more specific here because :first-child
is a pseudo-class, and has the same specificity as a class selector such as .test
. (Pseudo-)classes have a higher specificity than element selectors (such as div
and p
). In fact, no number of element selectors can outweigh a single (pseudo-)class selector, thus even if you had body > div > p
, that would be less specific than p:first-child
.
For details, read this excellent illustrated article by Chris Coyier.
Popular free courses
- Free course
Learn SQL
In this SQL course, you'll learn how to manage large datasets and analyze real data using the standard data management language.Beginner Friendly4 Lessons - Free course
Learn JavaScript
Learn how to use JavaScript — a powerful and flexible programming language for adding website interactivity.Beginner Friendly11 Lessons - Free course
Learn HTML
Start at the beginning by learning HTML basics — an important foundation for building and editing web pages.Beginner Friendly6 Lessons