09 【Sass语法介绍-函数指令】

news2024/11/29 4:39:04

1.前言

在之前的章节我们学习过 Sass 提供的各种各样的函数,那么如果我们需要自定定义函数来使用就需要用到函数指令 @function了。本节内容我们来学习 Sass 函数指令的语法和使用,在 Sass 中自定义函数是必须要掌握的!

2.什么是 Sass 函数指令

函数指令也叫自定义函数让你可以容易的处理各种逻辑和定义复杂的操作,而且你可以在任何需要的地方复用函数,这使得我们可以抽离出来一些常见的公式或者逻辑,我们先来看下它长什么样,代码如下:

// 定义函数
@function a() {
  @return "a"
}
// 使用函数
.p {
  font: a();
}

回忆一下,上面的代码在之前的章节中也出现过,这就是函数指令,定义好一个函数后我们就可以使用了,下面我们开始详细讲解函数指令。

函数指令是通过 @function 来定义,它的写法是 @function name(arguments…){},@function 后面跟函数名,然后是一个 () ,() 里面是这个函数接收的参数,可以接收也可以不接收,最后是 {} 中放的是你的逻辑代码。函数名将连字符和下划线视为相同,也就是说 a_b 和 a-b 是同一个函数。我们举例看下:

@function fun-name() {
      // 在这里编写逻辑代码
}

3.函数的参数

函数指令的参数和之前我们讲的混合指令的参数很像,函数如果接收参数那么使用的时候就必须传入这些参数,但是你可以定义默认值使参数成为可选的,我们举例来看下:

// 有默认值的参数
@function a($arg: 1) {
  @return $arg;
}
// 无默认值的参数
@function b($arg) {
  @return $arg;
}
.p {
  font: a();
  font: b(4);
}

上面的代码转换为 CSS 如下:

.p {
  font: 1;
  font: 4;
}

要注意的是,为参数设置的默认值,也可以引用前面的参数或者是任何表达式。

4.接收任意数量的参数

和前面章节讲的 @mixin 类似,函数指令也可以接收任意数量的参数,同样是将最后一个参数以 … 结尾,我们来举例看下:

@function fonts($familys...) {
  @return  $familys;
}
.p {
  font: fonts("one", "two", "three")
}

上面这段代码转换为 CSS 如下:

.p {
  font: "one", "two", "three";
}

同样的函数的参数也可以接收任意的参数列表,就像之前在混合指令章节讲的一样,可以用过 meta.keywords() 来获取和使用这些参数,不过这个我们一般不是很常用。

5.@return

在前面的代码中,可以看到很多次我们在函数指令中使用了 @return。@return 指令表示作为函数调用结果的值,说的简单点就是这个函数的返回值,这和在 javascript 的函数中使用 return 很类似。

在 Sass 中 @return 指令只能在 @function 中使用,并且每个 @function 都必须以 @return 结尾! 在 @function 的逻辑代码中,如遇到 @return 会立即结束函数并返回其结果,这在一些 @if 判断的情况下很有用。我们举例看下:

@function a($str: "a") {
  @if $str == "a" {
    @return 10px;
  } @else if $str == "b" {
    @return 20px;
  } @else if $str == "c" {
    @return 30px;
  } @else {
    @return 40px;
  }
}

p {
  padding: a();
  width: a("f");
  height: a("c");
  margin: a("b");
}

从上面的代码中我们可以可看到,在函数 a 中,我们根据不同的参数返回不同的结果,然后在 p 的样式中通过传入不同的参数来获取不同的结果。上面这段代码会转换为如下的 CSS 代码:

p {
  padding: 10px;
  width: 40px;
  height: 30px;
  margin: 20px;
}

6.实战经验

在实际的项目中使用函数指令是必不可少的,我们会定义很多函数来帮助我们解决逻辑问题,一般我们会独立抽出来一个 function.scss 文件来管理整个项目中的函数指令,一般这些函数都是根据你的项目特性以及样式需要封装出来的。

