1. 程式人生 > >less和sass有什麼區別?

less和sass有什麼區別?

1.背景介紹

前處理器:

CSS前處理器是一種語言,用來為CSS增加一些程式設計的的特性,無需考慮瀏覽器的相容性問題,例如你可以在CSS中使用變數、簡單的程式邏輯、函式等等在程式語言中的一些基本技巧,可以讓你的CSS更見簡潔,適應性更強,程式碼更直觀等諸多好處。

我們最常用的前處理器有scss和less。

2.知識剖析

sass背景

Sass誕生於2007年,最早也是最成熟的一款CSS前處理器語言。

現在的Sass已經有了兩套語法規則:一個依舊是用縮排作為分隔符來區分程式碼塊的;另一套規則和CSS一樣採用了大括號({})作為分隔符。後一種語法規則又名SCSS,在Sass3之後的版本都支援這種語法規則。目前我們所稱的sass一般指語法更為嚴格和友好的scss。

less背景

2009年開源的一個專案,受Sass的影響較大,使用CSS的語法,在很多流行的框架和工具中已經能經常看到LESS的身影了(例如Twitter的Bootstrap框架就使用了LESS)。

當時SASS和現在的scss不同,採用了縮排作為分隔符來區分程式碼塊,而不是CSS中廣為使用的大括號({})。為了讓CSS現有的使用者使用起來更加方便,Alexis開發了LESS並提供了類似CSS的書寫功能。

3.常見問題

scssless有什麼不同

我們知道scss和less相似,它們都可以使用變數、常量、巢狀、混入、繼承等功能,可以更有效有彈性的寫出CSS,下面我們看看它們之間的差異。

4.解決方案

A安裝

Sass:

sass基於Ruby語言開發而成,

因此安裝sass前需要安裝Ruby。

Less:

less直接link引入“.less”檔案,再引入less.js檔案即可。

B變數

sass是以$開頭定義的變數,如:

$mainColor: #963;

less是以@開頭定義的變數,如:

@mainColor: #963;

C作用域

sass沒有區域性變數,滿足就近原則。

less中{}內定義的變數為區域性變數。

作用域和其他程式語言中的作用域非常的相同,

他首先會查詢區域性定義的變數,如果沒有找到,

會像冒泡一樣,一級一級往下查詢,直到根為止,

D混合(Mixins)

Sass的混合:

sass樣式中宣告Mixins時需要使用“@mixin”命令,

在選擇器呼叫定義好的Mixins需要使用“@include”。

/*宣告一個Mixin叫作“abc”*/

@mixin abc($bg-c:red){

width: 100px;

height:100px;

background-color: $bg-c;

}

/*呼叫abc Mixins*/

.a{

@include abc();

}

.b{

/*將引數$bg-c的值重定義為blue*/

@include abc(blue);

}

less的混合:

在less中,混合是指將定義好的“ClassA”中引入另一個已經定義的“Class”,就像在當前的“Class”中增加一個屬性一樣。

/*宣告一個Mixin叫作“abc”*/

.abc($bg-c:red){

width: 100px;

height:100px;

background-color: $bg-c;

}

/*呼叫abc Mixins*/

.a{

.abc();

}

.b{

/*將引數$bg-c的值重定義為blue*/

.abc(blue);

}

兩者編譯出的值相同:

.a{

width: 100px;

height:100px;

background-color: red;

}

.b{

width: 100px;

height: 100px;

background-color: blue;

}

E巢狀

兩則寫法相同:

section {

margin:10px;

nav {

height:25px;

a {

color:#0982c1;

&:hover {

text-decoration:underline;

}

}

}

}

F繼承

/*sass的繼承:@extend*/

.block {

margin: 10px 5px;

padding: 2px;

}

p {

@extend .block;/*繼承.block選擇器下所有樣式*/

border: 1px solid #eee;

}

ul,ol {

@extend .block; /*繼承.block選擇器下所有樣式*/

color: #333;

text-transform: uppercase;

}

/*less的繼承:類似於mixins*/

.block {

margin: 10px 5px;

padding: 2px;

}

p {

.block;/*繼承.block選擇器下所有樣式*/

border: 1px solid #eee;

}

