当前位置: 首页 > 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_…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes&#xff0…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

如何在网页里填写 PDF 表格?

有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据&#xff…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG

TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码:HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...

Visual Studio Code 扩展

Visual Studio Code 扩展 change-case 大小写转换EmmyLua for VSCode 调试插件Bookmarks 书签 change-case 大小写转换 https://marketplace.visualstudio.com/items?itemNamewmaurer.change-case 选中单词后,命令 changeCase.commands 可预览转换效果 EmmyLua…...