当前位置: 首页 > news >正文

CSS系列(1)-- 选择器体系详解

前端技术探索系列:CSS 选择器体系详解 🎯

致读者:探索 CSS 选择器的奥秘 👋

前端开发者们,

今天我们将深入探讨 CSS 选择器体系,这是构建优雅样式表的基础。让我们一起学习如何精确地选中并控制网页中的任何元素。

基础选择器详解 🚀

元素选择器

/* 基础元素选择器 */
p {color: #333;line-height: 1.6;
}/* 通配符选择器 */
* {margin: 0;padding: 0;box-sizing: border-box;
}/* ID选择器 */
#header {background: #f5f5f5;position: sticky;top: 0;
}/* 类选择器 */
.card {border: 1px solid #ddd;border-radius: 4px;padding: 16px;
}

组合选择器

/* 后代选择器 */
.article p {margin-bottom: 1em;
}/* 子选择器 */
.nav > li {display: inline-block;margin: 0 10px;
}/* 相邻兄弟选择器 */
h2 + p {font-size: 1.1em;color: #666;
}/* 通用兄弟选择器 */
h2 ~ p {line-height: 1.8;
}

属性选择器

/* 精确匹配 */
input[type="text"] {border: 1px solid #ccc;padding: 8px;
}/* 部分匹配 */
[class*="btn-"] {padding: 8px 16px;border-radius: 4px;
}/* 开头匹配 */
[href^="https"] {color: #0066cc;text-decoration: none;
}/* 结尾匹配 */
[src$=".pdf"] {background-image: url(pdf-icon.png);
}

伪类与伪元素

