CSS变量(CSS Variables)

article/2025/8/23 11:19:55

概述

       如果突然有一天,当你页面的主题色发生变化时,有许多元素的颜色要一起变化,这是你会考虑怎么做呢?使用Less/Sass/Stylus来定义一个颜色变量?还是专门去定义多了个类名来控制元素?
       使用第一种方法,有他的弊端,浏览器无法识别CSS预处理器的语法,所以我们都会将Less/Sass/Stylus的文件编译成CSS文件,这样的话就无法再去修改CSS预处理器中变量的值了,因为我们的页面中根本没有Less等CSS预处理器文件
       使用第二种方法,也有弊端,如果一个元素是字体颜色为blue,另一个元素是背景颜色为blue,那这时候就要取多个类名才能实现,这样太不方便了
       说完了上面这两种方法的弊端,那我们就要介绍一下今天的主角:CSS变量(英文CSS Variables,官方取名为自定义属性或者级联变量)

一.什么是CSS变量

CSS 变量当前有两种形式:

       变量,就是拥有合法标识符和合法的值。我们可以通过使用var()函数来使用变量。例如:var(–example-variable)会返回–example-variable所对应的值

       自定义属性。这些属性使用–where的特殊格式作为名字。例如–example-variable: 20px;这段代码意味着将20px赋值给–example-varibale变量。

注意:
1.在之前的标准中,自定义属性以var-作为前缀,后来才改成–前缀。Firefox 31和以后的版本遵循新标准。
2.自定义属性和常规属性一样,作用在当前的层级,若没有定义,则从其父元素继承其值。

二.为什么要使用CSS变量

       在构建大型站点时,作者通常会面对可维护性的挑战。在这些网页中, 所使用的 CSS 的数量是非常庞大的,并且在许多场合大量的信息会重复使用。例如,在网页中维护一个配色方案,意味着一些颜色在CSS文件中多次出现,并被重复使用。当你修改配色方案时,不论是调整某个颜色或完全修改整个配色,都会成为一个复杂的问题,不容出错,而单纯查找替换是远远不够的。
       如果使用了 CSS 框架,这种情况会变得尤其糟糕,此时如果要修改颜色,则需要对框架本身进行修改。在这些场合使用 LESS 或 Sass 类似的预处理器是非常有帮助的,但是这种通过添加额外步骤的方式,可能会增加系统的复杂性。CSS变量为我们带来一些预处理器的便利,并且不需要额外的编译。
       这些变量的第二个优势就是名称本身就包含了语义的信息。CSS 文件变得易读和理解。main-text-color比文档中的#00ff00更容易理解,特别是同样的颜色出现在不同的文件中的时候。

三.怎么使用CSS变量

初始样式:

#box1{width:200px;height: 200px;border: 1px solid;color:blue;}#box2{width:200px;height: 200px;border: 1px solid;background-color:blue;color:white;}

页面结构:

    <div id="box1">这是box1</div><div id="box2">这是box2</div>

页面效果:

在这里插入图片描述

1.定义CSS变量

这时候我们来定义一个CSS变量,变量值为blue

        :root{--global-color:blue;}

       在style标签中首先声明一个全局伪元素:root,然后在内部声明变量名及其变量值
注意:变量名一定要–开头

       到这里我们成功定义了CSS变量,接下来我们来看下如何使用CSS变量

2.使用CSS变量

       我们使用上面定义的变量分别替换掉#box1元素的color属性的值和#box2元素的background-color属性的值

 		:root{--global-color:blue;}#box1{width:200px;height: 200px;border: 1px solid;color:var(--global-color);}#box2{width:200px;height: 200px;border: 1px solid;background-color:var(--global-color);color:white;}

       使用起来虽然没有Less等CSS预处理器那么简单,但是还是比较方便的
语法:CSS属性名:var(CSS变量名)
注意:CSS变量名是包括了—的,千万别漏了

       到这里我们已经看完了CSS变量的定义和使用,那接下来我们再来看看怎么修改CSS变量的值

3.修改CSS变量

       在我们的页面中,如果想要动态修改CSS变量的值,我们需要借助到JavaScript来实现

 	//找到html标签var htmlNode=document.documentElement;//将html标签(根标签)的CSS变量(--global-color)的值修改为redhtmlNode.style.setProperty("--global-color", "red");

修改前:
在这里插入图片描述
在这里插入图片描述
修改后:
在这里插入图片描述
在这里插入图片描述

       此时我们可以很明显的看到html标签上多了一个标签属性style,内部是我们修改的CSS变量及其变量值,到这里就修改成功了
