Detailed introduction to selector priority order in CSS

高洛峰
Release: 2017-03-08 15:23:17
Original
1603 people have browsed it

What is the speciality

When applying CSS styles to an HTML element, there are often many ways to find the element, such as:

<p id="container" class="wrap_sty">   
    <p class="pra">这是一个段落</p>   
</p>   
<style>   
    #container p { color:red }   
    p p { color:green }   
    p { color:yellow }    
</style>
Copy after login

It can be seen that there are many methods to affect an HTML element, far more than these. So if many of the same styles are applied to an element, which style will be displayed in the end? CSS uses a method called specificity to prioritize multiple selectors.

CSS specificity
The specificity of selectors is divided into 4 levels, a b c d, from left to right, the farther to the left, the higher the priority. If a selector rule has multiple +1 for selectors of the same type.
If it is an HTML internal style, then the specificity takes priority, a=1
The specificity of the id selector is b,
The class selector, pseudo-class selector, and attribute selector are c
tags Selectors and pseudo-element selectors are d
Let’s first talk about some selector types:
1.id selector

#myid { ... }
Copy after login

2. Class selector

.myclass { ... }
Copy after login

3. Tag selector

p { ... }
Copy after login

4. Attribute selector

[title="mytitle"] { ... }
Copy after login

Since most documents such as W3CSCHOOL may not explain it in detail, many people may think that the attribute selector is like this p[title="mytitle"] Or #id[title="mytitle"], etc., this is an attribute selector. Strictly speaking, this is not a pure attribute selector, but is composed of id selector, label selector, etc. and attribute selection. .
5. Pseudo-class selector

p:hover { ... }
Copy after login

Common pseudo-class selectors are:
Link pseudo-class, :link, :visited, use on the anchor element.
Dynamic pseudo-classes, :hover, :focus, :active, for any selection.
6. Pseudo-element selector

p::after { ... }   
p::before { ... }
Copy after login

Pseudo-element and pseudo-class are completely different concepts. They are called pseudo-elements because they are indeed A virtual HTML element can be generated, but the pseudo element cannot be obtained by the DOM.
There are many applications of pseudo-elements, the most common ones are::after clearing floats:

<ul>   
    <li>A</li>   
    <li>B</li>   
</ul>   
<style>   
    li { float:left }   
    ul::after { content: ""; display: block; clear: both }   
</style>
Copy after login

CSS specificity examples
The following are some CSS Selector specificity example:

0, 0, 0, 110, 0, 0, 22
SelectorSpecificitySpeciality in base 10
style="color: red"1, 0, 0, 01000
#id {}0, 1, 0, 0100
#id #aid0, 2, 0, 0200
.sty {}0, 0, 1, 010
.sty p[title=""] { }0, 0, 2, 020
p:hover {} 0, 0, 1, 010
p {}0, 0, 0, 11
##ul::after {}
p p {}

If the specificity of two rules is the same, the one defined later will overwrite the one defined first.

CSS Importance
There is another thing in CSS that can ignore specificity, that is !important. CSS properties using this tag always take precedence.

#id { color: red }   
.class { color: yellow !important }
Copy after login

The second style will take precedence over the first, even if the id selector is more specific than the class selector.

If both attributes have !important, then the specificity determines the priority.

#id { color: red !important }   
.class { color: yellow !important }
Copy after login

The result is that the first style takes precedence over the second.

IE6's support for !important is not complete. In IE6, if the !important attribute is first defined in a selector, and then the same attribute without !important is defined later, then !important will be invalid.

p {   
  color: yellow !important;     
  color: red;   
}
Copy after login

In IE6, there is no way to be pornographic, so let’s see some blood!

IE6/7 You can also add some ingredients after !important without losing the taste, but it is recommended not to be so boring!

div {   
  color: yellow !important you are dead;   /* IE6/7依然有效 */  
}
Copy after login

The above is the detailed content of Detailed introduction to selector priority order in CSS. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template