一文彻底搞清楚CSS中的选择器

程序员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;
  }
}

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

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

Python面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它将数据和操作封装在对象中,通过对象之间的交互实现程序的设计和开发。下面是一些关键概念,帮助你更好地理解Python面向对象编程。 1. 类(Class):类是对象的蓝图或模板,描述了对象的属性和行为。它定义了对象的特征和方法。例如,我们可以定义一个名为"Car"的类来表示汽车,其中包含属性(如颜色、型号)和方法(如加速、刹车)。 2. 对象(Object):对象是类的实例,是具体的实体。通过实例化类,我们可以创建一个对象。例如,我们可以创建一个名为"my_car"的对象,它是基于"Car"类的实例。 3. 属性(Attribute):属性是对象的特征,用于描述对象的状态。每个对象都可以具有一组属性。例如,"Car"类的属性可以包括颜色、型号等。 4. 方法(Method):方法是对象的行为,用于定义对象的操作。每个对象都可以具有一组方法。例如,"Car"类的方法可以包括加速、刹车等。 5. 继承(Inheritance):继承是一种机制,允许我们创建一个新类(称为子类),从现有类(称为父类)继承属性和方法。子类可以扩展或修改父类的功能。继承可以实现代码重用和层次化设计。 6. 多态(Polymorphism):多态是一种特性,允许不同类的对象对同一方法做出不同的响应。多态提高了代码的灵活性和可扩展性。 7. 封装(Encapsulation):封装是一种将数据和操作封装在对象中的机制,隐藏了对象的内部实现细节,只暴露必要的接口给外部使用。这样可以保护数据的安全性,提供了更好的模块化和代码复用性。 通过理解这些概念,你可以更好地掌握Python面向对象编程。在实践中,你可以使用类来创建对象,操作对象的属性和调用对象的方法,通过继承和多态实现代码的灵活性和可扩展性,通过封装保护数据的安全性和提高代码的可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值