表析LESS、Sass和Stylus的异同
前言: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风格语法*/ |
||
| 不支持 |
/*支持不包含花括号与分号的编写风格,仅通过缩进表示嵌套*/ |
|
| 不支持 |
/*支持省略冒号*/ |
|
变量与作用域
| LESS | Scss | Stylus |
|---|---|---|
/*以“@”开头*/ |
/*以“$”开头*/ |
/*可以以“$”开头,也可无前缀符号直接声明变量*/ |
| 定义变量时,以冒号“:”分隔变量名与变量值 | 以“=”分隔变量名与变量值 | |
| 与其它语言作用域概念雷同,向上冒泡查找变量 | 无全局变量的概念,后定义的同名变量会完全覆盖先定义的变量 | 同LESS |
混合(Mixins)
Mixins是CSS预处理器中语言中最强大的特性。
Mixins可以将一部分需重用的样式抽出,只需定义一次,就可被很多选择器重复使用。
| LESS | Scss | Stylus |
|---|---|---|
| 可以无需特别声明,直接调用某一class或id选择器名即可重用该选择器内属性 | 定义混合需要以“@mixin”开头。引用混合需要以“@include” 开头 | 无需前缀 |
| 均可定义参数与设置参数默认值 | ||
/*声明混合*/ |
/*声明混合*/ |
/*声明混合*/ |
/*编译成CSS后*/ |
||
嵌套实现后代选择器
| LESS | Scss | Stylus |
|---|---|---|
| 嵌套语法是相同的,可以通过大括号“{}”之间的层次关系实现嵌套。也可以使用“&”符号来引用父选择器。 | ||
div{
|
||
div{
|
||
继承
| LESS | Scss | Stylus |
|---|---|---|
| 无需明确的前缀 | 使用“@extend”开始,后面紧跟被继承的选择器 | |
/*继承示例*/ |
/*继承示例*/ |
|
/*编译成CSS,相同样式依旧会在每个选择器中重复出现*/ |
/*编译成CSS,相同样式会被合并*/ |
|
条件语句
| LESS | Scss | Stylus |
|---|---|---|
| 使用关键字“when”实现条件语句 | 可以使用@if、@else、@else if语句实现判断 | 与其它编程语言类似,不过可以省略大括号 |
@type: link; |
$type: link; |
type: link; |
/*编译后的CSS*/ |
||
循环语句
| LESS | Scss | Stylus |
|---|---|---|
| 通过when模拟循环功能 | 使用@for关键字,配合“from”和“through” | 使用for/in对表达式进行循环 |
.funClass (@i) when (@i>0){
|
@for &i from 1 through 3{
|
for i in 1 2 3 |
/*编译后的CSS*/ |
||
| 还支持each循环语句、while循环语句 | ||
综合对比
- 均具有“变量”、“混合”、“嵌套”、“继承”、“颜色混合”五大基本特性;
- Scss和LESS语法较为严谨,LESS要求一定要使用大括号“{}”,Scss和Stylus可以通过缩进表示层次与嵌套关系;
- Scss无全局变量的概念,LESS和Stylus有类似于其它语言的作用域概念;
- Scss和Stylus就具有类似其它语言的条件语句、循环语句等,而LESS需要通过When等关键词模拟这些功能;
- Sass是基于Ruby语言的,而LESS和Stylus可以基于NodeJS NPM下载相应库后进行编译;
- 使用LESS时,还可以在引用它的HTML文件中引入从官网下载的“less.js”文件,就可以通过浏览器进行解析。
表析LESS、Sass和Stylus的异同的更多相关文章
- PostCSS深入学习: PostCSS和Sass、Stylus或LESS一起使用
如果你喜欢使用PostCSS,但又不想抛弃你最喜欢的预处理器.不用担心,你不需要作出二选一的选择,你可以把PostCSS和预处理器(Sass.Stylus或LESS)结合起来使用. 有几个PostCS ...
- sass/less/stylus css编译
早上来了听一同事说stylus如何才能编译成css文件,瞬时间有点蒙,一听感觉和less是差不多的功能,随着就上网去查,然后发现这个文章,介绍了这三种sass/less/stylus的安装和语法,贴在 ...
- less,sass,stylus配置和应用教程及三者比较
less,sass,stylus配置和应用教程及三者比较 Less 1. 定义: Less是CSS预处理语言,在css基础之上增加了诸如变量,混合(mix),继承,运算,函数等功能,LESS既可以运 ...
- less、sass、stylus
less.sass.stylus 它们是三种类似的样式动态语言,属于css预处理语言,它们有类似css的语法,为css赋予了动态语言的特性.如变量.继承.运算.函数等.这么做是为了css的编写和维护. ...
- css预处理器 sass和stylus对比以及常用功能
在众多的css预处理器语言中,sass和stylus算是十分优秀的两个.本文主要针对两者的常用功能做个简单的对比分析.在对比中了解二者的差异,同时帮助大家更好的掌握这两种预处理语言. 本文涉及到的sa ...
- 对比学习sass和stylus的常用功能
在众多的css预处理器语言中,sass和stylus算是十分优秀的两个.本文主要针对两者的常用功能做个简单的对比分析.在对比中了解二者的差异,同时帮助大家更好的掌握这两种预处理语言.本文涉及到的sas ...
- vue项目中npm安装sass,less,stylus
用vue-cli脚手架搭建出来的,默认是用标准css的.如果你想用sass,less,stylus就需要自己手动安装一下了. 进入项目文件夹,然后安装(这里以stylus为例)stylus和stylu ...
- vue中使用LESS、SASS、stylus
less的使用 npm install less less-loader --save 修改webpack.config.js文件.vue.cli 搭建项目可跳过此步 { test: /\.less$ ...
- css预处理器:Sass LASS Stylus
语法 Sass h1 { color: #0982C1; } h1 color: #0982c1 LESS h1 { color: #0982C1; } Stylus /* style.styl */ ...
随机推荐
- Descriptor&web.xml
Deployment Descriptor部署描述符: - 部署描述符是要部署到Web容器或EJB容器的Web应用程序或EJB应用程序的配置文件. - 部署描述符应包含EJB应用程序中所有企业bean ...
- MySQL--限制用户使用资源
在MySQL 5.7及后续版本中,可以按照账号来限制每个账号实际具有的资源限制. 语法: GRANT WITH option, 如: GRANT SELECT ON test.* TO user1@l ...
- day9 python学习 文件的操作 读 写 seek
文件的操作 1 文件的打开操作: 文件句柄 = open('文件路径', '模式') f=open('wangyakun','a+',encoding='utf-8') #文件名, 如果是绝对路径 ...
- Where is Silverlight now?
Some time ago, I wrote an article about the comparison between HTML5 and Silverlight. That article w ...
- AppBox Mvc数据库初始化
下载AppBoxMvc后,以为CTRL_F5运行后就能数据库初始化了.一直报失败 我的环境是VS2017,利用VS2017自带的数据库 后修改: 1. 修改AppBoxContext.cs publ ...
- Servlet 简介
1. 如下图 2. 每一个Servlent都必须实现Servlent接口. GenericServlet是个通用的.不特定于任何协议的Servlet, 它实现了Servlet接口,而Httpservl ...
- ES(6): access elasticsearch via curl
curl是一个非常实用的.用来与服务器之间传输数据的工具:支持的协议包括 (DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, ...
- 在word中输入任意角度旋转图片
Sub 图片旋转任意角度() Dim sha As Shape, isa As InlineShape Static s As Integer Application.ScreenUpdating = ...
- QCheckBox控件
一个QCheckBox会有2种状态:选中和为选中.它由一个选择框和一个label组成,常常用来表示应用的某些特性是启用或不启用. 在下面的例子中,我们创建了一个选择框,它的状态变化会引起窗口标题的变化 ...
- 错误:Unsupported major.minor version 51.0(jdk版本错误)
Java.lang.UnsupportedClassVersionError: org/apache/nutch/crawl/Crawl3 : Unsupported major.minor vers ...