选择器
选择器的种类
选择器的优先级与计算
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