Sass教程十:Sass知识点之 —— @import 、Partials 与 @media

@import 、Partials 与 @media

说到这个,有同学可能有疑问,css本身也有@import属性,sass再提出来,会不会有所多余呢?我们来分析一下css的 @import 

  • 它更多是用来做媒体查询的
  • 它每引入一个文件,都会向服务器发送一次请求
  • 它并不是把引入的文件和当前文件进行融合
  • 引入文件中定义的变量不能在当前文件中使用

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

  • 文件拓展名是.css
  • 文件名以http://开头;
  • 文件名是url();
  • 不能包含媒体查询 media queries。

@import 可以导入拓展名是.scss 和.sass的文件。如果没有指定拓展名,Sass将会尝试寻找文件名相同,拓展名为.scss 或 .sass的文件并将其导入 比如

@import "style.scss"
或
@import "style"

以上两行代码都可以导入文件style.scss

另外,Sass可以把Sass文件当做一个组件引入而不会把这个组件单独编译成css文件 而想要实现这个功能只需要在文件名前面加上一个下划线就可以了 比如_components.scss 这时候编辑器不会自动编译这个文件,而只有当我们在另一个scss文件里引入这个文件之后,才会把这个文件里的内容编译到引入的文件里:

现在我在项目中建立了两个scss文件

  • _components.scss
  • style.scss

可以看到_components.scss并没有被编辑器所编译,只有一个孤零零的scss文件,而下面的style.scss文件则被编译成了css文件,并附带了一个map文件。

另外还可以看到一点,_components中定义的@mixin在style中是可以正常使用的,也就是说我们可以把一些公用的文件提取出来,然后在需要用的地方引入就可以了,这对于模块化开发非常有帮助,

打开bootstrap的源码,可以看到里面定义了非常多以下划线开头的scss文件,我们可以称这些文件为组件,每个组件只负责一个功能模块,然后在一个汇总的scss文件中引入就可以了,甚至组件之间可以相互引用相互依赖,这样我们最终只需要关心最终的scss文件就可以了。这种组件,Sass称之为 Partials。

甚至,在Sass中,@import还可以用于嵌套:

.example {
  color: red;
}

#main {
  @import "example";
}

编译之后:
#main .example {
  color: red;
}

Sass的嵌套体系中还有一个比较好用的东西 @media .这个指令的基本用法和css中的用法基本一样,只是增加了一点额外的功能:允许其在css规则中嵌套。如果@media 嵌套在css规则内,在编译时,@media将会被编译到文件的最外层,包含嵌套的父选择器。这个功能让 @media 用起来更方便,不需要重复使用选择器,也不会打乱css的书写流程。

.sidebar {
  width: 300px;
  @media screen and (orientation: landscape) {
    width: 500px;
  }
}

比如这段代码,从上往下来读我们能理解到的意思是: 选择器sidebar 宽度为 300 当媒询条件满足时,宽度为500 

而实际编译完成之后也确实会编译成我理解的那样 

.sidebar {
  width: 300px; }

@media screen and (orientation: landscape) {
    .sidebar {
      width: 500px; }
    }

甚至 @media 的 queries 允许互相嵌套使用,编译时,Sass 自动添加 and

@media screen {
  .sidebar {
    @media (orientation: landscape) {
      width: 500px;
    }
  }
}

编译之后:
@media screen and (orientation: landscape) {
  .sidebar {
    width: 500px; } 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值