CSS选择器以及优先级

CSS选择器有哪些?优先级?

选择器

CSS选择器是CSS规则的第一部分。是元素和其他部分组合起来告诉浏览器哪个HTML元素应当是被选为应用规则中的CSS属性值的方式。
选择器所选择的元素,叫做“选择器的对象”
这是个部分html:

<div id="box">
    <div class="box1">
        <p class="box1_1">
        </p >
        <p class="box1_2">
        </p >
    </div>
    <div class="box2"></div>
    <div class="box3"></div>
</div>

基本选择器

1.ID选择器:选择具有特定ID的元素。ID选择器以井号(#)开头。

#box {
    border: 2px solid black;
}

会选择具有id="box"的元素并为它添加黑色边框。
2. 类选择器:选择具有特定类名的元素。类选择器以点号(.)开头。

.box1 {
    background-color: blue;
}

会选择所有具有类名box1的元素并设置其背景颜色为蓝色。
3. 标签选择器: 选择所有特定标签的元素。

 p {
    color: red;
}

会选择所有<p>元素并将文本颜色设置为红色。

组合选择器

  1. 后代选择器:选择指定元素内部的所有子元素,不论其层级深度。
.box1 p {
    font-size: 16px;
}

会选择所有class="box1"元素中的<p>元素,并设置字体大小为16px。
2.子元素选择器(Child Selector) 选择直接子元素。

.box1 > p {
    color: green;
}

会选择class="box1"下的直接<p>子元素,并将其文字颜色设置为绿色。
3.相邻兄弟选择器: 选择紧跟在特定元素后的兄弟元素。

.box1_1 + .box1_2 {
    background-color: yellow;
}

会选择紧接在class="box1_1"后的class="box1_2"元素,并将其背景色设置为黄色。
4.通用兄弟选择器:选择所有兄弟元素,不限于紧接着的兄弟元素。

.box1_1 ~ .box2 {
    border: 2px dashed purple;
}

会选择class="box1_1"元素后的所有兄弟元素中具有class="box2"的元素,并设置紫色虚线边框。

属性选择器

1.选择具有特定属性的元素

div[class] {
    background-color: lightgray;
}

会选择所有具有class属性的<div>元素,并将其背景颜色设置为浅灰色。

2.选择具有特定属性值的元素

div[class="box1"] {
    padding: 10px;
}

会选择class="box1"的

元素,并为它添加10px的内边距。

3.选择属性值以某个值开头的元素

div[class^="box"] {  
	margin: 20px;
}

会选择class属性值以box开头的所有

元素,并为它们添加20px的外边距。

4.选择属性值包含某个值的元素

div[class*="box"] {
    border: 1px solid black;
}

会选择所有class属性值中包含box的<div>元素,并为它们添加黑色边框。

伪类选择器

  1. :hover(悬停) 选择用户将鼠标悬停在元素上时的样式。
.box1:hover {
    background-color: lightblue;
}

会在用户将鼠标悬停在class="box1"元素上时,将其背景颜色更改为浅蓝色。

  1. :first-child(第一个子元素) 选择作为父元素第一个子元素的元素。
.box1 p:first-child {
    color: orange;
}

会选择class="box1"下的第一个

子元素,并将其文字颜色设置为橙色。

  1. :last-child(最后一个子元素) 选择作为父元素最后一个子元素的元素。
.box1 p:last-child {
    color: purple;
}

会选择class="box1"下的最后一个<p>子元素,并将其文字颜色设置为紫色。

  1. :nth-child()(第n个子元素) 选择特定位置的子元素。
.box1 p:nth-child(2) {
    font-weight: bold;
}

会选择class="box1"下的第二个<p>子元素,并将其文字加粗。

伪元素选择器

  1. ::before(在元素前添加内容) 允许在元素的内容之前插入内容。
.box2::before {
    content: "Before box2";
    color: red;
}

会在class="box2"元素的内容之前插入文本"Before box2"并将其文字颜色设置为红色。

  1. ::after(在元素后添加内容) 允许在元素的内容之后插入内容。
.box2::after {
    content: "After box2";
    color: blue;
}

会在class="box2"元素的内容之后插入文本"After box2"并将其文字颜色设置为蓝色。

这里解释一下伪类和伪元素选择器:
伪类选择器用于选择元素的特定状态或位置,它们描述了元素的外部状态或生命周期,例如元素在用户交互时的状态。
伪元素选择器用于选择并样式化元素的某个部分或某些特定内容(例如,元素的首字母、首行,或者在元素前后插入内容等)。

优先级

优先级(Specificity)是 CSS 中用来决定样式应用顺序的重要规则。CSS 选择器的优先级决定了在多个样式冲突时,哪一个样式会被应用到元素上。优先级通过计算选择器中不同类型的元素来决定。

优先级计算规则

