CSS函数

news2024/12/27 7:23:41

目录

一、背景

二、函数的概念

1. var()函数

2、calc()函数

三、总结


一、背景

今天我们就来说一说,常用的两个css自定义属性,也称为css函数。本文中就成为css函数。先来看一下官方对其的定义。

自定义属性(有时候也被称作CSS 变量或者级联变量)是由 CSS 作者定义的,它包含的值可以在整个文档中重复使用。由自定义属性标记设定值(比如: --main-color: black;),由 var() 函数来获取值(比如: color: var(--main-color);)复杂的网站都会有大量的 CSS 代码,通常也会有许多重复的值。举个例子,同样一个颜色值可能在成千上百个地方被使用到,如果这个值发生了变化,需要全局搜索并且一个一个替换(很麻烦哎~)。自定义属性在某个地方存储一个值,然后在其他许多地方引用它。另一个好处是语义化的标识。比如,--main-text-color 会比 #00ff00 更易理解,尤其是这个颜色值在其他上下文中也被使用到。自定义属性受级联的约束,并从其父级继承其值。

那么接下来就来说一说,今天的主角,var()和calc()两个常见的css函数,之后也会逐步的去讲解一些,其他的css函数,好了,进入正题,开始var()和calc()的讲解。

二、函数的概念

1. var()函数

这个函数用于插入自定义的属性值

正如官方文档上所介绍的,当我们在制作复杂的网站的时候会有大量的css代码,也会有许多复杂的值,那么同样的值也一定会在不同的地方重复的去运用,那么比如有一天需要将这些值统一的更改为另一个值,如果没有这个函数,我们就需要一个一个的找到这个属性然后注意更改,这就大大的降低了维护的效率,也提高了维护的成本。

所以var()函数的出现, 使得CSS 函数可以插入一个自定义属性(有时也被称为“CSS变量”),用来代替非自定义属性中值的任何部分。它允许我们在样式表中定义可重用的值,并在多个地方引用它们。这种机制不仅提高了代码的可维护性和灵活性,还使得动态更新样式成为了可能

接下来就来说一说var()函数的语法:

var(--custom-property-name,fallback-value);

解释:

--custom-property-name:这个属性值是必须设置的,表示自定义属性的名称,名称之前必须要有两个连字符【-】。

fallback-value:这个值可以认为是备用值也可以叫做回退值,也就是说当主属性值无法正常显示的时候就会自动使用备用的属性值,这个值是可选的。建议添加,可以增强代码的健壮性。

  • 声明方式

    声明方式有两种,一种是全局声明,另一种是局部声明,故如其名,它们的作用范围是不同的。那么接下来逐一讲解:

    1. 全局声明

      全局声明通常配合:root伪类【:root伪类的作用:这个伪类是用来匹配根元素的,对于 HTML 来说,:root 表示元素除了[优先级]更高之外,与 html 选择器相同,也就可以认为通过root伪类声明,就相当于在html上进行声明,也就是在整个网页全局声明】进行声明,这样就可以实现全局的声明,以下是全局声明的语法:

    :root {
      --main-color: red; /* --main-color就叫做自定义属性的名称 */
      --second-color: blue;
    }
    1. 局部声明

    局部声明需要在元素内部进行声明,或者是在某一块元素中声明声明的语法和全局声明的语法是一样的。这里就不做过多解释。

  • 使用方式

    想要使用就必须去声明,声明后就可以在属性中去引用属性值了。

    例如:

    <div class="box">文本</div>
    :root{
    --min-color:red;
    --second-color:blue;
    }
    .box{
        width:200px;
        height:200px;
        background:var(--min-color);
        color:var(--second-color);
    }

    这段代码的结果大家可以去试一下,我这里就把结果告知大家,你会看到一个背景是红色,文字是蓝色的盒子。这就是var()函数的使用。

  • 动态更新

    与javaScript配合可以实现动态的更新,首先需要通过js获取到更改变量的值,然后进行更改,随后所有使用了自定义属性名称的属性都会进行改变。

    实例:

    :root{
        --min-color:red;
    }
    .box{
        width:200px;
        height:200px;
        background:var(--min-color);
    }
    <div class="box">文本</div>
    document.documentElement.style.setProperty('--min-color','blue')

    这块大家可以猜一下,是什么结果?

    效果大家自己实践一下,结果会是一个蓝色背景的盒子,原因就是在js部分通过获取了这个属性的值,进行了动态更改,然后就被更改为了蓝色。

    除了动态更新,还有很多的高级的用法。比如下面要说的。

  • 与calc()配合使用

    与calc()配合使用可以实现很多复杂样式的计算,例如:

    <div class="box">文本</div>
    .box{
        --width:200px;
        width:calc(var(--width)*1.5);
        height:calc(var(--width)*1.5);
        background:red
    }

    同样的我不会去展示效果,大家可以自己实践一下,结果就是大家会看到一个300*300的一个红色盒子,大家可以检查元素进行查看。

  • 兼容性问题

  • 关于兼容性的问题大家可以放心使用,从以上可以看出,大部分的浏览器都是支持这个属性的,大家可以放心使用。

  • 小结

    关于CSS3中的var()函数为样式表提供了强大的变量支持,使得样式的定义和使用更加灵活和可维护。通过合理使用自定义属性,我们可以减少代码重复,提高开发效率,并轻松实现样式的动态更新。

