sass 引入sass_了解Sass中的可变范围

sass 引入sass

在本文中,我们将更深入地研究Sass中的变量和变量范围 。 变量的范围描述了定义它的上下文,因此也可以使用它。

首先,我将介绍Sass支持的范围。 然后,我将解释两个可用于自定义变量值的有用标志。 最后,我将简要介绍可用的函数来检查变量是否存在。

Sass可变范围

Sass支持两种类型的变量: 局部变量和全局变量。

默认情况下,在任何选择器之外定义的所有变量均被视为全局变量。 这意味着可以从样式表中的任何位置访问它们。 例如,这是一个全局变量:

$bg-color: green;

另一方面,局部变量是在选择器内部声明的变量。 稍后,我们将研究如何自定义该行为。 现在,让我们来看第一个例子。

在这里,我们定义一个mixin ,然后定义其中的btn-bg-color变量。 这是一个局部变量,因此仅对该mixin中的代码可见:

@mixin button-style {
    $btn-bg-color: lightblue;
    color: $btn-bg-color;
}

接下来,我们可以如下调用mixin:

button {
    @include button-style;
}

生成CSS:

button {
    color: lightblue;
}

但是,想像一下,我们还想在另一个选择器中使用此变量(而不是mixin):

.wrap {
    background: $btn-bg-color;
}

这将给我们以下错误:

Undefined variable: "$btn-bg-color".

那是意料之中的,对吧? 我们尝试访问本地范围内的mixin变量。 但是,请不要担心,如上所述,我们将在下一部分中解决此问题。

嵌套选择器

值得一提的是,如果我们在选择器中声明变量,则任何其他嵌套选择器都可以访问它。 这是一个例子:

.wrap {
    $bg-color: red;
    
    &:after {
        background: lighten($bg-color, 10%);
    }
}

编译为:

.wrap:after {
    background: #ff3333;
}

但是,请看下面的示例,其中我们定义了一个函数,然后将该函数与嵌套选择器一起使用:

@function my-function() {
    $text-color: black;
    @return $text-color;
}
    
.wrap {
    color: my-function();
    
    &:after{
        background: $text-color;
    }
}

如果我们尝试对此进行编译,则会得到前面讨论的相同错误。 同样,发生这种情况是因为我们无法访问text-color变量。 它不是直接在父选择器中定义的,而是在我们选择器调用的函数中定义的。

变量名

全局变量和局部变量可以具有相同的名称。 为了演示这种行为,我们将研究第四个示例:

$text-color: tomato;

@mixin button-style {
    $text-color: lime;
    color: $text-color;
}
    
@mixin link-style {
    $text-color: black;
    color: $text-color;
}

在这里,我们定义了三个具有相同名称的不同变量( text-color )。 第一个是全局变量,而其他两个是局部变量。

以下是一些使用它们的样式:

button {
    @include button-style;
}
     
a {
    @include link-style;
}
     
.wrap {
    background: $text-color;
}

以及生成CSS:

button {
    color: lime;
}
    
a {
    color: black;
}
    
.wrap {
    background: tomato;
}

那是您所期望的吗?

请记住,除非使用当前版本的Sass(3.4)进行编译,否则我们将看不到这些样式。 例如,假设我们使用Sass 3.3,我们CSS输出将如下所示:

button {
    color: lime;
}
    
a {
    color: black;
}
    
.wrap {
    background: black;
}

请注意.wrap选择器的背景色不同。 发生这种情况是因为根据早期的Sass版本(与LibSass相同),如果我们在本地重新定义全局变量的值(例如text-color ),则它将是变量的新(全局)值。 因此,在我们的示例中,编译样式取决于我们声明变量和mixins的顺序。

default标志

如果尚未设置变量或变量的当前值为null (视为未分配),则可以使用此标志设置变量的值。 为了更好地说明我们如何在实际场景中利用它,让我们假设我们有一个具有以下结构的项目:

Project-Name/
    ├── ...
    ├── css/
    │   └── app.css
    └── scss/
        ├── _config.scss
        ├── _variables.scss
        ├── _mixins.scss
        └── app.scss

