sass的模块化,@import的编译时和运行时详解

news2024/12/23 14:49:50

sass如同css一样 可以模块化。

css中通过import来实现模块化, 但是两者有些不同,css是会参与到运行时的,也就是说运行的过程中有多个css文件,通过import指令导入进来。但是sass并不是个运行时态,sass是一个编译时态。也就是说在运行之前把它分为多个模块。编译之后就变成一个文件了,以上就是css和sass模块化的区别!

在sass中实现模块化有两种方式:一种是用@import 一种是@use

首先我们来说@import,其中分为运行时语法和编译时语法

运行时语法

scss代码:

编译后的css代码:

 

 因为@import url(“xxx”)这种写法就是运行时态,换句话说就是css代码,所以编译后还是css代码

 编译时语法:

//common.scss

$color:red
//index.scss

@import "./common.scss"

.foo{
color:$color
}

编译后:index.scss生成的css文件就会包含common.scss里面的代码,自然可以使用common里面的css变量.

因为@import "xxxxx" 这种方式写是编译文件时生效。

scss官方并不建议使用import,并说在之后会废弃这个用法,

第一个原因是import去做运行时用 无所谓,因为本身就是css自带的,但是用作编译时就容易产生混淆,因为需要通过import后面是否有url()来判断是编译时还是运行时。

第二个原因是容易造成污染,在一个项目中我们肯定会抽离很多个scss模块,模块里可能会定义不同的变量,这些变量极易导致名称冲突。比如上面引入两个scss文件,都定义了$color变量,那么后一个会覆盖前一个,并且不会报错。这个存在很大隐患。

第三个原因是不存在私有,没有导入 、导出。

所以因为以上原因建议编译时使用@use

@use使用方法:

使用@use导入的scss文件,是有命名空间的,不论导入的文件层级有多深,默认就是一最后文件名为命名空间。该模块的所有成员都需要通过这个命名空间去访问。 

 加入通过@use按照下面这种方式导入 该如何应对,虽然两个common.scss文件是在不同目录,但是命名空间默认是以文件名命名,所以这个时候需要自定义命名空间。

@use "./common.scss"
@use "./a/b/common.scss"
@use "./common.scss" as a
@use "./a/b/common.scss" as b

还用一种方式是 as *  这种代表将该scss文件里面所有成员全部全局导出,那么也就不存在命名空间了。(不太建议这种搞,最好还是用带有命名空间的方式)

@use "./common.scss" as *

@use写法下设置私有变量

在变量$符号和名字之间加- 或者_ 都可以(本身下划线这种命名方式在前端就是表示内部使用、私有的)

//common.scss

$-n : 6;//或者 $_n : 6;

如果在外部使用了这个私有变量  编译时会报错

@use './common.scss' as a;

.foo{
color : a.$_n;
}

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

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

相关文章

六、JVM-垃圾收集器浅析

垃圾收集器浅析 主 JVM参数 3.1.1 标准参数 -version -help -server -cp3.1.2 -X参数 非标准参数,也就是在JDK各个版本中可能会变动 -Xint 解释执行 -Xcomp 第一次使用就编译成本地代码 -Xmixed 混合模式,JVM自己来决定3.1.3 -XX参数 使用得…

图片怎么压缩大小?值得一看的图片压缩方法

图片是我们生活和工作中必不可少的文件,为了能够有效保存、发送,我们需要适当压缩其大小,但很多朋友不知道怎么压缩图片,或者压缩后造成了图片清晰度受损,怎么才能既压缩图片的大小,又能避免清晰度受到影响…

为什么选择Docusaurus构建API文档?

在现代化软件开发中,文档对于软件成功的重要性不言而喻。然而,管理和维护文档站点往往会给开发者带来额外的负担。为了帮助开发人员快速构建易于管理和维护的文档站点,Docusaurus应运而生。本文将深入探讨为什么选择Docusaurus构建您的文档站…

Activiity跳转startActivity源码分析Activity启动流程(下)

调用ActivityThread子类ClientTranslationHandler的scheduleTranslation 注意上图有个sendMessage的 接着会执行translacationExecutor的execute方法。 都会走cycleToPath方法 cycleToPath方法对应的performLifecycleSequence 调用Actvitiy各个生命周期。 然后是第二种情况&am…

效率提升丨大学必看校园安全实用技巧

在当今社会,教育是培养人才、传承文明的重要场所。然而,教学楼作为学生、教师和员工活动的核心区域,也存在着潜在的安全隐患,其中最为突出的风险之一是火灾。火灾不仅危及生命财产,还可能给整个学校带来不可估量的损失…

五个BLOCK问题

block的原理是怎样的?本质是什么? 一个含有自动变量的匿名函数 Block 的本质是一个封装了函数及其调用环境的 Objective-C 对象 一个 block 实际是一个对象,它主要由一个 isa 和 一个 impl 和 一个 descriptor 组成。 是封装了函数代码以…

