CSS预编译处理语言-sass

一、为什么使用sass?

1. sass引入了mixins,参数,嵌套规则,运算,颜色,名字空间,作用域,JavaScript赋值等,可以使css代码更容易编写并且更容易维护。

2. sass作为一种预处理语言,为css提供缩进语法。

二、sass基本用法

2.1 变量

使用$来定义变量,变量可以在css规则块定义之外存在。变量支持块级作用域,与javascript中变量区别。在sass中$link-color$link_color其实指向的是同一个变量,一般使用中划线。

数据类型:数字,字符串,颜色,布尔型,空值,数组,map

2.1.1 字符串 

分为有引号字符串和无引号字符串,使用#{}可以把有引号字符串转化为无引号字符串(作用:可以传入参数并转化为选择器)

通过 #{} 插值语句可以在选择器或属性名中使用变量:

$name: foo;
$attr: border;
p.#{$name} {
  #{$attr}-color: blue;
}

有引号+无引号=有引号 ps: "sans"+serif="sans=serif"

无引号+有引号=无引号 ps: sans+"serif"=sans=serif

2.1.2 

2.2 css嵌套规则

2.2.1 &

article a {
  color: blue;
  &:hover { color: red }
}

使用&加到当前元素本身(比如上栗就是对article a:hover进行设置,而不是article a的子元素们的悬浮效果)

#content aside {
  color: red;
  body.ie & { color: green }
}

/*编译后*/
#content aside {color: red};
body.ie #content aside { color: green }

使用&还可以把选择器添加到父元素前面

2.2.2 群组选择器的嵌套

.container {
  h1, h2, h3 {margin-bottom: .8em}
}

2.2.3 子选择器和同层选择器

> 直接子元素选择器

+ 选择紧跟着的同层元素

~ 全体同层选择器 选择所有符合条件的同层元素

2.2.4 属性的嵌套

nav {
  border: {
  style: solid;
  width: 1px;
  color: #ccc;
  }
}

2.3 @import导入sass

2.3.1 css原本的@import

<style>
    @import "@import.css";
    #bgc{background-color: green}
</style>

注意事项:@imort一定要早于css样式引入

存在主要问题:破坏css的并行下载,变成css文件的同步下载

2.3.2 sass中的@import

引入sass文件可以写在css规则内

.blue-theme {
@import
 "blue-theme"}

引入sass文件一个思考:如果先定义一个变量,引入的sass文件中有相同的变量名,变量覆盖了怎么办?

!default声明被引入的sass文件中变量默认值,如果先定义了变量根据先的来。(是!important的对立面)

2.3.3 区分sass中的@import和css中的

在sass中会使用css原有import的情况

1、引入文件是css文件(加.css后缀或者地址为css文件的地址)

2、引入一个url地址(比如http://www.sass.hk/css/css.css)

如何避免:

把后缀改成.scss(简单粗暴)

疑问:如果需要引入url地址呢?

思考:可以使用link直接引入url地址?

2.4 静默注释

使用//的注释在最后生成的css文件中不会出现

2.5 混合器

2.5.0 混合器和html类

之前写项目遇到相同的样式时的常用处理方法:给几个样式相同的元素加一个共同的html类然后添加样式,事实上这种做法并不好。类名主要是描述html元素的含义而不是样式,应该用混合器来实现。

2.5.1 栗子一个

@mixin link-colors(
    $normal,
    $hover: $normal
  )
{
  color: $normal;
  &:hover { color: $hover; }
  li {
     list-style-type: none;
     margin-left: 10px;
  }
}
ul .plain {
  color: #444;
  @include link-colors(#333);
}

栗子中的要点:

默认参数值(如果不给&hover赋值的话,默认值就是&normal),混合器传参(&hover,&normal都是传递的参数),混合器中的css规则(栗子定义该元素的子元素li的属性值)

2.6 继承

继承是建立在语义化的关系上,比如.error和.seriouserror

继承最简单的工作原理:如果.seriousError @extend .error, 那么样式表中的任何一处.error都用.error.seriousError这一选择器组进行替换

继承的要点

1.继承的css代码相对混合器较少

2.继承遵循css层叠的规则(因为混合器是直接把代码粘到对应位置,所以不存在css层叠的问题)

3. 尽量不要使用后代选择器来继承(sass会生成多种可能的选择器情况,css代码量容易失控),可以继承后代选择器4. 存在限制 Sass 不可以将 @media 层外的 CSS 规则延伸给指令层内的 CSS,可能会导致需要重复不少css代码

2.7 运算

有数据类型均支持相等运算 == 或 !=

数字类型的数据支持+ - * / %

颜色等也可以运算

2.8 控制指令

2.8.1 @if @else if @else

2.8.2 @for

@for $i from 1 through 3 {
  .item-#{$i} { width: 2em * $i; }
}

$i是一个变量

through 和 to 的区别:through包含start 和 end start不包含end值,to只包含

2.8.3@each

@each $animal in puma, sea-slug, egret, salamander {
  .#{$animal}-icon {
    background-image: url('/images/#{$animal}.png');
  }
}

2.9 函数

$grid-width: 40px;
$gutter-width: 10px;

@function grid-width($n) {
  @return $n * $grid-width + ($n - 1) * $gutter-width;
}

#sidebar { width: grid-width(5); }

2.10 输出格式

:nested 默认输出格式

#main {
  color: #fff;
  background-color: #000; }
  #main p {
    width: 10em; }

