zoukankan      html  css  js  c++  java
  • sass

    一、sass

    跟less一样,sass也是一种css预编译语言,由于sass出现的比less晚,因此支持的语法更多,例如循环语句,条件语句等等。sass是通过ruby编译的,因此使用sass要首先安装ruby

    安装ruby:

      Window 系统下,我们可以使用 RubyInstaller 来安装 Ruby 环境,下载地址为:https://rubyinstaller.org/downloads/  或者  请点击这里下载

      下载 rubyinstaller 之后,解压到新创建的目录下:

      双击 rubyinstaller-2.2.3.exe 文件,启动 Ruby 安装向导。

      点击 Next,继续向导,记得勾选 Add Ruby executables to your PATH,直到 Ruby 安装程序完成 Ruby 安装为止。

      如果安装没有适当的配置环境变量,则需要进行环境变量的配置。

      安装完成,输入gem -v可以查看版本号

    sass属于gem的一个模块,我们可以通过gem安装sass:gem isntall sass

    安装完成,提供了sass指令,输入sass -v可以查看版本号,也可以手动安装sass,前提需要sass文件:

      gem install 将sass文件拖入进来。在开发时,通常写中文注释,但是ruby是日本人开发的,因此编码不涵盖中文字符串,所以要更改字符集:

        进入C:\Ruby22-x64\lib\ruby\gems\2.2.0\gems\sass-3.4.22\lib\sass目录,打开engine.rb文件,(这里指的是默认安装路径,自定义安装路径需自己找)

        在54行,添加Encoding.default_external = Encoding.find('utf-8')            

    二、拓展名

    sass支持两种拓展名

    一种是.sass

    这种拓展名文件,支持的语法比较新,与stylus类似,省略很多符号,通过空格和缩进设置作用域(模块),跟css差距很大,因此很少使用

    一种是.scss

    这种拓展名文件,支持的语法跟css语法很相似,因此被很多开发者接受

    三、编译

    sass跟less一样。浏览器不识别,所以需要编译

    1、命令行编译

    安装完成sass,可以通过sass指令来编译代码:

      sass scss文件(sass文件) css文件 配置

      配置:

        -C 避免输出缓存文件

        --sourcemap=none 避免输出suorcemap文件

      会生成一个css文件

    2、工程化编译sass

    对webpack来说sass文件也是资源,是资源就可以模块化打包加载

    需要安装sass-loader,使用方式跟less一样(npm install sass-loader)

      style-loader!css-loader!sass-loader

    注意:本地安装sass,sass-loader依赖node-sass,所以也需要安装node-sass(npm install node-sass)

    四、.scss的一些语法

    1、嵌套语法与&

    使用预编译语言最大的特点就是可以使用嵌套式语法,也就是说直接在一个选择器中使用另一个选择器并书写样式

    编译的时候会在将内外选择器同时保留,

    外部选择器类似命名空间,确保选择器名称不会相互覆盖。

    嵌套的时候,我们可以通过&符号获取当前选择器

    2、属性嵌套

    在sass中支持复合属性嵌套定义

    复合属性:一个属性可以代表多个属性的属性

    margin:

      margin-top, margin-bottom, marign-right, margin-left

    border:

      border-width, border-style, border-color,

      border-top, border-right, border-bottom, border-left,

      border-top-width, border-top-style, border-top-color,

      border-right-width, border-right-style, border-right-color,

      border-bottom-width, border-bottom-style, border-bottom-color

      border-left-width, border-left-style, border-left-color

    复合属性定义的语法:

      parentProps: { childProps: value; }

     编译后:

    3、变量

    sass支持变量

      语法 $key: value;

      在less中定义变量是@key:value;

    全局的变量,任何模块都能使用

    局部的变量,只能在当前模块中使用,模块外部无法使用

    不支持声明前置,尽量将变量定义在最前面。

    4、运算

    数学运算:sass支持加减乘除运算,但是运算是有物理意义的

      加减法:运算时候会做单位转换。保留是第一个加数或者被减数的单位

      乘法:只能有一个乘数带单位

      除法:默认不会执行除法。在css中,font属性的属性值可以是字号比行高,所以/默认不执行除法,想执行除法,必须满足三个条件之一

        1 必须有()

        2 必须出现变量或者方法的返回值

        3 是表达式的一部分(除了除法,还有其它的运算)

     单位:10 / 2  10是被除数, 2是除数

      如果被除数有单位,除数单位可有可无,有单位单位抵消。

      如果被除数没有单位,除数一定不能有单位

    色彩运算:                      

      在sass中,色彩可以进行运算

      必要条件是:色彩的透明度必须一致

      运算的时候,每个通道单独运算的,透明度通道不运算

      运算过程中,通道之间不会进位或者借位

      一个通道的值只能在0-255(00-ff)之间

    字符串运算:

      sass允许字符串,就是字符串拼接

    5、混合

    sass中的混合也是为了复用一组样式

    语法:@mixin 混合名称 {

         // 定义样式

        }

    使用混合: @include 混合名称;

    特点:

    1 混合在编译的时候,删除了,当多次使用混合的时候,并没有合并选择器,是真正的复制。

    2 不支持声明前置,外部的混合内部不能使用

    所以sass中的混合相当于less中的方法

    混合传参

    定义参数的语法,跟定义变量的语法是一样的,并且可以传递默认参数

    语法:@mixin 混合名称($arg1: val1, $arg2: val2) {

          // 定义样式

        }

    使用混合:@include 混合名称(val1, val2);

      如果定义了默认参数,使用混合的时候,可以不用传递参数

      如果是一个参数都不传递,则可以省略参数集合

      如果没有定义默认参数,使用混合的时候,必须传递参数

    获取剩余参数

    在less中获取所有参数用@argumetns

    在sass中获取剩余参数语法跟ES6语法相似,使用三个点语法

    sass中,三个点语法在变量之后:@mixin demo($arg1, $arg2, $arg...) {}

      arg获取从第三个参数后面所有的参数。前面的参数可以正常使用

    兼容浏览器,有时候,通常我们为了将css3样式兼容所有浏览器,而添加浏览器前缀,要书写很多遍。

    此时我们可以通过混合复用样式,提高开发效率,通常将混合名称定义成css样式名称,并且在混合中,只设置一个样式

     编译后:

    6、继承

    为了复用选择器的样式,sass提供了继承,跟less中的混合是一样的

      less中的方法是sass中的混合

      less中的混合是sass中的继承

    定义继承就是定义选择器,sass支持四类继承选择器:

      类选择器,id选择器,元素名称选择器,自定义元素名称选择器

    使用继承:@extend 继承选择器;

    特点:

      1 继承的选择器在编译的时候会保留

      2 编译的时候,合并了选择器,而不是复制样式,相对来说效率更高

    如果不想在编译的时候保留选择器样式,我们可以使用选择器占位符%,在选择器前面添加%占位符,此时该选择器在编译的时候会删除

    注意:只有元素名称选择器和自定义元素名称选择器可以使用%占位符,id选择器和类选择器无法使用

          一旦添加占位符,@extend 继承选择器的时候,也要添加占位符

    sass中的继承支持声明前置,所以尽量将他们定义在最前面

    局部继承,当前模块可以使用,其他模块可以直接使用,但是有意想不到的结果,所以不建议使用局部的继承

    7、插值与引入文件

    sass插值语法: #{$key}

    跟less一样,sass中的插值有三种用法:

      1 在字符串中插值

      2 在选择器上插值

      3 在属性名称上插值

    引入文件有两种方式

      css文件引入方式: @import url(url) 

      sass文件引入方式:@import url 

    8、条件语句

    sass支持if条件语句,语法跟js中的if条件语句类似

      js中条件语句 if () {} else {}

      sass中条件语句 @if {} @else {}

    对比js语法

    相同点:

      1 关键字(js: if, else if, else。sass: @if, @else if, @else);

      2 条件体:都是通过{}定义;

      3 比较运算符:>, <, >=, <=, ==

    不同点:

      1 js中,条件定义在条件集合()中, sass不需要()。直接写条件;

      2 逻辑运算符

        js 中 “与”用“&&”表示,“或”用“||”表示

        sass 中 “与”用“and”表示, “或”用“or”表示

    9、循环语句

    跟js中的for循环一样,sass也支持循环语句,也用@for关键字定义,有两种语法

      @for $i from start through end {}

      @for $i from start to end {}

        @for:表示循环语句关键字

        $i:表示循环变量

        from,through,to:都是循环关键字

        start:表示循环的起始值

        end:表示循环的终止值 默认每次循环增量都是1

      through与to的区别是:

        through:最后一次循环包含end值

        to:最后一次循环不包括end值

    循环语句通过{}定义了代码块,因此循环语句中定义的变量,外部无法使用

     还可以利用循环语句实现bootstrap栅格系统:

    10、while 循环

    在for循环中,增量始终是1,无法改变,如果想自定义循环增量,可以使用while循环

    语法:

      定义循环变量

      @while 循环条件 {

        定义循环体(定义样式)

        }

    由于循环变量定义在了循环外部,因此在循环外部可以继续使用循环变量

    11、枚举循环

    for循环的循环增量是1,while循环中可以自定义循环增量,但是循环增量始终是固定的,如果想循环一个没有规律的聚合数据,可以使用枚举循环

    语法:@each $i in 枚举体 {}

      @each 枚举循环关键字

      $i 是循环变量

      in 循环关键字

      枚举体:多个个体用逗号隔开

    注意:如果枚举的个体命中了sass内置的数据变量,如red,green,blue等,使用的时候,要添加引号

    12、三元运算符

    在js中,?:是一个三元运算符(是对if语句的简写)

    sass提供了if方法,可以实现该功能

      if(condition, trueValue, falseValue)

        condition值为真,结果是truevalue

        condition值为假,结果是falsevalue

  • 相关阅读:
    LeetCode 31 Next Permutation / 60 Permutation Sequence [Permutation]
    LeetCode 15 3Sum [sort] <c++>
    LeetCode 81 Search in Rotated Sorted Array II [binary search] <c++>
    LeetCode 33 Search in Rotated Sorted Array [binary search] <c++>
    LeetCode 80 Remove Duplicates from Sorted Array II [Array/auto] <c++>
    将博客搬至CSDN
    leetcode
    (转载) 图像领域常用资源
    Unity3D 之 C# 脚本
    Kinect 人机交互开发实践
  • 原文地址:https://www.cnblogs.com/yess/p/14793611.html
Copyright © 2011-2022 走看看