app.scss文件如下所示:

@import "config";
@import "variables";
@import "mixins";
    
button {
    @include button-style;
}

// more styles

让我们看看部分文件的内容。

首先, variables.scss文件包含我们的变量:

$btn-bg-color: lightblue !default;
$btn-bg-color-hover: darken($btn-bg-color, 5%);
    
// more variables

注意分配给btn-bg-color变量的default标志。

其次, mixins.scss文件包含我们的mixins:

@mixin button-style ($bg-color: $btn-bg-color, $bg-color-hover: $btn-bg-color-hover) {
    background-color: $bg-color;
    // more styles
    	
    &:hover {
        background-color: $bg-color-hover;
        // more styles	
    }
}
    
// more mixins

然后,生成的app.css文件将如下所示:

button {
    color: lightblue;
}
    
button:hover {
    background-color: #99cfe0;
}

因此,我们的按钮带有默认样式。 但是,让我们假设我们希望可以选择通过应用自定义值来覆盖它们。 为此,我们可以在config.scss部分文件中重新分配所需的(默认)变量:

$btn-bg-color: chocolate;
    
// more variables

将此变量的值设置为chocolate将导致忽略已收到default标志的相应值( lightblue )。 因此,生成CSS会发生变化,如下所示:

button {
    color: chocolate;
}
    
button:hover {
    background-color: #bc5e1b;
}

注意 :如果未向btn-bg-color变量添加default标志,则由于CSS的级联性质,我们CSS如下:

button {
    color: lightblue;
}
    
// hover styles

global标志

第二个标志帮助我们更改局部变量的范围。

您还记得我们在第一个示例中看到的错误吗? 好吧,那是因为我们试图在.wrap选择器中使用btn-bg-color变量。 让我们修改示例以包括此新标志。 以下是新样式:

@mixin button-style {
    $btn-bg-color: lightblue !global;
    color: $btn-bg-color;
}
    
button {
    @include button-style;
}
    
.wrap {
    background: $btn-bg-color;
}

如下所示,由于有了此标志,CSS编译没有任何错误:

button {
    color: lightblue;
}
    
.wrap {
    background: lightblue;
}

global标志很有用,但请记住,更改变量的范围并不总是好的做法。

检查变量是否存在

Sass提供了两个自检功能来测试变量是否存在。 我们可以使用variable-exists和/或global-variable-exists函数来检查我们的局部变量和/或全局变量是否分别存在。

例如,这是一个常见的用例,其中我们定义了一个变量,该变量包含Google Font的绝对路径。 然后,我们选择将字体导入样式表中,但前提是已实例化了相关变量。

$google-font: "http://fonts.googleapis.com/css?family=Alegreya";
    
@if(global-variable-exists(google-font)) {
    @import url($google-font);
}

结果:

@import url("http://fonts.googleapis.com/css?family=Alegreya");

结论

在本文中,我向您介绍了Sass中变量范围的概念。 为了使事情更清楚,我们查看了不同的示例,因此希望您现在对范围的工作原理有了很好的了解。 您可以在SassMeister要点中找到本文的所有示例,并随时在评论中提出任何问题!

翻译自: https://webdesign.tutsplus.com/articles/understanding-variable-scope-in-sass--cms-23498

sass 引入sass

DDR5 输入时钟抖动规范全解析!技术宅必看 简单说,时钟抖动就是时钟信号边沿的“颤抖”——信号本来应该在某个固定时间跳变,但实际时刻可能会前后波动。这种波动可能是随机的,也可能是确定性的。随机抖动(Random Jitter, Rj):符合高斯分布,像是你家猫咪不经意的晃动。确定性抖动(Deterministic Jitter, Dj):受限于特定周期或模式,像是邻居装修时的规律敲击声。⚠️ 注意,如果时钟抖动超出规格,DDR5可能无法正确接收或发送数据,内存错误、系统崩溃可就跟着来了! 阅读详情

相关推荐

MATLAB/Simulink与ThingSpeak集成:打通物联网数据与工业算法仿真的闭环

