截至目前最新的选择器以及权重

本文详细介绍了CSS中的各种选择器,包括标签选择器、类选择器、ID选择器、行内样式、复合选择器、伪类和伪元素等,以及它们的权重计算和使用方法。通过实例解析,帮助开发者更好地理解和应用CSS选择器,提升代码效率。

周五下了班,来把css中所有的选择器给大家做个细致的大集合,满满干货,包含了目前所有的选择器以及其权重和具体使用方法。建议收藏,在开发中使用起来便捷度也能拉满,废话不多说。直接开始:

首先为了方便初学的小伙伴记忆,先灌输一下基础概念。

各个选择器的权重:

标签选择器 0 0 0 1 简单记忆 1

类选择器 0 0 1 0 简单记忆10

id选择器 0 1 0 0 简单记忆100

行内样式 1 0 0 0 简单记忆1000

!important如果不是继承,权重最高 天下第一

复合选择器权重会叠加: div p 后代选择器: 0001 + 0001 = 0002

不会有进位的情况,比如 0,0,0, 10

优先级相同,会执行层叠性,写在最后面的会生效.

权重由大到小分别为以下:

注:权重的计算中,没有进位!!!

1.!importent权重为无穷大。

注:!important不能提高继承的优先级 只要是继承 优先级最低.

div {

color: pink!important;

}

2.行内css样式 权重为1000(直接写在html标签内的样式属性)

行内样式写法:

  • 任意标签【容器级别标签和文本级别标签】都可以添加行内样式
  • 需要在双标签、单标签的开始标签位置书写
  • 在开始标签名字后面,别忘记有空格,给这个标签添加一个style(英文:样式,风格)属性
  • style属性值得写法:样式属性名字 + :+ 样式属性的属性值 + ;
  • 别忘记在样式属性值后面加一个分号,代表当前这一个样式设置完毕,进行下一个样式属性
  • 一个标签可以同时设置多个样式,多个样式之间用分号隔开

  示例如下: 

 <div style="color: red;"></div>

3.id选择器 权重为100

注:id选择器就像我们的身份证号码一样,只能有一个。id定义,#调用!

例:

为 id="liliwuang" 的元素设置样式:

#liliwuang
{ 
background-color:yellow;
}

4.类选择器 权重为10 

注:类选择器也叫class选择器,就像我们的名字一样,可以有很多个,并且多个标签可以用同一个类名。class定义,.调用

例:

为 class="liliwuang" 的元素设置样式:

.liliwuang
{ 
background-color:yellow;
}

5.标签选择器: 权重为1

直接用标签调用

例:

为h2标签设置样式:

h2{ background-color:yellow; }

复合选择器:权重会叠加

1.后代选择器

选择器1 选择器2{
    属性:属性值;
    ...
}
后代选择器可以选中子孙后代
选择器与选择器之间用空格隔开
示例:
.box a{color:red;}

2.子代选择器(亲儿子选择器)

选择器1> 选择器2{
    属性:属性值;
    ...
}
子代选择器只能选中亲儿子
选择器与选择器之间用大于号隔开
示例:
.box>strong{color:pink;}

3.并集选择器

选择器1, 选择器2{
    属性:属性值;
    ...
}
选择器与选择器之间用逗号隔开;
并集选择器每组选择器之间一行写;
最后一个选择器的后面不要加逗号;
并集选择器可以是任意基础选择器和复合选择器的结合
后续把相同的样式进行书写在一起,减少代码的耦合性.
示例
 

div,
p,
span,
.box p{color:pink;}

4.交集选择器

选择器1选择器2{
    属性:属性值;
    ...
}
交集选择器可以理解为既又的原则
选择器与选择器之间不需要任何符号,紧挨着一起.
交集选择器如果有标签,必须把标签写在最前面
示例
 

div.box{
    color:green;
}

5.伪类选择器  自身的权重为10

选择器:hover{
    属性:属性值;
    ...
}
鼠标经过时候的样式

a:hover{}
div:hover{}
.box:hover{}


:的前面和后面不能有空格

6.伪元素选择器 自身权重为1

选择器::before/after{

content:"";(必须写content否则无效)

}

liliwuang::after{
content:"lili";
color:red;
}

7.结构伪类选择器 自身权重为10

很好用的一种选择器,可以免去取名字的烦恼

例:

<ul>

        <li>第1</li>

        <li>第2</li>

        <li>第3</li>

        <li>第4</li>

        <li>第5</li>

        <li>第6</li>

        <li>第7</li>

        <li>第8</li>

        <li>第9</li>

    </ul>

如果用常规选择器,选起来那叫一个麻烦,这时候用我们的结构伪类选择器就是一个很好的选择。

如果要选中其中第三个li可以这样操作:

ul li:nth-child(3){
color:red;
}

