Python爬虫(4)CSS核心机制:全面解析选择器分类、用法与实战应用
目录
- 一、背景与重要性
- 二、CSS选择器基础与分类
- 2.1 什么是选择器?
- 2.2 选择器分类与语法
- 三、核心选择器详解与实战案例
- 3.1 基础选择器:精准定位元素
- 3.2 组合选择器:元素关系控制
- 3.3 伪类与伪元素:动态与虚拟元素
- 3.4 属性选择器:灵活匹配属性值
- 四、优先级计算与最佳实践
- 4.1 优先级权重规则
- 4.2 避免常见误区
- 1. 滥用!important:
- 2. 过度复杂的选择器链:
- 3. 重复定义样式:
- 五、实战案例:响应式导航栏设计
- 六、总结与进阶学习建议
- 6.1 核心要点回顾:
- Python爬虫相关文章(推荐)
一、背景与重要性
CSS(层叠样式表)是网页设计的核心语言,负责将HTML元素转化为视觉友好的界面。而选择器(Selector) 是CSS的基石,决定了样式规则的应用范围与优先级。无论是调整字体颜色、布局响应式页面,还是实现复杂动画,都需要精准定位目标元素。然而,许多开发者对选择器的分类、优先级及性能优化缺乏系统认知,导致代码冗余、样式冲突等问题。本文从基础语法到高阶技巧,深入剖析选择器的核心机制,并通过实战案例助你构建高效、可维护的CSS代码体系。
二、CSS选择器基础与分类
2.1 什么是选择器?
选择器是用于匹配HTML元素的模式,通过定义规则将样式应用于特定元素或元素组。其核心作用包括:
- 精准定位:通过元素名、类名、ID等属性匹配目标。
- 批量操作:通过组合选择器或通用选择器统一管理样式。
- 动态交互:通过伪类选择器响应鼠标悬停、焦点状态等行为。
2.2 选择器分类与语法
CSS选择器可分为六大类,覆盖从基础到高阶的所有场景:
分类 | 语法示例 | 功能说明 |
---|---|---|
基本选择器 | h1 , .class , #id | 通过元素名、类名或ID直接匹配 |
组合选择器 | div > p , .a + .b | 通过元素关系(父子/兄弟)组合匹配 |
伪类选择器 | :hover , :nth-child(2) | 匹配元素的特定状态(悬停)或位置(第2个子元素) |
伪元素选择器 | ::before , ::first-line | 创建虚拟元素添加样式(需用content 属性) |
属性选择器 | [type="text"] , [href^=https] | 根据属性值精准匹配(支持^=前缀/$=后缀/*=包含等操作符) |
通用选择器 | * | 匹配所有元素(慎用,易引发性能问题) |
三、核心选择器详解与实战案例
3.1 基础选择器:精准定位元素
- 元素选择器:
h1 { color: #333; } /* 所有<h1>元素文字颜色设置为深灰色 */
- 类选择器(Class):
.btn-primary { background-color: #007bff; padding: 8px 16px;
}
- ID选择器:
#header { position: fixed; top: 0; width: 100%;
}
优先级原则:
ID选择器(#id) > 类选择器(.class) > 元素选择器(tag)。
3.2 组合选择器:元素关系控制
- 后代选择器(空格):
.nav li { display: inline-block; /* 所有.nav下的<li>元素变为行内块 */
}
- 子元素选择器(>):
.menu > .item { border-bottom: 1px solid #eee; /* 仅直接子元素.item生效 */
}
- 相邻兄弟选择器(+):
h2 + p { margin-top: 0; /* 紧接在<h2>后的第一个<p>元素顶部边距为0 */
}
3.3 伪类与伪元素:动态与虚拟元素
- 状态伪类:
a:hover { color: red; /* 鼠标悬停时链接变红 */
}
input:focus { border-color: blue; /* 输入框获取焦点时边框变蓝 */
}
- 结构伪类:
li:nth-child(2n) { background: #f5f5f5; /* 偶数行列表项背景变浅灰 */
}
- 伪元素:
p::first-line { font-weight: bold; /* 段落首行文字加粗 */
}
.tooltip::after { content: "提示信息"; /* 在元素后插入虚拟内容 */
}
3.4 属性选择器:灵活匹配属性值
- 精确匹配:
input[type="password"] { width: 200px; /* 所有密码输入框宽度设为200px */
}
- 部分匹配:
a[href^="https"] { color: green; /* 所有以https开头的链接文字变绿 */
}
div[class*="error"] { border: 1px solid red; /* class包含"error"的<div>显示红色边框 */
}
四、优先级计算与最佳实践
4.1 优先级权重规则
选择器优先级由权重值决定,权重越高样式越优先:
- 内联样式(1000) > ID(100) > 类/伪类/属性(10) > 元素/伪元素(1) > 通配符(0)
/* 权重计算示例 */
#nav .item:hover {} /* 100 + 10 + 10 = 120 */
div#header a {} /* 1 + 100 + 1 = 102 */
4.2 避免常见误区
1. 滥用!important:
.text { color: red !important; } /* 强制覆盖其他规则,导致维护困难 */
2. 过度复杂的选择器链:
body div#main .content ul li a {} /* 层级过深,性能低下 */
3. 重复定义样式:
.btn { padding: 8px; }
.btn-primary { padding: 8px; } /* 应合并重复属性 */
五、实战案例:响应式导航栏设计
目标:使用多种选择器实现PC端与移动端自适应导航栏。
<nav class="navbar"><ul class="nav-list"><li class="nav-item"><a href="#home">首页</a></li><li class="nav-item active"><a href="#news">新闻</a></li><li class="nav-item"><a href="#contact">联系</a></li></ul>
</nav>
/* 基础样式 */
.navbar { background-color: #333; padding: 1rem;
}
.nav-list { display: flex; gap: 2rem; list-style: none;
}
/* 悬停与激活状态 */
.nav-item a:hover { color: #ffd700;
}
.nav-item.active a { font-weight: bold; color: #fff;
}
/* 移动端适配 */
@media (max-width: 768px) {.nav-list { flex-direction: column; }.nav-item::after { content: ">"; margin-left: 8px; }
}
六、总结与进阶学习建议
6.1 核心要点回顾:
- 选择器分类:基础、组合、伪类、伪元素、属性选择器各司其职。
- 优先级控制:权重计算规则是解决样式冲突的关键。
- 代码规范:避免滥用!important,优先使用类选择器提升可维护性。
Python爬虫相关文章(推荐)
Python爬虫介绍 | Python爬虫(1)Python爬虫:从原理到实战,一文掌握数据采集核心技术 |
HTTP协议解析 | Python爬虫(2)Python爬虫入门:从HTTP协议解析到豆瓣电影数据抓取实战 |
HTML核心技巧 | Python爬虫(3)HTML核心技巧:从零掌握class与id选择器,精准定位网页元素 |
相关文章:
Python爬虫(4)CSS核心机制:全面解析选择器分类、用法与实战应用
目录 一、背景与重要性二、CSS选择器基础与分类2.1 什么是选择器?2.2 选择器分类与语法 三、核心选择器详解与实战案例3.1 基础选择器:精准定位元素3.2 组合选择器:元素关系控制3.3 伪类与伪元素:动态与虚拟元素3…...

Cadence学习笔记之---原理图设计基本操作
目录 01 | 引 言 02 | 环境描述 03 | 原理图工具介绍 04 | 原理图设计基本操作 05 | 生成页间引用 06 | 元件自动编号 07 | 结 尾 01 | 引 言 书接上回,在前文中讲述了怎样制作常用的库元件,如电阻、二极管,IC器件,以及怎…...
从零开始学习人工智能Day5-Python3 模块
二、Python3基础语法学习 三、Python3 基本数据类型 四、Python3 数据类型转换 五、Python3 运算符 六、python基本数据类型(续) 七、Python3 控制语句 八、Python推导式 九、Python3 函数 十、Python3 数据结构 十一、Python3 模块 Python 中的模块(…...

进行性核上性麻痹饮食指南:科学膳食助力对抗疾病
进行性核上性麻痹是一种进展性神经退行性疾病,常导致患者出现吞咽困难、运动障碍等症状。科学合理的饮食不仅能为患者提供必要的营养支持,还能降低并发症风险,改善生活质量。 蛋白质是维持身体机能的关键,患者应注重优质蛋白的摄取…...
vue滑块组件设计与实现
vue滑块组件设计与实现 设计一个滑块组件的思想主要包括以下几个方面:用户交互、状态管理、样式设计和事件处理。以下是详细的设计思想: 1. 用户交互 滑块组件的核心是用户能够通过拖动滑块来选择一个值。因此,设计时需要考虑以下几点&…...

opencv函数展示4
一、形态学操作函数 1.基本形态学操作 (1)cv2.getStructuringElement() (2)cv2.erode() (3)cv2.dilate() 2.高级形态学操作 (1)cv2.morphologyEx() 二、直方图处理函数 1.直方图…...

附赠二张图,阐述我对大模型的生态发展、技术架构认识。
文章精炼,用两张图说明大模型发展业态方向,以及大模型主体技术架构。(目前还需要进一步验证我的Thought && ideas,等待机会吧.........) 图一:探究大模型三个层次应用方向,浅层次入门简…...

OpenCv高阶(九)——背景建模
目录 一、背景建模的核心目标与核心挑战 1. 核心目标 2. 核心挑战 二、背景建模模型 1、帧差法原理 2. 概率模型(Parametric Models) (1)高斯混合模型(Gaussian Mixture Model, GMM) (…...

leetcode - 字符串
字符串 466. 统计重复个数 题目 定义 str [s, n] 表示 str 由 n 个字符串 s 连接构成。 例如,str ["abc", 3] "abcabcabc" 。 如果可以从 s2( )中删除某些字符使其变为 s1,则称字符串 s1( )可以从字符串 s2 获得。 例如…...

【基础IO上】复习C语言文件接口 | 学习系统文件接口 | 认识文件描述符 | Linux系统下,一切皆文件 | 重定向原理
1.关于文件的预备知识 1.1 文件的宏观理解 广义上理解,键盘、显示器等都是文件,因为我们说过“Linux下,一切皆文件”,当然我们现在对于这句话的理解是片面的;狭义上理解,文件在磁盘上,磁盘是一…...

Freertos--统计所有任务栈信息以及CPU占比和钩子函数
一、概念 在 FreeRTOS 中统计任务栈信息和 CPU 占比是为了分析栈使用情况防止溢出、优化性能识别高负载任务、合理分配资源避免内存浪费、调试系统排查阻塞或优先级问题,有助于提升效率、确保稳定性、快速定位问题并防止崩溃,比如在你的蜂鸣器任务中可以…...

京东商品详情API接口调用技术指南
本文基于京东宙斯开放平台(JD Open API)的 jingdong.ware.product.detail.search.get 接口,提供商品详情数据获取的完整技术方案,包含参数说明、代码实现及实战避坑指南。 一、接口功能与权限 核心能力 获取商品SKU的完整信…...

基于Java(JSP)+MySQL实现深度学习的音乐推荐系统
基于深度学习的音乐推荐系统简述 本文简要介绍我做的基于深度学习的音乐推荐系统。主要从需求分析与设计实现的角度来进行介绍。 需求分析 基于深度学习的音乐推荐系统旨在以个性化音乐推荐模型为基础,使用B/S架构的形式实现。个性化推荐模型使用了 随机梯度下降…...

Linux:进程间通信---匿名管道
文章目录 1. 进程间通信1.1 什么是进程间通信?1.2 为什么进程要进行进程间通信?1.3 怎么实现进程间通信? 2. 匿名管道2.1 匿名管道的原理2.2 匿名管道的系统接口2.3 匿名管道的使用2.4 匿名管道的运用场景 序:在上一篇文章中我们知…...
C++ 类及函数原型详解
一、引言 在C 编程中,类(Class)是面向对象编程的核心概念之一,它是一种用户自定义的数据类型,封装了数据和操作数据的函数(成员函数)。函数原型则为函数的声明提供了必要的信息,让编…...

深度学习小记(包括pytorch 还有一些神经网络架构)
这个是用来增加深度学习的知识面或者就是记录一些常用的命令,会不断的更新 import torchvision.transforms as transforms toPIL transforms.ToPILImage()#可以把tensor转换为Image类型的 imgtoPIL(img) #利用save就可以保存下来 img.save("/opt/data/private/stable_si…...
声音分离人声和配乐base,vocals,drums -从头设计数字生命第6课, demucs——仙盟创梦IDE
demucs -n htdemucs --two-stemsvocals 未来之窗.mp3 demucs -n htdemucs --shifts5 之.mp3demucs -n htdemucs --shifts5 -o wlzcoutspl 未来之窗.mp3 伴奏提取人声分离技术具有多方面的重大意义,主要体现在以下几个领域: 音乐创作与制作 创作便利…...
深度探索多模态数据:从声音到图像的奇妙世界
深度探索多模态数据:从声音到图像的奇妙世界 在多模态深度学习的旅程中,我们不仅要了解不同数据形式的融合策略,还需要熟悉各种数据类型的特性。今天,我们将探索两种常见但极具价值的模态:音频数据和医学CT扫描。 音…...

【数据可视化-32】全球住房市场分析(2015-2024 年)数据集可视化分析
🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…...
JAVA---面向对象(下)
重生之我开始补知识第三集 1.标准 JavaBean 要求: 1)类名需要见名知意 2)成员变量使用private修饰 3)至少提供两个构造方法 a.无参构造方法 b.带全部参数的构造方法 4)成员方法 a.提供每一个成员变量对应的 …...
FPGA(现场可编程门阵列)笔记
*编程语言 - [Verilog]:硬件描述语言,语法风格类似于C语言,用于数字电路的设计。 - [SystemVerilog]:扩展自Verilog,增加了面向对象编程等特性,语法更接近于C,适用于复杂系统设计。 - [VHDL]:另一种硬件描述语言&…...

