Skip to content

CSS3选择器详解

CSS3介绍

CSS3在CSS2基础上,增强或新增了许多特性,弥补了CSS2的众多不足之处,使得Web开发变得更为高效和便捷。

CSS3的现状

  • 浏览器支持程度不够好,有些需要添加私有前缀
  • 移动端支持优于PC端
  • 不断改进中
  • 应用相对广泛

应对的策略:渐进增强

  • (1) 坚持渐进增强的原则:让低版本浏览器能正常访问页面,高版本的浏览器用户体验更好。【重要】

比如说,同样是一个头像,可能在低版本的浏览器中,头像方的;在高版本的浏览器中,头像是圆的。

  • (2) 考虑用户群体。
  • (3) 遵照产品的方案。

CSS3选择器

CSS3新增了许多强大的选择器,使我们能够更加精确地选择元素。

属性选择器

属性选择器可以根据元素的属性及属性值来选择元素。

css
/* 选择具有title属性的元素 */
[title] {
    color: red;
}

/* 选择title属性值为hello的元素 */
[title="hello"] {
    color: red;
}

/* 选择title属性值包含hello的元素 */
[title*="hello"] {
    color: red;
}

/* 选择title属性值以hello开头的元素 */
[title^="hello"] {
    color: red;
}

/* 选择title属性值以hello结尾的元素 */
[title$="hello"] {
    color: red;
}

结构伪类选择器

结构伪类选择器可以根据元素在文档中的结构关系来选择元素。

css
/* 选择第一个子元素 */
:first-child {
    color: red;
}

/* 选择最后一个子元素 */
:last-child {
    color: red;
}

/* 选择第n个子元素 */
:nth-child(n) {
    color: red;
}

/* 选择第n个类型为p的元素 */
p:nth-of-type(n) {
    color: red;
}

/* 选择奇数行 */
:nth-child(odd) {
    color: red;
}

/* 选择偶数行 */
:nth-child(even) {
    color: red;
}

目标伪类选择器

目标伪类选择器可以选择当前活动的目标元素。

css
/* 选择当前活动的目标元素 */
:target {
    color: red;
}

空伪类选择器

空伪类选择器可以选择没有子元素的元素。

css
/* 选择没有子元素的元素 */
:empty {
    color: red;
}

否定伪类选择器

否定伪类选择器可以选择不符合条件的元素。

css
/* 选择不是p元素的元素 */
:not(p) {
    color: red;
}

伪元素选择器

伪元素选择器可以创建一些不存在于文档树中的元素。

css
/* 在元素内容前插入内容 */
::before {
    content: "前缀";
    color: red;
}

/* 在元素内容后插入内容 */
::after {
    content: "后缀";
    color: red;
}

/* 选择元素的第一个字母 */
::first-letter {
    font-size: 20px;
    color: red;
}

/* 选择元素的第一行 */
::first-line {
    color: red;
}

/* 选择用户选中的文本 */
::selection {
    background-color: yellow;
    color: red;
}

CSS3选择器的优势

  1. 更精确的选择:CSS3选择器可以更精确地选择元素,减少对类和ID的依赖。
  2. 减少标签的数量:通过伪元素选择器,可以减少额外标签的使用。
  3. 提高开发效率:通过结构伪类选择器,可以减少重复的类名定义。

CSS3选择器的兼容性

虽然CSS3选择器在现代浏览器中得到了很好的支持,但在一些旧版本的浏览器中可能会有兼容性问题。因此,在使用CSS3选择器时,需要考虑目标用户的浏览器分布情况。

如果需要兼容旧版本的浏览器,可以采用渐进增强的策略,先使用基本的CSS2选择器实现基本功能,再使用CSS3选择器增强用户体验。

实际应用示例

示例1:表格隔行变色

css
/* 奇数行背景色 */
tr:nth-child(odd) {
    background-color: #f2f2f2;
}

/* 偶数行背景色 */
tr:nth-child(even) {
    background-color: #ffffff;
}

示例2:表单必填项标记

css
/* 必填项后添加红色星号 */
input[required]::after {
    content: "*";
    color: red;
}

示例3:链接图标

css
/* 给外部链接添加图标 */
a[href^="http"]::after {
    content: "🔗";
    margin-left: 5px;
}

/* 给PDF链接添加图标 */
a[href$=".pdf"]::after {
    content: "📄";
    margin-left: 5px;
}

总结

CSS3选择器极大地增强了CSS的选择能力,使我们能够更加精确地选择元素,减少对类和ID的依赖,提高开发效率。

在实际开发中,我们应该根据项目需求和目标用户的浏览器分布情况,合理使用CSS3选择器,采用渐进增强的策略,确保在各种浏览器中都能提供良好的用户体验。

版权声明