CSS预处理器scss、less、stylus的区别

CSS 预处理器是什么?一般来说,它们基于 CSS 扩展了一套属于自己的 DSL,来解决我们书写 CSS 时难以解决的问题:

  • 语法不够强大,比如无法嵌套书写导致模块化开发中需要书写很多重复的选择器;
  • 没有变量和合理的样式复用机制,使得逻辑上相关的属性值必须以字面量的形式重复输出,导致难以维护。

所以这就决定了 CSS 预处理器的主要目标:提供 CSS 缺失的样式层复用机制、减少冗余代码提高样式代码的可维护性。这不是锦上添花,而恰恰是雪中送炭

 

sass(scss) 、less、 stylus等都是css预处理器

sass:是一种动态样式语言,比css多出了很多功能(如变量,计算,混入,颜色处理,函数,继承, 嵌套等),更易阅读,扩展名.sass

   需要严格的遵循缩进的语法规则,不带{}和分号;    

h1

      color:red;

scss:是sass语法进行改良后的语法,兼容原来的语法,只是将原来的缩进排版方式改成了我们熟悉的{},扩展名 .scss

   

 h1{

      color:red

    }

less:Less也是一种动态语言,受sass影响很大,对css赋予了动态语言的特性,如变量,计算,继承,函数等。Less既可以在客户端运行(支持IE6+),也可以在服务端运行(借助nodejs)

 

 h1{

    color:red

  }

stylus:主要是给node项目进行css预处理支持,人气不如前两个。扩展名是.styl

    同时支持缩进和css常规书写方式,如下两种方式都是可以的

   

 h1

      color:red

    h1{

      color:red

    }

变量:sass(scss),less,stylus等让人们收益的一个重要特性就是变量的引入,我们可以把经常使用的css属性值,定义成一个变量,然后通过变量名来引用他们。

  sass(scss) 变量必须以$开头,变量和值之间用:隔开,如:    

 $color:#fff;

    h1{

      border:1px solid $color

    }

  less变量必须以@开头,已经被赋值的变量及其他常亮(如像素,颜色等)都可以参与运算。    

@color:#fff;

    h1{

      border:1px solid @color

    }

  stylus:可以以$开头或其他任何字符,但是不能以@开头。   

 $color = #ddd;

    borderwidth = 1px;

    h1{

      border:borderwidth solid $color

    }

嵌套:

  sass(scss),stylus,less等都支持嵌套

  div {

    ul{

      li{

        ......

      }

    }

  }

继承:

  当我们需要为多个元素定义相同样式的时候,可以使用继承 

 .message{

    border:1px solid red;

    padding:10px;

  }

  sass中,通过@extend来实现代码组合申明,使代码更加优越整洁    

.success{

      @extend .message

      border-color:green

    }

  less中:    

.success{

      .message

      border-color:green

    }

  stylus中:

    .success{

      @extend .message

    }

混入:

  sass中可用mixin定义一些代码片段,且可传参数,方便日后根据需求调用,比如说处理css3的浏览器前缀:    

@mixin error($borderwidth:2px){

      border:$borderwidth solid red;

    }

    .message{

      padding:4px;

      @include error(5px);

    }

  

  less中,css的混入写法:    

.error(@borderwidth:2px){

      border:@borderwidth solid red;

    }

    .message{

      padding:4px;

      .error(5px);

    }

  

  stylus中,写法如下:   

 error(borderwidth=2px){

      border:borderwidth solid red;

    }

    .message{

      padding:4px;

      error(5px)

    }

区别:

  1)编译环境不一样:

    sass需要Ruby服务,是在服务端支持的

    Less需要引入less.js来处理Less代码输出css到浏览器,也可以在开发环节使用less,编译成css,直接放到项目中。

    stylus需要安装node,然后安装最新的stylus包即可。

  2)变量符号不一样:

    less是@, scss是stylus中的变量没有任何限制,可以stylus中的变量没有任何限制,可以开头,结尾的;可有可无,但变量名和变量值之间的=是需要的。stylus变量不要使用@符号开头。

    变量的调用方法是完全相同的。

  3)变量的作用域不一样

    sass中,变量分为局部作用域(嵌套规则内定义的变量)和全局作用域(不在嵌套规则内定义的变量)

    $width:3px;  // 全局作用域

    .message{

      $width:2px; // 局部作用域

      border:$width solid red;

    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值