表析LESS、Sass和Stylus的异同

前言:CSS预处理语言

CSS预处理语言可为CSS增加更多编程特性,以CSS作为目标生成文件。

这些语言可有效提高编程效率,使CSS更加简洁、适应性更强、可读性更加,并使项目更易于维护。

本文将在开发者角度使用表格横向对比的方式客观分析目前主流的CSS预处理语言LESS、Sass、Stylus的异同之处。

不介绍这些语言的安装、编译等内容。默认读者已熟悉CSS并可能已用过以上至少一种CSS预处理语言。

鉴于目前Sass语言有分别以“.sass”和“.scss”为文件名后缀的两套语法规则,本文只介绍Sass3之后的版本,即以Scss表示。

基本差别

  LESS Scss Stylus/sta?l?s/
后缀名 *.less *.scss *.styl
编译方法
均可以通过各自方式在本地编译成*.css文件

有很多第三方编译工具可以将这些格式的文件编译为*.css文件

特别项 可以在HTML文件中引入less.js文件与像引入*.css文件一样的方式引入*.less文件,通过浏览器进行编译(可能损耗一点点性能)。 需要先安装Ruby  

基本语法

LESS Scss Stylus
/*均支持CSS风格语法*/
h1{
  color:#000;
}
不支持
/*支持不包含花括号与分号的编写风格,仅通过缩进表示嵌套*/
h1
  color: #000
不支持
/*支持省略冒号*/
h1
  color #000

变量与作用域

LESS Scss Stylus
/*以“@”开头*/
@maxWidth:1024px;
/*以“$”开头*/
$maxWidth:1024px;
/*可以以“$”开头,也可无前缀符号直接声明变量*/
maxWidth=1024px;
定义变量时,以冒号“:”分隔变量名与变量值 以“=”分隔变量名与变量值
与其它语言作用域概念雷同,向上冒泡查找变量 无全局变量的概念,后定义的同名变量会完全覆盖先定义的变量 同LESS

混合(Mixins)

Mixins是CSS预处理器中语言中最强大的特性。

Mixins可以将一部分需重用的样式抽出,只需定义一次,就可被很多选择器重复使用。