2、calc()函数

关于这个函数,MDN中是这样解释的:

此 calc() 函数用一个表达式作为它的参数,用这个表达式的结果作为值。

也就是说可以通过这个函数允许我们将属性值替换为一个表达式,然后将这个表达式的值去替换我们实际使用的属性值。它允许我们在指定 CSS 属性值时使用加法、减法、乘法、除法等基本运算,从而实现更灵活的布局和样式设计

  • calc() 常用的基本运算:

  1. 加法(+):calc(100% + 20px)

  2. 减法(-):calc(100% - 50px)

  3. 乘法(*):calc(50px * 2)

  4. 除法(/):calc(100px / 2)

  5. 取余(%):calc(100px % 3)

  6. 括号(()):calc((1 + 2) * 3)

  • 语法

property: calc(expression)

property表示想要使用这个函数想css属性,而expression就是要设计的表达式,单位可以混用

  • 可以作为属性值使用

    .el {
      font-size: calc(3vw + 2px);
      width:calc(100% - 20px);
      height:calc(100vh - 20px);
      padding:calc(1vw + 5px);
    }

注意:calc() 中的操作符(+、-、*、/)前后必须保留空格,否则会导致计算失败。

  • 使用

    在属性值中使用

    .box {
        font-size: calc(3vw + 2px);
        width: calc(100% - 100px);
        height: calc(10vw - 20px);
        background: orange;
    }

    用于长度和其他数字

    .box {
      width: calc(2px*3);
      height: 200px;
      background: orange;
    }

    在媒体查询中使用

    * {
      margin: 0;
    }
    .box {
      width: 200px;
      height: 200px;
      background: orange;
    }
    @media (max-width: calc(500px + 1rem)) {
      .box {
          background: red;
      }
    }

    max-width:最大的宽度 500px + 1rem(16px) = 516px 这段代码的意思就是:视口的宽度不能超过516Px,在516px范围内背景色是红色

    注意:

    1、加法和减法要求两个数字都必须有单位

    2、除法要求第二个数字是没有单位的

    3、乘法要求其中一个数字是没有单位的

三、总结

虽然这些css自定义属性【函数】看上去比较复杂,但是这可以帮助我们更好的去简化代码结构,节省空间,这也是比较推荐的写法,兼容性问题也帮大家看了,大部分主流的浏览器都是兼容的,放心使用即可!!

感觉不错的伙伴,可以加入我的社区,后期会有更多关于前端的知识会分享到社区,欢迎加入!

社区链接:https://bbs.csdn.net/forums/fe46c651de82465696aeabef266b0476?joinKey=indbz3pgxkw6-kol15r32n3-1-2d4abe395628810b94216b8a35c44ca3&roleId=1170992icon-default.png?t=O83Ahttps://bbs.csdn.net/forums/fe46c651de82465696aeabef266b0476?joinKey=indbz3pgxkw6-kol15r32n3-1-2d4abe395628810b94216b8a35c44ca3&roleId=1170992

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

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

