Python爬虫(4)CSS核心机制:全面解析选择器分类、用法与实战应用

news2025/4/26 3:31:31

目录

      • 一、背景与重要性‌
      • 二、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 核心要点回顾‌:
  1. ‌选择器分类‌:基础、组合、伪类、伪元素、属性选择器各司其职。
  2. ‌优先级控制‌:权重计算规则是解决样式冲突的关键。
  3. ‌代码规范‌:避免滥用!important,优先使用类选择器提升可维护性。
Python爬虫相关文章(推荐)
Python爬虫介绍Python爬虫(1)Python爬虫:从原理到实战,一文掌握数据采集核心技术
HTTP协议解析Python爬虫(2)Python爬虫入门:从HTTP协议解析到豆瓣电影数据抓取实战
HTML核心技巧Python爬虫(3)HTML核心技巧:从零掌握class与id选择器,精准定位网页元素

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2342928.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Cadence学习笔记之---原理图设计基本操作

目录 01 | 引 言 02 | 环境描述 03 | 原理图工具介绍 04 | 原理图设计基本操作 05 | 生成页间引用 06 | 元件自动编号 07 | 结 尾 01 | 引 言 书接上回&#xff0c;在前文中讲述了怎样制作常用的库元件&#xff0c;如电阻、二极管&#xff0c;IC器件&#xff0c;以及怎…

进行性核上性麻痹饮食指南:科学膳食助力对抗疾病

进行性核上性麻痹是一种进展性神经退行性疾病&#xff0c;常导致患者出现吞咽困难、运动障碍等症状。科学合理的饮食不仅能为患者提供必要的营养支持&#xff0c;还能降低并发症风险&#xff0c;改善生活质量。 蛋白质是维持身体机能的关键&#xff0c;患者应注重优质蛋白的摄取…

opencv函数展示4

一、形态学操作函数 1.基本形态学操作 &#xff08;1&#xff09;cv2.getStructuringElement() &#xff08;2&#xff09;cv2.erode() &#xff08;3&#xff09;cv2.dilate() 2.高级形态学操作 &#xff08;1&#xff09;cv2.morphologyEx() 二、直方图处理函数 1.直方图…

附赠二张图,阐述我对大模型的生态发展、技术架构认识。

文章精炼&#xff0c;用两张图说明大模型发展业态方向&#xff0c;以及大模型主体技术架构。&#xff08;目前还需要进一步验证我的Thought && ideas&#xff0c;等待机会吧.........&#xff09; 图一&#xff1a;探究大模型三个层次应用方向&#xff0c;浅层次入门简…

OpenCv高阶(九)——背景建模

目录 一、背景建模的核心目标与核心挑战 1. 核心目标 2. 核心挑战 ​二、背景建模模型 1、帧差法原理 2. 概率模型&#xff08;Parametric Models&#xff09; &#xff08;1&#xff09;高斯混合模型&#xff08;Gaussian Mixture Model, GMM&#xff09; &#xff08;…

leetcode - 字符串

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

【基础IO上】复习C语言文件接口 | 学习系统文件接口 | 认识文件描述符 | Linux系统下,一切皆文件 | 重定向原理

1.关于文件的预备知识 1.1 文件的宏观理解 广义上理解&#xff0c;键盘、显示器等都是文件&#xff0c;因为我们说过“Linux下&#xff0c;一切皆文件”&#xff0c;当然我们现在对于这句话的理解是片面的&#xff1b;狭义上理解&#xff0c;文件在磁盘上&#xff0c;磁盘是一…

Freertos--统计所有任务栈信息以及CPU占比和钩子函数

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

京东商品详情API接口调用技术指南‌

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

基于Java(JSP)+MySQL实现深度学习的音乐推荐系统

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

Linux:进程间通信---匿名管道

文章目录 1. 进程间通信1.1 什么是进程间通信&#xff1f;1.2 为什么进程要进行进程间通信&#xff1f;1.3 怎么实现进程间通信&#xff1f; 2. 匿名管道2.1 匿名管道的原理2.2 匿名管道的系统接口2.3 匿名管道的使用2.4 匿名管道的运用场景 序&#xff1a;在上一篇文章中我们知…

深度学习小记(包括pytorch 还有一些神经网络架构)

这个是用来增加深度学习的知识面或者就是记录一些常用的命令,会不断的更新 import torchvision.transforms as transforms toPIL transforms.ToPILImage()#可以把tensor转换为Image类型的 imgtoPIL(img) #利用save就可以保存下来 img.save("/opt/data/private/stable_si…

【数据可视化-32】全球住房市场分析(2015-2024 年)数据集可视化分析

&#x1f9d1; 博主简介&#xff1a;曾任某智慧城市类企业算法总监&#xff0c;目前在美国市场的物流公司从事高级算法工程师一职&#xff0c;深耕人工智能领域&#xff0c;精通python数据挖掘、可视化、机器学习等&#xff0c;发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…

DAX Studio将PowerBI与EXCEL连接

DAX Studio将PowerBI与EXCEL连接 具体步骤如下&#xff1a; 第一步&#xff1a;先打开一个PowerBI的文件&#xff0c;在外部工具栏里打开DAXStudio&#xff0c;如图&#xff1a; 第二步&#xff1a;DAXStudio界面&#xff0c;点击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内存的使用和管理 &#xff08;1&#xff09;内存划分为一个个的内存单元&#xff0c;每个内存单元的大小是1个字节&#xff0c;一个内存单元可以存放8个bit。 &#xff08;2&#xff09;每个内存单元有一个编号&#xff0c;内存单元的编号在计…

Leetcode98、230:二叉搜索树——递归学习

什么是二叉搜索树&#xff1a;右子树节点 > 根节点 > 左子树节点&#xff0c; 二叉搜索树中的搜索&#xff0c;返回给定值val所在的树节点 终止条件为传进来的节点为空、或者节点的值 val值&#xff0c;返回这个节点&#xff1b; 单程递归逻辑&#xff1a;定义一个resu…

15. LangChain多模态应用开发:融合文本、图像与语音

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

2022李宏毅老师机器学习课程笔记

机器学习笔记目录 1.绪论&#xff08;内容概述&#xff09;2.机器学习和深度学习的基本概念transformer 1.绪论&#xff08;内容概述&#xff09; 机器学习&#xff1a;让机器找一个函数&#xff0c;通过函数输出想要的结果。应用举例&#xff1a;语音识别&#xff0c;图像识别…

笔试强训:Day2

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