scss学习总结

摘录更改至

scss: map:merge 和 @each $attribute, $value in $variables

研究 Element-plus 源码时,有以下一段代码:

// path: element-plus/packages/theme-chalk/src/button.scss
@include b(button) {
    @include set-component-css-var('button', $button);
}

有关 b 的理解,以及 @include 的作用

set-component-css-var


// path: element-plus/packages/theme-chalk/src/mixins/_var.scss
@mixin set-component-css-var($name, $variables) { 
    @each $attribute, $value in $variables {  
        @if $attribute == 'default' {    
            #{getCssVarName($name)}: #{$value};   
        } @else {  
            #{getCssVarName($name, $attribute)}: #{$value};    
        }  }}

这段代码定义了一个 Sass 混合名为 set-component-css-var,它有两个参数:$name$variables$name 参数是组件的名称,$variables 参数是一个 CSS 变量名到值的映射。

混合名会遍历 $variables 映射中的每个键值对。如果键等于 "default",那么混合名会将组件的默认 CSS 变量设置为值。否则,混合名会将组件的特定属性的 CSS 变量设置为值。

getCssVarName 函数用于生成 CSS 变量名。函数有两个参数:组件名称和可选的属性名称。如果未提供属性名称,则函数会返回组件的默认 CSS 变量名(例如,--button)。否则,函数会返回包含组件名称和属性名称的 CSS 变量名(例如,--button-color)。

以下是一个使用 set-component-css-var 混合名的示例:

@mixin set-component-css-var($name, $variables) {
  @each $attribute, $value in $variables {
    @if $attribute == 'default' {
      #{getCssVarName($name)}: #{$value};
    } @else {
      #{getCssVarName($name, $attribute)}: #{$value};
    }
  }
}

$button-variables = (
  "default": "#fff",
  "color": "#000",
  "border-color": "#ddd",
);

@include set-component-css-var("button", $button-variables);

上边代码生成什么了?

--button: #fff;
--button-color: #000;
--button-border-color: #ddd;

这段代码的用途是将 CSS 变量与组件关联起来。例如,我们可以使用这段代码为按钮组件设置默认颜色、文字颜色和边框颜色。

具体来说,这段代码的执行步骤如下:

  1. 混合名会遍历 $variables 映射中的每个键值对。
  2. 如果键等于 "default",那么混合名会将组件的默认 CSS 变量设置为值。
  3. 否则,混合名会将组件的特定属性的 CSS 变量设置为值。

在示例代码中,$button-variables 映射包含三个键值对:

  • "default" 的值为 #fff,表示按钮组件的默认颜色。
  • "color" 的值为 #000,表示按钮组件的文字颜色。
  • "border-color" 的值为 #ddd,表示按钮组件的边框颜色。

因此,这段代码会将以下 CSS 变量设置为相应的值:

  • --button 的值为 #fff
  • --button-color 的值为 #000
  • --button-border-color 的值为 #ddd

sass 中 map 的用法

scss: map:merge 和 @each $attribute, $value in v a r i a b l e s 上边的仅仅是一个简单的示例。看源码过程中,我们可以找到 ‘ variables 上边的仅仅是一个简单的示例。看源码过程中,我们可以找到 ` variables上边的仅仅是一个简单的示例。看源码过程中,我们可以找到button` 的定义:

// path: element-plus/packages/theme-chalk/src/common/var.scss
$button: () !default;
$button: map.merge(
  (
    'font-weight': getCssVar('font-weight-primary'),
    'border-color': getCssVar('border-color'),
    'bg-color': getCssVar('fill-color', 'blank'),
    'text-color': getCssVar('text-color', 'regular'),
    'disabled-text-color': getCssVar('disabled-text-color'),
    'disabled-bg-color': getCssVar('fill-color', 'blank'),
    'disabled-border-color': getCssVar('border-color-light'),
    'divide-border-color': rgba($color-white, 0.5),
    'hover-text-color': getCssVar('color-primary'),
    'hover-bg-color': getCssVar('color-primary', 'light-9'),
    'hover-border-color': getCssVar('color-primary-light-7'),
    'active-text-color': getCssVar('button-hover-text-color'),
    'active-border-color': getCssVar('color-primary'),
    'active-bg-color': getCssVar('button', 'hover-bg-color'),
    'outline-color': getCssVar('color-primary', 'light-5'),
    'hover-link-text-color': getCssVar('color-info'),
    'active-color': getCssVar('text-color', 'primary'),
  ),
  $button
);

