CSS”叠叠乐“——WEB开发系列16

在现代前端开发中,CSS 是控制网页外观和布局的核心工具。随着项目的复杂化和样式规则的增加,CSS 层叠(cascade)变得更加重要。为了更好地管理和控制样式规则的应用,CSS 引入了层叠层(cascade layers)的概念。


层叠层

CSS 层叠层(cascade layers)是CSS层叠算法的新机制,允许开发者更精确地控制样式规则的优先级。这些层为不同来源的样式声明提供了分离的上下文,使我们能够在处理多个样式表时,更好地管理它们的优先权。

与传统的优先权规则(如特异性和来源顺序)不同,层叠层为样式规则的应用引入了新的维度。通过层叠层,开发者可以定义哪些层优先于其他层,从而更好地控制样式的层叠顺序。

示例:

/* Global styles */
@layer reset {* {margin: 0;padding: 0;box-sizing: border-box;}
}/* Base styles */
@layer base {body {font-family: Arial, sans-serif;}
}/* Component styles */
@layer components {.btn {padding: 10px 20px;background-color: blue;color: white;border-radius: 5px;}
}/* Override styles */
@layer overrides {.btn {background-color: red; /* This will take precedence */}
}

在以上代码中,四个层分别定义了不同的样式规则。​​overrides​​ 层中的 ​​.btn​​ 样式将优先于 ​​components​​​ 层中的相同样式声明。


层叠层的优先权顺序

层叠层的优先权顺序是基于层的声明顺序来决定的。默认情况下,后声明的层具有更高的优先权。因此,在多个层中定义相同选择器时,最后一个层中的样式将生效。

示例:

@layer reset, base, components, overrides; /* 设置层的顺序 *//* Component styles */
@layer components {.header {background-color: yellow;}
}/* Override styles */
@layer overrides {.header {background-color: green; /* 由于 overrides 层在 components 层之后声明,此样式生效 */}
}

在以上代码中,虽然 ​​.header​​ 在两个层中都被定义了背景颜色,但由于 ​​overrides​​ 层具有更高的优先权,最终 ​​.header​​​ 的背景颜色将是绿色。


层叠层可以解决的问题

在开发大型项目时,通常会遇到样式冲突和管理难题。例如,当多个开发者参与项目时,维护不同的样式表可能会导致不可预测的样式覆盖问题。层叠层能够帮助解决以下问题:

  1. 样式冲突:通过将不同来源的样式放置在不同的层中,可以有效减少样式冲突。
  2. 样式管理:层叠层使得样式优先权变得更加清晰和可控。
  3. 模块化:通过将样式分层,可以更轻松地管理不同模块的样式规则。

示例:

/* Reset styles */
@layer reset {* {margin: 0;padding: 0;}
}/* Theme styles */
@layer theme {body {color: #333;background-color: #f4f4f4;}
}/* Custom user styles */
@layer custom {body {background-color: #000;color: #fff; /* 覆盖 theme 层中的样式 */}
}

在这个例子中,​​custom​​ 层中的样式可以覆盖 ​​theme​​​ 层中的样式,从而实现用户定制样式的功能。


嵌套层叠层可以解决的问题

除了基本的层叠层,CSS 还支持嵌套层叠层。嵌套层叠层允许开发者将层叠层组织成层次结构,从而进一步细化样式规则的应用顺序。这在处理复杂的样式系统时尤其有用,例如在组件库中不同的主题或样式变体之间切换时。

示例:

@layer framework {@layer reset, components;@layer reset {* {margin: 0;padding: 0;}}@layer components {.btn {padding: 8px 16px;background-color: blue;}}
}@layer theme {@layer light, dark;@layer light {body {background-color: #fff;color: #000;}}@layer dark {body {background-color: #000;color: #fff;}}
}

在这个示例中,我们创建了两个顶层 ​​framework​​ 和 ​​theme​​​,并在它们内部嵌套了子层。这样可以有效地管理样式的优先级,并根据需求灵活切换不同的样式设置。


创建层叠层

在CSS中创建层叠层非常简单。你可以使用 ​​@layer​​ 规则为样式声明指定一个具名层,也可以在样式规则中直接使用匿名层。

示例:

@layer reset {/* 这是一个具名层,名为 reset */h1 {font-size: 2rem;}
}@layer {/* 这是一个匿名层 */p {font-size: 1rem;}
}

具名层和匿名层都可以用于控制样式的层叠顺序,但具名层更适合在大型项目中使用,因为它们可以更清晰地表达不同样式块的用途和优先级。


使用 ​​@layer​​ 声明具名层

​@layer​​ 规则用于声明具名层,并可以在不同的样式表或样式块中引用这些层。通过指定具名层,你可以更好地组织和管理样式规则。

示例:

@layer typography {body {font-family: 'Helvetica Neue', sans-serif;}
}@layer layout {.container {max-width: 1200px;margin: 0 auto;}
}

在这个示例中,我们创建了两个具名层 ​​typography​​​ 和 ​​layout​​,用于分别管理字体和布局相关的样式。


使用 ​​@layer​​ 块声明具名层和匿名层

​@layer​​ 块可以包含具名层和匿名层,允许你在一个块内定义多个层,从而更好地组织样式规则。

示例:

@layer {@layer reset, base, components;@layer reset {* {margin: 0;padding: 0;}}@layer base {body {font-family: Arial, sans-serif;}}@layer components {.btn {padding: 10px 20px;background-color: blue;color: white;}}
}

在这个示例中,用 ​​@layer​​​ 块定义了三个具名层,并在每个层中定义了不同的样式规则。


使用 ​​@import​​ 将样式表导入具名层和匿名层

你还可以使用 ​​@import​​ 规则将外部样式表导入到特定的层中,从而实现样式的模块化和复用。

示例:

@layer utilities {@import url('utilities.css');
}@layer overrides {@import url('overrides.css');
}

在这个示例中,将两个外部样式表分别导入到了 ​​utilities​​ 和 ​​overrides​​​ 层,从而使得这些样式表中的规则按指定的层叠顺序应用。


嵌套层的概述与优点

嵌套层(nested layers)允许开发者在层中定义子层,从而进一步细化样式的层叠顺序。嵌套层的主要优点包括:

  1. 更好的组织结构:通过嵌套层,可以更清晰地表达不同样式块之间的关系。
  2. 灵活的样式管理:嵌套层可以根据需求调整优先级,从而实现更灵活的样式管理。

创建嵌套层叠层

创建嵌套层叠层非常简单,只需在一个层中定义其他层即可。

示例:

@layer theme {@layer light, dark;@layer light {body {background-color: #fff;color: #000;}}@layer dark {body {background-color: #000;color: #fff;}}
}

在这个示例中,在 ​​theme​​ 层中定义了 ​​light​​ 和 ​​dark​​​ 子层,从而可以根据不同的主题切换样式。


常规层叠层与嵌套层叠层的优先权顺序

常规层叠层的优先权顺序是基于层的声明顺序来决定的,即后声明的层优先级更高。而嵌套层叠层的优先权顺序则是基于其父层的顺序,在父层内部,子层之间的顺序依然起决定作用。

示例:

@layer framework {@layer reset, components;@layer reset {* {margin: 0;}}@layer components {.btn {padding: 8px 16px;background-color: blue;}}
}@layer theme {@layer light, dark;@layer light {body {background-color: #fff;}}@layer dark {body {background-color: #000;}}
}

在这个示例中,​​theme​​ 层中的子层优先权顺序依赖于 ​​theme​​ 层的声明位置,而 ​​framework​​ 层中的子层优先级则取决于它们在 ​​framework​​​ 层中的顺序。


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

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

相关文章

linux centos 防火墙常用命令

1、开放端口 firewall-cmd --zonepublic --add-port80/tcp --permanent 1 2、查看某端口是否开放 firewall-cmd --query-port80/tcp 1 3、查看端口开启列表 firewall-cmd --list-port 1 4、重启防火墙 firewall-cmd --reload 1 5、关闭防火墙 systemctl stop firewalld.se…

Java—Lambda表达式

注意:如果无法判断一个方法是否为函数式接口,可以查看该方法的源码中是否携带FunctionalInterface注解。 lambda表达式再简化写法规则如下。 1. 参数类型可以省略不写 2. 如果只有一个参数,参数的 "( )" 也可以省略。 3. 如果Lambd…

【PyTorch】神经网络的基本骨架-nn.Module的使用以及convolution-layers卷积层介绍

前提文章目录 【PyTorch】深度学习PyTorch环境配置及安装【详细清晰】 【PyTorch】深度学习PyTorch加载数据 【PyTorch】关于Tensorboard的简单使用 【PyTorch】关于Transforms的简单使用 【PyTorch】关于torchvision中的数据集以及dataloader的使用 文章目录 前提文章目录nn.…

AI编程工具的力量:以AWS Toolkit与百度Comate为例,加速程序员开发效率

在当今的数字化转型浪潮中,人工智能(AI)技术不仅重塑了众多行业,也为软件开发领域带来了革命性的变化。AI编程工具,凭借其智能化的特性,正在成为程序员提高开发效率、优化代码质量和加速产品迭代的重要助力…

SQL注入(原理、分类、union、POST注入)

目录 【学习目标、重难点知识】 【学习目标】 【重难点知识】 SQL注入简介 SQL注入原理 SQL注入类型 MySQL与SQL注入的相关知识 information_schema 数据库的结构 数据库查询语句 limit的用法 需要记住的几个函数 注释符号 SQL注入探测方法 SQL注入漏洞攻击流程…

常见开发语言获取USER_AGENT,go,python,php,java,asp,-SAAS本地化及未来之窗行业应用跨平台架构

一、USER_agent 解释 USER_AGENT 是一个 HTTP 请求头字段,它包含了有关发出请求的客户端(通常是浏览器)的信息。 USER_AGENT 字符串描述了客户端的类型(如浏览器名称和版本)、操作系统、移动设备型号等详细信息。服务…

以简单的例子从头开始建spring boot web多模块项目(五)-thymeleaf引擎

继续向里面加,这次是引入thymeleaf渲染引擎。 使用这个引擎的很多,主要是以下几个优点: Thymeleaf是适用于Web和独立环境的现代服务器端Java模板引擎。Thymeleaf的主要目标是为您的开发工作流程带来优雅的自然模板 -HTML可以在浏览器中正确显…

Kubernetes中etcd备份与恢复

在Kubernetes (K8s) 中,etcd 是一个分布式键值存储系统,存储了整个集群的配置和状态数据。由于etcd在K8s集群中的核心作用,定期备份和有效恢复etcd数据对于维护集群的高可用性和数据完整性至关重要。 一、etcd概述 1.1 etcd的作用 etcd是一…

七牛云 CDN 视频瘦身,为视频分发「减负增效」

随着智能设备的普及,以及各种以分享视频为主的平台的兴起,人们记录生活、分享故事的方式不再局限于文字和图片,而是越来越多地通过视频来表达。视频也不再需要复杂的制作过程,变得随手可得。 然而,视频在互联网上的爆炸…

65 华为交换机CE6800基础配置

一 IPV6 使能配置思路 1 改华为交换机的名字 <huaweice65>sys Enter system view, return user view with return command. [~huaweice65]sysname HWCE6800 [*huaweice65]quit Warning: Uncommitted configurations found. Are you sure to commit them before exiting?…

抖音集团 FlinkSQL 性能优化探索及实践

本文作者&#xff1a;李精卫 更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 背景 随着抖音集团内部对流式任务的需求不断增长&#xff0c;Flink SQL作为一种低成本接入手段&#xff0c;已经在内部多个方向上得到…

K8S系列——(二)、K8S部署RocketMQ集群

1、环境准备 要将RocketMQ部署到K8S上&#xff0c;首先你需要提前准备一个K8S集群环境&#xff0c;如图我已经准备好了一个版本为 v1.28.13 的 K8S 集群&#xff08;其他版本也没问题&#xff09;&#xff1a; 角色IPMaster192.168.6.220Node-1192.168.6.221Node-2192.168.6.…

React 学习——Class类组件的基本结构

老版本的react的写法&#xff1a;是通过class类组件的 import { Component } from react; class Counter extends Component{state {count: 0,}setCount ()>{this.setState({ count: this.state.count 1 })}render(){return <button onClick{this.setCount}>{thi…

linux:进程空间的回收,exec族

父子进程的关系 子进程是父进程的副本&#xff1a;这个说法在概念上是正确的&#xff0c;但实际上&#xff0c;子进程并不是父进程的完全物理副本。在Unix和类Unix系统中&#xff0c;fork() 系统调用创建了一个与父进程几乎完全相同的子进程&#xff0c;包括环境变量、打开的文…

【Qt】输入类控件QLineEdit

目录 输入类控件QLineEdit 例子&#xff1a;录入个人信息 例子&#xff1a;使用正则表达式验证输入框的数据 例子&#xff1a;验证俩次输入密码一致 例子&#xff1a;切换显示代码 输入类控件QLineEdit QLineEdit 用来表示单行输入框&#xff0c;可以输入一段文本&#xf…

Go 文件操作基本方法大全

前言 在Go语言中&#xff0c;操作文件主要依赖于标准库中的os和io/ioutil&#xff08;注意&#xff1a;io/ioutil在Go 1.16及以后版本中被逐步弃用&#xff0c;推荐使用io和os包中的函数进行替代&#xff09;以及io和bufio等包。以下是一些基于这些基本库操作文件的方法大全&a…

Python和MATLAB谐波生成导图

&#x1f3af;要点 绘制三次谐波生成透射功率谱、对数对数图表示半导体曲面二次谐波生成&#xff0c;分析判断材料特性谐波均值估计计算边际似然&#xff08;贝叶斯统计&#xff09;二次谐波散射分析胶体染料分子结构交流电谐波波形傅立叶分析分析旋转各向异性谐波高次谐波非线…

梧桐数据库(WuTongDB):数据库技术中LL算法详解

LL 算法是一种自顶向下的语法分析算法&#xff0c;广泛用于构建解析器。LL 分析器逐个读取输入符号&#xff0c;从左到右分析&#xff08;Left-to-Right&#xff09;&#xff0c;并使用最左推导&#xff08;Leftmost Derivation&#xff09;来生成语法树。因此&#xff0c;LL 分…

appium下载及安装

下载地址&#xff1a;https://github.com/appium/appium-desktop/releases 双击安装就可以

深入学习SQL优化的第三天

目录 聚合函数 排序和分组 聚合函数 1251. 平均售价 表&#xff1a;Prices------------------------ | Column Name | Type | ------------------------ | product_id | int | | start_date | date | | end_date | date | | price | int …