在工业算法开发与控制系统设计中,模型仿真与真实世界数据的脱节是常见的工程挑战。其核心原理在于构建一个双向数据流闭环,将虚拟的仿真模型与物理世界的传感器网络连接起来。这一技术方案的核心价值在于大幅缩短算法迭代周期,实现数据驱动的设计与验证。典型的应用场景包括数字孪生构建、预测性维护和硬件在环(HIL)测试的云端化。通过将MATLAB/Simulink这一强大的模型化设计环境,与ThingSpeak物联网云平台进行深度集成,工程师能够轻松地将实时或历史的物联网数据流直接注入仿真模型作为输入,同时将仿真结果实时回

weixin_34220179的博客 470

Sass Introspection函数

本节我们来看一下 Sass 中的 Introspection 函数,Introspection 函数一般用于代码的调试。 常用的 Introspection 函数: 函数 描述 call() 动态的调用一个 type-of() 返回一个值的类型 function-exists() 检测指定的函数是否存在 global-variable-exists() 检测某个全局变量是否定义 inspect() 返回一个字符串的表示形式,参数为一个 sass 表达式。 mixin-ex

ivenqin的博客 241

智能体在车联网中的应用:第19天 智能体理论与初步实践 D30:阶段小结——在SUMO中使用TraCI控制预编程智能体

本文介绍了如何将强化学习从算法仿真迁移到交通系统实践,重点讲解了SUMO微观交通仿真平台与TraCI实时控制接口的架构。通过构建一个预编程驾驶智能体,演示了车辆从起点到目标点的导航控制。文章详细解析了TraCI的双向通信机制和事件驱动模型,对比了其与传统RL环境的差异,并提供了完整的Python实现框架,包括路网配置、车辆控制和基于向量场的导航逻辑。该实践为后续开发高级学习型交通智能体奠定了基础。

IT深耕十余载,大道之简 1478

SCSS用法总结

一. 概述: - 完全兼容 CSS3 - 在 CSS 基础上增加变量、嵌套 (nesting)、混合 (mixins) 等功能 - 通过函数进行颜色值与属性值的运算 - 提供控制指令 (control directives)等高级功能 - 自定义输出格式 二.命令行处理 在命令行中运行 Sass: sass input.scss output.css 监视单个 Sass 文件,每次...

LXIBEI的博客 2380

采购订单定价策略 超详细

‘需求’字段里填写的是一个例程编号(例程是一段判断程序),如果我们在需求中维护了例程编号,那只有这个例程条件被满足时,这个条件表才会被系统自动读取。一部分的条件表只有在凭证项目满足一定的条件时才会被读取。 ‘排斥的’字段如果别勾中的话,那表明如果这个条件表被系统成功读取到数据后,系统将停止这个存取顺序的执行,否则,系统将继续执行下去。 注意:a、如果我们给某个条件类型设定了有效期的话,那我们必须给这个条件类型分配一个存取顺序。 b、不能给一个抬头条件分配存取顺序。 是...

竹大的博客 1万+

Android Telephony主要模块及功能

Telephony的代码主要由五个模块组成 1.Telephony Frameworks 代码区域: frameworks/opt/telephony/ 其中主要的文件在如下目录 /frameworks/opt/telephony/src/java/com/android/internal/telephony/ 其中比较常见的有以下几类文件 1.BaseCommands、RIL构成R

泊客 7723

前端必知必会-Sass变量

本文介绍了Sass变量的使用,如有问题欢迎私信和评论。

qq_24018193的博客 729

RTT Studio和Cubemx联合开发

1. RTT studio创建工程 创建工程 ## 创建完成以后的目录结构 2. 配置CubuMx 双击cubumx的图标打开CubeMx 配置时钟 生成代码 构建后的代码结构 编译代码满屏错误:不要慌 3. 新增脚本 新建scons脚本文件 SConscript 脚本内容如下 import os from building import * cwd = GetCurrentDir() src = Glob('*.c') # add cubemx drivers src = Split('''

Car12 1565

sass中声明变量与运用

