浅谈stylus与sass的对比

all we konw , 这两个都是css的预编译工具,但虽然都是编译工具,但还是存在差别的,下面来讲讲其中的区别

1、变量

 sass定义变量是以这种形式进行定义的$xxx:10;而stylus的定义方式更加接近

    

 stylus的定义方式跟javascript的表达方式一样(对于写js的人来说可能更为直观)

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

 

-------------  sass1 -----------------
$white :#fff

body{
    $white : #ccc;
    color : $white
}
.nav{
    color : $white
}
------------ sass 1 ------------------

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

---------------- 输出 -----------------
body{ color : #ccc; } .nav{ color : #ccc; }

 

 stylus的话变量的作用域比较好,同一层级的同一个变量才会覆盖,不同层级(如下面的代码)不存在覆盖的风险

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

 

2、继承,两这的继承方式以及结果都是一样的,都是通过@extend .xxxx的方式进行继承:

生成的代码如下 : 

  p.s : 假设在上面未编译的代码中间有N行,其中某一行也对p的margin进行改动的话,编译出来的p的样式会以最后那次对p的改动为准(这个是我觉得不太好的地方,没准那一天真有人加了那么一行,样式就错了),但是在less里面就不是这样子了,生成的结果是,在p ul ,ol的样式里面包含这.block的样式

    另外再说一点 :sass不支持嵌套的继承:

------------------------------- sass ----------------------
form button padding: 6px a.button @extend form button

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

  

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

------------------------------- stylus ----------------------

form input[type=text] padding: 5px border: 1px solid #eee color: #ddd textarea @extends form input[type=text] padding: 10px

------------------------------- stylus ----------------------

  

生成:

form input[type=text],
form textarea {
  padding: 5px;
  border: 1px solid #eee;
  color: #ddd;
}
textarea {
  padding: 10px;
}

  

3、函数

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

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

 

4、判断语句 : 

stylus的判断语句跟coffee-script很类似,用到unless

disable-padding-override = true
padding(args...)
  unless disable-padding-override is defined and disable-padding-override //第一种用法
    padding(x, y)
      margin y x
negative(n) //第二种用法
  unless n is a 'unit' //unit是数字的意思
    error('无效数值')
  if n < 0
    yes
  else
    no

body padding 5px 10px

想对而言, sass的语法更为简介易懂一点,个人比较喜欢这点:

$lte7: true;
$type: monster;
.ib{
    display:inline-block;
    @if $lte7 {
        *display:inline;
        *zoom:1;
    }
}
p {
  @if $type == ocean {
    color: blue;
  } @else if $type == matador {
    color: red;
  } @else if $type == monster {
    color: green;
  } @else {
    color: black;
  }
}

 

5、for循环

这两者的循环中取数的方式不一样,sass用的是类似与模板的功能,而stylus里面基本上跟javascript一致

-------------------sass ------------------------
@for $i from 1 through 3 { .item-#{$i} { width: 2em * $i; } //for循环里头需要通过#{$xxx}的方式取到for上面$i的值,这个写法虽然复杂,但是容易区分。 }
--------------------- stylus ---------------
body fonts = Impact Arial sans-serif for font, i in fonts foo i font //for循环里面直接就能取到循环上面的数值,这个稍微会直接点

后续还有很多不同的点,需要的话可以点击下以下两个连接来了解更多:

http://www.w3cplus.com/sassguide/syntax.html

http://www.zhangxinxu.com/jq/stylus/

总结下两者:

sass的编译更接近与css的原生的方式来写,stylus的方式比较接近coffee-script , 实现出来的效果虽然也有细微的差异,看个人情况使用吧;

我自己的话还是喜欢用sass,因为写习惯了js,觉得sass的语法跟平常日常使用的技术都比较相关(比如for循环的#{$i},比如$aaa : xxx) 看起来更容易上手。个人感觉stylus用法上有点累赘,不过对与写过coffee-scirpt 的人来说也是一种不错的选择。

转载于:https://www.cnblogs.com/lztkiss/p/4536618.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: StylusSass 和 Less 都是 CSS 预处理器,它们的主要目的是帮助开发者更高效、更简洁地编写 CSS 代码。 其中,Sass 和 Less 是最为常用的两种预处理器,而 Stylus 使用较少。 Sass 和 Less 的语法与 CSS 语法类似,但提供了许多 CSS 不具备的特性,例如变量、嵌套、混合等。Sass 和 Less 最终都会被编译成普通的 CSS 代码,因此浏览器可以正常解析。 相比之下,Stylus 的语法更加简洁,它省略了大部分冗余符号,例如分号、括号等。这种语法让 Stylus 的代码更加简洁明了,但也会让初学者难以理解。 总之,Sass 和 Less 是比较常用的 CSS 预处理器,它们的语法与 CSS 类似,但提供了许多增强功能;Stylus 则使用了更加简洁的语法,适合喜欢简洁的开发者使用。 ### 回答2: StylusSass 和 Less 都是 CSS 预处理器,都能提高 CSS 的可维护性,增加开发效率。一下是它们之间的区别: 1. 语法风格不同 Sass 和 Less 都是使用类似 CSS 的语法风格,一些多余的符号比如大括号和分号需要被添加才能被编译器正确处理。 而 Stylus 则是完全脱离 CSS 语法风格,它使用类似 Python 语言的缩进来表示层级关系。 2. 变量定义方式不同 在 Sass 中,变量的定义使用 $ 符号,例如 $primary-color。 在 Less 中,变量的定义使用 @ 符号,例如 @primary-color。 而在 Stylus 中,则不需要特定符号来定义变量,变量名直接写在等于号的左边,例如 primary-color = #00f。 3. 函数和数据结构不同 Sass 中有很多预定义函数和数据结构,如列表和映射,可以方便地操作 CSS 属性和值。 而 Less 的函数和数据结构较少,比较依赖于 JavaScript 功能的支持。 Stylus 则拥有类似 JavaScript 的构建块,如数据类型、函数和运算符等,因此可以使用更复杂的逻辑和条件句。 4. 跨平台支持情况不同 Sass 是 Ruby 开发的,因此需要 Ruby 环境才能运行,不易在 Windows 上使用。 而 Less 和 Stylus 都是使用 JavaScript 编写的,可以在 Node.js 和浏览器上使用,具有更好的跨平台支持性。 总之,这些预处理器在很多方面都有类似的功能,但语法和特性会有所不同,具体使用时应根据其特点和自己的需求作出选择。 ### 回答3: StylusSass 和 Less 都是 CSS 预处理器,都通过添加变量、函数、混合、嵌套等特性来简化 CSS 开发。 1. 语法 Stylus 使用的是缩进代替了花括号和分号。Sass 和 Less 则是采用了类似 CSS 的花括号加分号的语法。 Stylus: ``` body font: 12px Arial ``` Sass: ``` body { font: 12px Arial; } ``` Less: ``` body { font: 12px Arial; } ``` 2. 变量 StylusSass 和 Less 都支持变量,但是less的情况下,不能直接使用 javascript 的变量名。 Stylus: ``` color = #fff background-color = #000 body color: color background-color: background-color ``` Sass: ``` $color: #fff; $background-color: #000; body { color: $color; background-color: $background-color; } ``` Less: ``` @color: #fff; @background-color: #000; body { color: ~"@{color}"; background-color: @background-color; } ``` 3. 混合 混合也是一个非常好用的功能,可以将多个 CSS 样式合并成一个。SassStylus 和 Less 更便于使用,因为你可以使用 include 来引入混合。 Stylus: ``` gradient() background-color: #fbfbfb background-image: linear-gradient(top, #fbfbfb, #bottom_color) .box gradient() ``` Sass: ``` @mixin gradient($top, $bottom) { background-color: $top; background-image: linear-gradient(top, $top, $bottom); } .box { @include gradient(#fbfbfb, #000); } ``` Less: ``` .gradient(@top, @bottom) { background-color: @top; background-image: linear-gradient(top, @top, @bottom); } .box { .gradient(#fbfbfb, #000); } ``` 4. 运算符 StylusSass 支持算术运算、字符串操作、逻辑运算、比较运算和三目运算等。Less 只支持算术运算和比较运算。 Stylus: ``` w = 50% h = 100% - w .box width: w height: h ``` Sass: ``` $w: 50%; $h: 100% - $w; .box { width: $w; height: $h; } ``` Less: ``` @w: 50%; @h: 100% - @w; .box { width: @w; height: @h; } ``` 5. 其他 Sass 和 Less 都提供了许多方便的函数和类库,可以帮助你更快地开发。Stylus 也提供了很多类似的库,但是不太流行。 最后,Sass 和 Less 的生态体系非常活跃,都有很多优秀的工具和插件,使得生产力大大提高。Stylus 的插件相对较少,使用上可能会有一些不便。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值