【CSS】CSS使用变量与变量定义

news2024/11/16 16:50:11

如何定义可以在CSS中使用的变量

CSS变量(也称为自定义属性)的定义规则如下:

  1. 使用–作为前缀,后跟变量名。变量名可以由字母、数字、连字符和下划线组成,并且不能以连字符开头。
  2. 变量名区分大小写。
  3. 变量定义在选择器范围内的任何地方,但通常会将其定义在 :root 伪类中,以使其在整个文档中可用。
  4. 变量定义使用以下语法:--variable-name: value;,其中 value 可以是任何有效的CSS值,例如颜色、长度、字体等。
  5. 变量的值可以是其他变量或计算表达式,例如 --primary-color: var(--secondary-color);--width: calc(100% - 20px);
  6. 变量值不需要引号,除非值本身包含特殊字符。
  7. 变量可以在选择器的任何地方使用,通过 var() 函数来引用它们,如 property: var(--variable-name);

这些规则使您能够在CSS中定义和使用变量,以实现样式重用和动态样式的目的。


CSS中的定义变量并使用

当使用CSS变量时,可以在任何属性的值中引用它们。以下是一些示例,展示了如何在CSS中使用变量:

:root {
  --primary-color: #ff0000;
  --font-size: 16px;
}

.header {
  background-color: var(--primary-color);
  font-size: var(--font-size);
}

.button {
  color: var(--primary-color);
  font-size: calc(var(--font-size) * 1.2);
}

.container {
  border: 1px solid var(--primary-color);
  padding: 10px;
  margin-top: calc(var(--font-size) + 20px);
}

:rootCSS中的一个伪类,表示文档的根元素。在HTML文档中,根元素通常是 <html> 元素。

使用 :root 伪类来定义CSS变量时,可以确保变量在整个文档中都是有效的,并且可以被其他选择器引用和使用。

在示例中的代码块中,:root 伪类用于定义变量 --primary-color--font-size。这意味着这些变量可在整个文档中被引用,并且可以适用于任何元素或选择器。

.header 类选择器中,background-color 属性的值使用了 var(--primary-color),这意味着背景颜色将根据 --primary-color 变量的值来渲染。

.button 类选择器中的 colorfont-size 属性也使用了 var(--primary-color)var(--font-size),分别将文本颜色和字体大小设置为相应变量的值,并且在 font-size 属性中使用了 calc() 函数进行动态计算。

.container 类选择器中,border 属性的值和 margin-top 属性的值都使用了 var(--primary-color)var(--font-size),分别用于边框颜色和外边距的计算。

通过使用CSS变量,您可以轻松地在整个样式表中重用值,并且如果需要更改这些值,只需更改变量的定义即可,而不必在代码中逐个替换每个使用该值的地方。

在媒体内定义变量

CSS变量还可以在媒体查询和伪类中使用,使其更加灵活和动态。例如:

@media screen and (max-width: 768px) {
  :root {
    --primary-color: #00ff00;
  }
}

在上述媒体查询中,我们在屏幕宽度小于等于768像素时将 --primary-color 变量的值更改为绿色。

使用CSS变量可以帮助您更好地组织和管理样式,并提供更大的灵活性和可维护性。


JS中定义的变量并在CSS中使用

子元素在父元素内部左右移动
在这里插入图片描述
代码

<!DOCTYPE html>
<html>
  <head>
    <title> Document </title>
    <style>
      .container{
        width:  80%;
        height: 300px;
       border:3px solid #aaa;
       position: relative;
       margin: 0 auto;
      }

      .item{
        width: 100px;
        height: 100px;
       border-radius: 50%;
       background: #f40;
       left: 0;
       top: 30px;
       position: absolute;
       animation: move 4s linear infinite;
      }

    @keyframes move {
      50% {   
        transform: translateX(calc(var(--w) - 100%));
      }
    }
  </style>
  </head>
  <body>
    <div class="container">
      <div class="item"></div>
    </div>
    <script>
      const container = document.querySelector(".container");
      const w = container.clientWidth;
      container.style.setProperty('--w',w + 'px');
  </script>
  </body>
</html>

第一步、在js中添加变量--w

  1. 使用document.querySelector获取classcontainer的元素,使用clientWidth获取.container元素的宽度,在.container设置一个自定义变量--w,值为container 元素的宽度。
      const container = document.querySelector(".container");
      const w = container.clientWidth;
      container.style.setProperty('--w',w + 'px');

