Sass语法介绍-导入

11【Sass语法介绍-导入】

1.前言

在 CSS 中我们可以通过 @import 来导入一个样式文件,Sass 扩展了 CSS 的 @import 规则,使得可以导入 CSS 后缀的样式文件和 Scss 后缀的样式文件,并且提供了对 mixin 、函数和变量的访问。

与 CSS 的 @import 不同的是, CSS 使用 @import 导入文件是在页面渲染的时候发起多个 http 请求来获取文件内容,而 Sass 的导入 @import 是在编译时获取文件内容导入的。

2.语法详情

Sass 的导入和 CSS 中的导入语法类似,只不过在 Sass 中可以导入用逗号分隔的多个文件, 我们举个例子看下:

@import 'a.scss', 'b.scss';

上面的代码意思是导入 a.scss 和 b.scss 文件,那么导入后 a 和 b 中的任何mixin 、函数和变量都是可以使用的。

我们知道在 CSS 中也有 @import 语句,在以下几种情况 Sass 会认为 @import 是 CSS 语句:

  • 使用 url()
  • 文件的扩展名是 .css
  • @import 包含 media queries
  • 文件名以 http:// 开头

在使用的时候要注意上面的几种情况,如果导入的扩展名是 .scss 或 .sass 那么肯定用的是 Sass 提供的 @import 。如果导入文件没有指定文件扩展名,那么 Sass 会尝试寻找文件名相同的扩展名为 .sass 或 .scss 的文件

3.加载路径

Sass 允许我们自行提供文件的加载路径,在我们导入文件的时候,Sass 总是会相对于当前文件进行解析,如果没有加载到则会使用加载路径。假如我们将加载路径设置为 node_modules/public/sass ,那么我们使用如下的导入方式:

@import 'a';

假如当前目录下没有 a.scss 文件,那么 Sass 就会去加载 node_modules/public/sass/a.scss ,这就是使用了加载路径,不过这种方式我们在项目中极少应用,你只需要了解即可。

4.部分导入

什么是部分导入呢? 我的理解是局部的使用导入,也就是说可以仅导入 Sass 或 Scss 文件,而不将它们编译为 CSS, 那么应该怎么做呢?假如我要导入一个 my.scss 文件,我不希望将它编译为 CSS ,那么需要使用下划线开头的文件名,也就是说需要改名为 _my.scss ,然后使用如下导入代码:

@import 'my';

上面的代码导入的就是 _my.scss 文件,并且不会将它编译为 CSS 。另外需要注意的是:不可以同时存在带有下划线和不带下划线的同名文件!

5.索引文件

在 Sass 中什么是索引文件呢?_index.scss 文件,那它有什么用呢?假如我有一个 my 目录,这个目录下有两个文件,一个是 a.scss 一个是 _index.scss ,那么我使用如下文件导入代码:

@import 'my';

那么上面的代码导入的就是 _index.scss 文件,也就是说 _index.scss 是这个目录下的默认文件,这就想你在写 vue 或者 html 中目录下的 index 文件类似。

6.使用 @use 替代 @import

Sass 官方团队不鼓励使用 @import 导入,并且在未来几年将逐步淘汰它,并最终将 @import 从 Sass 中完全删除。所以使用 @use 是官方团队更推荐的方式,下面我们开始讲解使用 @use 导入。

@use 与 @import 的语法基本相同,我们先看一个简单的使用 @use 导入的例子:

@use 'my/a.scss';
@use 'my/b';

从上面的代码中可以看到其使用方式与 @import 是相同的,那么为什么还要替换掉 @import 呢? 主要是以下几个原因你需要了解下:

  • @import 会使得所有变量、mixin 和函数都可以全局访问,这使开发者很难去维护这些定义的东西。
  • 因为所有的都是全局的,那么 Sass 必须为所有的成员添加前缀,以避免命名冲突。
  • @extend 也是全局的,这样将很难预测哪些样式将被扩展。
  • 每次使用 @import 时,每个样式表都会被执行,这会增加编译时间
  • 无法定义下游样式表无法访问的私有成员。

基于上述的这些原因,Sass 官方团队将会逐渐淘汰 @import,可以使用 @use 替代,语法是相同的,所以我们在 v4.x.x 及以上的版本中尽量使用 @use 来导入。

