CSS(Sass)模块化

摘要:
通常,@import寻找Sass文件并将其导入,但在以下情况下,@import仅作为普通的CSS语句,不会导入任何Sass文件。

在Vue大行其道的今天,我们也受益匪浅,再次感谢@尤大。那么在用Vue开发的过程中,我们大概率会用到Sass来提高我们前端的开发效率,为前端工程化做了很大贡献,Sass本身具有很多令人兴奋的功能,例如:variable、function、mixin、nested、module等,本文主要来研究module——CSS模块化

我们在开发中最常用的模块化指令就是@import,后来新版本的 Sass 中摒弃了@import 并引入了一个新的指令 @use 来帮我们完成CSS的模块化,那我们就一个一个来研究~

@import

基本用法

Sass 拓展了@import的功能,允许其导入 SCSS 或 Sass 文件。被导入的文件将合并编译到同一个 CSS 文件中,另外,被导入的文件中所包含的变量或者混合指令 (mixin) 都可以在导入的文件中使用。

通常,@import寻找 Sass 文件并将其导入,但在以下情况下,@import仅作为普通的 CSS 语句,不会导入任何 Sass 文件。

  • 文件拓展名是.css
  • 文件名以http://开头;
  • 文件名是url()
  • @import包含 media queries。

如果不在上述情况内,文件的拓展名是.scss.sass,则导入成功。没有指定拓展名,Sass 将会试着寻找文件名相同,拓展名为.scss.sass的文件并将其导入。

@import "foo.scss";

@import "foo";

都会导入文件 foo.scss,但是

@import "foo.css";
@import "foo" screen;
@import "http://foo.com/bar";
@import url(foo);

编译为

@import "foo.css";
@import "foo" screen;
@import "http://foo.com/bar";
@import url(foo);

Sass 允许同时导入多个文件,例如同时导入 rounded-corners 与 text-shadow 两个文件:

@import "rounded-corners", "text-shadow";

导入文件也可以使用#{ }插值语句,但不是通过变量动态导入 Sass 文件,只能作用于 CSS 的url()导入方式:

$family: unquote("Droid+Sans");
@import url("http://fonts.googleapis.com/css?family=#{$family}");

编译为

@import url("http://fonts.googleapis.com/css?family=Droid+Sans");

它的缺点

  • 很容和原生CSS中的@import混淆;
  • 性能略差(待考究);
  • 没有命名空间,多个模块相同名称的变量或方法会被覆盖;
  • 无法直接看出变量或方法的宿主模块;
为了弥补已知问题,@import被更明确的@use和@forward规则所取代

@use

和@import用法类似

@use"foo.scss";

当然,他们之间有明显差别

  • 该文件只导入一次,不管在项目中@use它多少次。
  • 以下划线(_)或连字符(-)开头的变量、mixin和函数(Sass称为"成员变量")被认为是私有的,不会被导入。
  • 导入的文件(这里即buttons.scss)中的成员变量只在局部可用,而不会传递到未来的导入结果中。
  • 类似地,@extends将只应用于上游链——即只扩展被导入的文件中的选择器,而不是执行导入命令的文件。
  • 所有导入的成员变量默认拥有命名空间

待续......

需要注意的是,如果我们使用的是node-sass,在webpack中使用sass-loader并不能编译 @use ,只有dart-sass可以使用 @use

CSS(Sass)模块化第1张

Reference

免责声明:文章转载自《CSS(Sass)模块化》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇YII2.0安装教程,数据库配置前后台Prometheus监控学习笔记之360基于Prometheus的在线服务监控实践下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

CSS3 渐变(Gradients)

渐变 渐变色彩在前端开发中经常使用,渐变有从内至外、从外至内、从左至右、对角等方式进行 CSS3 渐变(gradients)可以让你在两个或多个指定的颜色之间显示平稳的过渡。 以前,你必须使用图像来实现这些效果。但是,通过使用 CSS3 渐变(gradients),你可以减少下载的时间和宽带的使用。此外,渐变效果的元素在放大时看起来效果更好,因为渐变(g...

5-URL.createObjectURL()的使用方法

官方说明问文档 URL.createObjectURL() 静态方法会创建一个 DOMString,其中包含一个表示参数中给出的对象的URL。这个 URL 的生命周期和创建它的窗口中的 document 绑定。这个新的URL 对象表示指定的 File 对象或 Blob 对象。 URL.createObjectURL(blob)和FileReader.rea...

CSS 垂直居中

1. line-height适用场景:单行文字,下拉框,按钮等 原理:将单行文字设置行高以后,文字会位于行高的中间位置。也就是需要将元素的 line-height 设置成和高度一样。 示例如下 <style>.content{400px;background: #ccc;line-height:100px; /* 垂直居中 */text-ali...

java如何台生成二维码详解

现在呢说明页面上展示二维码的两种方式: 1.使用img标签的src来请求生成二维码,后台会直接返回; 2.此处跟上方意思相似,获取到url给img标签设置src属性; 特别注意:如果url有amp;,需求替换为空 amp; = & 特别注意:如果要传递到后台的url还是个url并且带参数,需要使用encodeURIComponent方法来设置传参,...

jquery 改变标签样式

jQuery改变标签的样式一般有3种 预置好class,然后通过jQuery改变元素的class名,使用的是addClass、removeClass 直接改变元素的css属性值,这种是通过添加style实现的,使用的是css方法 修改style属性值,通过attr方法 示例(假设以下标签的id都是test): 1.假设有一class名为class1,...

Alpha冲刺——总结随笔

这个作业属于哪个课程 软件工程 这个作业要求在哪里 团队作业第五次——Alpha冲刺 这个作业的目标 Alpha冲刺 作业正文 正文 github链接 项目地址 其他参考文献 无 一、项目预期计划: 1、基于以前的原型做出初版页面。 2、对于基础功能后端的接口都能准确的实现,配套的前端也能较好的实现。 3、前后端接口都能很好...