CSS
维基教科书,自由的教学读本
目录 |
[编辑] 狀態
備忘錄:正在寫書本的大綱階段。
[编辑] 本書的內容
這本書唯一的主題就是 CSS,因此,這本書不會告訴你 CSS 的歷史,也不會著墨於 CSS 的好處與優點,因為在網路上已經有很豐富的資料。然而我鼓勵讀者若是時間許可,應該花些時間了解為什麼網頁技術怎麼從 HTML 開始,後來衍生出 CSS,而最後又冒出 XHTML 。關於 CSS 的歷史,你可參考 Who created CSS? CSS Early History,至於 CSS 的好處與優點,用了你就會了解。
雖然我會在適當的地方加入參考資料或是連結,但是基本上,沒有閱讀這些參考資料與連結並不會影響你學習 CSS。因此,除了自己動手作停下來之外,盡量別讓其他的事情中斷你的閱讀。
[编辑] 先統一辭彙
Cascading Style Sheet (CSS) 的中文翻譯一直沒有定調,有人稱他為「层叠样式表」,也有稱「串接樣式表」,我想,我在這裡不為 CSS 的中文譯名正名,往後的文章中,中文一律用「樣式表」來稱呼 CSS,不過我寧可多用英文,以免造成誤解。
還有一個重要的詞彙「selector」,中文有「選擇器」與「選取項」兩種翻譯,本書我採用後者。
[编辑] 前言:一個網頁的構成
底下的說明,對於任何數位的文件來說,都會成立,但是我仍然將數位文件侷限在網頁這個範圍,這樣會讓問題單純一些。
從產生(或是製作)的過程來看,網頁可以區分為:
- 內容(contents)
- 呈現(presentation)
兩大元素。簡單的說,我們會依照不同的重要性、不同的性質(屬性)與意圖,將網頁的內容結構化,之後,再依據這個架構,給予各個部份合適的呈現方式。這就是我們最後看到的網頁。
[编辑] 不同性質的內容
我們先試著從不同的角度來看一分網頁,先從瀏覽器呈現出來的畫面,再到原始碼,最後看看有沒有什麼還遺漏的內容。
[编辑] 從瀏覽器看到的成品
大家可以回想一下你曾經看過或是作過的網頁,從瀏覽器前端看得到的組成元素不外乎底下的幾個要素:
- 標題(heading)
- 網頁的第一級標題、第二級標題、第三級 ... 標題。
- 段落(paragraph)
- 指的是一段意義完整的圖、文。
- 表格(table)
- 例如價目表、行事曆等等,由行、列組成的資料。
- 清單(list)
- 有序的清單、無序清單與定義式清單。
- 圖片(image)
- 各種可以被瀏覽器讀取的格式的圖檔。
- 超連結(hyperlink)
- 超連結是網頁有別於一般文件的一個很重大的分野,因此,我也把它當作是網頁的一個要素。
- 表單(form)
- 有按鈕、單選選項(raido)、複選選項(check box)、輸入欄位(text field)、輸入文字區塊(text area)等等。
- 多媒體(multimedia)
- 影片、音樂或是 flash。
[编辑] 反觀網頁原始碼
若是你熟悉原始碼,上面我提到的每一個要素,你一定可以立刻對應到某個 HTML 的標籤(tag),但是在原始碼裡面,你會發現更多東西,例如:
- Javascript
- meta 標籤
- style 標籤
- ...
事實上,在原始碼裡面,我們還要提供許多很關鍵的資訊給瀏覽器或是搜尋引擎,這些資訊並不會呈現在使用者眼前,但是卻與網頁的呈現正確與否息息相關。這些資訊包括: 利用 meta 標籤告訴瀏覽器你的網頁所使用的編碼,例如:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
[编辑] 其他
若是你細心一點,你一定會發現,一個網頁所包含的元素裡面,我們漏提了許多的東西,例如:
- 關於整個版面的
- 前景、背景顏色
- 邊界
- 間距
- 關於字體的
- 字型、字級與顏色
- 行高
[编辑] HTML 與 CSS 的分工
談到這裡,我想你一定感覺到了,原來所謂的「標記語言(markup language)」確實是要替文件的內容加上註記,讓一個文件的結構清晰、層次分明。熟悉 HTML 的人會說,HTML 的標籤裡面還是有一些用來作格式化(也就是定義呈現方式)的標籤,如:<b>、<i>,但是,總體來說,HTML 最大的用途乃是用來描述文件的架構,讓文件本身在結構上具有意義,甚至更進一步的讓文件具有語義。
至於樣式表的角色呢?它是用來告訴瀏覽器,如何裝扮每一個 HTML 標籤所標示的內容。所以,任何談到樣式表與 HTML 的文章都會說:「藉由 CSS,我們讓文件的內容與呈現可以分離。」沒錯,這就是學習 CSS 的目的,你應該開始想像,在不更動任何 HTML 原始碼的狀況下,藉由修改樣式表,你的網頁將呈現各種風格迥異的面貌。
[编辑] HTML 簡單介紹(A Brief of HTML)
在真正提到 CSS 之前,弄清楚下列幾個 HTML 的基本觀念,可以讓你更快掌握 CSS,也可以幫助你將來比較容易閱讀其他相關文件,另外,用合適的術語表達概念,有助於與其他設計師的溝通。
[编辑] 標籤與元素 (Tags and Elements)
- 標籤(tag)
- 介於左右三角括弧 (angled brackets) 的文字,如:<body>
- 通常標籤是成對的,分別成為「起始標籤(opening tag)」與「結束標籤(closing tag)」,我們將內容在兩個標籤之中。
- 一般而言,標籤用來告訴瀏覽器採取什麼處理方式:起始標籤告訴瀏覽器開始某個處理方式,結束標籤告訴瀏覽器終止該處理方式。
- 元素 (elements)
- 由起始標籤、結束標籤和其間的內容所構成,例如:This is bold text
[编辑] 屬性 (Attribute)
我們以實際的例子來說明:
<img src="images/foo.gif" alt="範例" width="100" height="50" />
這是一個 img 標籤,在原始碼中,標示這裡要放入一張圖,圖片來源(source, src)是 image/foo.gif 這個檔案,萬一圖片無法顯示時,替代的(alternative, alt)文字是 "範例",而這張圖的寬度(width)是 100 像素(pixels),高度(height)是 50 像素。
我們稱呼:
- src
- alt
- width
- height
為 img 標籤的屬性,而等號(=)後面用雙引號括起來的稱為屬性的「值(value)」。
不同的標籤有不同的屬性,數量也不一樣。
[编辑] 區塊標籤(Block-level Tags)與同軸標籤(Inline Tags)
我們先看一個例子,再來解釋什麼是 block-level 什麼是 inline。
| HTML 原始碼 | 呈現 |
|---|---|
<p> 這是用來說明 <b>區塊標籤(block-level tags)</b>與 <b>同軸標籤(inline tags)</b>的例子。 </p> <p> 你注意到例子中,兩個標籤一個會造成換行,一個卻沒有 </p> |
這是用來說明區塊標籤(block-level tags)與同軸標籤(inline tags)的例子。 你注意到例子中,兩個標籤一個會造成換行,一個卻沒有 |
在上面的例子當中,<p> 標籤所形成的元素,會自成一個區塊(也就是會換行),<b> 標籤所形成的元素,並不會這樣,它僅在同一行裡作用。在 HTML 裡面,常看到的 block-level 的標籤有:
- blockquote - 引用的區塊
- center - 區塊置中
- div - 通用的 block-level 標籤
- h1 - 第一級標題
- h2 - 第二級標題
- h3 - 第三級標題
- h4 - 第四級標題
- h5 - 第五級標題
- h6 - 第六級標題
- hr - 水平線
- p - 段落
- pre - 保留文字格式
而 inline 的標籤有:
- a - 錨點(超連結標籤)
- br - 段行
- iframe - 同軸框架(Inline frame)
- img - 圖片
- q - 簡短的引用
- script - 用戶端 script
- span - 通用的 inline 標籤
- sub - 下標(subscript)
- sup - 上標(superscript)
[编辑] Cascading Style Sheet : CSS
[编辑] 串接式 (Cascading)?
[编辑] 規則(Rules)
[编辑] 註解符號 (Commenting)
[编辑] 規則的形式 (Form of rules)
[编辑] 格式化表單的位置(Where to place Style Sheet?)
[编辑] 內部格式化表單(Internal Style Sheet)
又稱內嵌式格式化表單(Embedded style sheet)
[编辑] 外部格式化表單(External Style Sheet)
[编辑] 同軸格式化表單(Inline Style Sheet)
[编辑] 樣式的優先順序(Priority rules)
[编辑] 繼承的問題(Inheritance)
[编辑] 瀏覽器如何工作?( How browsers work?)
[编辑] 選取項(Selector)
[编辑] 選取項的語法(Syntax of selector)
- 一般選取項(Universal)
- 型態選取項(Type)
- 群組選取項(Grouped)
- 子孫選取項(Descendant)
- 子選取項(Child)
- 比鄰選取項 (Adjacent)
- 屬性選取項(Attribute)
- 類別選取項(Class)
- ID 選取項(ID)
- 擬元素選取項(Pseudo-element)
- 擬類別選取項(Pseudo-classes)
[编辑] 一般選取項(Universal)
所謂的廣域選擇器指的是以星號(*)的方式來決定選取的範圍,實際上,*通常代表的是不特定範圍的選取,因此在CSS中以*設定廣域選取器時,將交由瀏覽器來自行決定範圍
* { color: #FF0000; }
[编辑] 型態選取項(Type)
型態選擇器會是大家最常用到的選擇器之一,所指定的型態名稱會找尋文件中相同的實體元素配合,實際上,我們所使用的『標籤』語法就是一種型態選擇器。
body {
background-color: #999999;
color: #FFFFFF;
}
如果有一樣的樣式想要同時作用在好幾個標籤上的話,可以使用逗號(,)作分隔。
a, p, h1 {
font-size: 10 pt;
color: #0000AA;
}
[编辑] 群組選取項(Grouped)
[编辑] 子孫選取項(Descendant)
[编辑] 子選取項(Child)
[编辑] 比鄰選取項 (Adjacent)
[编辑] 屬性選取項(Attribute)
[编辑] 類別選取項(Class)
[编辑] ID 選取項(ID)
在網頁中指定元件的id屬性之後,就可以使用井字號(#)來設定ID選擇器,在語法中ID選擇器前可以指定網頁元素,但在實際使用時,因為建議網頁中不要有重複ID的元素,因此就沒有指定的必要了。舉例來說,有個識別選擇器p#example,然後在網頁中有兩個物件
以及
,則只有前者會起作用,但如果選擇器的名稱為#example,擇兩者均會起作用。 #example { font-size: 10 pt; color: #0000AA; }
[编辑] 擬元素選取項(Pseudo-element)
[编辑] 擬類別選取項(Pseudo-classes)
[编辑] 方框的基本介紹 (Introduce to Box)
[编辑] 幾個特別的性質(properties)
[编辑] 參考資料
- Cascading Style Sheets, Level 2
- Code Style Media monitor
- CSS - Cascading Style Sheets
- CSS Bugs and Workarounds
- CSS Panic Guide
- CSS Reference Table
- css-bug info
- glish.com CSS layout techniques
- glish.com
- Guide to Cascading Style Sheets
- Little Boxes
- Pixellated! DesignDevelopDeliver
- RichInStyle.com - Style sheet master class part 1 - writing perfect style sheets
- Tableless layout HOWTO
- The Layout Reservoir - BlueRobot
- Web Nouveau Table-less sites list-1
- Webmonkey Reference Stylesheets Guide
- Working with CSS - Introduction to CSS Layout