前言:CSS预处理语言

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

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

本文将在开发者角度使用表格横向对比的方式客观分析目前主流的CSS预处理语言LESS、Scss、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”文件,就可以通过浏览器进行解析。

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

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

    如果你喜欢使用PostCSS,但又不想抛弃你最喜欢的预处理器.不用担心,你不需要作出二选一的选择,你可以把PostCSS和预处理器(Sass.Stylus或LESS)结合起来使用. 有几个PostCS ...

  2. sass/less/stylus css编译

    早上来了听一同事说stylus如何才能编译成css文件,瞬时间有点蒙,一听感觉和less是差不多的功能,随着就上网去查,然后发现这个文章,介绍了这三种sass/less/stylus的安装和语法,贴在 ...

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

    less,sass,stylus配置和应用教程及三者比较  Less 1. 定义: Less是CSS预处理语言,在css基础之上增加了诸如变量,混合(mix),继承,运算,函数等功能,LESS既可以运 ...

  4. less、sass、stylus

    less.sass.stylus 它们是三种类似的样式动态语言,属于css预处理语言,它们有类似css的语法,为css赋予了动态语言的特性.如变量.继承.运算.函数等.这么做是为了css的编写和维护. ...

  5. css预处理器 sass和stylus对比以及常用功能

    在众多的css预处理器语言中,sass和stylus算是十分优秀的两个.本文主要针对两者的常用功能做个简单的对比分析.在对比中了解二者的差异,同时帮助大家更好的掌握这两种预处理语言. 本文涉及到的sa ...

  6. 对比学习sass和stylus的常用功能

    在众多的css预处理器语言中,sass和stylus算是十分优秀的两个.本文主要针对两者的常用功能做个简单的对比分析.在对比中了解二者的差异,同时帮助大家更好的掌握这两种预处理语言.本文涉及到的sas ...

  7. vue项目中npm安装sass,less,stylus

    用vue-cli脚手架搭建出来的,默认是用标准css的.如果你想用sass,less,stylus就需要自己手动安装一下了. 进入项目文件夹,然后安装(这里以stylus为例)stylus和stylu ...

  8. vue中使用LESS、SASS、stylus

    less的使用 npm install less less-loader --save 修改webpack.config.js文件.vue.cli 搭建项目可跳过此步 { test: /\.less$ ...

  9. css预处理器:Sass LASS Stylus

    语法 Sass h1 { color: #0982C1; } h1 color: #0982c1 LESS h1 { color: #0982C1; } Stylus /* style.styl */ ...

随机推荐

  1. 【java规则引擎】《Drools7.0.0.Final规则引擎教程》第4章 4.4 LHS简介&Pattern

    LHS简介 在规则文件组成章节,我们已经了解了LHS的基本使用说明.LHS是规则条件部分的统称,由0个或多个条件元素组成.前面我们已经提到,如果没有条件元素那么默认就是true. 没有条件元素,官方示 ...

  2. 【java规则引擎】《Drools7.0.0.Final规则引擎教程》第4章 4.2 agenda-group

    转载:https://blog.csdn.net/wo541075754/article/details/75332720 agenda-group 规则的调用与执行是通过StatelessKieSe ...

  3. 【转】python mysql数据库 'latin-1' codec can't encode character错误问题解决

    UnicodeEncodeError: 'latin-1' codec can't encode character   "UnicodeEncodeError:'latin-1' code ...

  4. 使用flex布局,垂直居中

    要完成下面的样式: 1:绿色部分宽度固定,红色部分自适应宽度: 2:整体高度自适应,红色和绿色部分的内容垂直居中: html代码: <div class="main"> ...

  5. day23 python学习 类 人狗大战

    面向过程 VS 面向对象 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 面向过程 优点是:极大的降低了 ...

  6. day8 python学习 集合 深浅拷贝

    1.内存地址: 字符串在20位以内,没有空格,没有特殊字符的情况下,同样的字符串内存地址是一样的 2.元组中:在只有一个值的时在后边加逗号和没有逗号的区别 t1=(1) 不加逗号这个值是什么类型就打印 ...

  7. 浅谈c++中map插入数据的用法

    map:数据的插入 在构造map容器后,我们就可以往里面插入数据了.这里讲三种插入数据的方法:第一种:用insert函数插入pair数据 map<int, string> mapStude ...

  8. vue-echarts-v3 使用

    github地址:https://github.com/xlsdg/vue-echarts-v3 官方说明:无论多少个组件代码里写 import IEcharts from 'vue-echarts- ...

  9. LOJ 6053 简单的函数——min_25筛

    题目:https://loj.ac/problem/6053 min_25筛:https://www.cnblogs.com/cjyyb/p/9185093.html 这里把计算 s( n , j ) ...

  10. BEGIN-2_蓝桥杯_序列求和

    问题描述 求1+++...+n的值. 输入格式 输入包括一个整数n. 输出格式 输出一行,包括一个整数,表示1+++...+n的值. 样例输入 样例输出 样例输入 说明:有一些试题会给出多组样例输入输 ...