CSS的优先级与权重计算

作者: Darren 分类: html与css 发布时间: 2019-05-15 11:45

CSS优先级

定义CSS样式时,经常出现两个或更多选择器选择在同一元素上,这时就会出现优先级的问题。

一、基本选择器优先级比较:

父元素继承<通配符选择器<标签选择器<类选择器<id选择器<行内样式<!important

注意:其中!important只有作用于某个属性,提高某个属性的优先级!

设置同个CSS属性时,优先级高会覆盖优先级低的!设置不同的CSS属性,就不会有优先级问题!

案例源代码:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<style>
		/* 基本选择器优先级比较:*/
		/* 继承<通配符选择器<标签选择器<类选择器<id选择器<行内样式<!important */
		
		/*
			!important语法格式

			css属性:css属性值 !important;
		*/
		
		/*
		使用!important一定要注意以下几点
		1.!important它是提升的属性的权重,而不是提升选择器的优先级!
		2.!important它只能提升作用于自己身上的属性,并不能提升继承过来属性的权重!
		*/

		#div2{
			color:skyblue;
		}
		.div1{
			color:pink;
		}
		div{
			color:orange !important;
		}
		*{
			color:blue;
		}
		body{
			color:red;
		}
	</style>
</head>
<body>
	<div class='div1' id='div2' style='color:green;'>div的内容</div>
</body>
</html>

二、在复合选择器中我们不叫优先级了,我们称之为权重:

权重计算:

复合选择器的权重计算: (0 0 0 0)
从左到右:

第一个0表示!important的个数

第二个0表示id选择器的个数

第三个0表示类选择器或伪类的个数

第四个0表示标签选择器的个数

比较方法:从左往右:如果第一个0大,表示这个选择器的权重高,那么使用这个选择器的样式,后面不用比较,如果第一个0相等,那么继续比较第二个0,如果第二个0大,那么就是这个选择器的权重高,使用他的样式,如果相等,继续往下比较,依次类推。

案例源代码:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<style>
		/*
		复合选择器我们不叫优先级了,我们称之为权重

		复合选择器的权重计算: (0 0 0 0)
		从左到右:
		  第一个0表示!important的个数
		  第二个0表示id选择器的个数
		  第三个0表示类选择器或伪类的个数
		  第四个0表示标签选择器的个数

		比较方法:从左往右:如果第一个0大,表示这个选择器的权重高,那么使用这个选择器的样式,后面不用比较,如果第一个0相等,那么继续比较第二个0,如果第二个0大,那么就是这个选择器的权重高,使用他的样式,如果相等,继续往下比较,依次类推
		*/
		
		/*
		如果复合选择器权重相等的时候,应该考虑层叠性
		这个不难,但是忽略很容易绕晕。其实,我们修改样式,一定要看该标签有没有被选中
		1) 如果选中了,那么以上面的公式来计权重。谁大听谁的 
		2) 如果没有选中,那么权重是0,因为继承的权重为0
		*/

		/*(0 1 1 0)*/
		.father #son2{
			color:purple;
		}
		/*(0 0 2 0)*/
		.father .son1{
			color:orange;
		}
		/*(0 0 1 0)*/
		.father{
			color:red;
		}
		/*(0 0 1 1)*/
		.father div{
			color:blue;
		}
	</style>
</head>
<body>
	<div class="father">
		<div class="son1" id="son2">son的内容</div>
	</div>
</body>
</html>