CSS样式优先级

CSS样式优先级

1.先看选择器是不是作用在目标标签上,选中非目标元素的情况下,离目标越近者优先

​ 例:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>样式应用于非目标标签时</title>
		<style>
			div p{color: red};
			#box{color: blue}//权重高   但离目标标签远
		</style>
	</head>
	<body>
		<!-- 选中非目标元素的情况下,离目标越近者优先 -->
		<div id="box">
		  <p>
		    <span>神来之笔</span>
		  </p>
		</div>
	</body>
</html>

2.都是作用在目标标签就看权重

权重: 一个!important+10000,一个行内样式+1000,一个id选择器+100,一个属性选择器、class或者伪类+10,一个元素选择器或者伪元素+1,通配符+0。*

​ 附:(最终权重值是相当于每个属性而言的)

3.都是作用在目标标签并且权重相同就看谁离得近

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>权重相等的情况下</title>
		<style>
			/* 权重值:201 */
			#box #box2 p{
				width: 200px;			/* 权重值:201 */
				height: 200px;			/* 权重值:201 */
				background-color: red;			/* 权重值:201 */
			}
			/* 权重值:201,离目标最近 */
			#box #box3 p{
				width: 200px;			/* 权重值:201 */
				height: 200px;			/* 权重值:201 */
				background-color: yellow;			/* 权重值:201 */
			}
		</style>
	</head>
	<body>
		<!-- 同等权重下,靠近目标的优先 -->
		<div id="box" class="boxs">
			<div id="box2" class="boxs2">
		    	        <div id="box3" class="boxs3">
		      		        <p></p>
		    	        </div>
		 	</div>
		</div>
	</body>
</html>

附:内联样式、外联样式其实优先级相同,如果上面3条都相同就按css规则后写的生效

总结

  1. 常用选择器权重优先级:*!important > id > class > tag*
  2. !important可以提升样式优先级,但不建议使用。如果!important被用于一个简写的样式属性,那么这条简写的样式属性所代表的子属性都会被应用上!important。 例如:background: blue !important;
  3. 如果两条样式都使用!important,则权重值高的优先级更高
  4. 在css样式表中,同一个CSS样式你写了两次,后面的会覆盖前面的
  5. 样式指向同一元素,权重规则生效,权重大的被应用
  6. 样式指向同一元素,权重规则生效,权重相同时,就近原则生效,后面定义的被应用
  7. 样式不指向同一元素时,权重规则失效,就近原则生效,离目标元素最近的样式被应用
CSS 样式优先级机制和继承机制是控制样式如何被应用和覆盖的核心概念。以下是详细的解析: ### 1. CSS 样式优先级规则 CSS 样式优先级的计算基于四个层级:**内联样式**、**ID 选择器**、**类选择器、属性选择器、伪类选择器**、以及**元素选择器和伪元素选择器**。这些层级的优先级从高到低依次为: - **内联样式**(Inline styles):直接在 HTML 元素上使用 `style` 属性定义的样式,其优先级最高。 - **ID 选择器**(例如 `#myId`):ID 选择器的优先级高于类选择器、属性选择器和伪类选择器。 - **类选择器**(例如 `.myClass`)、**属性选择器**(例如 `[type="text"]`)、**伪类选择器**(例如 `:hover`):它们的优先级相同。 - **元素选择器**(例如 `div`、`p`)和**伪元素选择器**(例如 `::before`):它们的优先级最低。 此外,还有一些特殊规则会影响优先级: - **`!important` 声明**:如果一个样式规则被标记为 `!important`,它将覆盖其他所有规则,包括内联样式。但应谨慎使用,因为它可能导致样式难以维护。 - **通用选择器**(例如 `*`)和**组合选择器**(例如 `>`, `+`, `~`)对优先级没有影响。 - **源码顺序**:当多个选择器具有相同的优先级时,后定义的样式会覆盖先定义的样式。 ### 2. CSS 样式继承机制 CSS 的继承机制允许某些样式属性从父元素传递到子元素。并不是所有属性都可以继承,通常只有与**文本相关的属性**可以继承。以下是常见的可继承属性: - **字体相关属性**:`font`, `font-family`, `font-size`, `font-weight`, `font-variant`, `font-style` - **文本相关属性**:`color`, `line-height`, `letter-spacing`, `text-align`, `text-indent`, `text-transform`, `white-space`, `word-spacing` - **列表相关属性**:`list-style`, `list-style-type`, `list-style-position`, `list-style-image` - **表格相关属性**:`border-collapse`, `border-spacing` 例如,如果给 `body` 元素设置了 `font-size: 16px;`,那么 `body` 的子元素会继承这个字体大小,除非子元素显式地设置了不同的字体大小。 对于不可继承的属性,如 `border`、`margin`、`padding` 等,子元素不会自动继承父元素的值。如果需要让子元素应用父元素样式,可以使用 `inherit` 关键字。例如: ```css .child { border: inherit; } ``` 这样,`.child` 元素的 `border` 属性将继承自父元素。 ### 3. 优先级和继承的结合 当多个样式规则作用于同一个元素时,浏览器会根据优先级规则决定最终应用的样式。如果某个属性是可继承的,并且没有被显式设置,那么它会从父元素继承。如果多个规则具有相同的优先级,那么后定义的规则会覆盖先定义的规则。 ### 4. 特殊值 `inherit` 和 `initial` - **`inherit`**:强制某个属性继承父元素的值,即使该属性通常不可继承。 - **`initial`**:将属性值重置为该属性的默认值。 例如: ```css .child { color: inherit; /* 强制继承父元素的颜色 */ font-size: initial; /* 重置为默认字体大小 */ } ``` ### 5. 实际应用中的优先级问题 在实际开发中,优先级问题可能导致样式冲突。为了避免这种情况,建议遵循以下最佳实践: - **避免使用 `!important`**:除非必要,否则不要使用 `!important`,因为它会使样式难以覆盖。 - **尽量避免使用 ID 选择器**:由于 ID 选择器的优先级很高,覆盖它们可能会很困难。 - **使用类选择器**:类选择器的优先级适中,易于管理和覆盖。 - **保持样式表的结构清晰**:合理组织样式表的顺序,确保高优先级样式在需要时能够覆盖低优先级样式。 ### 6. 示例代码 以下是一个简单的示例,展示了如何使用继承和优先级: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <style> body { font-size: 20px; color: blue; } .parent { border: 1px solid red; } .child { color: inherit; /* 继承父元素的颜色 */ font-size: 16px; /* 覆盖继承的字体大小 */ } </style> </head> <body> <div class="parent"> <p class="child">这是一个段落</p> </div> </body> </html> ``` 在这个示例中,`.child` 元素继承了 `body` 的颜色,但显式设置了字体大小。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

、工藤新一

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值