由于函数一般是和你的业务强相关的,一般就是为自己的项目定义一些工具和方法,这里我就不贴出代码示例了。在实际的应用中,这个函数指令就是需要你“随机应变”,按需封装和使用!

7.小结

本节内容我们讲了 Sass 函数指令 @function ,还有函数指令的用法和参数。我们可以使用函数来编写各种各样我们自己的函数。函数指令和前面的混合指令很类似,我们通过下图来回一下函数指令的用法:

image-20220825225712402

除此之外 Sass 提供了大量的内置函数,这些我们在前面的章节 Sass 函数中都做了讲解,你可以借用这些函数再配合你自己定义的函数指令,来实现各种复杂的逻辑和强大的效果。

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

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

相关文章

又一款可视化神器,开源了!

在互联网数据大爆炸的这几年,各类数据处理、数据可视化的需求使得 GitHub 上诞生了一大批高质量的 BI 工具。 借助这些 BI 工具,我们能够大幅提升数据分析效率、生成更高质量的项目报告,让用户通过直观的数据看到结果,减低沟通成…

安卓项目如何做单元测试

前言 先说一下创建篇文章的目的,近期负责搭建公司的单元测试框架,于是查阅了网上的很多文章,以及参考了github上很多的项目例子,并且也进行了相当多的尝试。这其中花费了很多的精力,大约有两三周的时间,远…

淘系抓包流程(淘宝数据无法抓包解决方式)

淘系抓包流程 结合frida和adb工具以及mumu模拟器进行抓包。 具体的关系图: frida的安装 frida安装,直接安装官网的脚手架。frida官网使用python的pip安装,python > 3。 安装后使用查看版本命令来确认是否安装。 pip install frida-tools frida --ve…

【严重】VMware Aria Operations for Logs v8.10.2 存在反序列化漏洞(CVE-2023-20864)

漏洞描述 VMware Aria Operations for Logs前身是vRealize Log Insight,VMware用于处理和管理大规模的日志数据产品。 VMware Aria Operations for Logs 8.10.2版本中存在反序列化漏洞,具有 VMware Aria Operations for Logs 网络访问权限的未经身份验…

“SCSA-T学习导图+”系列:交换技术之STP

本期引言: 在通信工程当中,从物理层面上,我们可以采用冗余链路保证网络的健壮性。冗余是指出于系统安全和可靠性等方面的考虑,人为地对一些关键部件或功能进行重复的配置。当系统发生故障时,比如某一设备发生损坏&…

【Linux】Linux下的gbd调试,你学废了吗

操作系统核心数centos 3.10.032位单核 gbd调试方法-以线程运行时调试为例 线程死锁状态时查看栈升级gbd通过gdb在程序运行时进行调试 线程死锁状态时查看栈 在线程-线程安全之互斥中,我们自己写了一个模拟实现的线程死锁情况 我们用gbd调试查看了当前线程的调用&a…

拉链表制作

1.拉链表的应用场景 拉链表适合于:数据会发生变化,但是大部分是不变化的(即:缓慢变化维。还需要保留历史数据做分析的场景) 2.拉链表的形成过程 关键的过程 第四步:获取变化的数据(创建和修改…

Flask连接MySQL

本文章涉及到Flask框架和HTML内容,相关知识可查看链接 HTML-form表单和提交_html form 提交_小梁今天敲代码了吗的博客-CSDN博客https://blog.csdn.net/weixin_43780415/article/details/130110722 前端引入和html标签_小梁今天敲代码了吗的博客-CSDN博客https://b…

vscode下drawio无法使用

问题描述: Vscode下, 刚下载drawio这个插件,在vscode左边EXPLORER下,没有Test这个页面,导致vscode无法使用drawio。 解决办法: 在自己需要的目录下,新建一个文件,例如test,并命名为test.drawi…

数据结构算法

直接插入排序 1.从第一个元素开始,该元素可以认为已经被排序 2.取下一个元素tem,从已排序的元素序列从后往前扫描 3.如果该元素大于tem,则将该元素移到下一位 4.重复步骤3,直到找到已排序元素中小于等于tem的元素 5.tem插入到该元…

5.1劳动节,致敬最可爱的人!Cocos社区杰出贡献者出炉

Cocos 引擎的生态建设与繁荣,离不开社区开发者的辛勤付出。 2022.5 ~ 2023.5 年度期间,有这样一批 Cocos 社区开发者,他们使用 Cocos Creaor 引擎创作内容与产品、分享技术和经验,为 Cocos 社区默默贡献自己的一份力量&#xff0c…

改进YOLOv8:替换轻量化骨干网络Efficient V1、Efficient V2《重新思考卷积神经网络的模型缩放》)

