對於大部分前端程序員來講,最痛苦的是莫過於寫樣式(css)了,試想一下,當作了 一個炫酷插件,或者實現了多牛逼的功能,但是沒有完美樣式,是不被人寵幸的,巨瞭解,我身邊絕大部分的人都及其不喜歡寫樣式,一方面:嵌套多層元素時,那選擇器的寫法可不建議簡寫,畢竟涉及到樣式覆蓋與權重的問題;第二方面:對於某些程序員來講這與體力活不差一二。但是在我看來,一個優秀的,吸引人的web,樣式的成分仍是仍是處於上游的,試想一下,一個web,沒有「華麗」的表面,怎麼吸引人的注意?我始終相信這樣一句話「天無絕程序員之路」,這時候sass就拯救了咱們
SASS是一種CSS的開發工具,提供了許多便利的寫法,大大節省了設計者的時間,使得CSS的開發,變得簡單和可維護。css
本文總結了SASS的主要用法。個人目標是,有了這篇文章,平常的通常使用就不須要去看官方文檔了。html
SASS是Ruby語言寫的,可是二者的語法沒有關係。不懂Ruby,照樣使用。只是必須先安裝Ruby,而後再安裝SASS。前端
假定你已經安裝好了Ruby,接着在命令行輸入下面的命令:程序員
gem install sass複製代碼
而後,就可使用了。web
SASS文件就是普通的文本文件,裏面能夠直接使用CSS語法。文件後綴名是.scss,意思爲Sassy CSS。面試
下面的命令,能夠在屏幕上顯示.scss文件轉化的css代碼。(假設文件名爲test。)shell
sass test.scss複製代碼
若是要將顯示結果保存成文件,後面再跟一個.css文件名。編程
sass test.scss test.css複製代碼
SASS提供四個編譯風格的選項:瀏覽器
* nested:嵌套縮進的css代碼,它是默認值。
* expanded:沒有縮進的、擴展的css代碼。
* compact:簡潔格式的css代碼。
* compressed:壓縮後的css代碼。複製代碼
生產環境當中,通常使用最後一個選項。sass
sass --style compressed test.sass test.css複製代碼
你也可讓SASS監聽某個文件或目錄,一旦源文件有變更,就自動生成編譯後的版本。
// watch a file
sass --watch input.scss:output.css
// watch a directory
sass --watch app/sass:public/stylesheets複製代碼
SASS的官方網站,提供了一個在線轉換器。你能夠在那裏,試運行下面的各類例子。
SASS容許使用變量,全部變量以$開頭。
$blue : #1875e7;
div {
color : $blue;
}複製代碼
若是變量須要鑲嵌在字符串之中,就必須須要寫在#{}之中。
$side : left;
.rounded {
border-#{$side}-radius: 5px;
}複製代碼
SASS容許在代碼中使用算式:
body {
margin: (14px/2);
top: 50px + 100px;
right: $var * 10%;
}複製代碼
SASS容許選擇器嵌套。好比,下面的CSS代碼:
div h1 {
color : red;
}複製代碼
能夠寫成:
div {
hi {
color:red;
}
}複製代碼
屬性也能夠嵌套,好比border-color屬性,能夠寫成:
p {
border: {
color: red;
}
}複製代碼
注意,border後面必須加上冒號。
在嵌套的代碼塊內,可使用&引用父元素。好比a:hover僞類,能夠寫成:
a {
&:hover {
color: #ffb3ff;
}
}複製代碼
SASS共有兩種註釋風格。
標準的CSS註釋 /* comment */ ,會保留到編譯後的文件。
單行註釋 // comment,只保留在SASS源文件中,編譯後被省略。
在/*後面加一個感嘆號,表示這是"重要註釋"。即便是壓縮模式編譯,也會保留這行註釋,一般能夠用於聲明版權信息。
/*!
重要註釋!
*/複製代碼
SASS容許一個選擇器,繼承另外一個選擇器。好比,現有class1:
.class1 {
border: 1px solid #ddd;
}複製代碼
class2要繼承class1,就要使用@extend命令:
.class2 {
@extend .class1;
font-size:120%;
}複製代碼
Mixin有點像C語言的宏(macro),是能夠重用的代碼塊。
使用@mixin命令,定義一個代碼塊。
@mixin left {
float: left;
margin-left: 10px;
}複製代碼
使用@include命令,調用這個mixin。
div {
@include left;
}複製代碼
mixin的強大之處,在於能夠指定參數和缺省值。
@mixin left($value: 10px) {
float: left;
margin-right: $value;
}複製代碼
使用的時候,根據須要加入參數:
div {
@include left(20px);
}複製代碼
下面是一個mixin的實例,用來生成瀏覽器前綴。
@mixin rounded($vert, $horz, $radius: 10px) {
border-#{$vert}-#{$horz}-radius: $radius;
-moz-border-radius-#{$vert}#{$horz}: $radius;
-webkit-border-#{$vert}-#{$horz}-radius: $radius;
}複製代碼
使用的時候,能夠像下面這樣調用:
#navbar li {
@include rounded(top, left);
}
#footer {
@include rounded(top, left, 5px);
}複製代碼
SASS提供了一些內置的顏色函數,以便生成系列顏色。
lighten(#cc3, 10%) // #d6d65c
darken(#cc3, 10%) // #a3a329
grayscale(#cc3) // #808080
complement(#cc3) // #33c複製代碼
@import命令,用來插入外部文件。
@import "path/filename.scss";複製代碼
若是插入的是.css文件,則等同於css的import命令。
@import "foo.css";複製代碼
@if能夠用來判斷:
p {
@if 1 + 1 == 2 {
border: 1px solid;
}
@if 5 < 3 {
border: 2px dotted;
}
}複製代碼
配套的還有@else命令:
@if lightness($color) > 30% {
background-color: #000;
}
@else {
background-color: #fff;
}複製代碼
SASS支持for循環:
@for $i from 1 to 10 {
.border-#{$i} {
border: #{$i}px solid blue;
}
}複製代碼
也支持while循環:
$i: 6;
@while $i > 0 {
.item-#{$i} {
width: 2em * $i;
}
$i: $i - 2;
}複製代碼
each命令,做用與for相似:
@each $member in a, b, c, d {
.#{$member} {
background-image: url("/image/#{$member}.jpg");
}
}複製代碼
SASS容許用戶編寫本身的函數。
@function double($n) {
@return $n * 2;
}
#sidebar {
width: double(5px);
}
複製代碼
SASS(Syntactically Awesome Stylesheet)是一個CSS預處理器,有助於減小CSS的重複,節省時間。 它是更穩定和強大的CSS擴展語言,描述文檔的樣式乾淨和結構。
它是預處理語言,它爲CSS提供縮進語法(它本身的語法)。
它容許更有效地編寫代碼和易於維護。
它是包含CSS的全部功能的CSS的超集,是一個開源的預處理器,以 Ruby 編碼。
它提供了比平面CSS好的結構格式的文檔樣式。
它使用可重複使用的方法,邏輯語句和一些內置函數,如顏色操做,數學和參數列表。
它是更穩定,強大,與CSS的版本兼容。
它是超集的CSS和基於JavaScript。
它被稱爲CSS的語法糖,這意味着它使用戶更容易閱讀或表達的東西更清楚。
它使用本身的語法並編譯爲可讀的CSS。
你能夠在更少的時間內輕鬆地編寫CSS代碼。
它是一個開源的預處理器,被解釋爲CSS。
它容許在編程結構中編寫乾淨的CSS。
它有助於編寫CSS更快。
它是CSS的超集,幫助設計師和開發人員更有效率和快速地工做。
因爲Sass兼容全部版本的CSS,咱們可使用任何可用的CSS庫。
可使用嵌套語法和有用的函數,如顏色操做,數學和其餘值。
開發人員須要時間瞭解此預處理器中存在的新功能。
若是更多的人在同一個網站上工做,那麼將使用相同的預處理器。 有些人使用Sass,有些人使用CSS直接編輯文件。 所以,它將變得難以與現場工做。
有機會失去瀏覽器的內置元素檢查器的好處。
SASS支持兩種語法,即 SCSS 和縮進語法。
SCSS(Sassy CSS)是CSS語法的擴展,能夠更容易地維護大型樣式表,而且能夠識別供應商特定的語法和許多CSS。 SCSS文件使用擴展名 .scss 。
縮進是較舊的語法,有時僅稱爲 Sass 。 使用這種形式的語法,能夠簡潔地編寫CSS。 SASS文件使用擴展名 .sass 。
您可使用三種不一樣的方式使用SASS:
做爲命令行工具
做爲一個Ruby模塊
做爲Rack啓用框架的插件
嵌套是不一樣邏輯結構的組合。 使用SASS,咱們能夠將多個CSS規則相互組合。 若是使用多個選擇器,則能夠在另外一個選擇器中使用一個選擇器來建立複合選擇器。
您可使用&amp; 字符選擇父級選擇器。 它告訴父選擇器應該插入的位置。
SASS使用 class 或 id 選擇器支持佔位符選擇器。 在正常CSS中,這些用「#"或「。"指定,但在SASS中,它們替換爲「%"。
有5種類型的運算符:
數字運算符
顏色運算符
字符串運算符
布爾運算符
列表運算符
它容許諸如加法,減法,乘法和除法的數學運算。
它容許使用顏色份量和算術運算。
列表表示使用逗號或空格分隔的一系列值。
您可使用and、or和not(與或非)對Sass腳本執行布爾運算。
括號是一對標記,一般用圓括號()或方括號[]來標記,這提供了影響操做順序的符號邏輯。
它使用#{} 語法提供選擇器和屬性名稱中的SassScript變量。 您能夠在花括號中指定變量或屬性名稱。
您能夠經過向變量值的結尾添加 !default 標誌來設置變量的默認值。若是值已經分配給變量,則不會從新分配該值。
它直接採用文件名導入,全部導入的文件將合併到一個單一的CSS文件。
它將樣式規則設置爲不一樣的媒體類型。
它用於共享選擇器之間的規則和關係。 它能夠在一個類中擴展全部其餘類樣式,也能夠應用本身的特定樣式。
它是一個嵌套規則的集合,它可以在文檔的根節點建立樣式塊。
它用於基於表達式求值的結果選擇性地執行代碼語句。
@else if語句與@if指令一塊兒使用,每當@if語句失敗,則嘗試@else if語句,若是它們也失敗,則執行@else。
它容許您在循環中生成樣式。 計數器變量用於設置每次迭代的輸出。
在@each指令中,定義了一個包含列表中每一個項目的值的變量。
它用於定義mixin,其中包含可選的mixin名稱以後的變量和參數。
它用於在文檔中包含mixin,由mixin定義的樣式能夠包含在當前規則中。
SassScript值能夠做爲mixin中的參數,當mixin包含並在mixin中做爲變量使用時,能夠將其做爲參數。
有兩種類型的mixin參數:
關鍵字參數
可變參數
它用於在mixin中包含參數。 命名的參數能夠按任何順序傳遞,參數的默認值能夠省略。
變量參數用於將任意數量的參數傳遞給mixin。 它包含傳遞給函數或mixin的關鍵字參數。
使用函數指令,能夠建立本身的函數,並在腳本上下文中使用它們,或者可使用任何值。
SASS生成的CSS文件由反映文檔結構的默認CSS樣式組成。 默認的CSS樣式很好,但可能不適合全部狀況。
嵌套樣式是SASS的默認樣式。 這種方式的樣式在處理大型CSS文件時很是有用。
在擴展輸出樣式中,每一個屬性和規則都有本身的線。 與嵌套CSS樣式相比,它須要更多的空間。
緊湊的CSS風格競爭力比Expanded和Nested佔用更少的空間。 它主要關注選擇器而不是其屬性。
與全部其餘樣式相比,壓縮的CSS樣式佔用最少的空間。 它僅提供空格,以在文件末尾分隔選擇器和換行符。
它使用縮進而不是 {和} 來分隔塊。
要分隔語句,它使用換行符而不是分號(;)。
屬性聲明和選擇器必須放在本身的行上, {和} 中的語句必須放在>和縮進。
CSS屬性能夠經過兩種方式聲明:
屬性能夠聲明爲相似於CSS但沒有分號(;)。
colon(:)將以每一個屬性名稱爲前綴。
您可使用= for @mixin指令和+ for @include指令,這須要更少的鍵入,使您的代碼更簡單,更容易閱讀。
sass --watch C:\\ ruby \\ lib \\ sass \\ style.scss:style.css
註釋佔用整行幷包圍嵌套在它們下面的全部文本,它們是基於行的縮進語法。
sass input.scss output.css
首先它檢查Unicode字節,下一個@charset聲明,而後檢查Ruby字符串編碼。
接下來,若是未設置任何內容,則會將字符集編碼視爲。
使用@charset聲明顯式地肯定字符編碼。 只需在樣式表的開頭使用「@charset encoding name",SASS將假設這是給定的字符編碼。
若是SASS的輸出文件包含非ASCII字符,那麼它將使用 @charset 聲明。
Sass支持兩種類型的註釋:
多行註釋 - 使用/ *和* /寫入。 多行註釋保存在CSS輸出中。
單行註釋 - 這些是使用 // 和註釋寫成的。 單行註釋不會保留在CSS輸出中。
它使用命令行評估SassScript表達式。 您可使用sass命令行和 -i 選項運行shell。
它檢測錯誤並將SassScript表達式值顯示到標準錯誤輸出流。
它將SassScript表達式值顯示爲致命錯誤。