注意:要用 map 功能,你需要导入这个功能。以上代码片段第一行就是导入 map 函数

1. 定义变量:

  • 代码首先定义了一个名为 $button 的变量,并将其默认值设置为空映射(() !default;)。这意味着如果 $button 变量此前没有被定义,它将会被初始化为一个空映射。

2. 合并映射:

  • 代码接着使用了 Sass 内置的

    map.merge
    

    函数来合并两个映射:

    • 第一个映射包含了一系列按钮样式属性的键值对,例如:
      • font-weight: 字体粗细
      • border-color: 边框颜色
      • bg-color: 背景颜色
      • text-color: 文字颜色
      • disabled-text-color: 禁用状态下的文字颜色
      • hover-text-color: 鼠标悬停状态下的文字颜色
      • active-text-color: 鼠标按下状态下的文字颜色
      • … 等等
    • 这些键值对中的值都是通过 getCssVar 函数获取的 CSS 变量,这意味着这些样式属性的值可以被集中控制和调整。
    • 第二个映射是 $button 变量本身。如果 $button 变量已经被定义并包含了一些样式属性,那么这些属性将会被保留并与第一个映射中的属性进行合并。

3. 最终结果:

  • 经过 map.merge 函数的处理,$button 变量将会包含一个完整的按钮样式属性映射,其中的值都是 CSS 变量。
  • 这意味着我们可以通过修改 CSS 变量的值来轻松调整按钮的整体样式,而无需逐一修改每个样式属性。

总结:

  • 这段代码的目的在于使用 CSS 变量来定义按钮的样式,使样式管理更加灵活和统一。
  • 通过使用 map.merge 函数,代码可以将默认的按钮样式属性与自定义的属性进行合并,保留了灵活性和可扩展性。

getCssVar 和 getCssVarName

在以上代码中用到了 **getCssVar****getCssVarName** 这两个函数,我统一解释一下,因为这两个函数都调用了 joinVarName

// path: element-plus/packages/theme-chalk/src/mixins/function.scss
@function joinVarName($list) {
  $name: '--' + config.$namespace;
  @each $item in $list {
    @if $item != '' {
      $name: $name + '-' + $item;
    }
  }
  @return $name;
}

// getCssVarName('button', 'text-color') => '--el-button-text-color'
@function getCssVarName($args...) {
  @return joinVarName($args);
}

