zoukankan      html  css  js  c++  java
  • 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

    Reference

  • 相关阅读:
    Failed to load resource: the server responded with a status of 404 (Not Found) favicon.ico文件找不到
    合并排序
    python爬虫入门笔记--爬取垃圾分类查询【还有待改善】
    快速排序、合并排序和分治策略的基本思想
    动态规划的基本要素
    【转载】算法时间复杂度分析方法
    python爬虫入门笔记--知乎发现(爬取失败了)
    管理主界面的两个刷新操作
    把Excel选手名单信息导入到评委计分软件Access数据库的步骤
    评委打分回避功能的详细操作步骤
  • 原文地址:https://www.cnblogs.com/mingweiyard/p/13927484.html
Copyright © 2011-2022 走看看