相关文章

UG NX二次开发(C#)-选择对象居中(不是全部居中)

文章目录 1、前言2、什么是对象居中3、功能实现代码3.1 对象居中3.1 恢复原视图1、前言 在UG NX二次开发过程中,我们经常会用到居中以查看完整的模型,但是对于如果想展示某些对象,而不是全部模型时,那么我们就想将选择的对象(如体对象)居中查看,当查看结束后还能恢复到…

动态规划-----路径问题

动态规划-----路径问题 下降最小路径和1&#xff1a;状态表示2&#xff1a;状态转移方程3 初始化4 填表顺序5 返回值6 代码实现 总结&#xff1a; 下降最小路径和 1&#xff1a;状态表示 假设&#xff1a;用dp[i][j]表示&#xff1a;到达[i,j]的最小路径 2&#xff1a;状态转…

[C++设计模式] 为什么需要设计模式?

文章目录 什么是设计模式&#xff1f;为什么需要设计模式&#xff1f;GOF 设计模式再次理解面向对象软件设计固有的复杂性软件设计复杂性的根本原因如何解决复杂性&#xff1f;分解抽象 结构化 VS 面向对象(封装)结构化设计代码示例&#xff1a;面向对象设计代码示例&#xff1…

级联树结构TreeSelect和上级反查

接口返回结构 前端展示格式 前端组件 <template><div ><el-scrollbar height"70vh"><el-tree :data"deptOptions" :props"{ label: label, children: children }" :expand-on-click-node"false":filter-node-me…

Figma入门-自动布局

Figma入门-自动布局 前言 在之前的工作中&#xff0c;大家的原型图都是使用 Axure 制作的&#xff0c;印象中 Figma 一直是个专业设计软件。 最近&#xff0c;很多产品朋友告诉我&#xff0c;很多原型图都开始用Figma制作了&#xff0c;并且很多组件都是内置的&#xff0c;对…

【Unity基础】使用InputSystem实现物体跳跃

要在Unity中使用 InputSystem 实现小球按空格键跳起的效果&#xff0c;可以按照以下步骤进行&#xff1a; 1. 安装 InputSystem 包 首先&#xff0c;确保你已经安装了 Input System 包。你可以通过以下步骤安装&#xff1a; 打开 Unity 编辑器&#xff0c;点击菜单 Window -…

【ArkTS】使用AVRecorder录制音频 --内附录音机开发详细代码

系列文章目录 【ArkTS】关于ForEach的第三个参数键值 【ArkTS】“一篇带你读懂ForEach和LazyForEach” 【小白拓展】 【ArkTS】“一篇带你掌握TaskPool与Worker两种多线程并发方案” 【ArkTS】 一篇带你掌握“语音转文字技术” --内附详细代码 【ArkTS】技能提高–“用户授权”…

一种多功能调试工具设计方案开源

一种多功能调试工具设计方案开源 设计初衷设计方案具体实现HUB芯片采用沁恒微CH339W。TF卡功能网口功能SPI功能IIC功能JTAG功能下行USB接口 安路FPGA烧录器功能Xilinx FPGA烧录器功能Jlink OB功能串口功能RS232串口RS485和RS422串口自适应接口 CAN功能烧录器功能 目前进度后续计…

浏览器的事件循环机制

浏览器和Node的事件循环机制 引言浏览器的事件循环机制 引言 由于JS是单线程的脚本语言&#xff0c;所以在同一时间只能做一件事情&#xff0c;当遇到多个任务时&#xff0c;我们不可能一直等待任务完成&#xff0c;这会造成巨大的资源浪费。为了协调时间&#xff0c;用户交互…

Zabbix添加防火墙温度监控值实战

我们在Zabbix监控系统会监控诸如Server、network device、application等实例&#xff0c;通常我们在监控某个具体产品时&#xff0c;我们会找到具体的监控模板&#xff0c;在设备添加到平台以后&#xff0c;将模板链接到该设备&#xff0c;但很多时候我们企业内部的设备是没有标…

【k8s】创建基于sa的token的kubeconfig

需求 创建一个基于sa的token的kubeconfig文件&#xff0c;并用这个文件来访问集群。 具体创建sa 和sa的token请参考文章: 【k8s】给ServiceAccount 创建关联的 Secrets-CSDN博客 创建sa apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata:namespace: jtkjdevnam…

Fastapi + vue3 自动化测试平台---移动端App自动化篇

概述 好久写文章了&#xff0c;专注于新框架&#xff0c;新UI界面的实践&#xff0c;废话不多说&#xff0c;开搞 技术架构 后端&#xff1a; Fastapi Airtest multiprocessing 前端&#xff1a; 基于 Vue3、Vite、TypeScript、Pinia、Pinia持久化插件、Unocss 和 Elemen…

Apache Doris 现行版本 Docker-Compose 运行教程

特别注意&#xff01;Doris On Docker 部署方式仅限于开发环境或者功能测试环境&#xff0c;不建议生产环境部署&#xff01; 如有生产环境或性能测试集群部署诉求&#xff0c;请使用裸机/虚机部署或K8S Operator部署方案&#xff01; 原文阅读&#xff1a;Apache Doris 现行版…

Docker的彻底删除与重新安装(ubuntu22.04)

Docker的彻底删除与重新安装&#xff08;ubuntu22.04&#xff09; 一、首先我们彻底删除Docker1、删除docker及安装时自动安装的所有包2、删除无用的相关的配置文件3、删除相关插件4、删除docker的相关配置和目录 二、重新安装1、添加 Docker 的官方 GPG 密钥&#xff1a;2、将…

Nginx学习-安装以及基本的使用

一、背景 Nginx是一个很强大的高性能Web和反向代理服务&#xff0c;也是一种轻量级的Web服务器&#xff0c;可以作为独立的服务器部署网站&#xff0c;应用非常广泛&#xff0c;特别是现在前后端分离的情况下。而在开发过程中&#xff0c;我们常常需要在window系统下使用Nginx…

力扣hot100道【贪心算法后续解题方法心得】(三)

力扣hot100道【贪心算法后续解题方法心得】 十四、贪心算法关键解题思路1、买卖股票的最佳时机2、跳跃游戏3、跳跃游戏 | |4、划分字母区间 十五、动态规划什么是动态规划&#xff1f;关键解题思路和步骤1、打家劫舍2、01背包问题3、完全平方式4、零钱兑换5、单词拆分6、最长递…

系统--线程互斥

1、相关背景知识 临界资源多线程、多执行流共享的资源,就叫做临界资源临界区每个线程内部,访问临界资源的代码互斥在任何时刻,保证有且只有一个执行流进入临界区,访问临界资源,对临界资源起到保护作用原子性不会被任何调度机制打断的操作,该操作只有两态,要么完成,要么…

Qt桌面应用开发 第十天(综合项目二 翻金币)

目录 1.主场景搭建 1.1重载绘制事件&#xff0c;绘制背景图和标题图片 1.2设置窗口标题&#xff0c;大小&#xff0c;图片 1.3退出按钮对应关闭窗口&#xff0c;连接信号 2.开始按钮创建 2.1封装MyPushButton类 2.2加载按钮上的图片 3.开始按钮跳跃效果 3.1按钮向上跳…

getchar()

getchar():从计算机终端&#xff08;一般是键盘&#xff09;输入一个字符 1、getchar返回的是字符的ASCII码值&#xff08;整数&#xff09;。 2、getchar在读取结束或者失败的时候&#xff0c;会返回EOF 输入密码并确认&#xff1a; scanf读取\n之前的内容即12345678 回车符…

linux 获取公网流量 tcpdump + python + C++

前言 需求为&#xff0c;统计linux上得上下行公网流量&#xff0c;常规得命令如iftop 、sar、ifstat、nload等只能获取流量得大小&#xff0c;不能区分公私网&#xff0c;所以需要通过抓取网络包并排除私网段才能拿到公网流量。下面提供了一些有效得解决思路&#xff0c;提供了…