表析LESS、Sass和Stylus的异同_html/css_WEB-ITnose
前言:CSS预处理语言
CSS预处理语言可为CSS增加更多编程特性,以CSS作为目标生成文件。
这些语言可有效提高编程效率,使CSS更加简洁、适应性更强、可读性更加,并使项目更易于维护。
本文将在开发者角度使用表格横向对比的方式客观分析目前主流的CSS预处理语言LESS、Sass、Stylus的异同之处。
不介绍这些语言的安装、编译等内容。默认读者已熟悉CSS并可能已用过以上至少一种CSS预处理语言。
鉴于目前Sass语言有分别以“.sass”和“.scss”为文件名后缀的两套语法规则,本文只介绍Sass3之后的版本,即以Scss表示。
基本差别
*.less | *.scss | *.styl |
均可以通过各自方式在本地编译成*.css文件 有很多第三方编译工具可以将这些格式的文件编译为*.css文件 | ||
可以在HTML文件中引入less.js文件与像引入*.css文件一样的方式引入*.less文件,通过浏览器进行编译(可能损耗一点点性能)。 | 需要先安装Ruby |
基本语法
/*均支持CSS风格语法*/h1{ color:#000;} 登入後複製 | ||
不支持 | /*支持不包含花括号与分号的编写风格,仅通过缩进表示嵌套*/h1 color: #000 登入後複製 | |
不支持 | /*支持省略冒号*/h1 color #000 登入後複製 |
变量与作用域
/*以“@”开头*/@maxWidth:1024px; 登入後複製 | /*以“$”开头*/$maxWidth:1024px; 登入後複製 | /*可以以“$”开头,也可无前缀符号直接声明变量*/maxWidth=1024px; 登入後複製 |
定义变量时,以冒号“:”分隔变量名与变量值 | 以“=”分隔变量名与变量值 | |
与其它语言作用域概念雷同,向上冒泡查找变量 | 无全局变量的概念,后定义的同名变量会完全覆盖先定义的变量 | 同LESS |
混合(Mixins)
Mixins是CSS预处理器中语言中最强大的特性。
Mixins可以将一部分需重用的样式抽出,只需定义一次,就可被很多选择器重复使用。
可以无需特别声明,直接调用某一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;} 登入後複製 |
嵌套实现后代选择器
嵌套语法是相同的,可以通过大括号“{}”之间的层次关系实现嵌套。也可以使用“&”符号来引用父选择器。 | ||
div{ margin:10px 5px; a{ color:red; &:hover{ color:blue; } }} 登入後複製 | ||
div{ margin:10px 5px;}div a{ color:red;}div a:hover{ color:blue;} 登入後複製 |
继承
无需明确的前缀 | 使用“@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;} 登入後複製 |
条件语句
使用关键字“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==linkcolor:blue; else color:black;} 登入後複製 |
/*编译后的CSS*/p {color:blue;} 登入後複製 |
循环语句
通过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循环语句 |
综合对比
- 均具有“变量”、“混合”、“嵌套”、“继承”、“颜色混合”五大基本特性;
- Scss和LESS语法较为严谨,LESS要求一定要使用大括号“{}”,Scss和Stylus可以通过缩进表示层次与嵌套关系;
- Scss无全局变量的概念,LESS和Stylus有类似于其它语言的作用域概念;
- Scss和Stylus就具有类似其它语言的条件语句、循环语句等,而LESS需要通过When等关键词模拟这些功能;
- Sass是基于Ruby语言的,而LESS和Stylus可以基于NodeJS NPM下载相应库后进行编译;
- 使用LESS时,还可以在引用它的HTML文件中引入从官网下载的“less.js”文件,就可以通过浏览器进行解析。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

C語言和Python是兩種常用的程式語言,它們在許多方面有著明顯的異同。本文將從語法、效能、易用性等方面對C語言和Python進行詳細比較,並提供具體的程式碼範例來展示它們之間的差異。語法方面的異同:C語言是一種過程導向的程式語言,語法相對嚴謹和繁瑣,需要開發者自行管理記憶體和資料類型。而Python是一種高階語言,語法簡潔易讀,無需顯式的宣告變數類型。範例程式碼

sass全名為“Software as a service”,意思是“軟體即服務”;它是一種軟體部署模式,第三方供應商在雲端基礎設施上建立應用程序,並以訂閱的形式,透過互聯網向客戶提供這些應用程序,不要求客戶預先建造底層基礎設施。這意味著軟體可以在任何有網路連線和網路瀏覽器的裝置上訪問,而不是像傳統軟體那樣只能在本機上安裝。

Golang和Go的異同:一文讀懂作為一種開源的程式語言,Go於2007年由Google公司開發出來,被廣泛用於建構高效、可靠、簡潔的軟體。 Go語言是基於C語言的程式語言,但它具有更簡潔的語法和更強大的並發支援。然而,Go語言也有一個別名,即Golang,這導致許多人認為它們是兩種不同的語言。那麼Golang和Go到底是同

C++和C语言是两种流行的编程语言,它们在很多方面都相似,但也有许多显著的差异。本文将深入探讨C++和C语言的异同点,并通过具体的代码示例来说明它们之间的差异。一、基本语法和结构差异1.1数据类型定义在C语言中,定义变量时需要先声明数据类型,例如:intnum;而在C++中,可以在定义变量的同时进行初始化,例如:intnum=10;1.2函数定义

vue創建專案時使用的sass是強化css輔助工具的意思,是對css的擴展;sass是由buby語言編寫的一款css預處理語言,和html有一樣嚴格的縮排風格,和css編寫規範相比是不使用花括號和分號的。

C語言和Python是兩種非常流行的程式語言,它們在各自的領域中具有獨特的優勢。本文將深入探討C語言和Python之間的異同,並透過具體的程式碼範例進行比較。 1.文法和結構差異首先,讓我們來看看C語言和Python的語法和結構之間的差異。 C語言範例:#includeintmain(){inta=10;

C語言與Python是兩種廣泛使用的程式語言,在軟體開發領域具有重要地位。本文將從語法結構、資料類型、物件導向、函數等方面探討C語言和Python之間的異同點,並透過具體的程式碼範例來展示它們之間的差異和聯繫。首先,我們從語法結構入手來比較C語言和Python。 C語言是一種結構化的語言,程式碼結構清晰,使用大括號來區分不同的程式碼區塊。而Python則是一種腳本語言

vue工程編譯sass錯誤的解決方法:1、使用鏡像來源“cnpm install node-sass sass-loader --save-dev”安裝sass;2、在“package.json”中更改“sass-loader”版本為“ "sass-loader": "^7.3.1",」;3、在頁面中直接使用或用@代替src即可。
