CSS详解:特性、选择器与优先级

CSS详解:特性、选择器与优先级

目录

  • CSS详解:特性、选择器与优先级
    • 一、CSS的核心特性
      • 1. 层叠性(Cascading)
      • 2. 继承性(Inheritance)
      • 3. 优先级(Specificity)
      • 4. 响应式设计
      • 5. 动画与过渡
    • 二、CSS选择器详解
      • 1. 基本选择器
      • 2. 组合选择器
      • 3. 属性选择器
      • 4. 伪类选择器
      • 5. 伪元素选择器
    • 三、CSS优先级(Specificity)详解
      • 1. 优先级计算规则
        • 例子
      • 2. !important的作用
      • 3. 层叠顺序
    • 四、实战示例
    • 五、总结

CSS(Cascading Style Sheets,层叠样式表)是前端开发中不可或缺的技术之一。它负责网页的外观和布局,与HTML结构和JavaScript行为共同构建了现代网页。本文将详细介绍CSS的核心特性、选择器的种类及其优先级(Specificity),帮助你更好地理解和运用CSS。


一、CSS的核心特性

1. 层叠性(Cascading)

CSS的“层叠”指的是当多个样式规则作用于同一元素时,浏览器会根据一定的规则决定最终应用哪一条样式。这些规则包括样式来源(如浏览器默认样式、外部样式表、内联样式等)、选择器优先级和声明顺序。

2. 继承性(Inheritance)

某些CSS属性会从父元素继承到子元素。例如,colorfont-family等文本相关属性会自动传递给子元素,而marginpadding等布局属性则不会继承。可以通过inheritinitialunset等关键字手动控制继承行为。

3. 优先级(Specificity)

当多个规则作用于同一元素时,优先级决定了哪条规则生效。优先级由选择器的类型和数量决定,后文将详细介绍。

4. 响应式设计

CSS支持媒体查询(Media Queries),可以根据不同的设备和屏幕尺寸应用不同的样式,实现响应式布局。

5. 动画与过渡

CSS3引入了动画(@keyframes)和过渡(transition)属性,使网页交互更加丰富和流畅。


二、CSS选择器详解

选择器用于选中HTML文档中的元素,以便为其应用样式。选择器的种类丰富,灵活组合可以实现复杂的样式控制。

1. 基本选择器

  • 元素选择器:选中所有指定标签的元素
    p { color: blue; }
    
  • 类选择器:选中所有带有指定class的元素
    .highlight { background: yellow; }
    
  • ID选择器:选中指定id的元素(页面唯一)
    #header { font-size: 2em; }
    
  • 通配符选择器:选中所有元素
    * { box-sizing: border-box; }
    

2. 组合选择器

  • 后代选择器:选中某元素内部的所有指定后代元素
    .nav a { color: red; }
    
  • 子元素选择器:只选中直接子元素
    ul > li { list-style: none; }
    
  • 相邻兄弟选择器:选中紧跟在某元素后的指定元素
    h2 + p { margin-top: 0; }
    
  • 通用兄弟选择器:选中同级后面所有指定元素
    h2 ~ p { color: gray; }
    

3. 属性选择器

  • 存在属性
    input[required] { border: 1px solid red; }
    
  • 属性值等于
    a[target="_blank"] { color: orange; }
    
  • 属性值包含
    [class~="btn"] { padding: 10px; }
    
  • 属性值以某字符串开头/结尾/包含
    a[href^="https"] { color: green; }
    a[href$=".pdf"] { color: red; }
    a[href*="example"] { font-weight: bold; }
    

