美文网首页
Sass和stylus的对比

Sass和stylus的对比

作者: 我向你奔 | 来源:发表于2018-08-01 11:52 被阅读368次

    ① Sass使用的是标准的 CSS 语法,同时也支持老的语法,就是不包含花括号和分号的方式;Stylus 支持的语法要更多样性一点

    h1 {
      color: #0982C1;
    }
    
    h1
      color: #0982C1;
    
    h1
      color #0982C1
    

    ② sass变量必须是以$开头的,然后变量和值之间使用冒号隔开,和css属性是一样的;
    stylus对变量是没有任何设定的,可以是以 $ 开头,或者任何的字符,而且与变量之间可以用冒号,空格隔开,但是在stylus中不能用@开头

    ③ 在sass里面,如果有全局变量, 局部变量都同名的话, 局部变量会覆盖全局变量

    $white :#fff
    body{
        $white : #ccc;
        color : $white
    }
    .nav{
        color : $white
    }
    // 加上了!global 属性之后,$white :#fff 删掉也不会报错。 !global 在sass3.3及以后的版本才实现
    body{
        $white : #ccc !global;  //这样子写的话就算没有第一行的#fff 亦不会编译错误,因为!global 指定这个变量为全局变量了
        color : $white
    }
    .nav{
        color : $white
    }
    
    // 输出
    body{ color : #ccc; }
    .nav{ color : #ccc; }
    

    stylus的话变量的作用域比较好,同一层级的同一个变量才会覆盖,不同层级不存在覆盖的风险

    white = #fff
    body{ 
       white = #ccc;
       color : white
    } 
    .nav{ 
      color : white
    }
    
    body{ color : #ccc }   // 输出
    .nav{ color : #fff }   // 输出
    

    ④ 继承方式以及结果都是一样的,都是通过 @extend .xxxx 的方式进行继承

    .block {
      margin:10px;
    }
    p {
      @extend .block;
      color:#ccc;
    }
    // 编译后
    .block, p {
      margin:10px;
    }
    p {
      color:#ccc;
    }
    

    sass不支持嵌套的继承

     button
        padding: 6px
     
    a.button
      @extend form button
    // Syntax error: Can't extend form button: can't extend nested selectors
    // 解析错误: 无法继承自 button: 不能继承嵌套选择器 on line 6 of standard input Use --trace for backtrace.
    

    Stylus中,只要选择器匹配,就可以生效

    form
     input[type=text]
       padding: 5px
     textarea
       @extends form input[type=text]
    
    // 编译后
    
    form input[type=text],
    form textarea {
      padding: 5px;
    }
    

    ⑤ 在stylus里面定义一个函数的话比较简单 vender(args...) , vender(type=padding,n = 5px) 简单来说就是随便写个名字然后加一个括号就完事了,但它有一点跟 javascript 很类似,就是可以在这个函数体里面使用arguments 对象,这个是 sass,less 都无法提供的。

    在sass里面,定义函数的话一般都用 @mixins xxx($parent,$n) ,@mixins xxx{} 参数必须是以$开头才可以,而且函数里面能取到的参数只有函数形参数上的个数,超过的就忽略了。

    相关文章

      网友评论

          本文标题:Sass和stylus的对比

          本文链接:https://www.haomeiwen.com/subject/qsmlvftx.html