选择器

  • 选择器的种类

  • 选择器的优先级与计算


CSS 选择器规定了 CSS 规则会被应用到哪些元素上。

  • id选择器(#box),选择id为box的元素

  • 类选择器(.one),选择类名为one的所有元素

  • 标签选择器(div),选择标签为div的所有元素

  • 后代选择器(#box div),选择id为box元素内部所有的div元素

  • 子选择器(.one>one_1),选择父元素为.one的所有.one_1的元素

  • 相邻同胞选择器(.one+.two),选择紧接在.one之后的所有.two元素

  • 群组选择器(div,p),选择div、p的所有元素

还有一些使用频率相对没那么多的选择器:

  • 伪类选择器

:link :选择未被访问的链接
:visited:选取已被访问的链接
:active:选择活动链接
:hover :鼠标指针浮动在上面的元素
:focus :选择具有焦点的
:first-child:父元素的首个子元素
:nth-child(i): 在这里只有满足以下两个条件才会执行:1.元素的类名是 :前的类名。2.元素是其父元素的第i个子元素。
  • 伪元素选择器(:是css2语法,::是css3语法,用于与伪类区分)

:first-letter :用于选取指定选择器的首字母
:first-line :选取指定选择器的首行
:before : 选择器在被选元素的内容前面插入内容
:after : 选择器在被选元素的内容后面插入内容
  • 属性选择器

[attribute] 选择带有attribute属性的元素
[attribute=value] 选择所有使用attribute=value的元素
[attribute~=value] 选择attribute属性包含value的元素
[attribute|=value]:选择attribute属性以value开头的元素

伪元素选择器示例:

  • 使用 ::before 插入内容:

p::before {
  content: ">> ";
}

上述示例将在所有 <p> 元素的内容前插入 >>

  • 使用 ::first-line 修改首行样式:

p::first-line {
  font-weight: bold;
  color: blue;
}

上述示例将使所有 <p> 元素的首行文本加粗并设置为蓝色。

  • 使用 ::first-letter 修改首字母样式:

p::first-letter {
  font-size: 2em;
  color: red;
}

上述示例将使所有 <p> 元素的首字母字体大小为 2 倍,并设置为红色。

  • 使用 :nth-child(2) 修改父元素的第二个子元素:

<div>
    <div class="pip">1</div>
    <div class="pip">2</div>
    <div class="pip">3</div>
</div>


.pip:nth-child(2) {
    align-self: flex-end;
}

在这个例子中,.pip:nth-child(2) 会选择包含文本 "2" 的 <div> 元素。
注:在这里只有满足以下两个条件才会执行:
1.元素的类名是 pip。

2.元素是其父元素的第二个子元素。

直接子元素 >

> 是子选择器(child selector)的一种。它用于选择指定元素的直接子元素。

<div class="rtl">
  <p>This paragraph is selected.</p> <!-- 直接作为 .rtl 元素的子元素 -->
  <div>
    <p>This paragraph is not selected.</p> <!-- 不是 .rtl 元素的直接子元素 -->
  </div>
</div>

在上述示例中,只有第一个 <p> 元素会被选择,因为它是直接作为具有 .rtl 类的 <div> 元素的子元素。

所以,> 选择器用于选择特定元素的直接子元素,而不会匹配更深层次的子元素。


选择器与优先级

根据优先级排序

内联样式 > id 选择器 > 类、伪类选择器、属性选择器 > 元素、伪元素选择器 > 后代、子代、兄弟选择器

当多种样式要同时作用于同一元素时,最终的显示效果就要由优先级来决定,用 A、B、C、D 四个默认值都是0的值来依次代表 内联样式、id选择器、类选择器伪类选择器属性选择器、元素选择器伪元素选择器。

  • 如果存在内联样式, 则 A ++,

  • 如果存在id选择器,则 B++

  • 每出现一个类选择器、伪类选择器或者属性选择器,C++执行一次

  • 每出现一个元素选择器或者伪元素选择器,D++执行一次

由上面的方法,每组样式都会算出一组结果为 (A,B,C,D) 的值,将各组结果依次对比:

  • 先比较A,如果双方A值不相等,就取较大者的样式;如果双方A值相等,就比较B,若2B不等则取较大者的样式,若等则比较C ...

  • 如果ABCD四个值都比较完了,且四个值都对应相等,则会发生样式覆盖,表现效果为后者样式会覆盖前者,最终浏览器显示的效果为最后定义的一个样式。

  • 如果外部样式需要覆盖内联样式,就需要使用!important

Last updated