// getCssVar('button', 'text-color') => var(--el-button-text-color)
@function getCssVar($args...) {
  @return var(#{joinVarName($args)});
}

解释一下这段代码的作用:

1. joinVarName 函数:

  • 这个函数的作用是将一个列表($list)中的所有元素连接起来,并在开头加上一个前缀(-- 加上 config.$namespace),形成一个完整的 CSS 变量名。
  • 它会遍历 $list 中的每个元素,如果元素不为空,则将其添加到 $name 变量中,并在每个元素之间加上一个连字符(-)。
  • 最后,函数会返回生成的 CSS 变量名。

2. getCssVarName 函数:

  • 这个函数是 joinVarName 函数的一个简便调用方式。它可以接受任意数量的参数($args...),并将这些参数作为列表传递给 joinVarName 函数。
  • 它会返回 joinVarName 函数生成的 CSS 变量名。

举例说明:

  • 调用 getCssVarName('button', 'text-color') 会返回 --el-button-text-color(假设 config.$namespace 的值为 el)。
  • 调用 getCssVarName('primary-color') 会返回 --el-primary-color

代码的作用:

  • 这段代码是为了方便地生成 CSS 变量名,并在生成的变量名中加入命名空间(config.$namespace)以避免变量名冲突。
  • 这在大型项目中,尤其是使用了 CSS 预处理器的项目中,是非常有用的,可以帮助我们更好地管理 CSS 变量。

关于 getCssVar 解释两个点:$args… 和 var

在 Sass 中,$args... 表示一个可变参数列表。这意味着 args 变量可以接受任意数量的参数,这些参数可以是任意类型的值。

getCssVar 函数中,$args... 用于接收 CSS 变量名的参数列表。例如,调用 getCssVar('primary-color') 函数时,$args... 将包含一个元素,该元素的值为 'primary-color'

$args... 的使用可以使函数更加灵活,可以接受任意数量的参数。

以下是一些使用 $args... 的例子:

@function add($x, $y...) {
  $total: $x;
  @each $arg in $y {
    $total: $total + $arg;
  }
  @return $total;
}

// 将两个数相加
$sum: add(1, 2, 3);

// 将三个字符串连接起来
$string: add('a', 'b', 'c');

在第一个示例中,add() 函数用于将两个或多个数相加。$args... 用于接收任意数量的数字参数。

在第二个示例中,add() 函数用于将三个字符串连接起来。$args... 用于接收任意数量的字符串参数。

为什么这里要解释一下 var ?

var 函数容易有歧义,因为在 css 中和 sass 中都有这个函数,他们的功能也是不一样的,因此在这做一个区分:简单来说,sass 中的 var 函数用来定义变量,CSS 中的 var 用来引用变量。

CSS 中的 var

在 CSS 中,var() 函数是 CSS custom properties 的语法,用于引用 CSS custom properties。

CSS custom properties 是 CSS 中的一个新特性,允许我们在 CSS 中定义自定义变量。

CSS custom properties 的语法如下:

--[variable-name]: [value];

例如,以下 CSS 代码定义了一个名为 --color 的 CSS custom property,并将其值设置为 #fff

--color: #fff;

我们可以使用 var() 函数引用 CSS custom properties。例如,以下 CSS 代码将 .my-element 元素的颜色设置为 --color 变量的值:

.my-element {
  color: var(--color);
}

在 Sass 中,var() 函数用于定义 CSS custom properties。因此,Sass 中的 var() 函数与 CSS 中的 var() 函数是相同的。

sass 中的 var

在 Sass 中,var() 函数用于定义 CSS 变量。

var() 函数的语法如下:

var($name, $value);

$name 是变量的名称,$value 是变量的值。

var() 函数会将 $name 变量定义为一个 CSS 变量,并将 $value 赋值给该变量。

以下是使用 var() 函数的例子:

$color: var(--color);

这段代码会定义一个名为 $color 的 CSS 变量,并将其值设置为 var(--color)

$color 变量可以被用于 CSS 中,例如:

.my-element {
  color: $color;
}

这段 CSS 将会将 .my-element 元素的颜色设置为 var(--color) 变量的值。

var() 函数还可以用于定义具有默认值的 CSS 变量。例如:

$color: var(--color, #fff);

这段代码会定义一个名为 $color 的 CSS 变量,并将其值设置为 #fff。如果 var(--color) 变量未定义,则将使用 #fff 作为其值。

var() 函数是 Sass 中定义 CSS 变量的重要工具。它可以帮助我们在 CSS 中实现灵活和可重用的样式。

@mixin与@include %与@extend @function

@mixin  使用@include引用,可传参,返回一段css样式,不用会生成一个class,生成结果是直接拷贝,这样多处引用,会造成代码重复

%       使用@extend引用,不可传参,返回一段css样式。%开头的class只是用来extend,不会生成在代码里。生成后,多个class用逗号连接,提取成一个样式,减少重复代码.

@function与@mixin的最大不同,返回的是一个值,不是一段css样式

@forward与@use

@forward:
概念:@forward用于将模块的部分或全部内容重新导出,使其他模块可以通过@use导入该模块的内容。

@use:
概念:@use用于导入其他Scss或Sass模块,并创建一个命名空间来管理导入的模块中的变量、混合器、函数和样式规则。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

毫米波雷达深度学习技术-1.7训练一个神经网络

1.7 训练一个神经网络 对于训练神经网络,有两个步骤,即前向传递和误差反向传播。 1.7.1 前向传播和反向传播 在前向传递中,输入被馈送到模型并与权重向量相乘,并为每一层添加偏差以计算模型的输出。密集层或全连接层第l层的输入、…

中画幅巡检相机-SHARE 100M A10

【毫厘之间,洞见非凡】 ——SHARE 100M A10中画幅测量相机,巡检行业的新选择 在巡检行业,精准度是关键,深圳赛尔智控科技有限公司最新推出的SHARE 100M A10中画幅测量相机,基于先进的IMX461影像传感器,拥有…

prometheus 安装node_exporter, node_exporter 安装最新版 普罗米修思安装监控服务器client

1. 本文介绍两种安装方式,一种安装为service,使用systemctl start node_exporter管理,第二种为安装docker内 容器内使用。 1.1 安装到系统内: 1.1.1 github地址: Releases prometheus/node_exporter GitHub ​ 1.1.2 下载命…

解析Linux top 命令输出并生成动态图表

文章目录 0. 引言1. 原理2. 功能3. 程序架构流程图结构图 4. 数据解析模块5. 图表绘制模块6. 主程序入口7. 使用方法8. 总结9. 附录完整代码 0. 引言 在性能调优和系统监控中,top 命令是一种重要工具,提供了实时的系统状态信息,如 CPU 使用率…

PHP电商系统开发指南高级技巧

开发高级 php 电商系统所需的技巧包括:数据库优化:使用索引、规范化数据结构和缓存机制。性能优化:启用页面缓存、优化图像和使用 cdn。购物车管理:使用会话或数据库存储数据,实现实时更新和弃单恢复。支付集成&#x…

windows10如何打开开发者模式

按键盘上的win键或者点击屏幕左下角的开始图标,即可出现如下的界面 在打开的界面中找到设置按钮,点击设置按钮 进入windows设置界面后,找到‘更新和安全’的选项,随后点击进入 进去后在左侧的功能列表中找到‘开发者选…

Transformer模型原理细节解析

基本原理: Transformer 的核心概念是 自注意力机制(Self-Attention Mechanism),它允许模型在处理每个输入时“关注”输入序列的不同部分。这种机制让模型能够理解每个单词或符号与其他单词或符号之间的关系,而不是逐个地线性处理输入。 Transformer 主要由两个部分组成:…

推荐算法学习笔记2.1:基于深度学习的推荐算法-基于共线矩阵的深度推荐算法-AutoRec模型

AutoRec模型 前置知识:推荐算法学习笔记1.1:传统推荐算法-协同过滤算法 AutoRec模型通过引入自编码器结构,将共线矩阵中的用户向量(基于用户的U-AutoRec)或物品向量(基于物品的I-AutoRec)嵌入到低维空间后还…

Ubuntu24.04LTS基础软件下载

librewolf: deb文件link 作用:访问github,无痕浏览,这个速度,不指望了 vscodium: 从deb安装,ubuntu sudo dpkg -i xxx.debpaste-image 插件替代 markdown wps: libreoffice: 替换USTC源 sudo nano /etc/apt/sourc…

Objective-C语法基础

新建一个XCode项目 新建一个类 1、成员变量、属性 1.1、类内使用成员变量&#xff0c;类外使用属性 Role.h #import <Foundation/Foundation.h>NS_ASSUME_NONNULL_BEGINinterface Role : NSObject {//成员变量&#xff1a;只能类内使用NSString *_name;int _age; }//属…

GOM引擎源码 完整可编译 带微端 附带基础附件

GOM引擎源码 完整可编译 带微端 附带基础附件 时间紧迫&#xff0c;无暇顾及&#xff0c;无意中得到即公布GameOfMir源码未测试&#xff0c;专业人事自行编译测试&#xff01;非诚勿扰&#xff01;源码下载&#xff1a;极速云

招生报名系统教培招生小程序

招生报名系统&#xff1a;轻松实现教培招生新高度 &#x1f680; 招生报名系统&#xff0c;开启智慧教育新时代 在当今数字化快速发展的时代&#xff0c;教育行业也迎来了变革的浪潮。招生报名系统作为这一变革的先锋&#xff0c;为教育机构提供了全新的招生渠道和管理方式。通…

Spring Boot集成DeepLearning4j实现图片数字识别

1.什么是DeepLearning4j&#xff1f; DeepLearning4J&#xff08;DL4J&#xff09;是一套基于Java语言的神经网络工具包&#xff0c;可以构建、定型和部署神经网络。DL4J与Hadoop和Spark集成&#xff0c;支持分布式CPU和GPU&#xff0c;为商业环境&#xff08;而非研究工具目的…

【前端CSS3】一篇搞懂各类常用选择器(黑马程序员)

文章目录 一、前言&#x1f680;&#x1f680;&#x1f680;二、正文&#xff1a;2.1 基础选择器2.1.1 标签选择器2.1.2 类选择器2.1.3 id选择器2.1.4 通配符选择题2.1.5 类选择器与id选择器区别☀️☀️☀️2.1.6 基础选择器总结&#x1f680; 2.2 复合类选择器2.2.1 后代选择…

Python | Leetcode Python题解之第191题位1的个数

题目&#xff1a; 题解&#xff1a; class Solution:def hammingWeight(self, n: int) -> int:ret 0while n:n & n - 1ret 1return ret

Unity 功能 之 创建 【Unity Package】 Manager 自己自定义管理的包的简单整理

Unity 功能 之 创建 【Unity Package】 Manager 自己自定义管理的包的简单整理 一、简单介绍 Unity Package 是一种模块化的资源管理和分发方式&#xff0c;用于将游戏开发所需的代码、资源、配置文件等内容打包成一个独立的、可重用的组件。Unity Package 可以在多个项目之间…

【RabbitMQ问题踩坑】RabbitMQ设置手动ack后,消息队列有多条消息,只能消费一条,就不继续消费了,这是为什么 ?

现象&#xff1a;我发送5条消息到MQ队列中&#xff0c;同时&#xff0c;我在yml中设置的是需要在代码中手动确认&#xff0c;但是我把代码中的手动ack给关闭了&#xff0c;会出现什么情况&#xff1f; yml中配置&#xff0c;配置需要在代码中手动去确认消费者消费消息成功&…

Tomcat部署与优化

Tomcat部署与优化 Tomcat简述 server&#xff1a; 服务器&#xff0c;Tomcat运行的进程实例&#xff0c;一个Server中可以有多个service&#xff0c;但通常就一个 service&#xff1a;服务&#xff0c;用来组织Engine&#xff08;引擎&#xff09;和Connector&#xff08;连接…

黑鹰优化算法(BEO)-2024年SCI新算法-公式原理详解与性能测评 Matlab代码免费获取

目录 原理简介 一、种群初始化 二、围捕行为 三、悬停行为 四、捕捉行为 五、抢夺行为 六、警告行为 七、迁徙行为 八、求偶行为 九、孵化行为 性能测评 参考文献 完整代码 黑鹰优化算法(Black eagle optimizer, BEO)是一种新型的元启发式算法&#xff08;智能优化…

微信小程序的运行机制与更新机制

1. 小程序运行机制 1.1. 冷启动与热启动 冷启动为用户第一次打开小程序时&#xff0c;因为之前没有打开过&#xff0c;这是第一种冷启动的情兑。第二种情况为虽然之前用户打开过&#xff0c;但是小程序被用户主动的销毁过&#xff0c;这种情况下我们再次打开小程序&#xff0…