/* 状态伪类 */
.button:hover {background-color: #0056b3;
}.input:focus {border-color: #80bdff;outline: 0;box-shadow: 0 0 0 0.2rem rgba(0,123,255,.25);
}/* 结构伪类 */
li:first-child {border-top: none;
}li:nth-child(odd) {background-color: #f9f9f9;
}/* 伪元素 */
.quote::before {content: """;font-size: 2em;color: #ccc;
}.card::after {content: "";display: block;clear: both;
}

选择器优先级 ⚖️

优先级计算

/* 优先级: 0,0,0,1 */
p {color: black;
}/* 优先级: 0,0,1,0 */
.text {color: blue;
}/* 优先级: 0,1,0,0 */
#title {color: red;
}/* 优先级: 0,0,1,1 */
p.text {color: green;
}/* 优先级: 1,0,0,0 */
p.text {color: purple !important;
}

选择器性能优化

/* 避免使用通配符 */
* {/* 避免使用 */
}/* 避免过深的后代选择器 */
.header .nav .dropdown .item .link {/* 避免过深嵌套 */
}/* 推荐使用类选择器 */
.nav-link {/* 推荐使用 */
}

实践项目:智能选择器生成器 🛠️

class SelectorBuilder {constructor() {this.selectors = new Map();}// 生成唯一选择器generateUniqueSelector(element) {// 尝试使用IDif (element.id) {return `#${element.id}`;}// 尝试使用类名if (element.className) {const classes = Array.from(element.classList);const uniqueClass = this.findUniqueClass(classes);if (uniqueClass) {return `.${uniqueClass}`;}}// 生成路径选择器return this.generatePathSelector(element);}// 查找唯一类名findUniqueClass(classes) {for (const className of classes) {if (document.getElementsByClassName(className).length === 1) {return className;}}return null;}// 生成路径选择器generatePathSelector(element) {const path = [];let current = element;while (current.parentElement) {let selector = current.tagName.toLowerCase();// 添加nth-childif (current.parentElement) {const children = Array.from(current.parentElement.children);const index = children.indexOf(current) + 1;selector += `:nth-child(${index})`;}path.unshift(selector);current = current.parentElement;}return path.join(' > ');}// 测试选择器唯一性testSelector(selector) {return document.querySelectorAll(selector).length === 1;}
}

最佳实践建议 💡

  1. 选择器使用

    • 优先使用类选择器
    • 避免过度依赖ID
    • 控制选择器深度
    • 合理使用伪类
  2. 性能优化

    • 避免通配符
    • 减少选择器嵌套
    • 利用继承特性
    • 适当复用样式
  3. 可维护性

    • 使用语义化命名
    • 保持选择器简洁
    • 注意优先级控制
    • 添加必要注释

写在最后 🌟

CSS 选择器是样式表的基础,掌握它们的特性和使用技巧,能帮助我们更好地控制页面样式。记住要在选择器的灵活性和性能之间找到平衡点。

进一步学习资源 📚

  • CSS 选择器规范
  • 选择器性能优化指南
  • CSS 命名规范
  • 浏览器兼容性指南

如果你觉得这篇文章有帮助,欢迎点赞收藏,也期待在评论区看到你的想法和建议!👇

终身学习,共同成长。

咱们下一期见

💻

相关文章:

CSS系列(1)-- 选择器体系详解

前端技术探索系列:CSS 选择器体系详解 🎯 致读者:探索 CSS 选择器的奥秘 👋 前端开发者们, 今天我们将深入探讨 CSS 选择器体系,这是构建优雅样式表的基础。让我们一起学习如何精确地选中并控制网页中的…...

用Python开发打字速度测试小游戏

本文将带你一步步开发一个简单的打字速度测试小游戏,通过随机生成词组并计算用户输入速度,帮助提升打字技能。 一、功能描述 随机生成一段句子,用户需要尽快输入。计时功能,统计用户输入的总时长。对比正确率和速度,给出评分反馈。二、开发环境 语言:Python依赖库:pygam…...

基于gitlab API刷新MR的commit的指定status

场景介绍 自己部署的gitlab Jenkins,并已经设置好联动(如何设置可以在网上很容易搜到)每个MergeRequest都可以触发多个Jenkins pipeline,pipeline结束后会将状态更新到gitlab这个MR上希望可以跳过pipeline运行,直接将指定的MR的指定pipeline状态刷新为…...

服务器数据恢复—LINUX下各文件系统删除/格式化的数据恢复可行性分析

Linux操作系统是世界上流行的操作系统之一,被广泛用于服务器、个人电脑、移动设备和嵌入式系统。Linux系统下数据被误删除或者误格式化的问题非常普遍。下面北亚企安数据恢复工程师简单聊一下基于linux的文件系统(EXT2/EXT3/EXT4/Reiserfs/Xfs&#xff0…...

Spark on Yarn安装配置,大数据技能竞赛(容器环境)

Spark on Yarn模式,即把Spark作为一个客户端,将作业提交给Yarn服务,由于在生产环境中,很多时候都要与Hadoop使用同一个集群,因此采用Yarn来管理资源调度,可以有效提高资源利用率。 环境说明: 服…...

遣其欲,而心自静 -- 33DAI

显然,死做枚举只能的50分。 错了4次总算对了。 大体思路: 因题目说只有两个因数,那么有两种情况: 1:两个质数相乘,如:3*515 5*745 等(不包括5*525 或5*315 重复计算\ 因为3*5算了…...

No.25 笔记 | 信息收集与Google语法的实践应用

什么是信息收集? 信息收集(Information Gathering)是渗透测试的第一步,其目的是通过各种手段收集目标的漏洞和弱点,为后续的攻击策略提供依据。 正所谓“知己知彼,百战百胜”,信息收集的重要性…...

GitLab基础环境部署:Ubuntu 22.04.5系统在线安装GitLab 17.5.2实操手册

文章目录 GitLab基础环境部署:Ubuntu 22.04.5系统在线安装GitLab 17.5.2实操手册一、环境准备1.1 机器规划1.2 环境配置1.2.1 设置主机名1.2.2 停止和禁用防火墙1.2.3 更新系统 二、GitLab安装配置2.1 安装GitLab所需的依赖包2.2 添加GitLab存储库2.2.1 将GitLab存储…...

SpringBoot3配置文件

一、统一配置管理概述: SpringBoot工程下,进行统一的配置管理,你想设置的任何参数(端口号、项目根路径、数据库连接信息等等)都集中到一个固定位置和命名的配置文件(application.properties或application.yml)中 配置文件应该放置在Spring Boot工程的s…...

【机器学习】任务十二:循环神经网络

1.循环神经网络 1.1 什么是循环神经网络(RNN)? 循环神经网络(Recurrent Neural Network, RNN) 是一种用于处理序列数据的神经网络类型,它的主要特点是拥有循环连接,使得网络可以对序列中的每个…...

【返璞归真】-切比雪夫不等式(Chebyshev‘s Inequality)

切比雪夫不等式(Chebyshev’s Inequality) 切比雪夫不等式是概率论中的一个基本不等式,用于估计随机变量偏离其期望值一定范围的概率。它对于任何具有有限期望和有限方差的随机变量都成立。 公式表达 切比雪夫不等式的基本形式如下&#xf…...

【Django】在view中调用channel来主动进行websocket通信

前提:consumer中已经写好了建立连接的代码,并且能够成功把连接加入到通道层的组内 可以参考我的另一个博客: LuckySheet协同编辑后端示例(DjangoChannel,Websocket通信)_lucksheet 协同编辑-CSDN博客 我是懒得去折腾luckysheet的源码&…...

18.[极客大挑战 2019]BabySQL1

进入靶场 随便输输 再输输 可以判断是单引号闭合 再随便输输 查询字段数量 得,过滤了 关键字也过滤了 只能双写了 根据回显,这样可以,只是需要改改 1,2不行 1,2,3行 1,2,3,4不行 可以尝试得到库名,表名了 库名 database(…...

Python快速入门二:Python3 基础语法

一、编码 默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串。 当然你也可以为源码文件指定不同的编码: # -*- coding: cp-1252 -*-上述定义允许在源文件中使用 Windows-1252 字符集中的字符编码,对应适…...

1-1 C语言链表

目录 目录 1.0 定义 2.0 为什么使用链表 3.0 链表原理 4.0 创建链表节点 5.0 链表原理续 6.0 链表实现 6.0.1 创建节点 6.0.2 初始化链表 6.0.3 添加链表节点 6.0.4 循环遍历 6.0.5 插入节点 6.0.6 插入头结点main函数 7.0 完整代码 8.0 节点添加方案二 8.0.1 …...

[0629].第29节:配置中心业务规则与动态刷新

我的后端学习大纲 SpringCloud学习大纲 1、编码实现3377服务: 1.1.建module: 1.2.改pom: 1.3.写YML: 1.Nacos同Consul一样,在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正…...

mac: docker : Command not found解决

描述: 安装docker但是docker命令显示Command not found 分析: mac没有配置对应的环境变量 解决方案: 打开配置文件: vim ~/.zshrc写docker环境变量: export PATH"/Applications/Docker.app/Contents/Resources/bin:$PATH"保存退出: esc,输入wq,按enter 配置文…...

Django drf基于APIView 快速使用

1. 注册 # settings.pyINSTALLED_APPS [,rest_framework, ]2. 路由 from django.urls import pathurlpatterns [path(task/, views.TaskAPIView.as_view()) ]3. 视图 from rest_framework.views import APIView from rest_framework.response import Responseclass TaskAPIV…...

【MarsCode】每日一题数组 之 数字分组求偶数和

数字分组求偶数和 1.问题描述 问题描述 小M面对一组从 1 到 9 的数字,这些数字被分成多个小组,并从每个小组中选择一个数字组成一个新的数。目标是使得这个新数的各位数字之和为偶数。任务是计算出有多少种不同的分组和选择方法可以达到这一目标。 n…...

解决:error: subprocess-exited-with-error 的问题

系统和配置: ubuntu20.04 python3.10 torch2.5.1 pip install时报错如下 (实际指令是:pip3 install -r drl_grasping/python_requirements.txt) Collecting python-xlib>0.17 (from pynput1.7.6->-r drl_grasping/python_…...

HDLC(高级数据链路控制):从帧结构解析到C语言模拟实现

1. HDLC协议基础:从比特流到可靠传输 第一次接触HDLC协议时,我盯着那串01111110的标志位发了半天呆——这不就是个简单的比特序列吗?怎么就能成为整个协议的基础?后来在调试卫星通信模块时才发现,正是这个看似简单的设…...

分解+组合+RUL预测!MVMD-Transformer-BiLSTM锂电池剩余寿命预测(容量特征提取+剩余寿命预测)

这段代码实现了一套完整的基于MVMD-Transformer-BiLSTM的电池剩余寿命预测:一、研究背景 锂离子电池在长期充放电循环中会发生容量衰减,准确预测其剩余使用寿命(RUL)对设备健康管理、安全保障与运维决策至关重要。传统预测方法常受…...

Mac系统Jmeter从零到一:接口压力测试实战入门

1. 为什么选择Jmeter做接口压力测试 最近接手一个需求:需要对某个关键接口进行100次循环压力测试,检查是否存在偶发性返回数据为空的问题。作为Mac用户,我第一时间想到了Jmeter这个工具。你可能好奇为什么不用Postman或者curl脚本&#xff1…...

VSCode 高效开发:配置 Pixel Dream Workshop 模型调用的代码片段与插件

VSCode 高效开发:配置 Pixel Dream Workshop 模型调用的代码片段与插件 1. 为什么需要优化开发工作流 如果你经常使用Pixel Dream Workshop这类AI模型进行开发,可能会遇到一个共同痛点:每次调用API时都要重复编写相似的请求代码&#xff0c…...

告别Delay!用STM32硬件定时器实现非阻塞软件IIC,实测F429/H743性能对比

告别Delay!用STM32硬件定时器实现非阻塞软件IIC,实测F429/H743性能对比 在嵌入式开发中,IIC总线因其简单的两线制设计和广泛的外设支持,成为连接各类传感器的首选方案。然而,当MCU缺乏硬件IIC外设或引脚被占用时&#…...

OpenClaw技能开发入门:为百川2-13B模型定制专属文件处理插件

OpenClaw技能开发入门:为百川2-13B模型定制专属文件处理插件 1. 为什么需要自定义文件处理技能? 去年夏天,我的桌面上堆积了超过2000份未分类的文档——包括技术笔记、会议记录、临时下载的论文和各种截图。当我尝试用现有工具整理时&#…...

美团智能抢券助手:自动抢券、签到领豆,让外卖党每月多省200元

美团智能抢券助手:自动抢券、签到领豆,让外卖党每月多省200元 【免费下载链接】meituan-shenquan 美团 天天神券 地区活动 自动化脚本 项目地址: https://gitcode.com/gh_mirrors/me/meituan-shenquan 你是否也曾遇到过这样的情况:心心…...

8公里巷道,最小误差仅0.6%,天宝耐特携L2pro解锁矿山井下高效安全测量

随着数字矿山建设的加速推进,空间数据采集技术成为矿山数字化转型的重要支撑。在此背景下,天宝耐特在华南某大型金矿完成了灵光L2pro手持SLAM三维激光扫描技术的深度应用实践,以硬核技术破解矿山作业难题,实现井下数字孪生底座构建…...

2026论文写作工具红黑榜:AI论文工具怎么选?一篇看懂

2026年论文写作工具市场百花齐放,红榜推荐千笔AI、ThouPen、豆包,均适配国内学术规范;黑榜需避开低质免费工具、无真实引用平台及过度依赖全文生成的工具。选择时可按需求匹配度 - 数据可信度 - 成本承受力三维模型进行评估。一、红榜&#x…...

从DBC到CAPL全流程避坑指南:BusType设置对自动化测试的影响

从DBC到CAPL全流程避坑指南:BusType设置对自动化测试的影响 在汽车电子测试领域,DBC文件如同CAN网络的"基因图谱",而CAPL脚本则是激活这些基因的"酶"。当两者配合出现问题时,往往不是基因突变,而是…...