多个CSS样式到底谁起作用

首先得知道css有三个特性: 继承、层叠、优先级。这三个特性在决定选择器谁起作用时有考虑的优先顺序。
具体这三者是怎样影响选择器的请参考权威文档。这里我就只用大白话的形式告诉一些基本常识。

在考虑到底哪个css样式起作用时, 先考虑继承,再考虑优先级,最后考虑层叠
怎样个考虑法呢?
第一步:直接选中优先于间接选中。即选择器直接选中元素时指定的样式优先于继承下来的样式。
第二步:若多个样式都是直接选中时,在判定权重。
第三步:若权重也一样,考虑层叠,即后面的样式覆盖掉前面的样式。

权重:id选择器>类选择器>标签选择器>通配符>浏览器默认
  备注: !important会提升指定属性的优先级为最高,但是!important只能用于直接选中(选择器),不能用于间接选中    (即继承)。
判定优先级(权重)的规则
1.ID越多,选择器优先级越高。
2.ID数目一样时,看类选择器,类选择器越多,优先级越高。
3.ID数目和类选择器数目一样时,看标签名,标签名越多,优先级越高。
4.ID数目、类选择器和标签选择器一样时,后面的样式会层叠(覆盖)掉前面的样式。
注意点:
        ①,属性选择器和伪类的权重等同于类名选择器。(但值得注意的是,属性选择器和伪类选择器会伴有一个标签的权重,比如:p["title"]是一个属性权重加上标签权重。)
②,元素和伪元素的权重相同。
③,通配符和结合符的权重为0。(通配符*,结合符是>和空格等后代、子代选择器)
④,继承无权重。(特别注意:权重为0比无权重的权重大。)

⑤权重只能在选择器中才有作用,在继承时是没有用的。即只有在第二步时才需要考虑权重。

举几个例子吧。

例一:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<style type="text/css">
	div ul li span{
		color: blue;
	}
	div ul li p{
		color: red;
	}
	</style>
</head>
<body>
	<div class="di">
		<ul class="u">
			<li class="l" title="t">
				<p class="pp" title="t"><span>我是什么颜色?</span></p>
			</li>
		</ul>
	</div>
</body>
</html>
按照步骤来:
1,第一个选择器直接选中,第二个需要继承,所以第一步就决定谁起作用了。答案是blue。
例二:
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<style type="text/css">
	#id1 .u li p[title] span{
		color: red;
	}
	#id1 .u>li .pp span{
		color: blue;
	}
	</style>
</head>
<body>
	<div id="id1" class="di">
		<ul id="idu" class="u">
			<li class="l" title="t">
				<p class="pp" title="t"><span>我是什么颜色?</span></p>
			</li>
		</ul>
	</div>
</body>
</html>
按照步骤来:
1,两个选择器都是直接选中,所以进入第二步。
2,id数目一样;
   前者一个类加一个属性(相当于两个类,注意点里面的第一点说明了为什么),后者两个类;
   前者2+1个标签名(属性选择器中包含一个标签名),后者两个标签名;通配符和结合符的权重为0(即>和空格一样)。
 所以前者权重更高。答案红色。
例三:
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<style type="text/css">
	#id1 .u p span{
		color: red;
	}
	#id1 .u li span{
		color: blue;
	}
	</style>
</head>
<body>
	<div id="id1" class="di">
		<ul id="idu" class="u">
			<li class="l" title="t">
				<p class="pp" title="t"><span>我是什么颜色?</span></p>
			</li>
		</ul>
	</div>
</body>
</html>
按照步骤来:
1,两个选择器都是直接选中,所以进入第二步。
2,权重一样,所以进入第三步。
3,后面的层叠前面的。
答案是blue。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值