语法:DOM对象.style.setProperty(CSS变量名,修改后的CSS变量值)
注意:修改时不能使用(DOM对象.style[CSS变量名]=变量值)的语法进行修改,例如:htmlNode.style["–global-color"]=“red”,此方法无效

4.读取CSS变量

       在我们的JavaScript代码中,时常会需要去读取CSS变量的值,那我们来看下如何读取CSS变量的值

	//找到html标签var htmlNode=document.documentElement;//将html标签(根标签)的CSS变量(--global-color)的值修改为redhtmlNode.style.setProperty("--global-color", "red"); //读取html标签(根标签)的CSS变量(--global-color)的值,并在控制台中打印// var value=htmlNode.style.getPropertyValue('--global-color');var value=getComputedStyle(htmlNode)['--global-color'];console.log(value) 

http://chatgpt.dhexx.cn/article/DmmF76hK.shtml

相关文章

详细介绍css3中的变量使用

CSS3新功能之变量&#xff1a;variables css3为我们提供了一个强大的功能自定义属性&#xff0c;也就是变量&#xff0c;他能让我们更改色系、皮肤、自适配变得简单。我们只需要更改一些我们事先定义好的变量就可以轻松实现各种效果。特别是我们在开发大型项目的时候有多处使用…

详解CSS(一)

&#x1f3cd;️作者简介&#xff1a;大家好&#xff0c;我是亦世凡华、渴望知识储备自己的一名在校大学生 &#x1f6f5;个人主页&#xff1a;亦世凡华、的博客 &#x1f6fa;系列专栏&#xff1a;CSS专栏 &#x1f6b2;给大家推荐一个网站&#x1f609;很实用&#x1f61a;我…

读书笔记《MySQL技术内幕:InnoDB存储引擎》第5章 索引与算法

索引是应用程序设计和开发的一个重要方面。若索引太多&#xff0c;应用程序的性能可能会受到影响。而索引太少&#xff0c;对查询性能又会产生影响。要找到一个合适的平衡点&#xff0c;这对应用程序的性能至关重要。 一些开发人员总是在事后才想起添加索引——我一直认为&…

32.项目总结--技术点部分

项目整体架构 Docker 虚拟化容器计数,Docker基于镜像,可以秒级启动各种容器,每一种容器都是一个完整的运行环境,容器之间相互隔离; 安装docker 安装前卸载原有的docker yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-lat…

【HCIA-Datacom V1.0培训教材】广域网技术

局域网LAN&#xff08;Local Area Network&#xff09; 广域网WAN&#xff08;Wide Area Network&#xff09; 数字数据网DDN&#xff08;Digital Data Network&#xff09; 帧中继FR(Frame Relay) 同步数字结构SDH&#xff08;Synchronous Digital Hierachy&#xff09; …

一文了解Docker容器技术的操作

一文了解Docker容器技术的操作 前言 相信点进这篇文章的Coder&#xff0c;不管是在各大技术论坛上、技术交流群&#xff0c;亦或招聘网上&#xff0c;应该都有见到过Doker容器技术的面孔&#xff0c;随着社会节奏的加快以及迫于生活的压力&#xff0c;在计算机技术日新月异的今…

自然语言处理简介(1)---- 服务梳理与传统汉语分词

文章大纲 1.Nlp技术体系简介1.1 基础技术1.2 Nlp 核心技术1.3 NlP&#xff08;高端技术&#xff09; 2.知名NLP 服务系统简介2.1汉语分词系统ICTCLAS2.2 哈工大语言云&#xff08;Language Technology Platform&#xff0c;LTP&#xff09;2.3 Amazon Comprehend2.4 阿里云NLP2…

微服务技术栈学习笔记(自用)

微服务技术栈学习笔记&#xff08;自用&#xff09; 文章目录 微服务技术栈学习笔记&#xff08;自用&#xff09;1.导学2.Eureka2.1微服务远程调用&#xff1a;2.2搭建Eureka 3.Ribbon负载均衡4.Nacos4.1服务注册4.2 分级存储 5.Feign6.Gateway6.1搭建6.2路由断言工厂6.3 过滤…

自然语言处理技术

自然语言处理技术&#xff08;NLP&#xff09;在推荐系统中的应用 NLP 推荐系统 词袋模型 阅读7798 作者&#xff1a; 张相於&#xff0c;58集团算法架构师&#xff0c;转转搜索推荐部负责人&#xff0c;负责搜索、推荐以及算法相关工作。多年来主要从事推荐系统以及机器学习…

