css的选择器
CSS(层叠样式表)选择器用于选择 HTML 元素并应用样式。以下是一些基本的 CSS 选择器及其执行优先级(即选择器的特异性和层叠顺序)。
基本选择器
-
通用选择器(Universal Selector):
- 选择所有元素。
- 语法:
*
* {margin: 0;padding: 0; }
-
类型选择器(Type Selector):
- 选择特定类型的元素。
- 语法:
element
p {color: blue; }
-
类选择器(Class Selector):
- 选择具有特定类的元素,类名以
.
开头。 - 语法:
.classname
.highlight {background-color: yellow; }
- 选择具有特定类的元素,类名以
-
ID 选择器(ID Selector):
- 选择具有特定 ID 的元素,ID 以
#
开头。 - 语法:
#idname
#header {font-size: 24px; }
- 选择具有特定 ID 的元素,ID 以
-
属性选择器(Attribute Selector):
- 选择具有特定属性的元素。
- 语法:
[attribute]
或[attribute="value"]
input[type="text"] {border: 1px solid #ccc; }
-
伪类选择器(Pseudo-class Selector):
- 选择处于特定状态的元素。
- 语法:
element:pseudo-class
- :hover:当鼠标悬停在元素上时应用样式。
:focus:当元素获得焦点时应用样式。
:active:当元素被激活(如被点击)时应用样式。
:nth-child(n):选择父元素的第 n 个子元素。
:first-child:选择父元素的第一个子元素。
:last-child:选择父元素的最后一个子元素。
a:hover {color: red; }
-
伪元素选择器(Pseudo-element Selector):
- 选择元素的特定部分。
- 语法:
element::pseudo-element
- ::before:在元素内容之前插入内容。
::after:在元素内容之后插入内容。
::first-line:选择元素的第一行文本。
::first-letter:选择元素的第一个字母。
p::first-line {font-weight: bold; }
-
组合选择器(Combinator Selector):
- 选择与其他元素关系的元素。
- 语法:
- 后代选择器:
ancestor descendant
- 子选择器:
parent > child
- 相邻兄弟选择器:
prev + next
- 一般兄弟选择器:
prev ~ siblings
- 后代选择器:
div p {color: green; /* 后代选择器 */ }
执行先后顺序(特异性和层叠)
CSS 的选择器执行顺序由特异性(Specificity)和层叠(Cascade)规则决定。以下是特异性的计算规则:
-
内联样式(Inline styles):
- 直接在元素的
style
属性中定义的样式,特异性最高。 - 特异性:1000
- 直接在元素的
-
ID 选择器:
- 每个 ID 选择器的特异性为 100。
- 特异性:100
-
类、伪类和属性选择器:
- 每个类、伪类或属性选择器的特异性为 10。
- 特异性:10
-
类型选择器和伪元素选择器:
- 每个类型选择器或伪元素选择器的特异性为 1。
- 特异性:1
-
通用选择器:
- 通用选择器的特异性为 0。
- 特异性:0
层叠规则
当多个选择器匹配同一元素时,CSS 将根据以下规则决定应用哪个样式:
- 特异性:特异性高的选择器优先级更高。
- 来源顺序:如果特异性相同,后定义的样式将覆盖先前定义的样式。
- 重要性:使用
!important
声明的样式将覆盖其他样式(即使它们的特异性更高)。
示例
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>CSS Selectors</title><style>/* 通用选择器 */* {margin: 0;padding: 0;}/* 类型选择器 */p {color: blue;}/* 类选择器 */.highlight {color: yellow;}/* ID 选择器 */#main {color: red;}/* 内联样式 */<p style="color: green;">This is a paragraph.</p></style>
</head>
<body><div id="main"><p class="highlight">This is a highlighted paragraph.</p><p>This is a normal paragraph.</p></div>
</body>
</html>
在这个示例中,特异性和层叠规则将决定每个段落的颜色。内联样式的段落将显示为绿色,因为它具有最高的特异性。