[學習筆記]SCSS使用筆記
SASS/SCSS
SASS/SCSS 介紹
這些日子在實驗室或在公司,花了很多時間學習及工作前端部分,其中調整網站前端切版時,總會希望自己現在手邊調的版型,未來可以模組化或是沿用,今天介紹的工具,就是可以用一個比較好維護的方式進行CSS的撰寫。
SASS/SCSS簡介
SASS 就是 Syntactically Awesome Stylesheets 語法優越的樣式表。
SCSS也是SASS的一種,SCSS可以直接當做CSS寫,而SASS則不用大括號。
CSS預處理器比較 Sass vs. LESS vs. Stylus
早些日子CSS的預處理器還有些取捨戰爭。
CSS前置處理器(CSS Preprocessor),是一種構架於css之上的高階語言,可以通過腳本編譯生成CSS代碼,其目的是為了讓CSS開發者的工作更簡單有趣,當前已經進入了較為成熟的階段,基本上新的web開發專案大都已普遍使用。
現在最主要的選擇有:
1.Sass背景介紹
Sass是對CSS(層疊樣式表)的語法的一種擴充,誕生於2007年,最早也是最成熟的一款CSS前置處理器語言,它可以使用變數、常量、嵌套、混入、函數等功能,可以更有效有彈性的寫出CSS。Sass最後還是會編譯出合法的CSS讓流覽器使用,也就是說它本身的語法並不太容易讓流覽器識別,因為它不是標準的CSS格式,在它的語法內部可以使用動態變數等,所以它更像一種極簡單的動態語言。
其實現在的Sass已經有了兩套語法規則:一個依舊是用縮進作為分隔符號來區分代碼塊的;另一套規則和CSS一樣採用了大括弧({})作為分隔符號。後一種語法規則又名SCSS,在Sass3之後的版本都支援這種語法規則。
注:Sass官網地址:http://sass-lang.com
2.LESS的背景介紹
2009年開源的一個項目,受Sass的影響較大,但又使用CSS的語法,讓大部分開發者和設計師更容易上手。LESS提供了多種方式能平滑的將寫好的代碼轉化成標準的CSS代碼,在很多流行的框架和工具中已經能經常看到LESS的身影了(例如Twitter的Bootstrap框架就使用了LESS)。
根據WIKI百科上的介紹,其實LESS是Alexis Sellier受Sass的影響創建的一個開源項目。當時SASS採用了縮進作為分隔符號來區分代碼塊,而不是CSS中廣為使用的大括弧({})。為了讓CSS現有的用戶使用起來更佳方便,Alexis開發了LESS並提供了類似CSS的書寫功能。
注:LESS的官網:http://lesscss.org
3.Stylus背景介紹
Stylus,2010年產生,來自於Node.js社區,主要用來給Node項目進行CSS預處理支持,在此社區之內有一定支持者,在廣泛的意義上人氣還完全不如Sass和LESS。
Stylus被稱為是一種革命性的新語言,提供一個高效、動態、和使用表達方式來生成CSS,以供流覽器使用。Stylus同時支援縮進和CSS常規樣式書寫規則。
注:Stylus官網:http://learnboost.github.com/stylus
較為推崇的組合是,SASS+Compass+Twitter Bootstrap+bootstrap-sass,這一組合能夠獲得最好的底層語言SASS,最好的框架Compass,和Bootstrap提供的最強大的UI元件庫(被bootstrap-sass翻譯成SASS的風格)。
這邊提到發展引用於http://www.w3cplus.com/css/css-preprocessor-sass-vs-less-stylus-2.html
.scss
.sass
.less
.styl
這些都是能提供前端工程師維護CSS的工具,更詳細的功能比較可以參考下面CSS PREprocessors Compare
https://csspre.com/compare/
為了更方便進行前端網頁的開發,預處理器提供了以下需求:
- 提供模組化已撰寫之樣式表
- 容易載入及維護
- 提供撰寫自訂樣式(類似函式語法模式)
- 兼容CSS的語法
- 縮短開發時間
而Sass提供了變數(Variables)、巢狀結構(Nesting)、載入(Import)、自定樣式功能(Mixin)、樣式繼承(Extend)及變量運算(Operators)…等等官網,提供前端工程師一個更好維護的開發環境
SSCSS 語法
前面講了這麼久,這邊開始介紹他容易維護而常使用的語法。
變數(Variables)
.scss
語法
$font-stack: Helvetica, sans-serif;
$primary-color: #333;
body {
font: 100% $font-stack;
color: $primary-color;
}
轉成的css
body {
font: 100% Helvetica, sans-serif;
color: #333;
}
透過變數的宣告,可很容易的將常用的語法定義進行維護動作,只要改變宣告的變數,底下撰寫使用到的語法都可以因此更動到。
巢狀結構(Nesting)
.scss
語法
nav {
ul {
margin: 0;
padding: 0;
list-style: none;
}
li { display: inline-block; }
a {
display: block;
padding: 6px 12px;
text-decoration: none;
}
}
轉成的css
nav ul {
margin: 0;
padding: 0;
list-style: none;
}
nav li {
display: inline-block;
}
nav a {
display: block;
padding: 6px 12px;
text-decoration: none;
}
用巢狀結構撰寫的好處,就是方便維護、容易看懂,用上面的例子可以清楚了解對於CSS的撰寫SCSS的巢狀結構帶來的好處。
載入(Import)
.scss
語法
// _reset.scss
html,
body,
ul,
ol {
margin: 0;
padding: 0;
}
// base.scss
@import 'reset';
body {
font: 100% Helvetica, sans-serif;
background-color: #efefef;
}
轉成的css
html, body, ul, ol {
margin: 0;
padding: 0;
}
body {
font: 100% Helvetica, sans-serif;
background-color: #efefef;
}
透過載入,可以將預先模組化的.scss
程式碼拿來使用,此種方式可以讓前端工程師自己組織自己的武器,讓下一個專案開發時程更為壓縮。
自定樣式功能(Mixin)
.scss
語法
@mixin border-radius($radius) {
-webkit-border-radius: $radius;
-moz-border-radius: $radius;
-ms-border-radius: $radius;
border-radius: $radius;
}
.box { @include border-radius(10px); }
轉成的css
.box {
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
-ms-border-radius: 10px;
border-radius: 10px;
}
上述寫法就像是自行宣告一個函式,在透過回傳參數傳遞進行更多專案作業一樣,透過自行宣告的瀏覽器兼容語法,讓程式碼更有彈性。
樣式繼承(Extend)
.scss
語法
.message {
border: 1px solid #ccc;
padding: 10px;
color: #333;
}
.success {
@extend .message;
border-color: green;
}
.error {
@extend .message;
border-color: red;
}
.warning {
@extend .message;
border-color: yellow;
}
轉成的css
.message, .success, .error, .warning {
border: 1px solid #cccccc;
padding: 10px;
color: #333;
}
.success {
border-color: green;
}
.error {
border-color: red;
}
.warning {
border-color: yellow;
}
透過樣式繼承,縮短程式碼撰寫及可讀性,此種方式更容易撰寫基於某種樣式的延伸物件樣式。
變量運算(Operators)
.scss
語法
.container { width: 100%; }
article[role="main"] {
float: left;
width: 600px / 960px * 100%;
}
aside[role="complimentary"] {
float: right;
width: 300px / 960px * 100%;
}
轉成的css
.container {
width: 100%;
}
article[role="main"] {
float: left;
width: 62.5%;
}
aside[role="complimentary"] {
float: right;
width: 31.25%;
}
相信對於工程師而言,運算的程式碼應該都是基本中的基本,但是如果在裡面加入變數,這樣整個SCSS code就更有調整空間。
這邊講了這麼多,是不是對於SCSS的撰寫有基本的了解了呢?
至於編譯工具的使用等到下一次才介紹。