创建一个存放变量的scss文件便于统一管理 在里面声明变量 $colorA: #FF6600 !default; $colorB: blue !default; $colorC: #666666 !default; 然后再调用的页面中导入,引用 <style lang="scss"> @import './assets/scss/config.scss'; .fontColor { color: $colorB; } </style>

weixin_44169027的博客 520

Windows 下 Claude Code 使用全记录:从零到一的保姆级图文教程(持续更新)

本文主要介绍了Windows 下 Claude Code 使用全记录:从零到一的保姆级图文教程,希望能对学习使用 Claude Code 的同学们有所帮助。 文章目录 1. 背景 2. 实战教程(2026年最新教程) 2.1 步骤一 Claude Code 环境准备 2.2 步骤二 配置Claude Code 2.3 步骤三 对话 3. 老版本实战教程 3.1 步骤一 配置Node.js 3.2 步骤二 Claude Code配置 3.3 步骤三 配置Claude Code 3.4 步骤四 对话

weixin_43178406的博客 15万+

将Keil中的变量数组导出

首先,写好导出数据的函数。

小柚子的博客 1952

Sass Introspection

Sass 自省函数 在构建样式表时很少使用内省函数,但是如果某些东西不能正常工作,比如调试函数,那么它们是有价值的。 下面是关于Sass 中所有自省函数的一个相关列表: 函数(功能) 描述 call(function , arguments…) 使用参数调用函数,并返回结果。 content-exists() 检查当前mixin是否传递了@content块。 feature...

天空之外 212

基于DWA算法的机器人动态避障技术实现及matlab代码

DWA算法是一种基于轨迹的运动规划算法,其核心思想是:在机器人当前位置及速度的基础上,结合机器人感知到的环境信息,生成一组合法的速度指令,然后从这组速度指令中选取代价最小的速度指令作为机器人的下一步操作。下面,我们将通过一个实例来演示基于DWA算法的机器人动态避障技术实现。假设机器人在一个宽敞的场地内行驶,但场地内有一些固定障碍物和移动障碍物,机器人需要避开这些障碍物,并在场地内自由移动。本文给出了一种基于DWA算法的机器人动态避障技术实现及相应的matlab代码,读者可以根据自身需求进行修改和调整。

uote_e的博客 1003

vue3+vite中引入sass,使用sass变量

然后我们就可以在其他文件中直接使用变量。并且variable.scss中书写的样式可以全局使用并且生效的。如果我们不使用vite配置文件这种方式,可以单独引入然后使用变量。文件,使用:export{}语法用来导出变量。我试过了直接main.ts中引入变量文件,变量无法使用。我们可以单独新建一个存放变量的sass文件。指定使用 sass API。然后我们在vue文件中使用。可以在vite中添加配置项。在vite中,我们可以在。文件的css选项中配置。文件的顶部先引入变量文件。然后就可以正常使用了。

qq_46102720的博客 7745

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

react Dva引入sass(scss)

文章参考 dva 麻烦的sass 引入步骤 在React中使用CSS Modules设置样式 LESS roadhog原本就把less包进去,所以可以很自然地使用。原理其实就是扫描node-modules 的时候会包进去: ​ SASS 引入 不需要修改本地任何档案的配置 不需要新增任何指令 所以只要一行就可以解决: npm install node-sass sass-loader --...

黄彪博客 7639

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

sass 引入sass_您需要了解的有关Sass插值的所有信息

因此,您会不时与Sass一起玩。 您可以开始享受它了,因为它可以满足您的大多数需求。 但是,您还没有完全了解这件事: 插值 -将值插入其他值。 好吧,您很幸运,因为今天我将阐明这件事。 Interpo ...什么? 插值 (通常称为变量插值或变量替换 )并非Sass独有。 实际上,您可以使用多种语言(PHP,Perl,Ruby,Tcl,Groovy,Unix shell等)找到它。 我们经...

Web design 教程小屋 284

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Sass 你了解了吗

目录 一、Sass是什么? 二、Sass特点 三、为什么使用Sass 四、Sass语法格式 五、Sass安装 六、第一个Sass案例 七、编译sass文件的方式 (1)使用sass命令行 (2)在开发工具中使用插件编译 八、Sass变量 (1)变量声明 (2)作用域 (3)!global (4)变量引用 (5) 变量名用中划线还是下划线分隔 九、Sass嵌套规则与属性 (1)嵌套规则 (2)父选择器 & (3)嵌套属性 十、@import (1)impo

