程序员Feri一名12年+的程序员,做过开发带过团队创过业,擅长嵌入式、鸿蒙、人工智能、Java等,专注于程序员成长那点儿事,希望在成长的路上有我相伴!君志所向,一往无前!


一、CSS选择器

CSS选择器是网页样式控制的核心工具,通过精准匹配HTML元素实现视觉呈现的精细化管理。根据W3C规范和实际开发场景,选择器可分为以下六大类:

1. 基础选择器
  • 标签选择器

p { color: red; } 直接选取HTML标签元素,常用于基础样式重置

  • 类选择器

.highlight { background: yellow; } 通过class属性匹配元素,支持复用与组合

  • ID选择器

#header { height: 80px; } 唯一标识元素,优先级最高但应避免滥用

  • 通配符选择器

* { margin: 0; } 匹配所有元素,性能敏感场景需谨慎使用

2. 层次选择器
  • 后代选择器nav a 选取所有嵌套层级的锚点元素

  • 子选择器ul > li 仅匹配直接子元素,减少样式污染

  • 相邻兄弟选择器h2 + p 选取紧接在h2后的同级段落

  • 通用兄弟选择器h2 ~ div 匹配h2之后所有同级的div元素

3. 属性选择器
  • 存在性匹配[disabled] 选择具有disabled属性的元素

  • 精确值匹配[type="email"] 常用于表单元素精准定位

  • 正则匹配

  • ^=(开头匹配)a[href^="https"]

  • $=(结尾匹配)a[href$=".pdf"]

  • *=(包含匹配)[class*="btn"]

4. 伪类选择器
  • 状态伪类

  • :hover 鼠标悬停状态

  • :focus 输入聚焦状态

  • :active 激活状态

  • 结构伪类

  • :nth-child(2n+1) 奇数行样式

  • :first-of-type 匹配同类型首个元素

  • :has(.error) 父元素包含错误类(CSS4新特性)

5. 伪元素选择器
  • ::before 在元素前插入内容

  • ::after 创建装饰性元素

  • first-letter` 首字母特效

6. 组合选择器
  • 并集选择器h1, h2, .title 批量设置相同样式

  • 交集选择器button.primary 复合条件精准定位


二、优先级权值计算模型

选择器优先级遵循权值累加原则:

  1. 行内样式:权值1000(<div style="...">

  2. ID选择器:每个ID计100分(#main

  3. 类/属性/伪类:每项计10分(.btn:hover

  4. 标签/伪元素:每项计1分(div::before

  5. 通配符/继承样式:0分

示例:
#nav li.active > a:hover 的权值为:
100(ID) + 1(li) + 10(.active) + 1(a) + 10(:hover) = 122


三、开发最佳实践

1. 性能优化策略

• 避免超过3级的选择器嵌套(如.nav > ul > li > a

• 优先使用类选择器替代属性选择器(.btn-primary vs [type="submit"]

• 复杂选择器添加/*!purgecss ignore */注释避免被CSS清理工具误删

2. 可维护性规范

• BEM命名规则:.block__element--modifier

• 禁止ID选择器用于样式定义(仅限JS交互)

• 链接伪类顺序遵循LVHFA原则(:link → :visited → :hover → :focus → :active

3. CSS特性应用
/* CSS4级选择器 */
.card:has(img) { border: 2px solid; }  /* 包含图片的卡片 */
:is(h1, h2, h3) { font-family: serif; } /* 批量设置标题样式 */

四、浏览器兼容解决方案

针对老旧浏览器(如IE11)提供渐进增强方案:

/* 现代浏览器支持的网格布局 */
@supports (display: grid) {
  .container { display: grid; }
}

/* 传统浏览器备用方案 */
.container {
  display: flex; /* 兼容方案 */
  @supports not (display: grid) {
    width: 100%;
  }
}

五、综合应用案例

多条件筛选组件样式

/* 筛选容器 */
.filter-group:has([data-active]) {
  border-color: #4F46E5;
}

/* 激活状态的选项 */
.filter-item[data-active="true"] {
  background: rgba(79,70,229,0.1);
  &::after {
    content: "✓";
    color: #4F46E5;
  }
}

/* 移动端适配 */
@media (max-width: 640px) {
  .filter-group > .item:nth-child(2n) {
    margin-right: 0;
  }
}

通过系统掌握选择器体系,开发者能构建出既符合视觉设计要求,又具备高性能表现的样式系统。

好啦,就到这里吧,其实有没有发现,很多知识点重新再使用的时候,去深挖一下,就会有不同的收获!

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