华为OD面试总结和建议:全程线上面试的经验分享

目录 导语一、准备工作:二、面试前:三、面试过程:1. 视频面试技巧:2. 技术问题准备: 四、面试后:结束语 导语 导语:随着技术的发展,线上面试在招聘过程中扮演着越来越重要的角色。作…

11万多英藏对照词典英藏翻译ACCESS\EXCEL数据库

今天继续发一个藏文藏语相关的翻译数据库,即英藏对照词典,加上《5万6千多藏文词典解释ACCESS数据库》以及昨天发的《近13万汉藏对照词典汉藏翻译ACCESS\EXCEL数据库》藏文类的数据就算较全了。 截图下方有显示“共有记录数”,截图包含了表的所…

js方法:toLocaleString()

js中的toLocaleString()方法用于将数字转换为本地化的字符串表示形式。 语法: number.toLocaleString([locales [, options]]) locales(可选):一个字符串、字符串数组,表示要使用的语言或一组语言。例如,&…

拍立淘是如何实现的?

淘宝拍立淘功能是很多网购的网民经常会用到的一个功能。拍立淘的图片搜索商品列表接口功能是指用户可以通过上传一张商品图片,拍立淘会根据该图片进行识别和匹配,以找到与该图片相似或相同的商品,并将搜索到的商品列表返回给用户。以下是该接…

《深度探索c++对象模型》第五章笔记

非原创,在学习 5 构造、解构、拷贝语意学Semantics of Construction,Destruction, and Copy 考虑下面这个abstract base class声明: class Abstract_base { public:virtual ~Abstract_base() 0;virtual void interface() const 0;virtual const char*mumble() c…

Robot Framweork之UI自动化测试---分层设计

Robot Framework 的分层思想是一种测试设计和代码组织的模式,它将测试用例的实现和测试执行逻辑分离,以提高测试的可维护性、可读性和可扩展性。 一、分层思想 在实际项目中,一般分为三层:元素层,流程层,用…

异步消息传递技术 JMS AMQP MQTT

广泛使用的三种异步消息传递技术:JMS AMQP MQTT JMS AMQP MQTT JMS(Java Message Service):一个类似JDBC的规范,提供了与消息服务相关的API接口 JMS消息模型: P2P 点对点模型:消息发到一个队…

BES 平台 SDK之按键的配置

本文章是基于BES2700 芯片,其他BESxxx 芯片可做参考,如有不当之处,欢迎评论区留言指出。仅供参考学习用! BES 平台 SDK之LED的配置_谢文浩的博客-CSDN博客 关于系统LED简介可参考上一篇文章。链接如上所示! 一&…

【ONE·Linux || 基础IO(一)】

总言 文件输入与输出相关介绍:语言层面/系统层面文件调用接口举例、文件描述符、重定向说明、缓冲区理解。 文章目录 总言1、文件输入与输出1.1、预备知识1.2、语言层面:回归C语言中文件相关接口1.2.1、打开文件和关闭文件:对当前路径的理解…

企业服务器中了Locked勒索病毒后怎么办,如何解决问题并提高防范意识

科学技术的发展给我们的生活带来了极大便利,但也为企业带来了安全威胁。近期,我们收到很多企业的求助,企业的服务器中了locked后缀勒索病毒,计算机上的所有文件都被加密,无法被正常调取,严重影响了企业的正…

使用预训练 ViT 模型的图像字幕中的视觉变换器 (ViT)-附源码

介绍 使用预训练 ViT 模型的图像字幕可以被视为图像下方的文本或书面描述,旨在提供图像细节的描述。它将图像翻译成文本描述的任务。它是通过连接视觉(图像)和语言(文本)来完成的。在本文中,我们使用图像中的 Vision Transformers (ViT) 作为使用 PyTorch 后端的主要技术…

2023牛客暑假多校-5-I-The Yakumo Family

解法:考虑枚举这个区间,设这个区间异或和为w。对于左端点 ,预处理出其左侧的所有子区间异或和的和 ,表示区间上所有子区间异或和。对右侧也做同样操作预处理出,表示区间上所有子区间异或和。那么最后答案就是。最重要的就是如何求…

Linux下 Docker容器引擎基础(2)

目录 创建私有仓库 将修改过的nginx镜像做标记封装,准备上传到私有仓库 将镜像上传到私有仓库 从私有仓库中下载镜像到本地 CPU使用率 CPU共享比例 CPU周期限制 CPU 配额控制参数的混合案例 内存限制 Block IO 的限制 限制bps 和iops 创建私有仓库 仓库&a…

【数据结构|二叉树遍历】递归与非递归实现前序遍历、中序遍历、后序遍历

递归与非递归实现二叉树的前序遍历、中序遍历、后序遍历。 二叉树图 定义 前序遍历(Preorder Traversal): 前序遍历的顺序是先访问根节点,然后按照先左后右的顺序访问子节点。对于上面的二叉树,前序遍历的结果是&…