【SASS/SCSS(三)】样式的复用与动态计算(@mixin和@function)

目录

一、@mixin

1、定义复用的样式代码,接受传参,搭配@include使用。

 位置传参

关键词传参

...语法糖接受传入的任意参数

2、在@mixin中使用@content,获取外部对mixin的追加内容

二、@function

三、字符串——值得注意的点

很多时候,我们在写样式的时候,会发现在同一套样式主题下,许多样式代码会被重复使用。在原生的css中,我们只能通过class和选择器的组合来尽量使得样式代码简洁。

在sass中,除了选择器的嵌套语法外,其提供的@mixin和@function可以实现高能的代码复用

接下来我们详细学习两者的使用。

一、@mixin

1、定义复用的样式代码,接受传参,搭配@include使用。

在下面的例子中,mixin中使用了 & 代替父选择器。而这个 & 指向的是@include样式引入所在位置的父选择器

但mixin中的参数声明时,使用了默认赋值,则其会变成可选参数,外面使用该mixin时设置了默认值的参数可不必要传入新的值

@mixin testStyle ($property,$value:2px , $color:#000) {//....
}.outer {@include testStyle(font,3px)
}

mixin传参可接受的方式有 位置传参、关键词传参 以及 用...语法糖接受传入的任意参数组成列表

  •  位置传参

位置传参即如上所示,按照位置顺序一一传入相应的参数

  • 关键词传参

关键词传参,是在传入参数前,指定此时传入的参数对应的是哪个

