06.06
文章來源: http://blog.xuite.net/grassboy/Tech/46187663
What’s Compass CSS ?
大家或多或少都寫過CSS,不論是網頁開發者在套版,
或是在Xuite、Pi*net、無*小站修改自己的網誌樣式,
但在撰寫CSS的過程中,感覺是常態,但又讓人感到困擾的狀況通常是…
今天要定義一個div(id=xxx)裡面的超連結(a)的樣式,
通常就會寫一段css script
#xxx a {
/* 樣式設定 */
}
然後又覺得,滑鼠移上去後,又要有不同的樣式…
所以會再寫一段:
#xxx a:hover {
/* 樣式設定 */
}
好…等到要設定的樣式愈來愈多…
我們會寫愈來愈多
SelectorA SelectorB SelectC … {
/* 樣式設定 */
}
的區塊…但大部分的狀況是…
其實我們要描述的網頁元素是有結構性的,
但傳統CSS的寫法並無法把這層結構性描述出來…
用下面這張圖說明… (圖片來源)

當我們要定義C D E F的樣式
我們必需在CSS檔這樣寫
A B C { /*樣式設定*/}
A B D { /*樣式設定*/}
A B E { /*樣式設定*/}
A F { /*樣式設定*/}
/*(上面其實用了不少Copy and Paste XD)*/
為什麼不能像寫程式一樣…
有層次的將CSS檔寫成下面降子呢?
A {
B{
/*A B的樣式設定*/
C{ /*A B C的樣式設定*/}
D{ /*A B D的樣式設定*/}
E{ /*A B E的樣式設定*/}
}
F {
/*A F的樣式設定*/
}
}
沒錯…這就是Compass CSS試圖解決的問題!
**讓CSS更加的結構化!**
Compass CSS可以理解成一支CSS Compiler
當我們使用Compass CSS去撰寫CSS檔時,
我們可以用更結構化的方式去描述我們網站元素的樣式…
然後交給Compass去產生原始browser看得懂(相對較難維護)的CSS檔
傳統的CSS檔可能相同的事情我們要一直作,
但使用Compass,因為要寫的CSS Code變少了,且更加結構化,
所以除了加快撰寫CSS的速度,也而且可以降低手誤key錯的機率
至於麻煩鎖碎的事,就交給Compass去操煩吧XD
Compass的方便用法: function call!!
如果Compass只能讓開發CSS更加結構化…那我想他應該不致於拿麼紅…
compass CSS還可以透過一些特殊的指令例如 @import 、 @include
去將一些compass預先定義的css style,甚至是特殊的樣式設定
很簡單的讓開發者透過短短的指令就實作出來!
@import
類似CSS原生的 @import
但在Compass下,@import後面接的可以不只是要讀入的css檔案位置
從這次的Demo過程…給我的認知…
@import所作的似乎有「載入函式庫」的概念
(詳細概念還請指正^^~)
這次Demo有show了 @import "compass/reset"
降子就可以作到CSS Reset了~
然後還有 @import "compass"
似乎是把compass預先定義好的常用function載入?
@include
前面的 @import 把「函式庫」導入了…
那麼…@include就是「呼叫函式」的指令了!
為什麼會需要呼叫函式呢?
請回想…我們曾經為了一個還沒標準化的CSS圓角
寫了下列的樣式設定:
-webkit-border-radius:5px;
-moz-border-radius:5px;
-o-border-radius:5px;
-ms-border-radius:5px;
border-radius:5px;
五個屬性宣告,其實就只是為了告訴(不同的)瀏覽器「我要一個5px的圓角」
這種麻煩的事為什麼要我們自己Copy/Paste Co出來呢?
在Compass的架構下… 只要@include border-radius(5px)就行了!
(注意,記得先@import "compass" or @import "compass/css3/border-radius" )
在這次的Demo中,@include到的funtion還滿多的~(整個就是火力展式啊!)
例如:不用考慮IE6可能會有的bug的 @include float-left/float-right
可以直接指定超連結在 normal/hover/active/visted/focus 等不同狀態下顏色設定的 @include link-colors(…)
和圓角設定一樣麻煩的陰影設定 @include box-shadow( );
個人覺得function call應該是compass最強大的地方…
而且據說user也能夠自行定義function來使用~
感覺就能作更多方便的事情XD
Compass的其他噱頭
Compass還有其他和程式設計很接近的機制
例如「變數」的機制…
我們可以在compass的css檔下定義變數,命名方式有點類似PHP,用$開頭
然後在後面的css宣告中,就可以使用該變數
在CSS宣告過程中用變數,老實說我還沒想過…
但仔細想想,以網站顏色風格這個Case而言
同樣的顏色,其實很常出現在不同元素下的顏色設定
把重複的地方用變數去取代,也能讓程式更好維護~也很符合程式設計的原則XD
Error Report機制
這也是這次Demo很驚豔我的機制…
平常在寫程式的時候常常就會遇到Compile/Parse Error
既然compass本質上算是compiler…
那麼總有手誤寫錯程式造成compass看不懂的狀況吧?
在我們撰寫compass的過程中,如果有不符寫法規範的狀況…
compass會產生一個pop-up提示開發者compass css檔的哪一行有誤
我覺得更強的地方在於…如果我略過了這個pop-up
compass甚至會直接透過他產生的CSS,去印出錯誤訊息…
也就是如果我某個網頁有call到outputed CSS,
那個網頁就會直接把錯誤訊息print出來~想不注意到都很難XD
另外…compass也能透過修改Config檔,
決定輸出的CSS格式如何(帶不帶註解?是否最小化?)
也算是滿足在開發過程中許多不同的需求降子…
總結Compass
嗯嗯…還是回到一開始所講的…
compass的目的就是要讓撰寫/維護CSS的過程更方便
雖然Compass有很多優點…
不過一來我好像不是很常在寫「純CSS」
二來是compass如果是gui apps是要付7鎂下載的…
(command line版本是opensource,可以直接下載,但我習慣的開發環境是windows下的gVim…囧a)
所以目前我寫CSS檔,暫時還是傳統的方法寫^^~
但這次的RGBA聚會,我多少有被compass強大的火力展示到~
等到以後被一大串的CSS檔撰寫過程弄煩了…
我想花個200元省開發時間也是相當划算的啦XD

































