文章目录

  • 一、CSS 特性
  • 1、样式层叠冲突
  • 2、样式的继承性
  • 3、优先级引入
  • 4、选择器基本权重
  • 5、后代选择器权重计算
  • 6、后代选择器权重计算二
  • 7、链接伪类选择器权重计算
  • 8、判定标签样式







一、CSS 特性



CSS 特性 相关博客 :

  • 【CSS】CSS 特性 ① ( CSS 层叠性 | 样式冲突 | 就近原则选择样式 )
  • 【CSS】CSS 特性 ② ( CSS 继承性 )
  • 【CSS】CSS 特性 ③ ( CSS 优先级 | 优先级引入 | 选择器基本权重 )
  • 【CSS】CSS 特性 ③ ( CSS 优先级 | 权重叠加计算公式 )
  • 【CSS】CSS 特性 ④ ( CSS 优先级 | 继承权重 )
  • 【CSS】CSS 特性 ⑤ ( CSS 优先级 | 经典权重计算示例 1 )
  • 【CSS】CSS 特性 ⑥ ( CSS 优先级 | 经典权重计算示例 2 )


1、样式层叠冲突



CSS 层叠性 :

为 标签 设置 多种 CSS 样式 , 会出现 CSS 样式叠加的情况 ,

如果有 两个相同类型 的 CSS 样式 作用在了 同一个 标签 上 , 那么就出现了 样式冲突 ,

样式冲突 后 , 根据 " 就近原则 " , 选择 最近设置 的样式 , 也就是 后设置的样式 覆盖 先设置的样式 ;



2、样式的继承性



CSS 样式 具有 继承性 , 字标签 自动 继承 父标签 的 CSS 样式

<div>
		<p>CSS 继承性测试</p>
	</div>

如果 为 div 标签设置 字体为红色 , 那么 在 div 标签下的字标签 p 标签 会自动继承 父标签 div 标签的样式 , 其文本也为红色 ;

子标签继承 父标签 样式 , 可以降低 CSS 代码复杂性 , 便于维护 ;



不是所有的 CSS 样式都可以继承 , 可继承的样式有 :

  • 文本相关的 CSS 样式 , text-xxx 样式 ;
  • 字体相关的 CSS 样式 , font-xxx 样式 ;
  • 线相关的 CSS 样式 , line-xxx 样式 ;
  • 字体颜色相关 CSS 样式 , color 样式 ;

元素的宽高样式 , 背景设置 , 明显不可以继承 ;



3、优先级引入



定义 CSS 样式时 , 可能出现 多个 类型相同的 规则 定义在 同一个元素上 ,

  • 如果 CSS 选择器 相同 , 执行 CSS 层叠性 , 根据 就近原则
<style>
		div {
			color: red;
			font-size: 30px;
		}

		div {
			color: blue;
		}
	</style>
  • 如果 CSS 选择器 不同 , 则需要考虑 CSS 优先级 问题 , 需要计算对应的 选择器 权重 ;


4、选择器基本权重



CSS 选择器

选择器优先级 - 权重计算

继承父标签的样式 , * 通配符选择器

0,0,0,0

标签选择器

0,0,0,1

类选择器,链接伪类选择器

0,0,1,0

ID 选择器

0,1,0,0

标签的行内样式 style 属性

1,0,0,0

样式后添加 !important

权重无穷大

  • 继承父类样式 选择器 , 权重 0,0,0,0 ;
/* 0. 继承父类样式 权重 0,0,0,0 */
		body {
			color: red;
		}
  • 通配符选择器 * , 权重 0,0,0,0 ;
/* 0. 通配符选择器 权重 0,0,0,0 */
		* {
			color: red;
		}
  • 标签选择器 , 权重 0,0,0,1 ;
/* 1. 标签选择器 权重 0,0,0,1 */
		div {
			color: pink
		}
  • 类选择器 , 权重 0,0,1,0 ;
/* 2. 类选择器 权重 0,0,1,0 */
		.one {
			color: blue;
		}
  • ID 选择器 , 权重 0,1,0,0 ;
/* 3. ID 选择器 权重 0,1,0,0 */
		#two {
			color: green;
		}
  • 行内样式表 , 权重 1,0,0,0 ;
/* 4. 行内样式表 权重 1,0,0,0 */
	<div class="one" id="two" style="color: purple;"> 选择器权重 </div>
  • 任何选择器中 样式后 添加 !important 权重会被提升为无穷大 , 即使在最低级的 标签选择器样式后添加 !important , 其样式的权重也会被强行提高到最高级 , 权重无穷大 ;
/* 5. 任何选择器中 样式后 添加 !important 权重最高 */
		div {
			color: pink!important;
		}



5、后代选择器权重计算



div p span 选择器权重计算 :

这 3 个选择器 是 三个 基础选择器 标签选择器 组合而成的 后代选择器 ;

该选择器设置的是span 标签 样式 ;

标签选择器 的 权重为 0,0,0,1 ;

3 个 标签选择器 的权重 叠加为 : 0,0,0,1 + 0,0,0,1 + 0,0,0,1 = 0,0,0,3 ;

因此 最终的 div p span 选择器 的 权重为 0,0,0,3 ;



6、后代选择器权重计算二



.nav p span 选择器权重计算 :

该选择器 是 后代选择器 , 由 1 个 类选择器 , 2 个 标签选择器 组合而成的 ;

该选择器是 设置 .nav 类标签 下的 span 标签 样式 ;

类选择器 的 权重为 0,0,1,0 ;

标签选择器 的 权重为 0,0,0,1 ;

1 个 类选择器 + 2 个 标签选择器 组合后的 权重为 : 0,0,1,0 + 0,0,0,1 + 0,0,0,1 = 0,0,1,2 ;

最终的权重 为 0,0,1,2 ;



7、链接伪类选择器权重计算



a:hover 选择器权重计算 :

该选择器 是 链接伪类选择器 , 由 1 个 链接选择器 , 1 个 伪类选择器 组合而成的 ;

该选择器是 设置 鼠标 经过 标签 后 的 样式 ;

伪类选择器 的 权重为 0,0,1,0 ;

标签选择器 的 权重为 0,0,0,1 ;

1 个 伪类选择器 + 1 个 标签选择器 组合后的 权重为 : 0,0,1,0 + 0,0,0,1 = 0,0,1,1 ;

最终的权重 为 0,0,1,1 ;



8、判定标签样式



基础选择器 权重 :

CSS 选择器

选择器优先级 - 权重计算

继承父标签的样式 , * 通配符选择器

0,0,0,0

标签选择器

0,0,0,1

类选择器,链接伪类选择器

0,0,1,0

ID 选择器

0,1,0,0

标签的行内样式 style 属性

1,0,0,0

样式后添加 !important

权重无穷大


判定标签样式的时候 , 首先看标签有没有被选出来 ,

  • 如果被选出来 , 则看哪个选择器权值大 , 就应用该选择器的样式 ;
  • 如果没有被选出来 , 则权重为 0 ;