4. 伪类选择器

  • 结构伪类
    li:first-child { font-weight: bold; }
    li:last-child { color: blue; }
    li:nth-child(2n) { background: #eee; }
    
  • 状态伪类
    a:hover { text-decoration: underline; }
    input:focus { border-color: blue; }
    

5. 伪元素选择器

  • 常用伪元素
    p::first-line { font-size: 1.2em; }
    p::first-letter { color: red; }
    div::before { content: "★"; }
    div::after { content: "☆"; }
    

三、CSS优先级(Specificity)详解

当多个选择器选中同一元素并设置了相同的属性时,浏览器会根据优先级规则决定最终应用哪一条样式。

1. 优先级计算规则

优先级由四个部分组成,通常用(a, b, c, d)表示:

  • a:内联样式(如style="..."),有最高优先级
  • b:ID选择器的数量
  • c:类选择器、属性选择器、伪类的数量
  • d:元素选择器、伪元素的数量

优先级比较时,从左到右依次比较,遇到高的就确定胜负。

例子
选择器优先级
#header(0,1,0,0)
.nav .item(0,0,2,0)
ul li a(0,0,0,3)
a:hover(0,0,1,1)
style="color:red"(1,0,0,0)

2. !important的作用

!important可以提升某条样式的优先级,使其覆盖其他规则。但应谨慎使用,避免维护困难。

p { color: blue !important; }

3. 层叠顺序

当优先级相同时,后写的规则会覆盖前面的规则。


四、实战示例

<!DOCTYPE html>
<html>
<head><style>p { color: black; }                /* (0,0,0,1) */.highlight { color: orange; }      /* (0,0,1,0) */#main { color: green; }            /* (0,1,0,0) */p.highlight { color: blue; }       /* (0,0,1,1) */p { color: red !important; }       /* (0,0,0,1) + !important */</style>
</head>
<body><p id="main" class="highlight">Hello CSS!</p>
</body>
</html>

分析:

  • p:color: black
  • .highlight:color: orange
  • #main:color: green
  • p.highlight:color: blue
  • p:color: red !important

最终显示为红色,因为!important提升了优先级。


五、总结

  • CSS的特性包括层叠、继承、优先级、响应式、动画等。
  • 选择器种类丰富,合理组合可以精准选中目标元素。
  • 优先级决定了样式的最终应用,理解其计算规则有助于解决样式冲突。
  • !important应谨慎使用,优先考虑优化选择器结构。

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

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

相关文章

《算法导论(第4版)》阅读笔记:p86-p90

《算法导论(第4版)》学习第 19 天&#xff0c;p83-p85 总结&#xff0c;总计 3 页。 一、技术总结 无。 二、英语总结(生词&#xff1a;2) 1. inkling (1)inkling: inclen(“utter in an undertone&#xff0c;低声说话”) c. a hint(提示)&#xff1b;a slight knowledg…

nginx概念及使用

一、Nginx 核心概念 Nginx&#xff08;发音为 "engine-x"&#xff09;是一个高性能、开源的 Web 服务器和反向代理服务器&#xff0c;由俄罗斯工程师伊戈尔・赛索耶夫&#xff08;Igor Sysoev&#xff09;于 2004 年开发&#xff0c;最初用于解决当时高并发场景下 Ap…

2025蓝桥杯JAVA编程题练习Day8

1. 路径 题目描述 小蓝学习了最短路径之后特别高兴&#xff0c;他定义了一个特别的图&#xff0c;希望找到图 中的最短路径。 小蓝的图由 2021 个结点组成&#xff0c;依次编号 1 至 2021。 对于两个不同的结点 a, b&#xff0c;如果 a 和 b 的差的绝对值大于 21&#xff0…

【赵渝强老师】Memcached的路由算法

Memcached支持两种不同方式的客户端路由算法&#xff0c;即&#xff1a;求余数Hash算法和一致性Hash算法。下面分别进行介绍。 一、 求余数的路由算法 求余数Hash算法的客户端路由是对插入数据的键进行求余数&#xff0c;根据余数来决定存储到哪个Memcached实例。 视频讲解如…

NLP学习路线图(一): 线性代数(矩阵运算、特征值分解等)

引言&#xff1a;语言与矩阵的奇妙邂逅 在自然语言处理&#xff08;NLP&#xff09;的魔法世界里&#xff0c;每个词语都像被施了变形术的精灵&#xff0c;在数学的殿堂中翩翩起舞。当我们用"king - man woman queen"这样的向量魔法破解语义密码时&#xff0c;线性…

BUUCTF PWN刷题笔记(持续更新!!)

ciscn_2019_c_1 64位&#xff0c;没有开启保护。点进去没发现明显的漏洞函数&#xff0c;考虑泄露libc基地址的rop构造。先看看有多少gadget 估计也够用了。puts函数只接受一个参数&#xff0c;观看汇编看看用的哪个寄存器传输的参数。 用的是edi。但是我们怎么找到so的版本呢…

Java EE初阶——线程安全

1. 线程的状态 1. 线程状态分类&#xff08;Thread.State 枚举&#xff09; Java 定义了 6 种线程状态&#xff0c;这些状态均由 java.lang.Thread.State 枚举表示&#xff1a; NEW&#xff08;新建&#xff09; 线程对象已创建&#xff0c;但尚未调用 start() 方法。此时线程…

Vue 3.0中响应式依赖和更新

响应式依赖和更新是Vue 3.0中最重要的机制&#xff0c;其核心代码如下&#xff0c;本文将结合代码对这个设计机制作出一些解释。 // 全局依赖存储&#xff1a;WeakMap<target, Map<key, Set<effect>>> const targetMap new WeakMap();// 当前活动的副作用函…

一、内存调优

一、内存调优 什么是内存泄漏 监控Java内存的常用工具 内存泄露的常见场景 内存泄露的解决方案 内存泄露与内存溢出的区别 内存泄露&#xff1a;在Java中如果不再使用一个对象&#xff0c;但是该对象依然在GC ROOT的引用链上&#xff0c;这个对象就不会被垃圾回收器回收&…

Linux /etc/rc.d/init.d/

在传统的 SysV init 系统中&#xff0c;服务启动脚本通常位于 /etc/rc.d/init.d/ 目录下。这些脚本可以直接执行以启动、停止或重启服务&#xff0c;并且可以接受参数如 start, stop, status 等。 如果你想知道位于 /etc/rc.d/init.d/ 目录下的某个脚本文件实际上指向哪里,如果…

S7 200 smart连接Profinet转ModbusTCP网关与西门子1200PLC配置案例

控制要求&#xff1a;使用MODBUSTCP通信进行两台PLC之间的数据交换&#xff0c;由于改造现场不能改动程序&#xff0c;只留出了对应的IQ地址。于是客户决定使用网关进行通讯把数据传到plc。 1、读取服务器端40001~40005地址中的数据&#xff0c;放入到VW200~VW208中&#xff1…

打破传统仓库管理困局:WMS如何重构出入库全流程

引言 在制造业与零售业高速发展的今天&#xff0c;仓库管理仍普遍面临效率低、错发漏发频发、库存数据滞后等痛点。人工登记导致30%的错单率&#xff0c;货位混乱让拣货耗时增加50%&#xff0c;而账实不符引发的二次采购成本更吞噬着企业利润。如何突破传统管理桎梏&#xff1…

Text2SQL在Spark NLP中的实现与应用:将自然语言问题转换为SQL查询的技术解析

概述 SQL 仍然是当前行业中最受欢迎的技能之一 免责声明&#xff1a;Spark NLP 中的 Text2SQL 注释器在 v3.x&#xff08;2021 年 3 月&#xff09;中已被弃用&#xff0c;不再使用。如果您想测试该模块&#xff0c;请使用 Spark NLP for Healthcare 的早期版本。 自新千年伊…

微服务项目->在线oj系统(Java版 - 5)

相信自己,终会成功 微服务代码: lyyy-oj: 微服务 目录 C端代码 用户题目接口 修改后用户提交代码(应用版) 用户提交题目判题结果 代码沙箱 1. 代码沙箱的核心功能 2. 常见的代码沙箱实现方式 3. 代码沙箱的关键问题与解决方案 4. 你的代码如何与沙箱交互&#xff1f; …

Vue3 Element Plus 中el-table-column索引使用问题

在 Element Plus 的 el-table 组件中&#xff0c;使用 scope.index 是不准确的。正确的索引属性应该是 scope.$index。你的代码需要调整为&#xff1a; vue 复制 下载 <el-button type"primary" size"default" text click"onModifyClick(scope…

Ubuntu20.04下使用dpkg方式安装WPS后,将WPS改为中文界面方法

Ubuntu20.04下使用dpkg方式安装WPS后&#xff0c;将WPS改为中文界面方法 说明方法 说明 Ubuntu20.04下使用dpkg方式安装WPS后&#xff0c;打开WPS后&#xff0c;发现界面是英文的&#xff0c;如有需要可以按照下面的方法将其改为中文界面。 方法 cd /opt/kingsoft/wps-offic…

【​​HTTPS基础概念与原理​】​​HTTPS vs HTTP:为什么现代网站必须用HTTPS?

以下是关于 HTTPS vs HTTP 的详细对比分析&#xff0c;涵盖安全性、性能差异及SEO影响&#xff0c;帮助您全面理解为何现代网站必须采用HTTPS&#xff1a; 一、安全性对比&#xff1a;HTTPS 如何解决 HTTP 的致命缺陷 1. HTTP 的安全隐患 • 明文传输&#xff1a;HTTP 数据以明…

算法刷题(Java与Python)1.二分查找

目录 二分查找 思路 总体 细节 问题一&#xff0c;为什么循环的条件是left<right ,为什么要有等号呢 问题二&#xff0c;为什么中间值是left (right - left) / 2 问题三&#xff0c;为什么最后返回的是左边的值呢 情况 1&#xff1a;target 存在于数组中 情况 2&a…

芯片生态链深度解析(二):基础设备篇——人类精密制造的“巅峰对决”

【开篇&#xff1a;设备——芯片工业的“剑与盾”】 当ASML的EUV光刻机以每秒5万次激光脉冲在硅片上雕刻出0.13nm精度的电路&#xff08;相当于在月球表面精准定位一枚二维码&#xff09;&#xff0c;当国产28nm光刻机在华虹产线实现“从0到1”的突破&#xff0c;这场精密制造…

MongoTemplate 基础使用帮助手册

前言 MongoDB 是一种流行的 NoSQL 数据库&#xff0c;适合存储大量的非结构化数据。MongoTemplate 是 Spring Data MongoDB 中的一个核心组件&#xff0c;它提供了一组丰富的 API 来与 MongoDB 进行交互。它封装了许多常见的数据库操作&#xff0c;使开发者能够轻松执行 CRUD 操…