Java.mob.org.cn搜索_探讨Android全文检索技术

原标题&#xff1a;探讨Android全文检索技术 写在前面 客户端本地存储数据一般使用的存储方式是&#xff1a;文件、SharedPreference、数据库(SQLite) 如果我们要做一些查询的操作&#xff0c;对于文件的方式&#xff0c;通过序列化和反序列化来进行数据的增删改查操作&#xf…

seg:NLP之正向最大匹配分词

已迁移到我新博客,阅读体验更佳seg:NLP之正向最大匹配分词 完整代码实现放在我的github上:click me 一、任务要求 实现一个基于词典与规则的汉语自动分词系统。 二、技术路线 采用正向最大匹配(FMM)方法对输入的中文语句进行分词&#xff0c;具体的实现可以分为下面几个步骤&am…

Elasticsearch搜索技术实战

elasticsearch下载安装 本篇前述的ES版本是7.14.2&#xff0c;实现了与Mysql的数据同步&#xff0c;ES端的搜索与分词&#xff1b;后来由于和Springcloud&#xff08;spring-data-elasticsearch:3.0.6&#xff09;集成发现版本问题&#xff0c;换成ES5.5.0&#xff0c;所以完整…

Docker技术

在这里插入代码片# Docker 官方文档地址:https://www.docker.com/get-started 中文参考手册:https://docker_practice.gitee.io/zh-cn/ 1.什么是 Docker 1.1 官方定义 最新官网首页 # 1.官方介绍 - We have a complete container solution for you - no matter who you are…

Elasticsearch - 文档分析,IK分词器;文档冲突(十二)

阅读本文前可先参考 Elasticsearch - Elasticsearch详解&#xff1b;安装部署&#xff08;一&#xff09;_MinggeQingchun的博客-CSDN博客 https://blog.csdn.net/MinggeQingchun/article/details/126855747 一、文档分析 文档分析过程如下&#xff1a; 1、将一块文本分成适…

springboot+Elasticsearch实现word,pdf,txt内容抽取并高亮分词全文检索

文章目录 需求 一、环境 二、功能实现 1.搭建环境 2.文件内容识别 三.代码 需求 产品希望我们这边能够实现用户上传PDF,WORD,TXT之内得文本内容&#xff0c;然后用户可以根据附件名称或文件内容模糊查询文件信息&#xff0c;并可以在线查看文件内容 一、环境 项目开发环境&…

使用lucce分词怎么_ElasticSearch 分词器,了解一下

这篇文章主要来介绍下什么是 Analysis &#xff0c;什么是分词器&#xff0c;以及 ElasticSearch 自带的分词器是怎么工作的&#xff0c;最后会介绍下中文分词是怎么做的。 首先来说下什么是 Analysis&#xff1a; 什么是 Analysis&#xff1f; 顾名思义&#xff0c;文本分析就…

自然语言处理 # 中文分词技术 概述

定义 中文分词&#xff08;Chinese Word Segmentation&#xff09;就是将连续的字序列按照一定的规范重新组合成词序列的过程。 Ques:为什么要分词&#xff1f; Ans: 词是最小的能够独立运用的语言单位 Ques:什么是独立运用呢&#xff1f; Ans:它可以解释为“单独做句法成分或…

Python 中 concurrent.futures 模块使用说明

Python 中 concurrent.futures 模块使用说明 转载请注明出处&#xff1a;https://blog.csdn.net/jpch89/article/details/87643972 文章目录 Python 中 concurrent.futures 模块使用说明0. 参考资料1. 概述2. Executor Object 执行器对象3. ThreadPoolExecutor 线程池执行器4.…

【ruoyi】java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.ScheduledThreadPoo

前言 ruoyi 4.6.0jdk1.8 错误 11:48:16.879 [http-nio-9031-exec-25] INFO c.r.f.s.r.UserRealm - [doGetAuthenticationInfo,128] - 对用户[admin]进行登录验证..验证未通过{} java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.ScheduledThre…

【学习积累】Queue 与 ConcurrentQueue性能测试

在 C# 中&#xff0c;关于队列&#xff08;Queue&#xff09;有两种&#xff0c;一种就是我们普通使用的队列&#xff0c;另一种是线程安全的队列 ConcurrentQueue<T> 。 ConcurrentQueue表示线程安全的先进先出 (FIFO) 集合。https://learn.microsoft.com/zh-cn/dotnet…