qq_52301431的博客 2651

ts 引入sass报错_reactjs ts sass快速上手

ts 引入sass报错Getting a frontend development project started can be a bit tricky these days. There’s many tools, frameworks, libraries, package managers, and boiler plates to get started with. In this sh...

weixin_26736149的博客 1363

sass变量引入全局

https://www.jianshu.com/p/ab9ab999344b(copy) 本文以Sass做案例,Less的参考,基本配置大同小异。假如我们有一个Sass的全局变量common.scss文件,路径 ../style/common.scss 代码如下: @mixin t-button($color,$background) { color:$color;...

weixin_30894389的博客 768

angular6 如何引入SASS

文章目录文章参考加载依赖的库配置angular.js 文件样式文件改为scss后缀 文章参考 angular6 引入sass 加载依赖的库 cnpm install node-sass sass-loader -D 配置angular.js 文件 { … projects: { … “schematics”: { “@schematics/angular:component”:{ “styl...

黄彪博客 825

python sass_引入sass变量

开发一个自己的 CSS 框架(一)这是一个系列,带着大家封装一个纯 CSS 框架,从零学习 SASS 语法。代码仓库点我传送因为简单,强依赖原生 Javascript 对虚拟 DOM 不友好(如 React、Vue、Angular),使用虚拟 DOM 对使用原生 Javascript 编程(JQuery)不友好。没有代码...文章我是小助手2018-07-091388浏览量SASS学习参考1. S...

weixin_39746794的博客 364

sass 引入sass_Sass错误处理简介

无论使用哪种语言,都应以简洁明了的方式处理错误,无论是为了最终用户还是下一个开发人员。 当您在网站上执行不正确的操作时,它不应该只是给您打上错误代码或失败的命令。 它应该向您发出关于发生了什么的明确信息,向您发出警告。 为其他开发人员编码时,这应该没有什么不同。 当您建立一个库,一个框架或只是一个团队工作时,您不是唯一使用代码的人。 很有可能,许多背景迥异的开发人员可能不得不使用您的代码,...

Web design 教程小屋 1577

React-引入sass

引入sass 项目是用create-react-app脚手架创建的,然后在项目中可以引入scss预编译,这样写起样式起来也很方便 1.安装 node-sass npm install node-sass 2.安装 node-sass-chokidar npm install node-sass-chokidar 3.在项目的package.json中 scripts 里面添加以下 "build-css": "node-sass-chokidar src/ -o src/", "watch

宇哥大男神的博客 1247

关于react引入 sass , node-sass 加载不进来的坑

关于引入sass ,node-sass加载不进来的坑 1 npm install sass 做个不多说 官网文档有 2 npm installnode-sass 是用来吧cssc文件编译成 css 文件的 要想使用sass 必须加载cacc 编译插件 3 node-sass 插件安装 必须严格按照 node 版本按个匹配 这个规则可以看https://www.npmjs.com/package/node-sass ...

qq_34703156的博客 619

angular6 引入sass

这篇文章是基于已经有的项目引入sass方法 一、全局安装ruby 安装ruby(运行sass 需要ruby) https://rubyinstaller.org/downloads/ 下载页面 注意:添加环境变量 安装完成之后看版本  ruby -v 二、全局安装sass https://www.sass.hk/install/ 安装方法 注意:gem源注意切换到国内来,镜像地...

qq_25970751的博客 883

next.js中引入sass

第一步: 安装sass npm install --save @zeit/next-sass node-sass 第二步: 在项目根目录添加next.config.js 文件,用于指示Next加载对用的功能: const withSass = require('@zeit/next-sass') module.exports = withSass() 第三步: 在 pages...

人间草木 5634
上一篇: css 网格布局_CSS网格布局简介
下一篇: html创建网页教程视频_创建一个时尚的企业网页设计(高清视频系列:第4天)
daique1908
博客等级 码龄10年 29粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值