CSS基础(part4)--CSS的层叠性继承性优先级

学习笔记,仅供参考,有错必纠

参考自:CSS中文文档



CSS


CSS层叠性


所谓层叠性是指多种CSS样式叠加的处理方案。

  • 举个例子
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">

	<title>层叠性</title>
	<style>
		.box {
			background-color: red;
			color: yellow;
			height: 200px;
			width: 200px;
		}

		.wrap {
			background-color: green;
		}
	</style>
</head>
<body>
	<div class="box wrap">
		俺是div标签
	</div>
</body>
</html>

页面:


CSS继承性


所谓继承性是指书写CSS样式表时,子标记会继承父标记的某些样式,如文本颜色和字号。

  • 图示


  • 举个例子
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>继承性</title>
	<style>
		.box {
			color: red;
		}
	</style>
</head>
<body>
	
	<div class="box">
		我是div
		<p>
			我是段落
		</p>
	</div>
</body>
</html>

页面:


  • 举个例子2
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>继承性</title>
	<style>
		.box {
			color: red;
		}
		body {
			font-size: 30px;
		}
	</style>
</head>
<body>
	
	<div class="box">
		我是div
		<p>
			我是段落
		</p>
	</div>
</body>
</html>

页面:


  • 注意事项

恰当地使用继承可以简化代码,降低CSS样式的复杂性。但是,如果在网页中所有的元素都大量继承样式,那么判断样式的来源就会很困难,所以,如字体、字号、颜色、行距等样式,我们可以在body标签中统一设置,然后通过继承影响文档中所有文本。

所有与文字相关的都可以继承,比如:color、text-系列、font-系列、line-系列、cursor等;

并不是所有的CSS属性都可以继承,例如,下面的属性就不具有继承性:边框、外边距、内边距、背景、定位、元素宽高属性。


CSS的优先级(特殊性)


内联样式优先级最高;
ID选择器的优先级,仅次于内联样式;
类选择器优先级低于ID选择器;
标签选择器低于类选择器。


  • 优先级图示


  • 举个例子1
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>CSS特殊性</title>
	<style>

		#txt-wrap {
			background-color: red;
		}

		.box  {
			color: red;
			background-color: yellow;
		}	

		/*层叠性是指: 在样式的优先级相同的情况下才会考虑的*/
	</style>

</head>
<body>
	
	<div class="box" id="txt-wrap" style="color: blue;">
		我是div的文字
	</div>
</body>
</html>

页面:


  • 举个例子2
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>CSS选择器案例</title>
	<style>
		body {
			color: red;   /*继承的样式  >  浏览器默认的样式 */
		}

		* {
			color: blue;   /*通配符选择器的样式 >  继承的样式*/
		}

		h1 {
			color: green; /*标签选择器的样式  >  通配符选择器的样式*/
		}

		.title-demo {
			color: purple;  /*类选择器的样式  > 标签选择器的样式的优先级*/
		}

		#id-title {
			color: yellow;   /*id选择器的优先级  >  类选择器的样式*/
		}
		

	</style>
</head>
<body>
	<div class="wrap">
		<div class="aside">
			<div class="aside-dt" id="title-txt">
				<h1 class="title-demo" id="id-title" style="color: pink;">我是一个标题</h1>	
			</div>
			<div class="aside-dd">
				<p>我是一个段落</p>
			</div>
		</div>
	</div>
</body>
</html>

页面:


  • 结论
    • 继承的样式的优先级 > 浏览器默认样式的优先级
    • 通配符选择器样式的优先级 > 继承的样式的优先级
    • 标签选择器的样式的优先级 > 通配符选择器的样式的优先级
    • 类选择器的样式的优先级 > 标签选择器的样式的优先级
    • id选择器的优先级 > 类选择器的样式的优先级
    • 行内样式的优先级 > id选择器的优先级

复合选择器的优先级


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

现在我有3个复合选择器,它们分别是:

选择器A:ID选择器 类选择器 ID选择器
选择器B:类选择器 类选择器 标签选择器
选择器C:标签选择器 标签选择器 类选择器 类选择器

请问它们的如何排它们的优先级?

我们都知道:

ID选择器优先级 > 类选择器优先级  > 标签选择器优先级 

这里,我们将这3个复合选择器中各个选择器的数量分别计算出来,并绘制成表格,进行优先级比较:

复合选择器名 ID选择器 类选择器 标签选择器
选择器A 2 1 0
选择器B 0 2 1
选择器C 0 2 2

可以看到,选择器A的ID选择器数量为2,在3个选择器中数量最多,所以它的优先级最高;在剩下的两个选择器中,选择器B和选择器C的类选择器数量都一样多,所以我们再对他们的标签选择器数量进行比较;我们发现,选择器C的标签选择器数量大于选择器选择器B,所以选择器C的优先级大于选择器B的优先级。

也就是说,优先级先后顺序为:

选择器A > 选择器C > 选择器B

  • 举个例子
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>CSS选择器案例</title>
	<style>
		.aside .aside-dt h1 {
			background-color: silver;
		}

		.aside #title-txt #id-title {
			background-color: yellow;
		}
		

	</style>
</head>
<body>
	<div class="wrap">
		<div class="aside">
			<div class="aside-dt" id="title-txt">
				<h1 class="title-demo" id="id-title" style="color: pink;">我是一个标题</h1>	
			</div>
			<div class="aside-dd">
				<p>我是一个段落</p>
			</div>
		</div>
	</div>
</body>
</html>

页面:


关于优先级权重的注意事项

继承样式的权重为0,即在嵌套结构中,不管父元素样式的权重多大,当被子元素继承时,他的权重都为0,也就是说子元素定义的样式会覆盖继承来的样式,如:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>CSS选择器案例</title>
	<style>
		.aside .aside-dt h1 {
			background-color: silver;
		}

		.aside #title-txt {
			/* 
			虽然.aside .aside-dt h1选择器的优先级低于.aside #title-txt选择器的优先级,
			但是div标签为h1标签的父标签,h1标签的样式会覆盖掉div标签的样式
			所以在这里复合选择器的优先级没有起到作用
			 */
			background-color: yellow;
		}
		

	</style>
</head>
<body>
	<div class="wrap">
		<div class="aside">
			<div class="aside-dt" id="title-txt">
				<h1 class="title-demo" id="id-title" style="color: pink;">我是一个标题</h1>	
			</div>
			<div class="aside-dd">
				<p>我是一个段落</p>
			</div>
		</div>
	</div>
</body>
</html>

页面:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章