运行看看变量加哪了

在这里插入图片描述

第二步、在css中使用变量--w

2、在item元素获取.container父元素的宽度

var(--w)

扩展

calc 中运算符的书写规则

1、没有动画效果,可能是由于calc格式错误,导致-运算符没有起到作用
calc属性不起作用是因为书写格式错误,正确的格式需要在运算符的两边留有空格。

错误写法

      50% {   
        transform: translateX(calc(var(--w)-100%));
      }

正确写法

      50% {   
        transform: translateX(calc(var(--w) - 100%));
      }

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

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

相关文章

数据中心可视化——智慧机房数字孪生,高效运维管理

IDC&#xff08;Internet Data Center&#xff09;数据中心可视化是指通过可视化的方式对数据中心的运行状态、资源使用情况、安全监控等进行展示和管理。可以帮助管理员更好地了解数据中心的运行情况和趋势&#xff0c;及时发现问题并采取措施&#xff0c;提高数据中心的运行效…

鼠标悬停,用气泡形式提示用户信息

需求 鼠标悬停,用气泡形式提示用户名字信息 效果图 分析 图中深浅两色的小方块是由v-if遍历二维数组得来的,所以这个需求本质上是原生html元素的出现与隐藏,重点在于知道显示或隐藏哪一个元素 代码 <!-- shelvesList就是后台给前端的,关于库位信息的二维数组 --> &l…

用RunnerGo平替JMeter?这个测试平台确实可以!

1、前言 目前在性能测试领域市场jmeter占有率非常高&#xff0c;主要原因是相对比其他性能测试工具使用更简单&#xff08;开源、易扩展&#xff09;&#xff0c;功能更强大&#xff08;满足多种协议的接口&#xff09;&#xff0c;但是随着研发协同的升级&#xff0c;平台化…

java版本企业电子招标采购系统源码+二次开+Spring Cloud + Spring Boot 发

一、立项管理 1、招标立项申请 功能点&#xff1a;招标类项目立项申请入口&#xff0c;用户可以保存为草稿&#xff0c;提交。 2、非招标立项申请 功能点&#xff1a;非招标立项申请入口、用户可以保存为草稿、提交。 3、采购立项列表 功能点&#xff1a;对草稿进行编辑&#x…

耳骨传导耳机哪个牌子好,几款实战性高的耳骨传导耳机分享

骨传导耳机是一种利用骨头直接传声的耳机&#xff0c;因为它不需要通过耳道来听音乐&#xff0c;所以能够更好地保护听力&#xff0c;也不会因为佩戴耳机而影响到我们正常的交流&#xff0c;可以说是一种比较健康的耳机。不过骨传导耳机的价格相对于普通蓝牙耳机来说还是要贵一…

二叉树题目:相同的树

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;相同的树 出处&#xff1a;100. 相同的树 难度 3 级 题目描述 要求 给你两个二叉树的根结点 p \texttt{p} p …

振动在线监测:如何优化您的设备维护计划?

在工业生产中&#xff0c;设备的维护计划对于确保设备可靠性和生产效率至关重要。而振动在线监测作为一种先进的技术手段&#xff0c;可以实时监测设备振动情况&#xff0c;帮助企业优化维护计划&#xff0c;提高设备维护效率。本文将介绍振动在线监测的重要性&#xff0c;并分…

SparkSQL的分布式执行引擎(Spark ThriftServer)

文章目录 1.Spark ThriftServer2.启动 Spark ThriftServer3.Beeline方式连接4.DataGrip方式连接5. 代码方式6. SparkSQL运行方式7.参考文章 1.Spark ThriftServer Spark ThriftServer 相当于一个持续性的Spark on Hive集成模式&#xff0c;可以启动并监听在10000端口&#xff…

182_Power BI 使用 DAX 按照先进先出原则计算毛利润

182_Power BI 使用 DAX 按照先进先出原则计算毛利润 一、背景 在笔者以往的文章中也有先进先出的案例&#xff0c;可以参考(https://jiaopengzi.com/?s%E5%85%88%E8%BF%9B%E5%85%88%E5%87%BA)。 今天我们来看一个网友提出的问题&#xff0c; 先进先出的原则&#xff0c;入…

ATM模拟机-实战开发-前期准备