7.实战经验

其实在实际的项目中我们一般就是用 @import 来简单的导入文件,更多的时候是用它来方便整个项目中的 Sass 样式管理,如下图所示:

image-20220825230946960

图中所演示的是我的项目中的一个使用方式。每个项目的样式管理方式都不同,你的公司中的项目中肯定也会使用 @import 或 @use 来管理样式文件,不过目前应该是使用 @import 的居多,这个功能其实很简单也没有太多的说法,在你的项目中需要你灵活的使用它,当然,慢慢的使用 @use 去替换掉它也是非常重要的!

8.小结

image-20220825232019448

本节内容我们讲解了 Sass 中的导入 @import,这在 CSS 中也是有这个功能的,这个功能我们可以理解就是导入文件中的内容的,一般在项目中我们也是用它来操作文件而已。

还有需要注意的是,Sass 官方推荐使用 @use 来替代 @import 使用,所以我们在导入的时候尽量使用 @use,如果你的项目中已经大量的使用了 @import (这是目前很常见的现状),可以找个时机替换掉,不过一定要确保 Sass 的版本是 v4.x.x 及以上!

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

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

相关文章

AI技术的实际应用和影响

随着人工智能技术的快速发展,越来越多的AI工具开始出现在我们的生活中。这些工具在各个领域都发挥着重要的作用,为人们带来了便利和效率。在这篇文章中,我们将探讨人们在使用AI工具时最喜欢的和认为最好用的工具,并展示AI技术的实…

【QEMU系统分析之实例篇(三十五)】

系列文章目录 第三十五章 QEMU系统仿真的机器创建分析实例 qdev_connect_gpio_out_named(lpc_dev, ICH9_GPIO_GSI) 文章目录 系列文章目录第三十五章 QEMU系统仿真的机器创建分析实例qdev_connect_gpio_out_named(lpc_dev, ICH9_GPIO_GSI) 前言一、QEMU是什么?二、…

Python内置函数oct()详解

Python中的oct()函数是一个内置函数,用于将一个整数转换成它的八进制字符串表示。 函数定义 oct()函数的基本语法如下: oct(x)x:一个整数。 函数返回x的八进制表示,以字符串形式。 基本用法 将整数转换为八进制 number 64…

神经网络激活函数

