CSS优先级及其计算方法

1.CSS优先级比较

!important  >   内联样式   >   id   >   class   >   标签   >   通配符   >   继承   >   默认

2.CSS权重计算

我们把特殊性分为4个等级,每个等级代表一类选择器,每个等级的值为其所代表的选择器的个数乘以这一等级的权值,最后把所有等级的值相加得出选择器的特殊值。

4个等级的定义如下:

  1. 第一等:代表内联样式,如: style=””,权值为1000。
  2. 第二等:代表ID选择器,如:#content,权值为0100。
  3. 第三等:代表类,伪类和属性选择器,如.content,权值为0010。
  4. 第四等:代表标签选择器和伪元素选择器,如div p,权值为0001。
  5. 第五等:通用选择器(*),子选择器(>),相邻同胞选择器(+),权值为0000

下面是一些计算示例:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <style>
        #username{/*权重:100*1=100*/
            font-size: 14px;
            color: #333333;
        }
        #users_info #username{/*权重:100*2=200*/
            font-size: 15px;
            color: #1B6D85;
        }
        #users_info a{/*权重:100*1+1=101*/
            font-size: 16px;
            color: #398439;
        }
        .user_info #username{/*权重:100*1+10*1=110*/
            font-size: 17px;
            color: #66512C;
        }
        .user_info a{/*权重:10*1+1*1=11*/
            font-size: 18px;
            color: #843534;
        }
        #in_block .user_info #username{/*权重:100*2+10*1=210*/
            font-size: 19px;
            color: #8A6D3B;
        }
        .contain #in_block .user_info #username{/*权重:100*2+10*2=220*/
            font-size: 20px;
            color: #C7254E;
        }
        #content #in_block .user_info a{/*权重:100*2+10*1+1*1=211*/
            font-size: 21px;
            color: #F0AD4E;
        }
    </style>
    <body>
        <div class="contain" id="content" style="width: 200px;height: 200px;margin: 0 auto;background: #C4E3F3;">
            <div id="in_block" class="left_content">
                <div class="user_info" id="users_info">
                    <a id="username">注意我的字体大小和颜色</a>
                </div>
            </div>
        </div>
    </body>
</html>

问题分析

问题1:权重相同的两个样式都映射到一个标签,哪一个会被覆盖呢?

这就是除去权重后的又一个影响因素了,权重相同就和你的书写顺序有关了,写在前面的会被后面的覆盖,如下:

权重相同,后面的样式会覆盖掉前面的,所以最后显示的样式为color: yellow;font-weight: 100;

2.权重相同,一个样式定义在html中一个定义在css文件中,哪一个会被覆盖呢?

最终显示样式会和你的引入顺序有关。所以你的引入顺序决定了你的样式,如下:

css里面的文件如下:

#div1 .div2{
	color: yellow;
	font-weight: 300;
}

最终的显示样式为:color: red; font-weight: 900;

如果因为文件的顺序如下:

那么最后的样式为css/new_file.css文件下所定义的样式:color: yellow; font-weight: 900;

问题3:同一个标签有多个类名来修饰,类名的先后顺序对样式有影响吗?

结论:类名的先后顺序不影响样式,主要看权重和顺序。如果在权重相同的前提下,后面写的样式会覆盖掉前面的样式,所以上述样式的最终结果是color:pink;

问题3:权重相同的基础下,后面写的样式覆盖前面的对应的全部样式还是全部替换为后面写的样式?

结果:权重相同的基础下,后面写的样式覆盖前面的对应的全部样式,如上,最终样式为:

color: blue;width: 100px; height: 100;border:1px solid #CCCCCC;

问题4:跳级引用,跳过标签的缩少对样式有影响吗?

结论:跳级不影响,主要看权重和先后顺序。

最后的显示j结果为color: pink;
                font-size: 20px;
                background-color: orange;