DAX Studio将PowerBI与EXCEL连接
DAX Studio将PowerBI与EXCEL连接 具体步骤如下: 第一步:先打开一个PowerBI的文件,在外部工具栏里打开DAXStudio,如图: 第二步:DAXStudio界面,点击Advanced选项卡-->Analyze in Excel&#…...

使用spring boot vue 上传mp4转码为dash并播放
1.前端实现 <template><div class"video-upload"><el-uploadclass"upload-demo"action"/api/upload":before-upload"beforeUpload":on-success"handleSuccess":on-error"handleError":show-file-…...

深入理解指针 (1)
1.内存和地址 1.1内存 1.1.1内存的使用和管理 (1)内存划分为一个个的内存单元,每个内存单元的大小是1个字节,一个内存单元可以存放8个bit。 (2)每个内存单元有一个编号,内存单元的编号在计…...

Leetcode98、230:二叉搜索树——递归学习
什么是二叉搜索树:右子树节点 > 根节点 > 左子树节点, 二叉搜索树中的搜索,返回给定值val所在的树节点 终止条件为传进来的节点为空、或者节点的值 val值,返回这个节点; 单程递归逻辑:定义一个resu…...
4/25 研0学习日志
Python学习 python 4个常用的数据容器 list dict tuple set list 列表中数据类型可以不一样 构造方式 mylist["xxx","xxxx"] 获取数据方式 mylist[1] mylist[:4] mylist[-1:] 添加数据 mylist.append() mylist.extern(["aaa","aaaa&…...

15. LangChain多模态应用开发:融合文本、图像与语音
引言:当AI学会"看听说想" 2025年某智慧医院的多模态问诊系统,通过同时分析患者CT影像、语音描述和电子病历,将误诊率降低42%。本文将基于LangChain多模态框架与Deepseek-R1,手把手构建能理解复合信息的智能系统。 一、…...

2022李宏毅老师机器学习课程笔记
机器学习笔记目录 1.绪论(内容概述)2.机器学习和深度学习的基本概念transformer 1.绪论(内容概述) 机器学习:让机器找一个函数,通过函数输出想要的结果。应用举例:语音识别,图像识别…...

笔试强训:Day2
一、字符串中找出连续最长的数字串(双指针) 字符串中找出连续最长的数字串_牛客题霸_牛客网 #include <iostream> #include <string> #include <cctype> using namespace std;int main() {//双指针string str;cin>>str;int nstr.size();int begin-1,l…...

linux合并命令(一行执行多个命令)的几种方式总结
背景: 最近安装配置机器,需要手打很多命令。又不能使用docker,所以就使用iTerm2连接多台服务器,然后move session到一个窗口中,shift command i使用XSHELL类似的撰写功能,就可以一次在多台服务器命令窗口…...