CSS 优先级


CSS优先级

单个选择器的优先级:
行内样式 > id选择器 > class选择器 > 标签选择器
多个选择器的优先级:
多个选择器的优先级,一般情况下,指向越准确,优先级越高。

计算权重

特殊情况下,我们需要"假设"一些值:

## 选择器:            优先级:

 - 标签选择器			优先级为1 
 - 类选择器			优先级为10 
 - Id选择器			优先级为100 
 - 行内样式			优先级为1000
 -  !import			∞ 无穷大

当选择器,选择上了某个元素的时候,那么要这么统计权重:

计算 id的数量,类的数量,标签的数量,最终谁优先级越高用谁的样式

如果权重(优先级)一样,那么以后出现的为准

*注意: 不进位,实际上能进位(255个标签,等于1个类名)但是没有实战意义!

如果大家都是0(没有选中某个元素、都是继承上去的):

就近原则 谁描述的近用谁的
如果一样近,比权重,权重不同,谁大用谁的
权重相同,谁写在后面用谁的
简单示例:

同一个标签,携带了多个类名:

<p class="spec1 spec2">我是什么颜色?</p>
<p class="spec2 spec1">我是什么颜色?</p>

和在标签中的类名的顺序无关,只和 css 选择器的顺序有关:

.spec2{
    color:blue;
}

.spec1{
    color:red;
}

红色的;因为 css 选择器中 .spec1 写在后面

!important 标记

  • important 语法:
  • Key:Value !important; Key 为css属性名,Value 为对应的属性值
  • 用来给一个属性提高权重;这个属性的权重就是无穷大
  • 一定要注意语法:
    正确的:
font-size:60px !important;

: 不能将 !important 写在语句的外面,感叹号不能省略

!important 需要强调3点

  • !important 提升的是一个属性,而不是一个选择器

CSS:

p{
    color:red !important;  /* → 只写了这一个!important,所以就字体颜色属性提升权重*/
    font-size: 100px ;     /* → 这条属性没有写!important,所以没有提升权重*/
}
#para1{
    color:blue;
    font-size: 50px;
}
.spec{
    color:green;
    font-size: 20px;
}

HTML:

<p class="spec" id="para1">我是p标签</p>

所以,综合来看,字体颜色是red(听 important的);字号是50px(听id的)。

!important无法提升继承的权重,该是0还是0

比如HTML结构:

<div>
    <p>哈哈哈哈哈哈哈哈</p>
</div>

CSS样式:

div{
	color:red !important;
}
p{
	color:green;
}

由于div是通过继承性来影响文字颜色的,所以 !important 无法提升它的权重,权重依然是0。干不过p标签,因为p标签是实实在在选中了,所以字是绿色的(以p为准)

!important 不影响就近原则

如果大家都是继承来的,按理说应该按照“就近原则”,那么 important 能否影响就近原则呢?

  • 影响是不可能影响的,这辈子都不可能影响的;远的,永远是远的;不能给远的写一个 important,干掉近的
    在开发网站的时候,不建议使用 !important ;因为会让 css 写的很乱