目錄
前言:CSS预处理语言
基本差别
基本语法
变量与作用域
混合(Mixins)
嵌套实现后代选择器
继承
条件语句
循环语句
综合对比
首頁 web前端 html教學 表析LESS、Sass和Stylus的异同_html/css_WEB-ITnose

表析LESS、Sass和Stylus的异同_html/css_WEB-ITnose

Jun 24, 2016 am 11:59 AM
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==linkcolor: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”文件,就可以通过浏览器进行解析。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

詳解C語言和Python在程式設計上的異同 詳解C語言和Python在程式設計上的異同 Mar 18, 2024 pm 12:09 PM

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

sass軟體是什麼意思 sass軟體是什麼意思 Aug 15, 2022 am 11:39 AM

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

深入解析Golang和Go的差異與共通 深入解析Golang和Go的差異與共通 Jan 23, 2024 am 08:05 AM

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

深入了解C++和C語言的異同 深入了解C++和C語言的異同 Mar 26, 2024 am 09:36 AM

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

vue建立專案時sass是什麼意思 vue建立專案時sass是什麼意思 Jun 21, 2022 am 10:33 AM

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

深入探討C語言和Python的異同 深入探討C語言和Python的異同 Mar 22, 2024 am 08:57 AM

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

透視C語言與Python的異同點 透視C語言與Python的異同點 Mar 19, 2024 am 08:39 AM

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

vue工程編譯sass錯誤怎麼辦 vue工程編譯sass錯誤怎麼辦 Jan 05, 2023 pm 04:20 PM

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

See all articles