ul,ol {

.block; /*繼承.block選擇器下所有樣式*/

color: #333;

text-transform: uppercase;

}

編譯後:

//sass

.block,p,ul,ol {

margin: 10px 5px;

padding:2px;

}

p {

border: 1px solid #eee

}

ul,ol {

color:#333;

text-transform:uppercase;

}

//less

.block {

margin: 10px 5px;

padding:2px;

}

p {

margin: 10px 5px;

padding:2px;

border: 1px solid #eee

}

ul,ol {

margin: 10px 5px;

padding:2px;

color:#333;

text-transform:uppercase;

}

G高階語言

sass對條件語句和迴圈語句的處理要比less語言強大。具有真正的語言處理能力。

6.擴充套件思考

A還有什麼好的前處理器語言?

stylus,2010年產生於Node.js社群,可同時使用縮排和括號寫法,寫法非常靈活,擴充套件性與scss相當,高於less,但由於規定過少,可能容易讓人混亂。

B我該如何選擇css前處理器?

1,Sass誕生是最早也是最成熟的CSS前處理器,有Ruby社群和Compass支援;Stylus早期服務於Node JS專案,在該社群得到一定支持者;LESS出現於2009年,支持者遠超於Ruby和Node JS社群;

2,sass和stylus擴充套件性更強,sass廣泛使用於國外,less在國內受眾最多。stylus是後起之秀。

3,Sass和LESS語法較為嚴謹、嚴密,而Stylus語法相對散漫,其中LESS學習起來更快一些,因為他更像CSS的標準;

4,sass和LESS相互影響較大,其中Sass受LESS影響,已經進化到了全面相容CSS的SCSS;

5,Sass和LESS都有第三方工具提供轉譯,特別是Sass和Compass是絕配;

7.參考文獻

相關推薦

lesssass什麼區別

1.背景介紹 前處理器: CSS前處理器是一種語言,用來為CSS增加一些程式設計的的特性,無需考慮瀏覽器的相容性問題,例如你可以在CSS中使用變數、簡單的程式邏輯、函式等等在程式語言中的一些基本技巧,可以讓你的CSS更見簡潔,適應性更強,程式碼更直觀等諸多好處。 我

lesssass區別

本文來自thoughtworks Jing Ren ,感謝Jing Ren的翻譯(中文版,英文原文)。本人覺得很慚愧,有點竊取的行為,所以我必須再次宣告來自我們可愛的Jing Ren,並再次感謝她的不辭辛苦。     如果你還在為web前段css設計,維護,開發困擾的,我覺得你可以嘗試下LESS或者Sas

關於lesssass區別

其實less和sass的語法非常地相似。他們不同的是他們的實現方式不一樣。less是基於javascript,是在客戶端進行編譯解析的;sass是在伺服器端就進行編譯的。很多人因為less會影響客戶端

lesssass的使用區別

首先我們來說一下Less。  【Less中的變數】 1.宣告變數使用 @變數名:變數值; 2.使用變數 @變數名 less中的變數型別: ①數字類 1 10px ②字串:無引號字串 red 和有引號字串"gdak" ③顏色類 red #000000 rgb() ④值列表型別

電商設計師是做什麽的?美工區別嗎?

mar com 設計 瀏覽器 blog 差異 不同 針對 watermark 說到電商設計師,很多人都把它和美工混為一談。而且大多數人聽到電商設計的第一反應就是淘寶美工,小編想說,這個誤會大了~其實,兩者是有區別的。 那麽,什麽是電商設計?電商設計師是做什麽的?和美工有什麽

向指定 URL 傳送POST方法的請求(狀態碼200其他區別)

