Sass更新:@import——>@use

背景:将一个公共的CSS样式文件导入到任意一个组件中进行使用

一、创建并使用CSS公共样式文件

1、在目录的assets目录下创建一个style文件夹,里面存放一个.scss文件(例:mixin.scss)

2、文件内以@mixin来设置名为flex的一组样式(在调用时需要用到这个名字)

@mixin flex {
    display:flex;
    align-items: center;
    justify-content: center;
}

3 、在组件内导入公共文件(例:mixin.scss),并使用@include 样式名来引入想要的公共文件中的样式

@include flex

二、导入公共样式文件时遇到的问题及解决方案

1、最开始:使用@import '文件路径'

@import '@/assets/styles/mixin'

div{
   @include flex;
}

2、问题:

使用@import导入文件会报警告,原因是因为 Sass 的 @import 规则已被弃用,将在 Dart Sass 3.0.0 版本中移除。即使导入的样式生效(可能是使用的Sass版本没有那么高),但也存在很大的隐患,所以这种方式不建议使用。

3、解决:使用@use来替代@import(请注意,目前只有 Dart Sass 支持 @use。其他实现的使用者必须使用 @import规则。)

具体怎么使用@use,也容易出现问题:

(1)在使用@import的基础上直接进行更改:

一开始:@import '文件路径'
更改:@use '文件路径'

@use '@/assets/styles/mixin'

div {
  @include flex;
}

(2)出现的报错是:

(3)原因:

在 Dart Sass 中,@use 语句用于导入其他 Sass 文件,并将其内容封装在一个命名空间中。

如果你只写 @use '@/assets/styles/mixin';,Dart Sass 会默认将文件内容封装在一个命名空间中,但这个命名空间的名称是文件路径的最后一部分。

例如,如果你的文件路径是 @/assets/styles/mixin.scss,那么默认的命名空间名称就是 mixin。

所以在使用时应该是:mixin.flex

@use '@/assets/styles/mixin'

div {
  @include mixin.flex;
}

4、@use的其他写法:

(1)取消别名(慎用)

写法:

@use '@/assets/styles/mixin.scss' as *;

div {
  @include flex;
}

可通过@use "路径" as * 来取消命名空间,这种方式加载的模块被提升为全局模块,所以在调用时不需要用命名空间名.样式类名,直接用样式类名就可以。

(2)自定义别名

@use '@/assets/styles/mixin.scss' as 自定义名字;

div {
  @include 自定义名字.flex;
}

三、@use与@import对比

|--------|-----------|----------------|
| | @import | @use |
| 重复加载 | 可能导致重复加载 | 保证每个模块只加载一次 |
| 命名空间 | 无 | 可以自定义命名空间 |
| 作用域 | 共享一个作用域 | 创建命名空间,有隔离性 |
| 性能 | 可能存在性能问题 | 更优化性能 |
| 避免全局污染 | 不提供隔离性 | 提供隔离性 |
| 模块化支持 | 较弱 | 有更好的模块化支持 |
| 推荐版本 | 较旧版本的导入方式 | 新版本Sass推荐的导入方式 |

相关推荐
鸡鸭扣23 分钟前
Docker:3、在VSCode上安装并运行python程序或JavaScript程序
运维·vscode·python·docker·容器·js
paterWang1 小时前
基于 Python 和 OpenCV 的酒店客房入侵检测系统设计与实现
开发语言·python·opencv
东方佑1 小时前
使用Python和OpenCV实现图像像素压缩与解压
开发语言·python·opencv
天宇&嘘月1 小时前
web第三次作业
前端·javascript·css
我真不会起名字啊2 小时前
“深入浅出”系列之杂谈篇:(3)Qt5和Qt6该学哪个?
开发语言·qt
laimaxgg2 小时前
Qt常用控件之单选按钮QRadioButton
开发语言·c++·qt·ui·qt5
水瓶丫头站住2 小时前
Qt的QStackedWidget样式设置
开发语言·qt
小王不会写code2 小时前
axios
前端·javascript·axios
发呆的薇薇°3 小时前
vue3 配置@根路径
前端·vue.js
小钊(求职中)3 小时前
Java开发实习面试笔试题(含答案)
java·开发语言·spring boot·spring·面试·tomcat·maven