Home >Web Front-end >CSS Tutorial >Detailed introduction to selector priority order in CSS
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>
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 { ... }
2. Class selector
.myclass { ... }
3. Tag selector
p { ... }
4. Attribute selector
[title="mytitle"] { ... }
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 { ... }
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 { ... }
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>
CSS specificity examples
The following are some CSS Selector specificity example:
Selector | Specificity | Speciality in base 10 |
---|---|---|
style="color: red" |
1, 0, 0, 0 | 1000 |
#id {} |
0, 1, 0, 0 | 100 |
#id #aid |
0, 2, 0, 0 | 200 |
.sty {} |
0, 0, 1, 0 | 10 |
.sty p[title=""] { } |
0, 0, 2, 0 | 20 |
p:hover {} | 0, 0, 1, 0 | 10 |
p {} |
0, 0, 0, 1 | 1 |
##ul::after {}
| 0, 0, 0, 11 | |
p p {}
| 0, 0, 0, 22 |
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 }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 }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; }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依然有效 */ }
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!