@mixin testStyle ($property,$value:2px , $color:#000) {//....
}.outer {@include testStyle(font,$color: #fff)
}

这种传参更加安全,尤其是在定义了默认可选参数时,传参可以不必拘泥于位置,而是直接通过关键词锁定。 

  • ...语法糖接受传入的任意参数

语法糖传入后,mixin中的args变成一个参数列表。注意,...跟在后面

@mixin order($height, $selectors...) {@for $i from 0 to length($selectors) {#{nth($selectors, $i + 1)} {position: absolute;height: $height;margin-top: $i * $height;}}
}@include order(150px, "input.name", "input.address", "input.zip");

如果想将参数列表以 map 的形式访问,可以同时获取参数列表中的 key和value,可以用 meta.keywords()对参数列表进行转换。 示例如下:

//导入内置的meta
@use "sass:meta";@mixin colors-customize($args...) {//用@debug控制台输出其返回值@debug meta.keywords($args);   //输出: (string: #080, comment: #800, variable: #60b)//用each遍历map的key和value@each $name,$color in meta.keywords($args) {div span.color-#{$name}{color: $color;}}
}//引入mixin中定义的样式
@include colors-customize ($string: #080,$comment: #800,$variable: #60b,
)

2、在@mixin中使用@content,获取外部对mixin的追加内容

使用方法如下代码:

//写一段媒体查询的样式
@mixin media-query($types...) {@each $type in $types {//css语法中的@media媒体查询方法@media #{$type} {//外部内容块中使用了该作用域内定义的变量@content($type);}}
}//用using引入变量
@include media-query(screen,print) using ($type) {h1{font-size: 40px;@if $type == print {font-family: Calluna;}}}

二、@function

@function与@mixin不同的点在于:

  • @function不会直接被引用函数体内的内容,而是经过函数内部的计算,用@return返回需要使用的变量值
  • @function不需要借助@include,可以在声明后直接调用

@function也可以位置传参、关键词传参、默认值可选参数、接收参数列表等。因此这里仅仅对其使用举个示例:

除了自定义的函数外,sass提供一些内置函数,可被直接调用例如:var()、rgb()、radial-gradient(#f2ece4,#e1d7d2)等等 。

所有的内置模块以及内置全局函数,可查见于:Sass: Built-In Modules

三、字符串——值得注意的点

一般情况下,sass中符合scss语法的值,即使是字符串都不含有引号,作为关键字/标识直接使用。

但其实scss既支持有引号的字符串解析,又支持无引号的字符串,只是应用场景不同

两者的互换可以用内置模块string提供的unquote和quote函数来实现。

@use "sass:string";@debug string.unquote(".widget:hover"); // .widget:hover
@debug string.quote(bold); // "bold"

另外,在#{ }传入变量时,变量中的字符串引号会被自动去掉。但不建议使用该方法去除字符串引号!

如果要保留引号,则直接传递即可: 

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

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

相关文章

智慧大棚数据库版

创建一个SMartBigHouse数据库 在数据库创建一个表用来存储数据 这边将id设为主键并将标识增量设为1 搭建Winfrom 搭建历史查询界面 串口数据,(这边是用的一个虚拟的串口工具,需要的话私) ModbusSerialMaster master;DataPointCollection wenduValues; //…

细说MCU用DMA控制ADC采样和串口传送的实现方法

目录 一、建立工程 1.相同的配置 2.配置ADC 3.配置DMA 二、代码修改 1.定义存储ADC采样结果的数组 2.启动ADC与定时器 3.编写主程序代码 4.重定义回调函数 5.查看结果 三、修改DMA模式 1. 修改DMA模式为Circular 2.查看结果 采用DMA(Direct Memory Access&#xf…

WSL2 Centos7 Docker服务启动失败怎么办?

wsl 安装的CentOS7镜像,安装了Docker之后,发现用systemctl start docker 无法将docker启动起来。 解决办法 1、编辑文件 vim /usr/lib/systemd/system/docker.service将13行注释掉,然后在下面新增14行的内容。然后保存退出。 2、再次验证 可以发现,我们已经可以正常通过s…

关于Mysql的面试题(实时更新中~)

一、主键约束与“not null unique”区别 1、作为Primary Key的域/域组不能为null,而Unique Key可以。 2、在一个表中只能有一个Primary Key,而多个Unique Key可以同时存在。unique not null 可以 将表的一列或多列定义为唯一性属性,而prima…

redis的集群模式

目录 1. 为什么使用redis集群 2. 主从模式 2.1修改配置文件 2.2 开启三台redis服务 2.3配置主从关系 3. 哨兵模式 3.1 监控功能 3.2 选举的机制 3.3 准备条件 4. 去中心化模式 4.1 准备三主三从 4.2 启动redis 4.3 分配槽以及主从关系 4.4 命令行的客户端 redis提供…

CAD框架介绍

1、适用范围:矢量编辑软件如 服装模板软件、CAD软件、绘图软件 2、支持PLT,DXF,PDF,GCode(服装裁割指令)等矢量文件导入 3、支持简易的自动手动排料 4、直线,曲线等编辑功能 5、分页输出绘图指令 6、良好的框架结构:绘图引擎…

d3d12.dll 文件缺失如何解决?五种修复丢失问题的方法

d3d12.dll 文件缺失如何解决?它为什么会不见呢?今天,我们将探讨 d3d12.dll 文件的重要性、原因以及丢失时的解决策略。本文将全面介绍 d3d12.dll 文件,并提供五种修复丢失问题的方法。 d3d12.dll文件是什么的详细介绍 d3d12.dll …

laravel为Model设置全局作用域

如果一个项目中存在这么一个sql条件在任何情况下或大多数情况都会被使用,同时很容易被开发者遗忘,那么就非常适用于今天要提到的这个功能,Eloquent\Model的全局作用域。 首先看一个示例,有个数据表,结构如下&#xff1…

深入浅出WebRTC—NACK

WebRTC 中的 NACK(Negative Acknowledgment)机制是实时通信中处理网络丢包的关键组件。网络丢包是常见的现象,尤其是在无线网络或不稳定连接中。NACK 机制旨在通过请求重传丢失的数据包来减少这种影响,从而保持通信的连续性和质量…

vue学习笔记(十一)——开发心得(axios的封装、promise细节、vue-router开发中的使用)

1. axios的网络请求的封装 1.1 为什么要封装api? 代码分层,便于以后的修改,无需触碰逻辑页面 目标: 网络请求,不散落在各个逻辑页面里,封装起来方便以后修改 1.2 封装api步骤 ① 在项目 src 下新建目录 utlis &am…

C++——初识模板

前言 模板是C中的重大板块,是使C真正超越C语言的工具,在C模板没有设计出来之前其实C是没有那么被行业和社会所认可的,本节我们将初步了解C中的模板(仅作大致讲解,具体的细枝末节将会再过几节讲解)&#xf…

Qt多语言功能实现

本文介绍Qt多语言功能实现。 应用程序多语言支持是常用功能,比如产品需要出口到不同语种的国家。采用Qt的多语言支持工具可以方便实现应用程序的多语言功能。本文以中英文语言切换为例,简要介绍Qt的多语言功能实现。 1.界面设计 界面设计需要考虑使用…

【数据分享】2013-2022年我国省市县三级的逐日SO2数据(excel\shp格式\免费获取)

空气质量数据是在我们日常研究中经常使用的数据!之前我们给大家分享了2000——2022年的省市县三级的逐日PM2.5数据和2013-2022年的省市县三级的逐日CO数据(均可查看之前的文章获悉详情)! 本次我们分享的是我国2013——2022年的省…

数据隐私保护与区块链技术的结合:新兴趋势分析

在当今数字化时代,数据隐私保护成为了一个备受关注的重要话题。随着个人数据的不断生成和流通,如何有效保护用户的隐私成为了技术创新的一个重要方向。区块链技术作为一种去中心化、安全性高且可追溯的技术手段,正在逐渐成为解决数据隐私保护…

golang 基础 泛型编程

(一) 示例1 package _caseimport "fmt"// 定义用户类型的结构体 type user struct {ID int64Name stringAge uint8 }// 定义地址类型的结构体 type address struct {ID intProvince stringCity string }// 集合转列表函数&#…

杰发科技Bootloader(2)—— 基于7840的Keil配置地址

序 在7840的sample代码里面有一个简单的Boot跳转APP的示例 PFlash地址从0开始 DFlash的地址从1000000开始 Boot解析 他的boot地址配置为0 Boot的代码主要是这几行,主要作用就是Flash的跳转 int main(void) {SystemClock_Config();InitDebug();printf("demo…

Leetcode 721.账户合并(hash+dfs)☆

思路: 最核心的地方在于如何合并?这里是通过具有相同的email进行账户的合并,这个相同的email类似于图中的共同节点将两个账户连接起来,所以将原来 账户名 -> 邮件1 邮件2.。。变成hash 邮件1 ->账户id1,账户id2…

ModelArts中sinh算子的开发

一、环境配置 1、创建notebook并连接 使用ModelArts新建一个notebook,我这里镜像选择第一个,里面含有cann和Ascend910处理器,我这里环境只能使用ssh连接,创建一个密钥对,保存到C盘中的user/Administrator/目录下。 在网页中选择使用vscode接入,等待vscode打开后,选择密…

【数据结构初阶】一篇文章带你超深度理解【单链表】

hi ! 目录 前言: 1、链表的概念和结构 2、单链表(Single List,简写SList)的实现 2.1 定义链表(结点)的结构 2.2 创建一个链表 2.3 打印链表 2.4 尾插 2.5 头插 2.6 尾删 2.7 头…

PT2262-IR

PT2262是一款很古老的编码芯片,其兼容型号有:SC2262,AD2262,SC2260(需改变匹配电阻)等。 依据其datasheet,PT2262射频模式工作原理: CODE BITS A Code Bit is the basic component of the encoded waveform, and ca…