除此之外还有很多种拓展写法:

仅选中其中的34567项

 ul li:nth-child(n+3):not(:nth-child(n+8)) {
            color: red;
        }

写法还有很多拓展可以和我私信交流

nth-child和nth-child-type的区别:

同级中存在不同种类标签,则可以使用nth-child-type来区别选中。

我们可以这样理解nth-child-type:

先在同级里找到所有的标签类型,然后根据 n 进行匹配;

一般常用的选择器就总结到这了,下次给大家奉上css中后续的各种进阶的选择器。bye~

<think> 首先,用户的问题是:“我想了解CSS选择器权重的相关知识 请问CSS选择器权重详解”。根据系统级指令,我需要: - 所有行内数学表达式使用 $...$ 格式。 - 独立公式使用 $$...$$ 格式并单独成段。 - 使用中文回答。 - 生成相关问题。 - 在回答中引用的段落末尾自然地添加引用标识,如 [^1]。 用户提供了几个引用:[^1] 到 [^5],这些是关于CSS选择器权重计算的引用: - 引用[1]:提到元素选择器和群组选择器。 - 引用[2]:提到权重排序和计算。 - 引用[3]:给出权重计算示例和特殊规则。 - 引用[4]:列出选择器类型和权重计算规则。 - 引用[5]:讨论其他选择器权重范围。 用户的要求是“尽可能多的参考用户上一次的问题和你的回答”,但在这个对话中,这是第一个消息,所以没有上一次的问题。用户说“上述引用仅供参考”,所以我需要基于这些引用构建回答。 核心主题是CSS选择器权重的详解。 结构化回答: 1. **介绍CSS选择器权重**:解释权重的重要性,用于决定CSS规则的优先级。 2. **权重计算规则**:基于引用[4],详细说明不同选择器权重值: - 内联样式:权重为1000(如 style="color:red;") - ID选择器权重为0100(如 #id) - 类选择器、伪类、属性选择器权重为0010(如 .class, :hover, [attr]) - 元素选择器、伪元素选择器权重为0001(如 div, ::before) - 通配符、子选择器等:权重为0000(如 *, >) - 继承的样式没有权值。 权重通常表示为一个四位数字,如 (0,0,0,0),分别对应ID、类、元素的数量。 3. **权重计算示例**:基于引用[3],提供示例代码。 4. **特殊规则**:如群组选择器(逗号分隔的选择器)不增加权重,每个选择器独立计算。 5. **权重比较**:如何比较权重的大小?从左到右比较数字。 确保回答使用中文。 在引用内容时,自然地添加引用标识,例如,在阐述规则时引用[^4]。 生成相关问题:在回答结束时添加。 使用数学表达式:权重计算可以用数字表示,如 $1000$ 或 $(0,1,0,0)$。我应该用 $...$ 格式包裹它们。 例如: - 内联样式权重为 $1000$。 - ID选择器权重为 $0100$。 - 类选择器权重为 $0010$。 - 元素选择器权重为 $0001$。 独立公式:如果有必要,可以使用 $$...$$,但这里可能不需要复杂的公式。权重计算可以简单表示为数字。 现在,构建回答大纲: - **引言**:简述CSS选择器权重的作用。 - **权重计算规则**:详细列出不同选择器权重值,引用来源。 - **权重计算示例**:展示一些CSS选择器权重计算的例子。 - **权重比较**:解释如何比较权重。 - **特殊注意事项**:如群组选择器、重要性(!important)等。 - **总结**:重申重要性。 最后,生成相关问题。 引用标识:基于提供的引用,我会使用 [^1], [^2], [^3], [^4], [^5] 来标记来源。 例如: - 根据引用[^4],权重计算规则是... 确保回答真实可靠:基于提供的引用内容。 完整回答结构: 1. **CSS选择器权重概述** 2. **权重计算规则详解** 3. **权重计算示例** 4. **特殊规则和注意事项** 5. **相关问题** </think> ### CSS选择器权重详解 CSS选择器权重CSS中用于确定样式规则优先级的关键机制。当多个CSS规则应用到同一个元素时,浏览器通过计算选择器权重来决定哪个规则生效——权重更高的规则优先级更高。权重计算基于选择器的类型和数量,通常表示为一个四位数组 $(a,b,c,d)$,其中: - $a$ 代表ID选择器的数量 - $b$ 代表类选择器、伪类选择器和属性选择器的数量 - $c$ 代表元素选择器和伪元素选择器的数量 - $d$ 代表通配符、子选择器等的最小权重(通常为0) 权重比较时,从左到右逐位对比数字大小(如 $(0,1,0,0)$ > $(0,0,2,0)$)。下面我将基于引用内容详细解释权重计算规则、示例、特殊规则和注意事项。 #### 1. 权重计算规则 CSS选择器权重根据选择器类型划分等级,规则如下(权重值用四位数字表示): - **第一等:内联样式(权重 $1000$)** 直接在HTML元素中使用 `style` 属性定义的样式,如 `<div style="color:red;">`,其权重为 $(1,0,0,0)$ 或简单记为 $1000$ [^4]。 - **第二等:ID选择器权重 $0100$)** 如 `#header` ,权重为 $(0,1,0,0)$ 或 $0100$。每个ID选择器增加一个权重单位 [^2][^4]。 - **第三等:类选择器、伪类选择器和属性选择器权重 $0010$)** 包括 `.class`、`:hover`、`[type="text"]` 等,每个此类选择器权重为 $(0,0,1,0)$ 或 $0010$ [^4][^5]。 - **第四等:元素选择器和伪元素选择器权重 $0001$)** 如 `div`、`p`、`::before`,每个权重为 $(0,0,0,1)$ 或 $0001$ [^3][^4]。 - **最低权重:通配符、子选择器等(权重 $0000$)** 如 `*`、`>`、`+`,权重为 $(0,0,0,0)$,不影响优先级计算 [^4]。 - **继承样式**:无权重值,优先级最低 [^4]。 群组选择器(如 `selector1, selector2`)不会增加整体权重;浏览器单独计算每个选择器权重 [^1]。权重数字是累加的:例如,`.nav li` 包含一个类选择器和一个元素选择器权重为 $(0,1,1)$(简化为 $(0,0,1,0) + (0,0,0,1) = (0,1,1)$),但需注意权重比较时需对齐位数(如 $(0,1,1)$ 实际表示为 $(0,1,1,0)$)。 #### 2. 权重计算示例 以下CSS规则示例展示权重计算过程(权重值用 $(a,b,c,d)$ 格式表示): - **示例1:复杂选择器** ```css #header .nav li.active a:hover { color: red; /* 权重:(0,1,2,2) */ } ``` - 计算:ID选择器 `#header`($a=1$)、类选择器 `.nav` 和 `.active`($b=2$)、元素选择器 `li` 和 `a`($c=2$)、伪类 `:hover`($b$ 增加,已计入类选择器)。总权重为 $(1,2,2,0)$,但根据规则伪类计入 $b$,因此实际表示为 $(0,1,2,2)$ [^3]。 - **示例2:嵌套选择器** ```css div#main .content p:first-child { color: blue; /* 权重:(0,1,1,2) */ } ``` - 计算:ID选择器 `#main`($a=1$)、类选择器 `.content`($b=1$)、元素选择器 `div` 和 `p`($c=2$)、伪类 `:first-child`($b$ 增加)。总权重为 $(1,2,2,0)$,简化为 $(0,1,1,2)$ [^3]。 - **示例3:属性选择器** ```css p[type="text"] { font-weight: bold; /* 权重:(0,0,1,1) */ } ``` - 计算:属性选择器 `[type="text"]` 属于第三等($b=1$),元素选择器 `p` 属于第四等($c=1$),权重为 $(0,1,1,0)$ [^4][^5]。 这些示例说明:权重计算时,选择器的顺序不影响结果;浏览器只计数组合中的选择器类型数量。 #### 3. 特殊规则和注意事项 - **权重比较优先级**:从左到右比较 $(a,b,c,d)$ 的数值。例如 $(0,1,0,0)$ > $(0,0,3,0)$,因为 $b=1$ > $b=0$。如果权重相同,则后定义的规则覆盖先定义的(层叠规则) [^2][^4]。 - **!important 例外**:在样式后添加 `!important`(如 `color: red !important;`)会提升优先级到最高,覆盖所有其他规则,但其滥用可能导致维护问题 [^4]。 - **群组和组合选择器**:群组选择器(如 `h1, h2`)中的每个选择器独立计算权重;子选择器(如 `div > p`)权重为子选择器本身($0000$),不影响父元素权重 [^1][^5]。 - **继承和默认值**:继承的样式(如父元素的颜色)无权重,容易被显式规则覆盖;浏览器默认样式权重最低 [^4]。 - **属性选择器变体**:如 `[attr*="value"]`(包含选择器)或 `[attr$="value"]`(结尾选择器),均属于第三等(权重 $0010$) [^5]。 理解权重有助于避免CSS冲突:优先使用类选择器而非ID以减少权重复杂性,并测试规则覆盖情况。 #### 4. 相关问题 如果您想深入学习CSS选择器权重,以下是推荐的相关问题: 1. 如何避免CSS权重过高导致的维护问题? 2. CSS权重计算在响应式设计中有什么应用场景? 3. 如何使用浏览器开发者工具调试CSS权重冲突? 如果您有具体代码示例或进一步疑问,欢迎随时提问!
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值