SCSS函数——Map

news2024/11/11 12:17:54

SCSS函数——Map

  • SCSS函数——Map
    • Map的简单声明
    • Map取值
    • 遍历Map获取值实现换肤效果
      • 1. 设置用户可以选择的主题
      • 2.创建主题需要颜色的Map集合
      • 3.在使用SCSS文件中导入函数和Scss文件
      • 4.构建一个themeCombine函数动态创建类名
      • 5.使用@each对变量进行遍历
    • Map函数
      • 1.get()取值函数
      • 2.deep-remove()/remove()去值函数
      • 3.has-key()判存函数
      • 4.keys()取全键函数
      • 5.merge()/deep-merge()并值函数
      • 6.set()设值函数
      • 7.values()取全值函数

SCSS函数——Map

Map的简单声明

如下,我声明了一个变量$weak-color其中键是string类型的而值则又是一个map类型

$weak-colors: (
    "main": (
      "weak": #43464a,
    ),
    "info": (
      "weak": #80a7f0,
    ),
    "success": (
      "weak": #afedce,
    ),
    "fail": (
      "weak": #f6a3a3,
    ),
    "warn": (
      "weak": #fab49e,
    ),
    "default": (
      "weak": #616365,
    ),
    "active": (
      "weak": #f9d5a9,
    ),
);

接下来我们来看Map取值

Map取值

我们需要注意的是若你想要这样去取值的时候,我们需要映入sass:map函数
即:@use "sass:map";
之后我们则需要以变量的形式进行声明,通过使用map.get()函数进行取用,其中第一个参数是map的名称,第二个参数开始是map的键,通过键取到值
在这里插入图片描述

$color-weak-main: map.get($weak-colors, 'main', 'weak') !default;
$color-weak-success: map.get($weak-colors, 'success', 'weak') !default;
$color-weak-warn: map.get($weak-colors, 'warn', 'weak') !default;
$color-weak-fail: map.get($weak-colors, 'fail', 'weak') !default;
$color-weak-default: map.get($weak-colors, 'default', 'weak') !default;
$color-weak-info: map.get($weak-colors, 'info', 'weak') !default;
$color-weak-active: map.get($weak-colors, 'active', 'weak') !default;

遍历Map获取值实现换肤效果

现在有以下场景:我们在写一个组件时设置了很多个主题,但是主题的名称由用户传入,我们也不知道用户会使用哪个主题,此时我们要怎么做呢?
解答:其实我们这时候只要设置用户能够传入的主题然后,通过遍历设置好于主题响应键的Map集合即可

1. 设置用户可以选择的主题

我们创建一个叫var.scss的文件
如下我设置了一个$themes的变量涵盖了各类的主题名称

$themes: theme-red ,  theme-green ,  theme-brown , theme-blue , theme-purple , theme-dark, theme-light,theme-glass;

2.创建主题需要颜色的Map集合

var.scss中设置Map颜色集合

$theme-colors: (
    "theme-red": (
      "deepest": #99152b,
      "deeper":#c93f59,
      "deep":#e95d51,
      "base":#da6c7d,
      "weak":#f5aec0,
    ),
    "theme-green": (
      "deepest": #405449,
      "deeper":#517b5f,
      "deep":#96c9a5  ,
      "base":#75738f,
      "weak":#b7aebd,
    ),
    "theme-brown": (
      "deepest":#4e3227,
      "deeper":#695238,
      "deep":#947564,
      "base":#b1a196,
      "weak":#dcbfa2,
    ),
    "theme-blue": (
      "deepest": #3d445f,
      "deeper":#627581,
      "deep":#96a7be  ,
      "base":#adb3bc,
      "weak":#9d8798,
    ),
    "theme-purple": (
      "deepest":#44384c  ,
      "deeper":#72667c,
      "deep":#988ea4,
      "base":#9eafc6,
      "weak":#d1c5aa,
    ),
    "theme-dark": (
      "deepest":#1b2129  ,
      "deeper":#2b3242f9,
      "deep":#3e4654,
      "base":#414141,
      "weak":#898989,
    ),
    "theme-light": (
      "deepest":#e8e2e2f0  ,
      "deeper":#c6cfdb,
      "deep":#b2bbc7ea,
      "base":#b3c3c7f8,
      "weak":#b4b3b3,
    ),
    "theme-glass": (
      "deepest":#e8e2e260  ,
      "deeper":#c6cfdb55,
      "deep":#b2bbc7a3,
      "base":#b3c3c7bb,
      "weak":#b4b3b3bc,
    ),
);