LESS Scss Stylus
可以无需特别声明,直接调用某一class或id选择器名即可重用该选择器内属性 定义混合需要以“@mixin”开头。引用混合需要以“@include” 开头 无需前缀
均可定义参数与设置参数默认值
/*声明混合*/
.setColor(@mainC:#000){
  color:@mainC;
}
/*直接以默认值调用混合*/
.sBox{
  .setColor();
}
/*调用混合且传入自定义参数值*/
.bBox{
  .setColor(#fff);
}
/*声明混合*/
@mixin setColor($mainC:#000){
  color:$mainC;
}
/*直接以默认值调用混合*/
.sBox{
  @include setColor();
}
/*调用混合且传入自定义参数值*/
.bBox{
  @include setColor(#fff);
}
/*声明混合*/
setColor(mainC=#000){
  color:mainC;
}
/*直接以默认值调用混合*/
.sBox{
  setColor();
}
/*调用混合且传入自定义参数值*/
.bBox{
  setColor(#fff);
}
/*编译成CSS后*/
.sBox{
  color:#000;
}
.box{
  color:#fff;
}

嵌套实现后代选择器

LESS Scss Stylus
嵌套语法是相同的,可以通过大括号“{}”之间的层次关系实现嵌套。也可以使用“&”符号来引用父选择器。
div{
  margin:10px 5px;
  a{
    color:red;
    &:hover{
      color:blue;
    }
  }
}
div{
  margin:10px 5px;
}
div a{
  color:red;
}
div a:hover{
  color:blue;
}

继承

LESS Scss Stylus
无需明确的前缀 使用“@extend”开始,后面紧跟被继承的选择器
/*继承示例*/
.block{
  display:block;
  margin:10px;
}
p{
  .block;
  padding:5px;
}
/*继承示例*/
.block{
  display:block;
  margin:10px;
}
p{
  @extend .block;
  padding:5px;
}
/*编译成CSS,相同样式依旧会在每个选择器中重复出现*/
.block{
  display:block;
  margin:10px;
}
p{
  display:block;
  margin:10px;
  padding:5px;
}
/*编译成CSS,相同样式会被合并*/
.block,p{
  display:block;
  margin:10px;
}
p{
  padding:5px;
}

条件语句

LESS Scss Stylus
使用关键字“when”实现条件语句 可以使用@if、@else、@else if语句实现判断 与其它编程语言类似,不过可以省略大括号
@type: link;
.mixin(@type) when ( @type == link ){
  color:blue;
}
.mixin(@type) when not ( @type == link ){
  color:black;
}
$type: link;
p {
  @if $type == link {
    color: blue;
  }
@else {
    color: black;
  }
}
type: link;
p{
  if type==link
color:blue;
  else
    color:black;
}
/*编译后的CSS*/
p {color:blue;}

循环语句

LESS Scss Stylus
通过when模拟循环功能 使用@for关键字,配合“from”和“through” 使用for/in对表达式进行循环
.funClass (@i) when (@i>0){
  .item-@{i}{
    width:2em*@i;
}
/*递归*/
.funClass(@i-1);
}
/*停止循环*/
.funClass (0) {}

/*输出*/
.funClass (3);
@for &i from 1 through 3{
  .item-#{$i} {
    width:2em*$i;
  }
}
for i in 1 2 3
  .item-{i}
    width 2em*i
/*编译后的CSS*/
.item-1{
  width:2em;
}
.item-2{
  width:4em;
}
.item-3{
  width:6em;
}
  还支持each循环语句、while循环语句  

综合对比

  1. 均具有“变量”、“混合”、“嵌套”、“继承”、“颜色混合”五大基本特性;
  2. Scss和LESS语法较为严谨,LESS要求一定要使用大括号“{}”,Scss和Stylus可以通过缩进表示层次与嵌套关系;
  3. Scss无全局变量的概念,LESS和Stylus有类似于其它语言的作用域概念;
  4. Scss和Stylus就具有类似其它语言的条件语句、循环语句等,而LESS需要通过When等关键词模拟这些功能;
  5. Sass是基于Ruby语言的,而LESS和Stylus可以基于NodeJS NPM下载相应库后进行编译;
  6. 使用LESS时,还可以在引用它的HTML文件中引入从官网下载的“less.js”文件,就可以通过浏览器进行解析。
时间: 2024-08-09 01:51:55

表析LESS、Sass和Stylus的异同的相关文章

PostCSS深入学习: PostCSS和Sass、Stylus或LESS一起使用

如果你喜欢使用PostCSS,但又不想抛弃你最喜欢的预处理器.不用担心,你不需要作出二选一的选择,你可以把PostCSS和预处理器(Sass.Stylus或LESS)结合起来使用. 有几个PostCSS插件配合预处理器得到很好的赞誉,因为他们将功能添加到你的工作流中,让你工作变得更加轻松.如果你只使用一个预处理器,而不使用这些插件,你的工作流至少会变得更加困难. 我们会涉及一些免费的PostCSS插件,然后我们将会介绍一些配置的阐述,告诉您如何将PostCSS和你喜欢的预处理器(Sass.Sty

less,sass,stylus配置和应用教程及三者比较

 Less 1. 定义: Less是CSS预处理语言,在css基础之上增加了诸如变量,混合(mix),继承,运算,函数等功能,LESS既可以运行在客户端(支持IE10+,firefox,Webkit),也可以借助于Node.js在服务器端运行(支持IE6+,firefox,Webkit). 什么是CSS预处理技术?CSS预处理技术,是指用一种新语言用来为CSS 增加可编程的的特性,无需考虑浏览器的兼容性问题.你可以在 CSS 中使用变量.简单的程序逻辑.函数等等在编程语言中的一些基本技巧,可以让

花了两天时间学习了 sass, less, stylus的基本语法和简单使用, 谈谈感受.

1. 变量的问题 1.1变量的表示 sass有个$var, less有@var, stylus 的var直接就是var=值, 也可以使用$var 1.2 变量的赋值 sass, $var: value, less: @var: value stylus: var=10 2. 缩进的问题 sass, less均不需要缩进, 缩进无关 stylus也可以不用缩进, 使用默认的css花括号, 也可以使用缩进, 如果缩进不匹配就麻烦了 3. 宿主的问题 sass, 原来是用在ruby界的, 是haml的

vue中使用LESS、SASS、stylus

less的使用 npm install less less-loader --save 修改webpack.config.js文件.vue.cli 搭建项目可跳过此步 { test: /\.less$/, loader: "style-loader!css-loader!less-loader", }, 组件内,设置 <style lang='less'> SASS的使用 npm i node-sass sass-loader -s 修改webpack.config.js文

sql语句中---删除表结构drop,truncate和delete的异同点

参考别人总结,此内容仅供自己学习 一.sql中的语法 1.drop table 表名称                                      eg:drop table dbo.Sys_Test 2.truncate table 表名称                                eg:truncate table dbo.Sys_Test 3.delete from 表名称 where  列名称=值       eg:delete from dbo.Sys

sass、less和stylus的安装使用和入门实践

刚 开始的时候,说实话,我很反感使用css预处理器这种新玩意的,因为其中涉及到了编程的东西,私以为很复杂,而且考虑到项目不是一天能够完成的,也很少是 一个人完成的,对于这种团队的项目开发,前端实践用css预处理器来合作,是一种很痛苦,即使不痛苦那也是需要花费非常多的时间来协调合作上的.对于预处 理器的态度,目前是本着学习新技术和推动css向前进的思想来学习新玩意.下面这篇文章来自w3cplus,这是一篇非常强大的文章,私以为互联网上介绍这方面知识的就属这篇文章是鼻祖了. 经过了这篇文章的学习,我

(转)预处器的对比——Sass、LESS和Stylus

英文原文:http://net.tutsplus.com/tutorials/html-css-techniques/sass-vs-less-vs-stylus-a-preprocessor-shootout 原文链接:http://www.w3cplus.com/css/sass-vs-less-vs-stylus-a-preprocessor-shootout.html 介绍 CSS预处理器是一种语言,用来编写一些CSS的特性,而且无需考虑浏览器兼容性的问题.他们通过编译的代码编写成一般的

CSS预处器的对比——Sass、Less和Stylus

预处器的对比--Sass.LESS和Stylus 转载: 英文原文:http://net.tutsplus.com/tutorials/html-css-techniques/sass-vs-less-vs-stylus-a-preprocessor-shootout 中文译文:http://www.w3cplus.com/css/sass-vs-less-vs-stylus-a-preprocessor-shootout.html 作者:大漠 日期:2013-01-26 点击:5177 Sas

CSS预处理器Sass(Scss)、Less、Stylus

CSS 预处理编译器能让我成程序化其的方式编写CSS代码,可以引入CSS中没有的变量.条件.函数等特性,从而让代码更简单易维护,但一般按预处理器语法编写的代码无法直接在浏览器中运行,需用通过工具比如gulp转换成标准的CSS语法,从而在浏览器中运行.个人理解它是标准CSS语法的扩展及增强,能在一定程度上提高编码效率. 三种预处理器的对比: Sass诞生是最早也是最成熟的CSS预处理器,有Ruby社区和Compass支持:安装.编译依赖Ruby环境: Stylus早期服务器Node JS项目,在该