11【Sass语法介绍-导入】

news2024/11/29 14:52:31

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.coloradmin.cn/o/470414.html

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

相关文章

aac音频怎么转mp3,这几个方法很简便

对于aac来说,其是一种高级音频编码,也是专门为声音数据设计的文件压缩格式。通常来说,aac与mp3有一些不同。aac使用了全新的算法进行编码的,其整体的效率较mp3更高一些。同时,aac格式的音质较好一些。但是,…

调戏chatGPT(二)下围棋

这次我准备和chatGPT下盘围棋,我先得确认它知道围棋是啥,如果会的话我就不用介绍规则了 t 你会下围棋嘛 作为一名AI助手,我可以模拟下围棋的过程,但是我没有实际的感官,无法看到棋盘和棋子,也无法进行实…

Win11电脑右下角时间显示秒方法教学

Win11电脑右下角时间显示秒方法教学。Win11系统的最新版本已经可以支持状态栏显示秒的功能了。如果你使用的Win11不是最新版本,其实也是可以实现秒数的显示的。接下来我们就来看看具体的设置方法吧。 具体操作如下: 1、无法直接通过修改Win11注册表的方法…

Javaweb | 状态管理:Session、Cookie

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! 状态管理 问题引入 HTTP协议是无转态的,不能保存提交的信息如果用户发来一个新的请求,服务器无法知道它是否与上次的请求联系对于那些需要多次…

第四章节 首次登录与在线求助

第四章 首次登录与在线求助 4.14.1.4 在终端登录Linux: 4.2 命令行模式下的命令执行4.2.1 开始执行命令4.2.2 基础的命令操作4.2.3 几个重要的热键4.2.3 Linux系统在线求助man page 与info page 4.4 简单的文本编辑器nano 4.1 4.1.4 在终端登录Linux: …

Java排序

Java排序 🐾1. 概念🐾1.1 排序1.2 稳定性(重要) 💐2. 七大基于比较的排序比-总览💐🌸3. 插入排序🌸3.1 直接插入排序-原理3.2 实现3.3 性能分析3.4 折半插入排序(了解&am…

Java学习15(IO基础知识)

1、IO流简介? IO 即 Input/Output,输入和输出。数据输入到计算机内存的过程即输入,反之**输出到外部存储(比如数据库,文件,远程主机)**的过程即输出。数据传输过程类似于水流,因此称…

RocketMQ第一节(MQ的初步了解)

目录 1:什么是消息队列 2:MQ的基础模型 3:MQ的作用 3.1:MQ用来解耦 3.2: 削峰填谷 4:MQ怎么选 1:什么是消息队列 MQ全称是Message Queue (消息队列),是消息传输中间件&#xf…

FT2000+ qemu kvm 64C64G 通过频繁设置CPU online 状态导致虚拟机假死测试用例

宿主机配置 虚拟机配置文件 <domain typekvm> //如果是Xen&#xff0c;则type‘xen’<name>redflag1</name> //虚拟机名称&#xff0c;同一物理机唯一<uuid>44748c15-7c00-4817-8724-675a27c3f821</uuid> //同一物理机唯一&#xff0c;可用uu…

图形界面GUI相关概念GLX/Wayland/X11/DRM/DRI

1. GUI图形界面是什么 GUI是graphical user interface的缩写&#xff0c;图形用户接口&#xff0c;实现了基本的WIMP&#xff08;windows&#xff0c;icons&#xff0c;menus&#xff0c;pointer&#xff09;。一个GUI的基本组成&#xff1a;display server实现windowing syst…

传统制造企业如何数字化转型?中国减速机Top 1企业给出这份答案

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 数字中国建设正在如火如荼地展开&#xff0c;百业千行也都在寻求自身业务与数字化的深度融合。 2022年制造业增加值占GDP比重约为30%&#xff0c;在数字经济赋能新发展的当下&#xff0c;制造业成为数字技术重点实施落地的载…

2023/4/27总结

第一周任务 - Virtual Judge (vjudge.net) 1.这道题目穷举即可 最多90次 #include<stdio.h> int getLucky(int x) {int a[10],i,n,tx,max0,min10;for(i0;t;i){a[i]t%10;t/10;if(a[i]>max) maxa[i];if(a[i]<min) mina[i];}return max-min; } int slove(int l,int r…

Layui 2.8.1 正式发布,朴实归来

Layui 是一套开源免费的 Web UI 组件库&#xff0c;采用自身轻量级模块化规范&#xff0c;遵循原生态的 HTML/CSS/JavaScript 开发模式&#xff0c;极易上手&#xff0c;拿来即用。其风格简约轻盈&#xff0c;而内在雅致丰盈&#xff0c;甚至包括文档在内的每一处细节都经过精心…

docker部署harbor

Harbor介绍 以Docker为代表的容器技术的出现&#xff0c;改变了传统的交付方式。通过把业务及其依赖的环境打包进Docker镜像&#xff0c;解决了开发环境和生产环境的差异问题&#xff0c;提升了业务交付的效率。如何高效地管理和分发Docker镜像&#xff1f;是众多企业需要考虑…

Shenll编程之循环语句与函数

循环语句 一、for循环二、continue跳出循环continue二次跳出循环 三、break终止循环 循环是一种控制流程的结构&#xff0c;用于重复执行一段代码 遍历是一种数据操作的过程&#xff0c;用于访问并处理数据构成中的每个元素 在某些情况下&#xff0c;循环和遍历可以结合使用&am…

c++标准模板(STL)(std::array)(二)

定义于头文件 <array> template< class T, std::size_t N > struct array;(C11 起) std::array 是封装固定大小数组的容器。 此容器是一个聚合类型&#xff0c;其语义等同于保有一个 C 风格数组 T[N] 作为其唯一非静态数据成员的结构体。不同于 C 风格数…

苹果id密码忘记了怎么重新设置?请收好这份攻略!

案例&#xff1a;怎么重新设置apple ID密码&#xff1f; 【9敏&#xff01;想下载美颜相机&#xff0c;结果忘记苹果id密码了&#xff0c;有什么方法重新设置吗&#xff1f;】 在日常使用中&#xff0c;我们有时候会遇到忘记苹果ID密码的问题&#xff0c;这时候需要重新设置苹…

车联网OTA安全实践

摘要&#xff1a; 近年来&#xff0c;智能汽车已成为全球汽车产业发展的战略方向&#xff0c;汽车技术与工程核心逐渐从传统硬件层面转移到软件层面&#xff0c;汽车行业已经踏上了软件定义汽车&#xff08;SDV&#xff09;的变革之路。 在SDV的大趋势下&#xff0c;汽车零部件…

界面控件DevExpress WinForm的垂直网格,让数据展示更灵活(二)

DevExpress WinForm Vertical Grid&#xff08;垂直网格&#xff09;组件设计用于提供UI灵活性&#xff0c;它允许显示数据集中的单个行&#xff0c;或在其90度反向网格容器中显示多个数据集行。此外&#xff0c;开发者还可以将其用作属性网格&#xff0c;就像在Visual Studio …

VueBaiDuMap百度地图组件常用案例

VueBaiDuMap获取可视区边界点坐标_毛三仙的博客-CSDN博客【代码】VueBaiDuMap获取可视区边界点坐标。百度地图&#xff0c;左上角左下角右上角右下角坐标https://blog.csdn.net/m0_74149462/article/details/130420983?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%…