前言: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. setsebool命令详解与SELinux管理

    setsebool命令是用来修改SElinux策略内各项规则的布尔值.setsebool命令和getsebool命令是SELinux修改和查询布尔值的一套工具组.SELinux的策略与规则管理相关命令 ...

  2. test20181015 B君的第二题

    题意 分析 考场85分 用multiset暴力,由于教练的机子飞快,有写priority_queue水过了的人. #include<cstdlib> #include<cstdio& ...

  3. SQL——ROW_NUMBER

    版权声明:欢迎转载,请注明出处 https://blog.csdn.net/suneqing/article/details/30250193 语法: ROW_NUMBER() OVER(PARTIT ...

  4. C# 中的应用配置

    配置功能是软件必要的功能,下面介绍以下 Glacier 内置的配置框架,Glacier 支持三种方式的配置: appSettings 配置 嵌入的 HOCON 配置 独立的 HOCON 配置 优先级: ...

  5. 使用 extract-text-webpack-plugin 报错:Error: Chunk.entry was removed. Use hasRuntime()

    问题:使用 extract-text-webpack-plugin 报错:Error: Chunk.entry was removed. Use hasRuntime() 解决:先运行npm unin ...

  6. 服务检测sh脚本

    如mysql cat check_mysql.sh #!/bin/bash servicename="mysqld"showname="mysql" pid=& ...

  7. Hadoop和云计算

    什么是Hadoop? Hadoop代表的就是基于异步存储(HDFS)的并行计算(Map-Reduce). 首先Hdsf/ Kudu他的存储是分布式的存储,hive(map-reduce).impala ...

  8. [C++ Primer] : 第12章: 动态内存

    动态内存与只能指针 静态内存用来保存局部static对象, 类static数据成员以及定义在任何函数之外的变量. 栈内存用来保存定义在函数内的非static对象. 分配在静态或栈内存中的对象由编译器自 ...

  9. R(5): sql 数据处理

    sqldf程序包是R语言中实用的数据管理辅助工具,但最新版本的包在处理中文时出现乱码,待解决 Usage:  sqldf(x, stringsAsFactors = FALSE,  row.names ...

  10. utmp

    How to monitor user login history on CentOS with utmpdump Last updated on September 22, 2014 Authore ...