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

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.lryc.cn/news/2380261.html

相关文章:

  • 手机怎么查看网络ip地址?安卓/iOS设备查询指南
  • React-useRef
  • 无损耗协议:PROFINET和EtherNet IP网关的高效安装指南
  • 【知识产权出版社-注册安全分析报告-无验证方式导致安全隐患】
  • std::ranges::iota
  • C++(24):容器类<list>
  • 【C++】不推荐使用的std::allocator<void>
  • 基于OAuth2+SpringSecurity+Jwt实现身份认证和权限管理后端服务
  • vue3 el-table实现字段可编辑
  • 基于React的高德地图api教程005:圆形标记的绘制、删除、修改
  • liunx定时任务,centos定时任务
  • 三种嵌入式开发常用的组网方式
  • ubuntu 20.04 ping baidu.coom可以通,ping www.baidu.com不通 【DNS出现问题】解决方案
  • 城市排水管网流量监测系统解决方案
  • Ubuntu Desktop QEMU/KVM中使用Ubuntu Server 22.04配置k8s集群
  • YOLOv8 在单片机上的几种部署方案
  • 后端框架(1):Mybatis
  • linux下tcp/ip网络通信笔记1,
  • SqlHelper 实现类,支持多数据库,提供异步操作、自动重试、事务、存储过程、分页、缓存等功能。
  • 语音识别——声纹识别
  • window 显示驱动开发-报告图形内存(三)
  • 安全运维 -- linux磁盘挂载到windows
  • 使用 Apache POI 生成 Word 文档
  • 高防服务器流量“清洗”什么意思
  • UE5 GAS框架解析内部数据处理机制——服务器与客户端
  • Unity实用技能-UI定位总结
  • 开源GPU架构RISC-V VCIX的深度学习潜力测试:从RTL仿真到MNIST实战
  • 服务间的“握手”:OpenFeign声明式调用与客户端负载均衡
  • 26、DAPO论文笔记(解耦剪辑与动态采样策略优化,GRPO的改进)
  • JQuery 禁止页面滚动(防止页面抖动)