16 CSS3 Selectors You Should Know
A selector is the most basic component in the CSS. It determines which element to match in the DOM and then apply a corresponding set of styling properties. Here's a definition of the selector from W3C documentation:
A Selector represents a structure. This structure can be used as a condition (e.g. in a CSS rule) that determines which elements a selector matches in the document tree, or as a flat description of the HTML or XML fragment corresponding to that structure. - W3C
In this tutorial, we will be looking at some of the rich contextual representations of CSS3 selectors.
E[foo^="bar"]
HereE
stands for an HTML element, foo
is an attribute and bar
represents a value. This expression selects elements whose "foo" attribute has value that starts with the string "bar"
. For example:HTML
<p id="val-1">HTMLxprs</p>
<p id="val-2">SitePoint</p>
<p id="val-3">EggheadIO</p>
<p id="val-4">SotchIO</p>
<p id="some-val">Not a value</p>
CSSp[id^="val"]{
color: red
}
The above CSS selector will select only those <p>
elements who id
attribute has value that starts with "val"
. In this case, the first four <p>
tags are colored red. E[foo$="bar"]
This expression selects HTML elements whose'foo'
attribute has value that ends with the string 'bar'
. For example:HTML
<p id="val-1">HTMLxprs</p>
<p id="val-2">SitePoint</p>
<p id="val-3">EggheadIO</p>
<p id="val-4">SotchIO</p>
<p id="some-val">Not a value</p>
CSSp[id$="val"]{
color: red
}
In this case, only the last <p>
tag has an ID
attribute whose value ends with the string "val"
. E[foo*="bar"]
This expression selects all the HTML elements whose'foo'
attribute has a value containing substring bar
. For example:HTML
<p id="val-1">HTMLxprs</p>
<p id="val-2">SitePoint</p>
<p id="val-3">EggheadIO</p>
<p id="val-4">SotchIO</p>
<p id="some-val">Not a value</p>
CSSp[id*="val"]{
color: red
}
In this case, all <p>
tags have an ID
attribute who value contain the substring "val"
.The :root selector
The:root
selector always selects the root of the document which is the <html>
element. It has higher specificity than a normal element selector. CSS
:root{
background: green
}
html{
background: red;
}
In this case, a green color background is applied to the <html>
element instead of red due to :root
's higher specificity. When dealing with SVG and XML, the
:root
selector may point to a different element other than the <html>
element. E:nth-child(n)
This expression selects the'E'
element which is the n
th child of its parent. For example:HTML
<body>
<p>Lorem Ipsum Donor</p>
<p>Lorem Ipsum Donor</p>
<p>Lorem Ipsum Donor</p>
<p>Lorem Ipsum Donor</p>
<p>Lorem Ipsum Donor</p>
</body>
CSSp:nth-child(3){
color: red;
}
In this case, the parent is the <body>
element and the 3rd <p>
element is colored red. Let's examine a different scenario:
HTML
<body>
<div>
<p>Lorem Ipsum Donor</p>
<p>Lorem Ipsum Donor</p>
<p>Lorem Ipsum Donor</p>
<p>Lorem Ipsum Donor</p>
<p>Lorem Ipsum Donor</p>
</div>
<div>
<p>Lorem Ipsum Donor</p>
<p>Lorem Ipsum Donor</p>
<p>Lorem Ipsum Donor</p>
<p>Lorem Ipsum Donor</p>
<p>Lorem Ipsum Donor</p>
</div>
</body>
CSSp:nth-child(3){
color: red;
}
In this case, the parents are 2 different <div>
elements. Hence, 3rd <p>
element from each parent will be colored red. You can also use string values as
odd
and even
in place of 'n'
to select odd and even elements respectively. E:nth-last-child(n)
This expression does the reverse ofE:nth-child(n)
. It selects n
th child counting from the end. E:nth-of-type(n)
This expression selectsn
th sibling of 'E' type element.
It is a useful pseudo class if you want to ensure you are selecting
elements of same type only. For example:HTML
<body>
<p>Lorem Ipsum Donor</p>
<p>Lorem Ipsum Donor</p>
<p>Lorem Ipsum Donor</p>
<p>Lorem Ipsum Donor</p>
<p>Lorem Ipsum Donor</p>
</body>
CSSp:nth-of-type(3){
color: red;
}
In this case, it will produce same result as :nth-child(3)
in the previous example. Difference between E:nth-child(n) and E:nth-of-type(n)
These is a major difference between the two. Let's examine them by examples.HTML
<body>
<h1>Hello World!</h1>
<p>Lorem Ipsum Donor 1</p>
<p>Lorem Ipsum Donor 2</p>
<p>Lorem Ipsum Donor 3</p>
<p>Lorem Ipsum Donor 4</p>
<p>Lorem Ipsum Donor 5</p>
</body>
The structure is no more the same as in the previous case. CSS
p:nth-of-type(3){
color: red;
}
nth-of-type(3)
will give the same result i.e.: color red the 3rd <p>
element . CSS
p:nth-child(3){
color: red;
}
nth-child(3)
will color red the 2nd <p>
element since it is the 3rd child of its parent. E:nth-last-of-type(n)
This expression does the reverse ofE:nth-of-type(n)
. Go ahead try out an example for this expression. E:first-child and E:last-child
The pseudo class:first-child
selects an element which is the first child of its parent and :last-child
selects an element which is the last child of its parent. For example:HTML
<p>Lorem Ipsum Donor</p>
<p>Lorem Ipsum Donor</p>
<p>Lorem Ipsum Donor</p>
<p>Lorem Ipsum Donor</p>
<p>Lorem Ipsum Donor</p>
CSSp:first-child{
color: green;
}
p:last-child{
color: red;
}
The first and last <p>
elements are colored green and red respectively. E:first-of-type and E:last-of-type
These are again type check pseudo classes.E:first-of-type
selects first child sibling of E type and E:last-of-type
selects last child of E type.HTML
<h1>Hello World!</h1>
<p>Lorem Ipsum Donor 1</p>
<p>Lorem Ipsum Donor 2</p>
<p>Lorem Ipsum Donor 3</p>
<p>Lorem Ipsum Donor 4</p>
<p>Lorem Ipsum Donor 5</p>
CSSp:first-of-type{
color: green;
}
p:last-of-type{
color: red;
}
In this case, the first and last <p>
tags are selected irrespective of their position with respect to their parent element. E:only-child and E:only-of-type
E:only-child
selects an E element which is the only element of its parent where as E:only-of-type
checks if it is the only sibling of the given type. For example:HTML
<div>
<p>Lorem Ipsum Donor 1</p>
</div>
<div>
<p>Lorem Ipsum Donor 1</p>
<p>Lorem Ipsum Donor 1</p>
</div>
CSSp:only-child{
color: green;
}
In this case, p:only-child
colors the <p>
element of the first <div>
element. HTML
<div>
<h1>Hello World!</h1>
<p>Lorem Ipsum Donor 1</p>
</div>
<div>
<h1>Hello World!</h1>
<p>Lorem Ipsum Donor 1</p>
<p>Lorem Ipsum Donor 1</p>
</div>
CSSp:only-of-type{
color: green;
}
In this case, only-of-type
checks on the type and colors the <p>
element of the first <div>
element.E:empty
This pseudo class selects an 'E' element which has no children or content inside it. For example:HTML
<div></div>
<div>
Hello World!
</div>
CSSdiv:empty{
width: 100px;
height: 100px;
background: green;
}
In this case, the first <div>
element gets selected. E:not(s)
This expression selects an elementE
which is not a selector s
. For example:HTML
<p>Lorem Ipsum Donor 1</p>
<p>Lorem Ipsum Donor 2</p>
<p>Lorem Ipsum Donor 3</p>
<p>Lorem Ipsum Donor 4</p>
<p>Lorem Ipsum Donor 5</p>
CSSp:not(:first-child){
color: green;
}
In this case, the last 4 <p>
tags are colored green. You can put any valid selector inside the :not()
pseudo selector.
Post a Comment