public static String sendPost(String url, String param) { OutputStreamWriter out = null; BufferedReader in = null; String result = ""; t

SQLNOSQL區別嗎?

在大資料高速發展的今天,資料量在不斷的增加,傳統的資料庫可能不能滿足人們的需求了,這個時候新霸哥注意到了NOSQL出現了可以解決這個問題。我們知道sql資料庫可以儲存資料和處理資料,但是NOSQL最大的一個優勢就是在大資料這方面,能夠深度處理大資料,分析資料,從大量的資料中

Bootstrap CSS 編碼規範之Less Sass 中的巢狀

Less 和 Sass 中的巢狀避免不必要的巢狀。這是因為雖然你可以使用巢狀,但是並不意味著應該使用巢狀。只有在必須將樣式限制在父元素內(也就是後代選擇器),並且存在多個需要巢狀的元素的時候,才使用巢狀。// Without nesting.table > thead

python中繼承派生區別嗎?

繼承是面向物件程式語言中的一個重要機制,通過繼承可以在一個一般的類的基礎上建立新的類,被繼承的類稱為基類,在基類的基礎上建立的新類成為派生類。 類的繼承和派生其實是一回事,子類繼承了父類,父類派生了子

for迴圈中第三個條件i++++i區別嗎?

看了jdk1.8原始碼裡面寫了個for迴圈,但是我看到第三個條件竟然是++i,這個和我們平時寫的for迴圈不一樣啊。我們用的時候都是i++,不是++i,難道有什麼高明的地方?好奇之下,就做了簡單的測試

SassLESS Stylus區別總結

CSS 前處理器技術已經非常的成熟了,而且也湧現出了越來越多的 CSS 的前處理器框架。本文便總結下 Sass、Less CSS、Stylus這三個前處理器的區別和各自的基本語法。 1.什麼是 CSS 前處理器 CSS 前處理器是一種語言用來為 CSS 增加一些程式設計的的

scsssassless區別?

scss和sass,less區別 1.編譯環境不一樣。Sass的安裝需要Ruby環境,是在服務端處理的,而Less是需要引入less.js來處理Less程式碼輸出css到瀏覽器,也可以在開發環節使用Less,然後編譯成css檔案,直接放到專案中。 2

xftpxshell什麽區別

.sh bsp 進行 等等 startup 協議 傳輸文件 一個 strong XshellXshell是一個用於MS Windows平臺的強大的SSH,TELNET,和RLOGIN終端仿真軟件。它使得用戶能輕松和安全地從Windows PC上訪問Unix/Linux主機。

inux系統用戶名全名什麽區別

說明 創建用戶 請問 b- == linux系統安裝 linux系統 ext pan 問:linux系統安裝完畢,進入系統,創建用戶的時候,要填入用戶名和全名,請問用戶名和全名有什麽區別,登錄的時候,是用戶名還是全名? ===========================

intInteger什麽區別

機制 microsoft val family jdk1 經歷 ont .com () 可參考:http://www.cnblogs.com/liuling/archive/2013/05/05/intAndInteger.html 從Java 5開始引入了自動裝箱/拆

同是辦公軟件,wpsoffice什麽區別

文檔 最好的 般的 .com 小青年 spa tar 個人電腦 功能 今天完美小編為大家帶來的是wps和office有什麽區別教程,那麽到底有什麽區別呢?相信很多朋友都模棱兩可,說不出所以然,看看下面的教程,相信你會選擇更適合你的那一款軟件。一起來看看吧!   1、兩者特

View的getMeasuredWidthgetWidth什麽區別

strong style super 討論 rri 寬度 out 情況 override getMeasuredWidth 為view的測量寬度。 getWidth為view的最終寬度。 (這裏只討論寬度,高度也是一樣的道理) 那麽它們之間有什麽區別呢? 測量寬度是在v

【轉】Visual C++ C++ 什麽區別

業界 流行 編譯器 gtk+ 語言 開發 多種實現 廠商 計算 有位同學問我“Visual C++和C++有什麽區別?”,這的確是初學者會感到困惑的問題,比較常見。除此之外,還有“先學C++好,還是先學Visual C++好?”,都屬於同樣的概念不明的問題,就比

abstract classinterface什麽區別?

運算符 color erl 沒有 抽象類 final trac 中繼 nal   聲明方法的存在而不去實現它的類被叫做抽象類(abstract class),它用於要創建一個體現某些基本行為的類,並為該類聲明方法,但不能在該類中實現該類的情況。不能創建abstract 類的

HSFDubbo什麽區別

rec string meta unit client 描述 模型 最新 這一 一、 以下摘錄自企業級分布式應用服務EDAS官網段落 RPC服務 提供對Dubbo和HSF兩個RPC框架的支持。阿裏巴巴第一代RPC框架Dubbo是國內第一款成熟的商用級RPC框架,已於20