11【Sass语法介绍-导入】

2023-10-30

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 及以上!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

11【Sass语法介绍-导入】 的相关文章

随机推荐

  • Git(三) Git 图形化管理工具 SourceTree 全部实用操作

    Git 三 Git 图形化管理工具 SourceTree 全部实用操作 上篇文章主要说到Git的账号情况 Getlab账号和Github账号同时使用 本篇文章接着上篇内容继续为大家介绍 Git的图形化管理工具 SourceTree 前言 一
  • 文件下载中文文件名不显示

    使用response setHeader Content Disposition attachment filename fName 下载文件 中文文件名无法显示的问题 今天遇到这么一个情况 在Controller代码中进行文件下载 其中f
  • js 多个if else如何优化?

    function getUserDescribe name if name length gt 3 console log 名字太长 else if name length lt 2 console log 名字太短 else if nam
  • 导入时报错 :No module named ‘tensorflow.contrib‘ 问题的解决

    No module named tensorflow contrib 问题解决 问题描述 在tensorflow contrib模块的调用报错 No module named tensorflow contrib 解决方案 我给删了大不了不
  • [CISCN2019 华北赛区 Day1 Web2]ikun (JWT更改与python反序列化)

    前言 文章所涉及的资料来自互联网整理和个人总结 意在于个人学习和经验汇总 如有什么地方侵权 请联系本人删除 谢谢 本文仅用于学习与交流 不得用于非法用途 题目 提示是要买到Iv6 有很多页面 需要写脚本来找 import requests
  • 基于时间轮片方式处理超时任务

    作者 酱了里个酱 来源 掘金 https juejin im post 5e733e4f51882549417fe9aa 背景 最近收到小伙伴的一个吐槽 项目里的某个函数是同步阻塞的 无法确定其运行时间 某些情况下 可能出现长时间阻塞导致应
  • 计算机视觉与深度学习-全连接神经网络-激活函数- [北邮鲁鹏]

    文章目录 基础知识 为什么需要非线性操作 激活函数 激活函数 vs 数据预处理 常用的激活函数 Sigmoid函数 Logistic函数 双曲正切函数 Tanh函数 线性整流函数 ReLU函数 Leaky ReLU函数 Softmax函数
  • BTC txid与vote的关系

    当我通过BTC的listtransactions接口获取查询最近发生的钱包交易时 需要将用户的充值记录写到数据库时 发现了一些令人巨大的误解 例如 txid字段并不是唯一的 所以写到数据库时 会有交易哈希重复的可能性 有可能你的两个用户在币
  • python处理xml文件

    1 python 操作xml的方式介绍 查看全部包含 三种 法 是xml dom 模块 它是W3CDOMAPI的实现 若需要处理DOMAPI则该模块很适合 是xml sax 模块 它是SAXAPI的实现 这个模块牺牲了便捷性来换取速度和内存
  • matlab中varargout简介

    varargout可以看做 Variable length output argument list 的缩写 在matlab中定义m函数时通过 varargout我们可以得到可变个数个返回值 在matlab命令窗口中输入doc vararg
  • 【H5】Cookie、Session、Token、JWT区别及使用方法

    Token 和 Session 的区别 Session 是一种记录服务器和客户端会话状态的机制 使服务端有状态化 可以记录会话信息 而 Token 是令牌 访问资源接口 API 时所需要的资源凭证 Token 使服务端无状态化 不会存储会话
  • Spring Boot 集成 Flowable 并自定义数据源

    永久链接 https blog kekwy com flowable datasource 问题描述 在使用 flowable spring boot starter 进行 spring boot 集成 flowable 时 flowabl
  • Python爬虫——urllib_post请求百度翻译

    post请求 post的请求参数 是不会拼接在url后面的 而是需要放在请求对象定制的参数中 post请求的参数需要进行两次编码 第一次urlencode 对字典参数进行Unicode编码转成字符串 第二次encode 将字符串数据转换为字
  • 插值法

    插值 根据已知数据点 条件 预测未知数据点的值的方法 1 多项式插值法 多项式插值法 多项式插值法 所求的插值函数是多项式 其中 就是所要求的参数 多项式插值基本公式 求系数 1 1 拉格朗日插值法 设函数 y f x 在区间 a b 上有
  • 希尔排序(重点讲解如何分组)---------通俗易懂,直击重点!!!

    文章目录 希尔排序的历史 一 关于希尔排序 二 希尔排序的思路 三 代码实例讲解 总结 希尔排序的历史 希尔排序按其设计者希尔 Donald Shell 的名字命名 该算法由希尔 1959 年公布 1 希尔排序是基于插入排序的以下两点性质而
  • 杜教筛BM(找规律)

    代码来自学长 include
  • Centos--解决Pycharm无法输入中文问题

    在 pytcharm bin pytharm sh 中添加如下代码 export GTK IM MODULE ibus export QT IM MODULE ibus export XMODIFIERS im ibus Run the I
  • vue动态调节背景图片

    vue动态调节背景图片 在一些场景下我们需要使用户可以进行自定义背景图片 包括背景图片和其透明度 当然 还有许多也可以 这里就以这两个为例子 都差不多 这里我就为大家详细介绍如何动态设置背景图片 伪类绑定样式属性值 其中声音播放部分详情在
  • java语言实现多态的方式_什么是多态机制?Java语言是如何实现多态的?【详细解释】...

    今天爱分享给大家带来什么是多态机制 Java语言是如何实现多态的 详细解释 希望能够帮助到大家 所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定 而是在程序运行期间才确定 即一个引用变量倒底会
  • 11【Sass语法介绍-导入】

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