需求分析 项目名称&#xff1a;ATM模拟存取钱系统 目录 需求分析 项目名称&#xff1a;ATM模拟存取钱系统 项目目标功能分析&#xff1a; 用户功能&#xff1a; 提供功能 基本功能 管理员功能&#xff1a; 提供功能 基本功能 详细分析 用户功能 管理员功能 用户…

ModaHub大禹智库:ModelScope魔搭社区的“下载数据严重造假“的说法可能存在一定的合理性

目录 首先&#xff0c;我们需要了解ModelScope魔搭社区的运营模式和数据收集方式。 其次&#xff0c;我们需要考虑ModelScope魔搭社区的用户群体和应用场景。 此外&#xff0c;我们还需要考虑ModelScope魔搭社区的发展时间和市场竞争情况。 综上所述&#xff0c;ModelScope…

PHP反序列化漏洞之Phar

目录 1、认识phar类型文件 2、制作phar文件 3、phar的上传与读取 4、漏洞利用的条件 1、认识phar类型文件 这种文件可以通过phar协议来读取&#xff08;使用phar://后面接文件路径即可读取&#xff09; 先给大家看一下phar文件的大致样子&#xff1a; 它一般包括头部信息&…

Windows10下使用wsl2+ubuntu1804

一定好好看官方文档 适用于 Linux 的 Windows 子系统文档 | Microsoft Learn 一、安装WSL 1.1、方式一&#xff1a; 现在&#xff0c;可以使用单个命令安装运行 WSL 所需的一切内容。 在管理员模式下打开 PowerShell 或 Windows 命令提示符&#xff0c;方法是右键单击并选择…

OpenAI Gym入门与实操(3)

接前一篇文章&#xff1a;OpenAI Gym入门与实操&#xff08;2&#xff09; 本文内容参考&#xff1a; Getting Started With OpenAI Gym | Paperspace Blog&#xff0c; 【强化学习】 OpenAI Gym入门&#xff1a;基础组件&#xff08;Getting Started With OpenAI Gym: The B…

leetcode 989.数组形式的整数加法

⭐️ 题目描述 &#x1f31f; leetcode链接&#xff1a; 数组形式的整数加法 ⭕️ 代码&#xff1a; /*思路&#xff1a;数组从后往前和k的低位相加&#xff0c;若大于等于10则进一.[1 , 2 , 0 , 0] 3 44 3 2 1 最后逆置数组即可。 */ int* addToArrayForm(…

【进程】快速上手进程操作

目录 0. 进程概述 1. 创建进程 1.1 进程的创建&#xff1a;fork函数 1.2 进程的等待&#xff1a;wait()、waitpid() 1.3 特殊进程&#xff1a;僵尸进程、孤儿进程、守护进程 1.4 进程的终止&#xff1a;exit和_exit函数 1.5 进程退出清理&#xff1a;atexit函数 1.6 进…

自动部署代码导致接口访问404

问题原因&#xff1a;.user.ini文件中open_basedir与线上服务器中不同导致 由于.user.ini文件特殊性质 需要修改其中文件需要root权限也无法完成 推荐文章(linux系统中文件有哪些隐藏属性_帮助中心_文汇软件_山东文汇信息【官方网站】) 即可解决

【elementplus】body设置zoom后,el-table开启show-overflow-tooltip后,表格的tooltip显示会错位的解决方案

由于我的项目是无法避免使用zoom&#xff0c;所以只记录zoom后的解决方案 示例&#xff1a;明明划过的是第一行&#xff0c;tooltip却显示到了第四行的位置&#xff1b; 正确显示&#xff1a;划过第一行&#xff0c;tooltip显示在第一行的位置 代码&#xff1a;使用transfor…

关于 Asyncio,别再使用run_until_complete了

熟悉Python 的 Asyncio 进行异步编程的小伙伴肯定对下面的写法不陌生&#xff1a; import asyncioasync def test():await asyncio.sleep(3)print("Test rersult")loop asyncio.get_event_loop() loop.run_until_complete(test())这种写法也是在网上搜到的最多的协…

VUE小白学习-官方网站资料学习-2023年5月22日

VUE小白学习-官方网站资料学习-2023年5月22日 VUE干啥的&#xff1f;单文件组件&#xff1f;官方说&#xff0c;VUE前端万金油。 日期&#xff1a;2023年5月22日 VUE干啥的&#xff1f; 是一个前端框架&#xff0c;有自己的一套规则&#xff0c;方便前端开发。 单文件组件&am…