: expanded

#main {
  color: #fff;
  background-color: #000;
}
#main p {
  width: 10em;
}

: compact

#main { color: #fff; background-color: #000; }
#main p { width: 10em; }

: compressed

#main{color:#fff;background-color:#000}#main p{width:10em}

三、小结

多次出现的属性可以定义变量,多次使用的相同样式可以使用混合器,元素之间语义化的关系可以使用继承,在多个文件多个项目中出现的sass文件可以使用@import导入,sass使css编写更清晰容易且易于维护。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: sass-loader 和 node-sass 是与 Sass 相关的两个包,常用于在 Webpack 构建工具中处理 Sass 样式文件。 sass-loader 是 Webpack 中的一个 loader,它可以将 Sass 文件转换为 CSS 文件。当 Webpack 在处理模块时遇到了以 .sass 或 .scss 后缀的文件时,就会使用 sass-loader 来将这些文件转换为 CSS 文件。sass-loader 可以支持一些额外的功能,例如在 Sass 文件中使用变量、混合、嵌套等语法特性。 node-sass 是一个使用 C++ 编写的 Sass 编译器,它可以将 Sass 文件编译CSS 文件。node-sass 是 sass-loader 的一个依赖项,它实现了 Sass 的编译功能。当 Webpack 在处理 Sass 文件时,sass-loader 会使用 node-sass 这个编译器将 Sass 代码转换为 CSS 代码。由于 node-sass 使用了 C++ 编写,因此它的编译速度比纯 JavaScript 实现的 Sass 编译器要快很多。 综上所述,sass-loader 和 node-sass 是两个在 Webpack 中处理 Sass 样式文件时经常使用的包,sass-loader 负责将 Sass 文件转换为 CSS 文件,node-sass 则提供了 Sass 的编译功能,使得 sass-loader 可以高效地将 Sass 代码转换为 CSS 代码。 ### 回答2: Sass-loader和node-sass是两个在Webpack开发中常用的Sass编译器。Sass是一种CSS处理器,可以使用变量、嵌套、继承和函数等高效地编写CSS样式。Sass-loader和node-sass都是用来将Sass代码编译成浏览器可以解析的CSS代码的工具。 Sass-loader是一个Webpack插件,可以将Sass代码转换为CSS,并将其作为模块插入到Webpack构建中。Sass-loader可以通过多种方式设置Sass选项,例如在Webpack的配置文件中设置options对象,或者使用设的选项。Sass-loader可以与Postcss-loader一起使用,自动添加厂商前缀和其他后处理工具。 Node-sass是一个Sass编译器,使用C++编写并作为Node.js的原生模块,可以快速地将Sass代码编译CSS。Node-sass支持大多数Sass选项和自定义函数,可以轻松地在Node.js项目中使用。Node-sass还可以与Grunt、Gulp和其他构建工具一起使用,方便编译Sass代码。 总的来说,Sass-loader和node-sass都是强大的工具,可以大大提高Web开发中的CSS编写效率。Sass-loader是Webpack的一个插件,可以将Sass代码转换为CSS,并帮助实现自动添加厂商前缀和其他后处理工具的功能。Node-sass是一个Sass编译器,可以快速地将Sass代码编译CSS,并且可以方便地与Grunt、Gulp和其他构建工具一起使用。同时,两者也可以结合使用,在Webpack项目中使用Sass-loader将Sass打包,使用Node-sass在Node.js项目中编译Sass代码。 ### 回答3: sass-loader和node-sass都是与Sass编译相关的工具,可在Webpack等打包工具中使用。Sass是一种CSS处理器,可以在编写CSS时添加变量、函数、嵌套等特性,提高了CSS的可读性和可维护性。以下是sass-loader和node-sass的详细介绍。 sass-loader: sass-loader是Webpack中的一个loader,用于将Sass编译CSS。它可以自动解析import和url语句,并可以根据需要自定义Sass的选项。sass-loader需要依赖node-sass,因此先要安装node-sass才能使用sass-loader。 sass-loader的主要特点包括: 1.支持import和url语句的自动解析和处理。 2.可以自定义Sass的选项,如启用sourceMap、输出style格式、添加自定义函数和变量等。 3.支持在Webpack中使用vue-style-loader来提取CSS。 使用sass-loader的相关配置如下: { test: /\.scss$/, use: [ 'vue-style-loader', 'css-loader', 'sass-loader' ] } node-sass: node-sass是Sass的一个编译器,它是一个由C++模块编写的Node.js模块。它利用了LibSass库的功能来编译Sass文件,可以快速地将Sass编译CSS。node-sass本身不提供CLI工具,但可以通过在命令行中使用node-sass命令来使用它。 node-sass的主要特点包括: 1.可以使用命令行或API接口来编译Sass文件。 2.支持sourceMap功能,可以在浏览器中调试Sass源代码。 3.支持输出style格式、压缩CSS和自定义函数。 使用node-sass的相关配置如下: const sass = require('node-sass'); sass.render({ file: './app.scss', outFile: './app.css', outputStyle: 'compressed' }, function(err, result) { if(!err) { console.log('Sass编译成功'); } });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值