CSS语法与选择器

掌握CSS选择器的类型和使用方法

CSS选择器类型

CSS选择器用于选择要应用样式的HTML元素。以下是常用的选择器类型:

1. 元素选择器

根据元素名称选择元素:

CSS
p {
    color: blue;
}

2. 类选择器

根据class属性选择元素:

CSS
.highlight {
    background-color: yellow;
}
HTML
<p class="highlight">这个段落有黄色背景</p>

3. ID选择器

根据id属性选择元素:

CSS
#header {
    font-size: 24px;
}
HTML
<h1 id="header">网站标题</h1>
注意: ID选择器具有较高的特异性,且一个ID在文档中应该是唯一的。

4. 通用选择器

选择所有元素:

CSS
* {
    margin: 0;
    padding: 0;
}

5. 属性选择器

根据属性或属性值选择元素:

CSS
/* 选择所有带有title属性的元素 */
[title] {
    border: 1px solid gray;
}

/* 选择type属性值为"text"的input元素 */
input[type="text"] {
    background-color: #f0f0f0;
}

组合选择器

可以组合多个选择器来选择更具体的元素:

1. 后代选择器

选择指定元素内的所有后代元素:

CSS
div p {
    color: red;
}

2. 子元素选择器

选择指定元素的直接子元素:

CSS
div > p {
    color: blue;
}

3. 相邻兄弟选择器

选择紧接在另一元素后的元素:

CSS
h1 + p {
    font-weight: bold;
}

4. 通用兄弟选择器

选择所有在指定元素之后的同级元素:

CSS
h1 ~ p {
    color: green;
}

属性选择器详解

根据属性或属性值选择元素:

选择器 示例 描述
[attribute] [target] 选择带有target属性的所有元素
[attribute=value] [target=_blank] 选择target="_blank"的所有元素
[attribute~=value] [title~=flower] 选择title属性包含单词"flower"的所有元素
[attribute|=value] [lang|=en] 选择lang属性值以"en"开头的所有元素
[attribute^=value] a[href^="https"] 选择其href属性值以"https"开头的每个<a>元素
[attribute$=value] a[href$=".pdf"] 选择其href属性值以".pdf"结尾的每个<a>元素
[attribute*=value] a[href*="dangfa"] 选择其href属性值中包含"dangfa"的每个<a>元素

属性选择器示例

CSS
/* 选择所有外部链接 */
a[href^="http"] {
    color: blue;
}

/* 选择所有PDF链接 */
a[href$=".pdf"] {
    background-color: yellow;
}

/* 选择包含"dangfa"的链接 */
a[href*="dangfa"] {
    font-weight: bold;
}

选择器分组

可以对多个选择器应用相同的样式:

CSS
h1, h2, h3 {
    font-family: Arial, sans-serif;
    color: #333;
}

选择器分组的最佳实践

  • 将具有相同样式的选择器分组,减少代码重复
  • 保持选择器分组逻辑清晰,便于维护
  • 避免将不相关的选择器分组在一起

伪类选择器

伪类选择器用于选择元素的特定状态:

伪类 描述 示例
:hover 鼠标悬停时的状态 a:hover { color: red; }
:active 元素被激活时的状态 button:active { background: blue; }
:focus 元素获得焦点时的状态 input:focus { border-color: green; }
:visited 已访问的链接 a:visited { color: purple; }
:first-child 父元素的第一个子元素 li:first-child { font-weight: bold; }
:last-child 父元素的最后一个子元素 li:last-child { border-bottom: none; }
:nth-child(n) 父元素的第n个子元素 tr:nth-child(even) { background: #f2f2f2; }

伪元素选择器

伪元素选择器用于选择元素的特定部分:

伪元素 描述 示例
::before 在元素内容前插入内容 p::before { content: ">> "; }
::after 在元素内容后插入内容 p::after { content: " <<"; }
::first-letter 选择元素的第一个字母 p::first-letter { font-size: 2em; }
::first-line 选择元素的第一行 p::first-line { font-weight: bold; }
::selection 选择用户选中的文本 ::selection { background: yellow; }

伪元素示例

CSS
/* 在链接前添加图标 */
a.external::before {
    content: url(external.png);
    margin-right: 5px;
}

/* 设置段落首字母样式 */
p::first-letter {
    font-size: 2em;
    font-weight: bold;
    color: #82255E;
}

选择器特异性

当多个选择器应用于同一元素时,CSS使用特异性(specificity)来决定哪个规则优先:

特异性计算规则

特异性由四个值组成,从左到右重要性递减:

  • 内联样式:特异性值为 1,0,0,0
  • ID选择器:每个ID选择器增加 0,1,0,0
  • 类选择器、属性选择器、伪类:每个增加 0,0,1,0
  • 元素选择器、伪元素:每个增加 0,0,0,1

特异性示例

特异性计算
/* 特异性: 0,0,0,1 */
p { color: black; }

/* 特异性: 0,0,1,0 */
.intro { color: blue; }

/* 特异性: 0,0,1,1 */
p.intro { color: green; }

/* 特异性: 0,1,0,0 */
#header { color: red; }

/* 特异性: 0,0,2,1 */
div.content p.highlight { color: purple; }
提示: 为了保持代码的可维护性,尽量使用较低特异性的选择器,避免过度使用ID选择器和!important声明。

选择器交互演示

点击下面的按钮来查看不同选择器如何匹配元素,体验CSS选择器的强大功能:

基础选择器

组合选择器

属性选择器

伪类选择器

当前选择器:
匹配元素: 0

主标题

这是一个普通段落,包含一个示例链接

这是一个高亮段落,位于容器内。

这是容器内的第二个段落。

这是一个span元素

嵌套div中的段落

副标题

另一个段落内容。

特殊高亮段落

  • 列表项 1
  • 高亮列表项
  • 列表项 3
  • 列表项 4

最后一个段落,包含高亮文本

选择器说明

点击上方按钮查看不同选择器的效果。选择器用于精确选择HTML元素并应用样式。