轉載請注明來源: http://blog.csdn.net/milado_nju/article/details/7529549
# CSS初探
## 概述
先談談HTML網頁的開發(fā)者們所遭遇地痛苦和悲慘的經歷。在CSS出現(xiàn)前或者出現(xiàn)早期,HTML因為要設計不同風格和樣式的元素,所以在不停地加入很多新的元素來表示,例如p,span。然后,問題還是存在,那就是大量的使用表格(Table)元素來排列網頁中的元素,這導致一些不好的問題,其一,Table經常嵌Table,導致網頁較大,消耗帶寬,其二,被搜索引擎解析后,其內容變得雜亂無章。慶幸地是,CSS的出現(xiàn)極大地解決了這些問題。
CSS的全稱是CascadingStyle Sheet, 中文名是級聯(lián)樣式表,是用來控制網頁顯示風格的,被廣泛地使用在網頁中,現(xiàn)在基本所有的瀏覽器支持它。其有一個比較重要的特征就是將網頁的內容和展示的方式分離開,這很重要。另一個重要的特征是它很強大,不是一般的強大,特別是新的CSS3標準,不僅能提供對頁面各個元素的精準控制,同時提供豐富多彩的樣式。簡而言之,CSS是一種非常出色的文本展示語言。
本章將簡單介紹CSS的一些基本功能,讓你對它有個大概地認識,后面的一章中,我們將會介紹它們如何在WebKit和chormium中獲得支持地。
下面給出一個雖然簡單但是卻展示了CSS眾多特征的示例,CSS的主要部分在包含元素Style中,也就是下例中從第3行到第16行,同時JavaScript中也有使用部分對樣式的操作,后面的部分會對它們逐一加以解釋。
## CSS功能
### 選擇器
CSS的選擇器是一組模式,用來匹配相應的HTML元素。但選擇器匹配相應的元素時候,該選擇器包含的各種樣式的設置就會作用在選中的元素上。通過選擇器,CSS能夠精準地控制HTML頁面中的任意一個或者多個元素的屬性。看上面的例子中第四行。該行中的’div’就是一個選擇器,它屬于元素選擇器,其含義是選擇該頁面中的所有’div’元素。因為僅有第20行包含一個’div’元素,所以,該選擇的選擇結果就是該元素。那么,div下面所設置的樣式等屬性(花括號內)都會作用在該元素,從第6行到第16行。
示例中的選擇器僅是眾多選擇器類型中的一種,從CSS1到CSS3,規(guī)范陸續(xù)地加入了多達42種選擇器,極大地方便了開發(fā)者,下面介紹其中一些主要的選擇器:
標簽選擇器:根據元素的名稱來選擇,例如例子中的選擇器,可以選擇一個或者多個
類選擇器:根據類別信息來選擇目標元素,可以選擇一個或者多個,例子中選擇div元素也可以使用類選擇器,方法是”.aclass”;
ID選擇器:根據ID來選擇目標元素,僅能選擇一個,例子中選擇div元素也可以根據屬性選擇器,方法可以是”#adiv”
屬性選擇器: 根據屬性來選擇目標元素,可以選擇一個或者多個,例子中選擇div元素也可以使用屬性選擇器,方法是”div[id]”, ”div[id=’adiv’]”, ”div[id~=’di’]”, ”div[id|=’ad’]”;
后代選擇器: 選擇某元素包含的后代元素,可以選擇一個或者多個,例子中選擇div元素也可以使用后代選擇器,方法是”body div”;
子女選擇器: 選擇某元素包含的子女元素,可以選擇一個或者多個,例子中選擇div元素也可以使用后代選擇器,方法是”body>div”;
相鄰同胞選擇器: 根據相鄰同胞信息來確定選擇的元素,可以選擇一個或者多個,例子中選擇div元素也可以使用相鄰同胞選擇器,方法是”p+div”;
還有很多類型的選擇器,例如偽類選擇器,通用選擇器,群組選擇器,根選擇器等等,這里不再一一作介紹。
介紹了選擇器之后,后面還有個重要的問題,那就是優(yōu)先級。因為多個選擇器可能作用于同一個元素,它們設置的樣式屬性可能不一樣,這種情況下,應該怎么確定使用哪種樣式。
一般而言,選擇器越特殊,它的優(yōu)先級越高,也就是所選擇器指向的越準確,它的優(yōu)先級就越高。例如,如果用1表示標簽選擇器的優(yōu)先級,那么類選擇器優(yōu)先級是10,id選擇器就是100,數(shù)值越大表示優(yōu)先級別越高。所以,盡量使用精確控制的選擇器,使用合理優(yōu)先級的選擇。
### 各種屬性
從第6行到第16行設置選擇的元素的樣式屬性值,大致把這些屬性分成以下類別:
1. 背景:通常有兩種方式設置,一個是設置背景顏色(例子中的background-color),另外一種設置背景圖片。
2. 文本:設置文本縮進,對齊,單詞間隔,字母間隔,字符轉換,裝飾,空白字符等
3. 字體:設置字體屬性,可以是內嵌的,也可以是自定義的方式,另外還可以設置加粗,變形等等。
4. 列表:設置列表類型,可以以字母,希臘字母,數(shù)字等變好列表
5. 表格:通過設置邊框來達到表格的目的,設置是否把表格邊框合并為單一的邊框,設置分隔單元格邊框的距離,設置表格標題的位置,設置是否顯示表格中的空單元格,設置顯示單元、行和列的算法等。
6. 框模型(box model): 框模型定義了元素框處理元素內容,內邊框,邊框和外邊距處理方式。在示例中包含屬性’border’,’padding’分別表示邊框和內邊距。
7. 定位:CSS提供相對,絕對定位和浮動定位。示例使用了絕對定位,參見第6到第8行。
從示例中相信你可以看到,CSS的基本單元就是選擇器加上它所包含的各個屬性設置,參看示例中第4行到第17行,CSS就是由多個這樣的基本單元所組成。在編寫CSS的時候,通過選擇器來精確控制需要選擇的元素,然后通過設置屬性值來讓這些元素展示出不同的顯示效果。
###CSS3新增功能
1. 選擇器:上面介紹屬性選擇器就是CSS3新加入的,除此之外,還加入了精確控制的選擇器用來選擇特定位置的子女,特定元素標簽的子女等等。
2. 樣式:增加了一些比較好的功能,例如自定義字體,圓角屬性,邊框顏色等等
3. 變換,過渡和動畫(transform,transition, animation):CSS3提供令人驚奇的變換,轉變和動畫功能,令其更加的賞心悅目。規(guī)范的草案中定義了2D的變換,更為吃驚的是WebKit提供了3D的變換。變換有三種類型,平移,旋轉和縮放。同2D不同的是,3D增加了繞Z軸的平移旋轉和縮放。有一點頗令人遺憾,那就是各個不同的瀏覽器對這些屬性的名字定義不一致,例如標準對變換的定義屬性名是’transform’,而webkit的是’-webkit-transform’,如例子中第15行所示,IE的’-ms-transform’, firefox的則是’-moz-transform’,opera的是’-o-transform’,這不免令人心煩意亂。過渡(transition)描述了屬性從一個值過渡到另一個值的過程,定義了過程的時間,啟動過程的延遲時間等等。但是,這些標準草案中的定義還不足以描述更精確的變化過程,所以引入了更為靈活的方式,這就是CSS動畫(animation)。通過動畫,你能夠定義不同的keyframes來控制中間變化過程而不僅僅是開始和結束。你可以這么理解,過渡是一種較為簡單和常見的動畫。
### CSS和JavaScript
在新的瀏覽器中,Javascript也可以方便且簡單地來操作設置css的值,看看例子第24行到34行的代碼。在函數(shù)’loop’中,但得到元素’adiv’后,可以通過設置它的style屬性來設置各個CSS的屬性值,例如本例中是要設置變換的不同角度,含義是通過不斷地改變’webkitTransform’的值來讓’adiv’元素繞Z軸旋轉起來,效果相當酷。
另外一個非常不錯的功能是,規(guī)范中引入了兩個新的JavaScript接口: querySelector和querySelectorAll。這兩個接口讓CSS定義的所有的選擇器都可以作為參數(shù)傳給這兩個接口,從而獲取到相應的HTML頁面中的元素,這非常的有用,你值得試試。chromium,safari和Firefox都支持它。
在這一節(jié)結束前,強烈建議你將該示例在瀏覽器中嘗試(最好是chrome或者safari,如果是其它瀏覽器,可能需要做相應的屬性名修改),同時,逐一注釋掉每個屬性,看看它怎么影響最終的顯示效果。
## 參考文獻
1. http://www.webkit.org/projects/layout/index.html
2. http://en.wikipedia.org/wiki/Tableless_web_design
3. http://www.w3schools.com/cssref/css_selectors.asp
By yongsheng@chromium.org