这里写目录标题 1 EfficientNetV1中存在的问题2.EfficientNetV2网络框架3.YOLOv8添加Efficient V1代码yaml文件Efficient V1代码运行4. 添加Efficient V2代码yaml文件Efficient V2运行Efficient V1论文地址:https://arxiv.org/pdf/1905.11946.pdf Efficient V1代码地址:

Golang每日一练(leetDay0049) 二叉树专题(9)

目录 144. 二叉树的前序遍历 Binary-tree Preorder Traversal 🌟 145. 二叉树的前序遍历 Binary-tree Postorder Traversal 🌟 对比: 94. 二叉树的中序遍历 Binary-tree Inorder Traversal 🌟 146. LRU缓存 LRU Cache &am…

调用移动云OCR识别身份证

一.开通移动云OCR服务 在下面这个网址开通免费服务,,每个账号可免费使用500次,先要实名认证。 通用文字识别 (10086.cn)https://ecloud.10086.cn/home/product-introduction/Generalverify 有两种方式: 这里选择第二种 。 二…

炸裂的 Auto-GPT,帮我自动生成小视频!

大家好,我是程序员贺同学。 继前段时间爆火的 ChatGPT 后,又一个炸裂的开源项目 Auto-GPT 出现了。 仿佛一夜之间,AI 圈又出现了一个新晋顶流。我们来看看它有多🔥。 在 GitHub 上,仅最近不到两个礼拜,这个…

TCP/IP基础知识

文章目录 互联网与TCP/IP的关系TCP/IP与OSI参考模型硬件(物理层)互联网层(网络层)IPICMPARP 传输层TCPUDP 应用层WWW电子邮件(E-Mail)文件传输(FTP)远程登录(TELNET与SSH&#xff09…

Redis Set 用了 2 种数据结构来存储,到现在才知道

Sets 无序集合,他的功能就好像你熟悉的 Java 中的 HashSet 一样。集合是通过散列表实现的,所以添加、删除、查找元素的时间复杂度是 O(1)。 1. 是什么 Sets 是 String 类型的无序集合,集合中的元素是唯一的,集合中不会出现重复的数…

【百问百答】可靠性基础知识第三期

1.电连接器的基本性能有哪些? 三个基本性能:机械性能、电气性能和耐环境性能。 电连接器机械性能测试包括:插拔力测试、端子保持力测试、端子正向力测试、耐久性测试。 电气特性测试包括:绝缘电阻测试、 耐电压测试、 低电平电阻测试(LLCR…

【YOLO v1】模型搭建 | model | 代码

YOLO V1 模型 import torch import torch.nn as nn from torchsummary import summarydef build_block(in_channel, out_channel, kernel_size, stride1, maxpoolFalse):padding kernel_size//2block nn.Sequential(nn.Conv2d(in_channel, out_channel, kernel_sizekernel_si…

数据包守恒 TCP 拥塞控制

数据包守恒是包括拥塞控制在内的合理利用带宽的方法之基石,它维持了有效网络传输的稳定,过去 40 年是,未来还是。数据包守恒可以描述为: 当带宽恰好满载时,receiver 收到 1 个数据包后 sender 才能发送 1 个数据包。当…