在 CSS 中,优先级的计算基于选择器中的不同类型的组件。这些组件的优先级值被分为四个部分:A、B、C、D。每个部分代表一种类型的选择器或修饰符,根据出现的次数来决定优先级的权重。

  • A:内联样式的权重
    如果有内联样式(即元素的 style 属性),A = 1,否则 A = 0。
  • B:ID选择器的权重
    如果选择器中有 ID 选择器(即以 # 开头的选择器),B 的值等于该 ID 选择器出现的次数。
  • C:类选择器、属性选择器和伪类选择器的权重
    C 的值等于所有类选择器(以 . 开头)、属性选择器(如 [type=“text”])和伪类选择器(如 :hover)出现的总次数。
  • D:标签选择器和伪元素的权重
    D 的值等于标签选择器(如 div、a)和伪元素选择器(如 ::before、::after)出现的总次数。

优先级计算示例

考虑这个选择器:#nav-global > ul > li > a.nav-link

根据优先级的计算规则,我们可以依次计算 A、B、C、D 的值。

  1. 计算 A(内联样式)
    该选择器没有内联样式,所以 A = 0。
  2. 计算 B(ID选择器)
    选择器中包含了 #nav-global,这是一个 ID 选择器。
    因此,B = 1(ID选择器出现了一次)。
  3. 计算 C(类选择器、属性选择器、伪类选择器)
    选择器中包含了 .nav-link,这是一个类选择器。
    因此,C = 1(类选择器出现了一次)。
    这里没有属性选择器和伪类选择器,所以它们的值是 0。
  4. 计算 D(标签选择器和伪元素)
    选择器中有 ul、li、a,这些都是标签选择器。
    因此,D = 3(标签选择器分别出现了 3 次)。
    这里没有伪元素,所以伪元素的值是 0。

最终优先级:
根据上述计算,#nav-global > ul > li > a.nav-link 的优先级是:
A = 0
B = 1
C = 1
D = 3
简写为: (0, 1, 1, 3)

比较规则

当我们有多个选择器时,优先级决定了哪个选择器的样式会被应用。如果多个选择器有相同的优先级,那么根据以下规则来比较:

从左往右依次比较:

  • 首先比较 A 的值,优先级更高的样式会被应用。

  • 如果 A 不相等,优先级更高的选择器会优先应用样式。 如果 A 相等:接着比较 B 的值。如果 B 不相等,则 B较大的选择器的样式会优先应用。

  • 如果 A 和 B 都相等:接着比较 C 的值,优先级更高的样式会应用。

  • 如果 A、B 和 C 都相等:接着比较 D 的值,优先级更高的样式会应用。

  • 如果 A、B、C 和 D 都相等:最后,如果四个值完全相同,那么后出现的样式会覆盖前面的样式。换句话说,样式是由应用顺序决定的。

举个例子:
假设有以下两个选择器:

#header .menu a {
    color: blue;
}
a {
    color: red;
}

#header .menu a 的优先级是 (0, 1, 1, 2):
A = 0(没有内联样式)
B = 1(有 1 个 ID 选择器 #header)
C = 1(有 1 个类选择器 .menu)
D = 2(有 2 个标签选择器 a)

a 的优先级是 (0, 0, 0, 1):
A = 0(没有内联样式)
B = 0(没有 ID 选择器)
C = 0(没有类选择器、属性选择器、伪类选择器)
D = 1(有 1 个标签选择器 a)

比较优先级:

  • 比较 A,两个选择器都相等,继续比较。
  • 比较 B,第一个选择器的 B = 1,第二个选择器的 B = 0,所以第一个选择器的优先级更高。

因此,#header .menu a 选择器的样式(color: blue)会覆盖 a 选择器的样式(color: red)

经过上面的优先级计算规则,我们知道内联样式的优先级最高,如果外部样式需要覆盖内联样式,就需要使用!important

CSS选择器是用于选择HTML文档中的元素的模式。常见的CSS选择器包括: 1. 元素选择器:通过元素的标签名选择元素,如`p`选择所有的段落元素。 2. 类选择器:通过元素的class属性选择元素,使用`.`符号,如`.container`选择class为"container"的元素。 3. ID选择器:通过元素的id属性选择元素,使用`#`符号,如`#header`选择id为"header"的元素。 4. 属性选择器:通过元素的属性选择元素,如`[type="text"]`选择所有type属性值为"text"的元素。 5. 后代选择器:通过元素的后代关系选择元素,使用空格分隔,如`.container p`选择class为"container"的元素内部的所有段落元素。 6. 子元素选择器:通过元素的直接子元素关系选择元素,使用`>`符号,如`.container > p`选择class为"container"的元素下的直接子元素中的所有段落元素。 7. 相邻兄弟选择器:通过元素的相邻兄弟关系选择元素,使用`+`符号,如`h2 + p`选择紧接在h2元素后面的p元素。 8. 伪类选择器:通过元素的状态或位置选择元素,如`:hover`选择鼠标悬停的元素。 CSS选择器优先级表示了当多个选择器同时应用于同一个元素时,哪个选择器的样式规则会被应用。通常,优先级的计算规则如下: 1. ID选择器优先级最高,为100。 2. 类选择器、属性选择器和伪类选择器优先级为10。 3. 元素选择器和伪元素选择器优先级为1。 4. 通配符选择器和继承的样式没有优先级,其优先级为0。 如果多个选择器具有相同的优先级,则后面出现的选择器会覆盖前面出现的选择器。如果多个选择器具有不同的优先级,则优先级高的选择器的样式规则会被应用。 需要注意的是,使用`!important`声明可以提升样式规则的优先级,但是过度使用会导致样式难以维护和调试,应尽量避免滥用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值