问题五:内联样式的权重为1000,10个id选择器的权重也为1000,结果为什么?

 

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<link rel="stylesheet" href="css/new_file.css" />
		<style>
			#div1 #div2 #div3 #div4 #div5 #div6 #div7 #div8 #div9 #div10 #div11 #div12 a{  /*权重为1201*/
				color: yellow;
				font-size: 50px;
			}
		</style>	
	</head>
	<body>
		<div id="div1">
			<div id="div2">
				<div id="div3">
					<div id="div4">
						<div id="div5">
							<div id="div6">
								<div id="div7">
									<div id="div8">
										<div id="div9">
											<div id="div10">
												<div id="div11">
													<div id="div12">
														<a href="" style="color: pink;font-size: 20px;">湘潭大学</a>
													</div>
												</div>
											</div>
										</div>
									</div>
								</div>
							</div>
					   </div>	
					</div>
			    </div>	
			</div>	
		</div>
	</body>
</html>

结论:虽然最后权重达到了1201,但是显示结果依然为内联样式的样式,即style="color: pink;font-size: 20px;"

CSS 优先级是指当多个 CSS 规则应用到同一个元素时,浏览器决定使用哪个规则来显示元素样式的规则。以下是详细介绍: ### 基本优先级规则 - **祖先样式优先级**:最近的祖先样式比其他祖先样式优先级高。例如,元素的直接父元素的样式会比更上层祖先元素的样式优先级高[^1]。 - **直接样式与祖先样式**:“直接样式”比“祖先样式”优先级高。直接应用到元素上的样式会覆盖从祖先元素继承来的样式[^1]。 - **不同选择器类型优先级**:内联样式 > ID 选择器 > 类选择器 = 属性选择器 = 伪类选择器 > 标签选择器 = 伪元素选择器。例如,使用内联样式 `style="color: red;"` 会比通过 ID 选择器 `#element { color: blue; }` 定义的样式优先级高[^1]。 ### 特殊性值计算 通过计算选择符中不同类型选择器的个数来确定优先级。具体为计算选择符中 ID 选择器的个数(a),类选择器、属性选择器以及伪类选择器的个数之和(b),标签选择器和伪元素选择器的个数之和(c)。按 a、b、c 的顺序依次比较大小,大的则优先级高,相等则比较下一个。若最后两个的选择符中 a、b、c 都相等,则按照“就近原则”来判断[^1]。 ### 四个等级的权值 - **第一等级(内联样式)**:如 `style=""`,权值为 1000。内联样式直接写在 HTML 元素的 `style` 属性中,具有很高的优先级[^3]。 - **第二等级(ID 选择器)**:如 `#content`,权值为 100。ID 选择器通过元素的 ID 属性来选择元素,优先级较高[^3]。 - **第三等级(类、伪类和属性选择器)**:如 `.content`,权值为 10。这些选择器用于选择具有特定类名、处于特定状态或具有特定属性的元素[^3]。 - **第四等级(标签选择器和伪元素选择器)**:如 `div p`,权值为 1。标签选择器通过元素的标签名来选择元素,优先级相对较低[^3]。 ### !important 的使用 属性后面的 `!important` 拥有最高样式优先级。它可以让当前 CSS 属性的优先级提升至最高,即比内联的样式(`style`)更高。例如 `.li-blue{ color: blue!important; }` 会覆盖其他普通的样式规则,即使是内联样式也可能被其覆盖[^5]。 ### 示例代码 ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>CSS Priority Example</title> <style> /* 标签选择器 */ div { color: green; } /* 类选择器 */ .text { color: blue; } /* ID 选择器 */ #special-text { color: red; } /* 内联样式优先级高于 ID 选择器 */ /* 若添加 !important优先级更高 */ </style> </head> <body> <div class="text">This is a normal text.</div> <div id="special-text">This is a special text.</div> <div style="color: purple;">This is an inline - styled text.</div> </body> </html> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值