3.在使用SCSS文件中导入函数和Scss文件

创建任意名称的scss文件后进行导入

@use './src/common/var.scss' as *;
@use 'sass:map';

4.构建一个themeCombine函数动态创建类名

以下我创建了一个themeCombine函数,函数的作用就是动态产生Class名,通过使用@content设置存放css属性的地方,如果这个地方看不懂的话,你需要再去好好学习以下scss的基础函数(mixmin)部分

@mixin themeCombine($component,$type){
  $themeName: $namespace+$common-separator+$component+$modifier-separator+$type;
  .#{$themeName}{
    @content;
   
  }
}

5.使用@each对变量进行遍历

我们通过使用@each遍历我们之前设置的$themes的变量,然后通过@include themeCombine('dialog',$linkType)动态生成class名称,只要对应上组件的class名称即可生效

@each $linkType in  $themes{
  @include themeCombine('dialog',$linkType){
    color: map.get($theme-colors, #{$linkType},'weak');
    }
}

Map函数

接下来我们系统的来看一下Sass的Map函数
注意需要使用Map函数必须要导入@use 'sass:map';

1.get()取值函数

说明:用于通过key取得声明Map变量中的值
语法:map.get(param,keys...)
参数说明:

  1. param:map集合
  2. keys…:表示可以传多个key,是map集合的key

示例:

$user:(
	"user1":"zhangsan",
	"user2":(
		"name":"lisi"
	)
)

map.get($user,"user1") //==> zhangsan
map.get($user,"user2","name") //==> lisi

2.deep-remove()/remove()去值函数

说明:去除对应key的map中的键值对
语法:map.deep-remove(param,keys...)/map.remove(param,keys...)
参数说明:

  1. param:map集合
  2. keys…:表示可以传多个key,是map集合的key

示例:

$font-weights: ("regular": 400, "medium": 500, "bold": 700);

@debug map.deep-remove($font-weights, "regular");
//==> ("medium": 500, "bold": 700)

3.has-key()判存函数

说明:通过键判断键值对是否存在map中,存在返回true否则false
语法:map.has-key(param,keys...);
参数说明:

  1. param:map集合
  2. keys…:表示可以传多个key,是map集合的key

示例:

$fonts: (
  "Helvetica": (
    "weights": (
      "regular": 400,
      "medium": 500,
      "bold": 700
    )
  )
);

@debug map.has-key($fonts, "Helvetica", "weights", "regular"); // true
@debug map.has-key($fonts, "Helvetica", "colors"); // false

4.keys()取全键函数

说明:获取map中所有的键
语法:map.keys(param)
参数说明:

  1. param:map集合

示例:

$font-weights: ("regular": 400, "medium": 500, "bold": 700);

@debug map.keys($font-weights); // "regular", "medium", "bold"

5.merge()/deep-merge()并值函数

说明:将一个map合并到另一个map中
语法:map.merge(mainMap,mergedMap)/map.deep-merge(mainMap,mergedMap)
参数说明:

  1. mainMap:主map
  2. mergedMap:合并到主map的副map

示例:

$fonts: (
  "Helvetica": (
    "weights": (
      "lightest": 100,
      "light": 300
    )
  )
);
$heavy-weights: ("medium": 500, "bold": 700);

@debug map.merge($fonts, "Helvetica", "weights", $heavy-weights);
// (
//   "Helvetica": (
//     "weights": (
//       "lightest": 100,
//       "light": 300,
//       "medium": 500,
//       "bold": 700
//     )
//   )
// )

6.set()设值函数

说明:设置map中的值
语法:map.set(param,keys...,value)
参数说明:

  1. param:map集合
  2. keys…:表示可以传多个key,是map集合的key
  3. value:值

示例:

$fonts: (
  "Helvetica": (
    "weights": (
      "regular": 400,
      "medium": 500,
      "bold": 700
    )
  )
);

@debug map.set($fonts, "Helvetica", "weights", "regular", 300);
// (
//   "Helvetica": (
//     "weights": (
//       "regular": 300,
//       "medium": 500,
//       "bold": 700
//     )
//   )
// )

7.values()取全值函数

说明:获取map中所有的值
语法:map.values(param)
参数说明:

  1. param:map集合

示例:

$font-weights: ("regular": 400, "medium": 500, "bold": 700);

@debug map.values($font-weights); // 400, 500, 700

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

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

相关文章

STM32F10x数据手册之GPIO手册记录

前言 1、本文根据数据手册进行记录 2、由于手册的逻辑结构是呈现为总体到具体的结构,导致查看的时候不方便,所以在此记录,方便回顾 GPIO–输入模式 对比分析: 1、在此模式下,向GPIO口,输出高低电平是无效的。 2、GPIO初始电平与…

PHP反序列化新手入门学习总结

最近写了点反序列化的题,才疏学浅,希望对CTF新手有所帮助,有啥错误还请大师傅们批评指正。 php反序列化简单理解 首先我们需要理解什么是序列化,什么是反序列化? PHP序列化:serialize() 序列化是将变量…

DW 2023年1月Free Excel 第八次打卡 Excel数据可视化

第八章Excel数据可视化 数据下载地址与参考链接:https://d9ty988ekq.feishu.cn/docx/Wdqld1mVroyTJmxicTTcrfXYnDd 1 条形图 案例1 打开data/chap8/8.1xlsx中的【案例1】,现在有湖北区2022/01/01的不同商品的销售额。 问题1:如何更加直观…

Java基础11:正则表达式

Java基础11:正则表达式一、匹配规则1. 字符类(只匹配一个字符)2. 预定义字符(只匹配一个字符)3. 数量词二、Pattern三、Matcher四、在字符串方法中的使用1. matches2. replaceAll3. split五、 PatternMatcher示例1. 爬…

【自然语言处理】主题建模:基于 LDA 实现

主题建模:基于 LDA 实现主题建模是一种常见的自然语言处理任务。隐含的狄利克雷分布(Latent Dirichlet Allocation,LDA)是其中一种实现算法,其核心思想如下图所示。 主题建模的方法也比较多,除了本文提到的…

MySQL架构概述

MySQL架构 对MySQL服务端架构的概述,包括逻辑架构、并发控制、事务和MVCC(多版本并发控制)等内容。 逻辑架构 连接/线程管理 最上层负责与客户端交互,包括连接处理、身份验证、确保安全性等。 解析器、优化器 MySQL核心能力都在…

机器学习从入门到进阶所需学习资料-包括书、视频、源码

本文整理了一些入门到进阶机器学习所需要的一些免费的精品视频课程,一些优质的书籍和经典的代码实战项目。本文整理自网络,源地址:https://github.com/linxid/Machine_Learning_Study_Path视频1.1 吴恩达老师机器学习课程:•Cours…

【【黑马SpringCloud(2)】微服务调用

服务调用和网关Feign远程调用Feign自定义配置Feign性能优化使用连接池代替默认的URLConnection解决重复代码继承方式抽取方式Gateway服务网关gateway快速入门断言过滤器全局过滤器过滤器执行顺序:跨域问题Feign远程调用 RestTemplate发起远程调用的代码&#xff1a…

走进 CSS

看完本篇博客,你能收获: 👉 了解 CSS 是什么?👉 学会 CSS 怎么用?👉 CSS的选择器👉 如何用 CSS 美化网页 文章目录01 CSS 是什么?02 CSS的发展史03 CSS 快速入门04 CSS的…

唯一索引范围查询锁 bug修复了

唯一索引范围查询锁 bug修复了 其他资料介绍入下: session A 是一个范围查询,按照原则 1 的话,应该是索引 id 上只加 (10,15] 这个 next-key lock ,并且因 为 id 是唯一键,所以循环判断到 id15 这一行就应该停止了。…

生成标题的节点

生成标题的节点目录概述需求:设计思路实现思路分析1.mine 的概述2 mi是否自动计算未来的处理人参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better result,w…

智能驾驶 车牌检测和识别(一)《CCPD车牌数据集》

智能驾驶 车牌检测和识别(一)《CCPD车牌数据集》 目录 智能驾驶 车牌检测和识别(一)《CCPD车牌数据集》 1. 前言 2.车牌号码说明 3.车牌数据集CCPD (1)车牌数据集CCPD说明 (2&#xff09…

Eclipse调试python

Eclipse调试pythonF5:Step Into 单步调试,跳入函数内部F6:Step Over 单步调试,不跳入函数内部,执行当前代码F7:Step Return 返回到当前函数的尾部,跳转到调用函数的位置F8:Resume 跳…

DDOS渗透与攻防(二)之SYN-Flood攻击

系列文章 DDOS渗透与攻防(一)之拒绝服务攻击概念介绍 SYN-Flood攻击 1.SYN-Flood拒绝服务攻击 (1).攻击协议原理介绍说明_Syn-Flood SYN Flood (SYN洪水) 是种典型的DoS (Denial of Service,拒绝服务) 攻击。效果就是服务器TCP连接资源耗尽,停止响应…

8 种异步实现方式,性能炸裂!

异步执行对于开发者来说并不陌生,在实际的开发过程中,很多场景多会使用到异步,相比同步执行,异步可以大大缩短请求链路耗时时间,比如:发送短信、邮件、异步更新等,这些都是典型的可以通过异步实…

LeetCode动态规划经典题目(九):0-1背包问题

学习目标: 0-1背包问题 学习内容: 9. LeetCode416. 分割等和子集https://leetcode.cn/problems/partition-equal-subset-sum/ 10. LeetCode1049. 最后一块石头的重量 IIhttps://leetcode.cn/problems/last-stone-weight-ii/ 学习产出: 独…

Makefile学习⑦:编译动态链接库和静态库

Makefile学习⑦:编译动态库和静态库 编译链接动态库 动态链接库名词解释: 动态:运行时才去加载,动态加载 链接:指库文件和二进制程序分离,用某种特殊手段维护两者之间的关系 库 :库文件&#…

8、条件语句

目录 一、简单的if条件语句 二、if…else语句 三、if…else if多分支语句 四、switch多分支语句 一、简单的if条件语句 语法如下: 布尔表达式:必要参数,表示最后返回的结果必须是一个布尔值。它可以是一个单纯的布尔变量或常量&#xff…

IntelliJ IDEA 插件推荐

本篇主要统计了一些 Idea 的常用插件 分享一下 感谢作者zzp google-java-format 作用 代码格式化风格。 插件官网 google-java-format - plugin for IntelliJ IDEs | JetBrains 使用说明 插件安装完成后需要到Preferences->Other Settings->google-java-format Set…

供应商管理难点在哪 SRM供应商系统助推企业提升管理水平

在如今,对于需求企业来说,要保证企业内部的正常生产或科研工作等过程的不间断,就需要有一批可靠的供应商定期提供必需的物资供应。而供应商管理的最终目的就是根据采购需求来建立一个稳定可靠的供应商管理队伍,为企业提供高质量的…