一、为什么需要激活函数 通俗解释 想象一下你在玩乐高积木。你有各种不同颜色和形状的积木,你的任务是建造一个模型——也许是一辆车、一座房子,或者是一只动物。 如果你只允许每一块积木直接堆叠在另一块上面(想象一下只能垂直或水平地把…

深度学习模型的训练细节

摘要: 深度学习模型训练是复杂且细致操作的过程,涉及多个步骤和技巧。在训练深度学习模型时,中间变量的检查是至关重要的,它可以帮助我们理解模型的学习动态,获得真实的训练过程反馈,及时发现并解决问题。通…

初识C语言——第二十天

do while ()循环 do 循环语句; while(表达式); 句式结构: 执行过程: do while循环的特点: 代码练习: 二分法算法: int main() {int arr[] { 0,1,2,3,4,5,6,7,8,9};int k 7;//查找数字7,在arr这个数组…

80%的产品经理被辞退不是因为能力,而是因为…

新手刚入门做产品经理,对产品经理的工作其实也是没有把握,这是对这份工作不够了解,不知道整个工作的流程,所以会感觉“没把握”,结果就是导致焦虑。 如果你硬着头皮做一遍,知道大概是怎么回事,…

Advanced RAG 07:在RAG系统中进行表格数据处理的新思路

编者按: 目前,检索增强生成(RAG)系统成为了将海量知识赋能于大模型的关键技术之一。然而,如何高效地处理半结构化和非结构化数据,尤其是文档中的表格数据,仍然是 RAG 系统面临的一大难题。 本文作者针对这一…

中国仓储物流装备产业链上最全产品资料大全(目前238家公司产品资料……)...

导语 大家好,我是社长,老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》人俱乐部 知识星球【智能仓储物流技术研习社】内已经收录了如下中国230多家仓储物流装备和技术相关产业链的公司的产品手册,请星球会员…

Oracle GoldenGate 配置双向同步

Oracle GoldenGate 配置双向同步 一、环境准备 DB版本:19.3 GoldenGate版本:21.3 系统环境配置: mkdir -p /u01/app/ogg_home chmod -R 777 /u01/app/ogg_home chown -R oracle:oinstall /u01/app/ogg_home vi .bash_profile # oracle export CV_ASSUME_DISTID=OEL7 expo…

python-pytorch seq2seq+attention笔记1.0.2

python-pytorch seq2seq+attention笔记1.0.0 1. LSTM模型的数据size2. 关于LSTM的输入数据包含hn和cn时,hn和cn的size3. LSTM参数中默认batch_first4. Attention机制的三种算法5. 模型的编码器6. 模型的解码器7. 最终模型8. 数据的准备9. 遇到的问题10. 完整代码11. 参考链接记…

好文推荐:基于热红外的双源能量平衡(TSEB)模型--从植物到全球尺度的蒸散诊断简史

文献 近日,美国农业部农业研究服务局(USDA-ARS)的科学家们发表了一篇重要的研究论文——“Agricultural and Forest Meteorology” (https://www.sciencedirect.com/journal/agricultural-and-forest-meteorology)&…

智慧公厕系统:改变“上厕所”体验的科技革新

公共厕所是城市建设中不可或缺的基础设施,然而,由于较为落后的管理模式,会常常存在着管理不到位、脏乱差的问题。为了改善公厕的使用体验,智慧公厕系统应运而生,并逐渐成为智慧城市建设的重要组成部分。本文将以智慧公…

AI工具如何简化日常生活?从论文到PPT,AI助手大集合

AI助手大集合,猛戳进来! 在工作和生活中,我经常使用各种各样的人工智能工具,如AI写作软件、AI语音助手、AI绘图工具等。我发现,这些工具能够极大地提高工作效率并简化日常生活。作为一名AI工具的忠实爱好者&#xff0…

Python爬虫——如何使用urllib的HTTP基本库

怎样通过 urllib库 发送 HTTP 请求? urllib库主要由四个模块组成: urllib.request 打开和读取 URLurllib.error 包含 urllib.request 抛出的异常urllib.parse 用于解析 URLurllib.robotparser 用于解析 robots.txt 文件 1. 使用urllib.parse解析URL 使用urlparse(…

【3dmax笔记】022:文件合并、导入、导出

文章目录 一、合并二、导入三、导出四、注意事项一、合并 只能合并 max 文件(高版本能够合并低版本模型,低版本不能合并高版本的模型)。点击【文件】→【导入】→【合并】: 选择要合并的文件,后缀名为3dmax默认的格式,max文件。 二、导入 点击【文件】→【导入】→【导…

等保测评介绍

等保测评,全称为信息安全等级保护测评,是一种依据国家信息安全等级保护制度要求,对信息系统实施安全等级保护管理的过程。这一过程包括对信息系统的全面安全风险评估,目的是发现潜在的安全隐患,并提出相应的安全改进措…

【ZYNQ】Vivado 封装自定义 IP

在 FPGA 开发设计中,IP 核的使用通常是不可缺少的。FPGA IP 核是指一些已经过验证的、可重用的模块或者组件,可以帮助构建更加复杂的系统。本文主要介绍如何使用 Vivado 创建与封装用户自定义 IP 核,并使用创建的 IP 核进行串口回环测试。 目…

为什么只有const-static-枚举/整型才可以类内初始化

在C中,静态数据成员(static member)是类的所有对象共享的一个变量。由于它们不是与类的任何特定对象实例相关联的,因此不能在类的构造函数中初始化它们。静态数据成员的初始化必须在类定义之外进行,除非它们满足特定的…

谷歌I/O 2024大会全面硬刚OpenAI

🦉 AI新闻 🚀 谷歌发布升级版Gemini机器人 竞争OpenAI ChatGPT-4 摘要:谷歌展示了升级版的 Gemini 聊天机器人,其支持实时处理视频和语音输入,并准确回答问题。此次发布时机与 OpenAI 公布 ChatGPT-4o 新模型几乎同步…