層疊樣式表(Cascading Style Sheets,CSS)的功能非常強大,可以影響一個或一組文檔的表現(xiàn)。顯然,如果不存在某種文檔,CSS基本上毫無用處,因為這樣一來它將沒有要表現(xiàn)的內(nèi)容。當然,“文檔”的定義相當寬泛。例如,Mozilla和相關(guān)的瀏覽器就使用CSS來影響瀏覽器Chrome本身的表現(xiàn)。不過,如果沒有Chrome的內(nèi)容——按鈕、地址欄輸入、對話框、窗口等等——也就沒有使用CSS(或其他任何表現(xiàn)信息)的必要。
也許你還能大致記得,在網(wǎng)站制作早期(1990-1993), HTML是一個很有限的語言。它幾乎完全由用于描述段落、超鏈接、列表和標題的結(jié)構(gòu)化元素組成。我們可能認為表、框架或復(fù)雜標記等等內(nèi)容是創(chuàng)建Web頁面必不可少的,可是那時在HTML中連與之稍有些相似的東西都沒有。HTML原本是要作為一種結(jié)構(gòu)化標記語言,用于描述文檔的各個部分,而對于這些部分應(yīng)當如何顯示則很少談及。這種語言并不關(guān)心外觀,它只是一種簡潔的小型標記機制。
接下來Mosaic出現(xiàn)了。
仿佛突然之間,在網(wǎng)上瀏覽時間超過10分鐘的人幾乎都認識到了萬維網(wǎng)的強大。從一個文檔跳到另一個文檔很容易,無非是把光標指向有特殊顏色的部分文本,甚至指向一個圖像,再點擊鼠標。更妙的是,文本和圖像可以同時顯示,只需要一個純文本編輯器就能創(chuàng)建頁面。這是免費而且開放的,確實很酷。
網(wǎng)站開始到處涌現(xiàn)。期刊網(wǎng)站、大學(xué)網(wǎng)站、公司網(wǎng)站等等應(yīng)運而生。隨著網(wǎng)站數(shù)目的增加,人們越來越需要新的HTML元素,希望這些元素各自完成一個特定的功能。創(chuàng)作人員開始要求能夠?qū)⑽谋咀優(yōu)榇煮w或斜體。
而此時HTML卻不足以處理這樣一些需求。利用HTML可以聲明強調(diào)部分文本,但不一定是將其置為斜體,這取決于用戶的瀏覽器和首選項,可能只是改為粗體,或者仍然是正常文本,只不過有不同的顏色而巳。這就無法保證讀者看到的正是創(chuàng)作人員所創(chuàng)建的文檔。
迫于這些壓力,開始出現(xiàn)諸如<FONT>和<BIG>之類的標記元素。突然之間,原來描述結(jié)構(gòu)的語言開始描述外在表現(xiàn)了。
幾年之后,這種隨便的做法所存在的問題開始暴露出來。例如,HTML 3.2和HTML 4.0的很大一部分都是關(guān)于表現(xiàn)問題。此時能夠通過font元素對文本設(shè)置顏色和大小,對文檔和表格應(yīng)用背景色和圖像,使用table屬性(如cellspacing),并且還能讓文本閃爍,這些都是原先要求“有更多控制”的后果。
下面舉例說明這種混亂的具體情況,簡單地看一下幾乎所有的公司網(wǎng)站制作都用到的標記。這些網(wǎng)站中往往標記相當多,而真正有用的信息并不多,二者的差距大得驚人。更槽糕的是,在大多數(shù)網(wǎng)站中,標記幾乎完全由表和font元素組成,它們對于所要表現(xiàn)的內(nèi)容不能傳達任何實際含義。從結(jié)構(gòu)化的角度看,這些網(wǎng)頁比隨機的字母串強不了多少。
例如,來看頁面標題,如果創(chuàng)作人員使用了font元素而不是h1之類的標題元素:
<font size="+3" face="Helvetica" color="red">Page Title</font>
從結(jié)構(gòu)上來講,font標記沒有任何含義。這會使文檔的可用性降低。例如,對于一個語音合成瀏覽器,font標記有什么意義呢?不過,如果網(wǎng)頁設(shè)計師使用標題元素而不是font元素,語音瀏覽器就可以使用某種語音樣式來讀相關(guān)文本。倘若使用font標記,這種語音瀏覽器就無法知道這個文本與其他文本有什么區(qū)別。
為什么網(wǎng)頁設(shè)計師這么不看重結(jié)構(gòu)和含義呢?因為他們希望讀者看到的頁面正如他們設(shè)計的那樣。使用結(jié)構(gòu)化HTML標記意味著要放棄對頁面外觀的很多控制,而結(jié)構(gòu)化HTML 標記顯然不支持多年來已經(jīng)深入人心的那些流行的頁面設(shè)計。不過還需要考慮上述方法存在的如下一些問題:
非結(jié)構(gòu)化頁面使得建立內(nèi)容索引極為困難。真正強大的搜索引擎允許用戶只搜索頁面標題,或者捜索頁面內(nèi)的小節(jié)標題,或者只搜索段落文本,也可能只搜索那些標記為重要的段落。不過,要完成這樣一個任務(wù),頁面內(nèi)容必須包含在某種結(jié)構(gòu)化標記中,而這正是大多數(shù)頁面所缺少的。例如,Google在索引頁面時就會注意標記結(jié)構(gòu),所以如果你的頁面是一個結(jié)構(gòu)化頁面,被百度等搜索引擎捜中的機會就會增加。
必須承認,完全結(jié)構(gòu)化的文檔有些太古板、太平常了?!耙话渍诎俪蟆保鸵驗檫@么一個原因,盡管有幾百個理由要求使用結(jié)構(gòu)化標記,但仍然不能阻擋HTML的使用,直到20世紀末它還如此流行,甚至到今天它還依然盛行。我們需要一種合適的方法,將結(jié)構(gòu)化標記與豐富多彩的頁面表現(xiàn)結(jié)合起來。
當然,HTML中充斥著的表現(xiàn)標記的問題并沒有被W3C(World Wide Web Consortiam,萬維網(wǎng)聯(lián)盟)忽視,他們開始尋找一種速效的解決方法。1995年,W3C開始發(fā)布一種正在進行的計劃(work-in-progress),稱為CSS。到了1996年,這已經(jīng)成為一個成熟的推薦草案(Recommendation),其地位與HTML同樣舉足輕重。下面來說明這是為什么。
豐富的樣式
首先,與HTML相比,CSS支持更豐富的文檔外觀,其表現(xiàn)程度也遠非HTML力所能及。CSS可以為任何元素的文本和背景設(shè)置顏色,允許在任何元素外圍創(chuàng)建邊框,同時能增大或減少元素外的空間,允許改變文本的大小寫、裝飾方式(如下劃線)、間隔,甚至可以確定是否顯示文本,還允許完成許多其他的效果。以頁面上的第一個標題(即主標題)為例,這通常就是頁面本身的標題。以下是一個正確的標記:
<h1>Leaping Above The Water</h1>
現(xiàn)在,假設(shè)你希望這個標題是暗紅色,使用某種字體,采用斜體,而且有下劃線,還有一個黃色的背景。如果用HTML來達到上述目的,就必須把h1放在表中,而且還要有數(shù)十個其他的元素,如font和U。如果使用CSS,所需的則只是簡單的一條規(guī)則:
h1 {color: maroon; font: italic 2em Times, serif; text-decoration: underline; background: yellow;}
如此而已。可以看到,用HTML能夠做到的,用CSS也能做到。不過,還不僅限于此:
h1 {color: maroon; font: italic 2em Times, serif; text-decoration: underline; background: yellow url(titlebg.png) repeat-x; border: 1px solid red; margin-bottom: 0; padding: 5px;}
現(xiàn)在h1的背景上有一個只能水平重復(fù)的圖像,而且它有一個邊框,與文本之間至少間隔5個像素。還去除了元素底端的外邊距(空白)。這些工作是HTML做不到的,甚至連類似的事情都辦不到,而這還只是CSS的冰山一角。
易于使用
如果以上所述還不能說服你,下面的理由可能會讓你改變想法:樣式表能大大減少網(wǎng)站制作人員的工作量。
缺乏結(jié)構(gòu)性會降低可訪問性。假設(shè)你是一個盲人,要依賴一個語音合成瀏覽器上網(wǎng)捜索。下面的兩種頁面你會選擇哪一個呢?是一個結(jié)構(gòu)化頁面,使得你的瀏覽器可以只讀出小節(jié)標題,讓你選擇想聽哪一小節(jié),還是一個無結(jié)構(gòu)性的頁面,瀏覽器必須讀出所有內(nèi)容,因為沒有提示來指出哪些是標題、哪些是段落、哪些是重要的內(nèi)容。再來看百度,實際上這個搜索引擎就是世界上最活躍的盲人用戶,有數(shù)百萬的朋友在接受它的建議,了解在哪里網(wǎng)上沖浪和購物。
高級頁面表現(xiàn)只能應(yīng)用于某種文檔結(jié)構(gòu)。假設(shè)有這樣一個頁面,其中只顯示了小節(jié)標題,各標題旁分別有一個箭頭。用戶可以決定哪些小節(jié)標題對他來說需要深入了解,點擊相應(yīng)的箭頭就能顯示出這一節(jié)的文本。
結(jié)構(gòu)化標記更易于維護。你可能曾經(jīng)花很長時間在別人(甚至你自己)的HTML中查找一個小錯誤,由于這個錯誤,讓你的頁面在某個瀏覽器中顯示得一片混亂,這種情況是不是屢屢出現(xiàn)?你是不是曾經(jīng)花很長時間來編寫嵌套表和font元素,而這只是為了得到一個包含白色超鏈接的邊欄?為了正確地分隔一個標題和它后面的文本,你插入過多少換行元素?通過使用結(jié)構(gòu)化標記,就能清理你的代碼,更容易地找到所要尋找的東西。
首先,樣式表將實現(xiàn)某些視覺效果的命令集中在一個方便的位置,而不是在文檔中分散得到處都是。舉例來說,假設(shè)你希望一個文檔中的所有h2標題都是紫色。若使用HTML,則要在每個標題中也加一個font標記,如下所示:
<h2><font color="purple">This is purple!</font></h2>
所有二級標題都要增加這個標記。如果文檔中有40個這樣的標題,就必須總共插入40個font元素,每個標題插入一個font!為了達到這樣小的一個效果,就要做這么多的工作。
假設(shè)你早有打算,已經(jīng)插入了所有這些font元素。大功告成,你很滿意——不過,可能接下來你認為這些h2標題實際上應(yīng)該是暗綠色而不是紫色(或者你的老板決定讓你這么做)。這樣一來,就必須再回過頭來逐個地調(diào)整這些font元素。當然,只要你的文檔中只是標題有紫色文本,就可以利用“查找-替換”來完成調(diào)整。但是如果文檔中還有其他元素也有紫色font,就不能使用“查找-替換”,因為這將影響那些元素(將把那些元素也改成暗綠色)。
更好的辦法是使用一條規(guī)則:
h2 {color: purple;}
這樣做不僅輸入起來更快,修改起來也更容易。如果確實要從紫色改為暗綠色。所要做的只是修改這一條規(guī)則。
再來看上一節(jié)談到的有豐富樣式的h1元素:
h1 {color: maroon; font: italic 2em Times, serif; text-decoration: underline; background: yellow;}
這看上去比寫HTML還要糟糕,不過請考慮這樣的情況:一個頁面上有12個看上去和h1一樣的h2元素。這12個h2元素需要多少標記呢?如果使用HTML,就需要非常多的標記。另一方面,如果用CSS,所要做的只是:
h1, h2 {color: maroon; font: italic 2em Times, serif; text-decoration: underline; background: yellow;}
現(xiàn)在這些樣式會同時應(yīng)用到h1和h2元素,這里只多敲了3次鍵而已。
如果你想改變h1和h2元素的外觀,CSS的優(yōu)勢則更為突出。考慮一下,與對前面的樣式作如下修改相比,需要花多少時間才能修改h1和12個h2元素的HTML標記:
h1, h2 {color: navy; font: bold 2em Helvetica, sans-serif;
text-decoration: underline overline; background: silver;}
如果用秒表來記錄上述兩種方法所花的時間,我打賭使用CSS的網(wǎng)頁設(shè)計師肯定會讓使用HTML的人輸?shù)脝】跓o言。
此外,大多數(shù)CSS規(guī)則都集中在文檔中的某一個位置。也可以將其分組為相關(guān)的樣式或單個元素分散到文檔中,但是把所有樣式都放在一個樣式表中的做法往往高效得多。這樣,在一個位置上就能創(chuàng)建(或修改)整個網(wǎng)頁文檔的外觀。
在多個頁面上使用樣式
不過請等等,還不只如此!不僅能把一個頁面的所有樣式信息集中到一個位置,還可以創(chuàng)建一個樣式表,然后把這個樣式表應(yīng)用到多個頁面。這是通過以下過程實現(xiàn)的:將樣式表單獨保存為一個文檔,然后由要使用該文檔的頁面導(dǎo)入。通過使用這個功能,可以很快地為整個網(wǎng)站創(chuàng)建一致的外觀。為此只需將這個樣式表鏈接到網(wǎng)站上的所有文檔。在此之后,如果你想改變網(wǎng)站頁面的外觀,只編輯一個文件就夠了,所做的修改便會自動地傳播到整個服務(wù)器!考慮這樣一個網(wǎng)站,它的所有標題都是灰色,背景為白色。這種顏色設(shè)置是由一個樣式表得到的,其中指出:
h1, h2, h3, h4, h5, h6 {color: gray; background: white;}
現(xiàn)在假設(shè)這個網(wǎng)站有700個頁面,每個頁面都使用了這個要求標題為灰色的樣式表。在某個時刻,網(wǎng)站管理員決定標題應(yīng)當是白色,而背景才是灰色。所以將樣式表編輯如下:
h1, h2, h3, h4, h5, h6 {color: white; background: gray;}
然后將樣式表保存到磁盤,修改就完成了。如果使用HTML,則要編輯700個頁面,每個標題都要包含在一個表中,還要有一個font標記,這與使用CSS的方法絕對無法相比,不是嗎?
層疊
還有呢!CSS還規(guī)定了沖突規(guī)則,這些規(guī)則統(tǒng)稱為層疊(cascade)。例如,還是考慮前面的情況,將一個樣式表導(dǎo)入到多個Web頁面?,F(xiàn)在增加一組頁面,其中有些樣式是相同的,不過還包含一些專用于這些頁面的特定規(guī)則??梢粤硗鈩?chuàng)建一個樣式表,將這個樣式表與先前的樣式表一起導(dǎo)入到這些頁面中,或者可以在需要特殊樣式的頁面中直接放入那些樣式。
例如,在700個原有頁面之外的某個頁面上,可能希望標題是黃色,背景是深藍色,而不是灰色背景上的白色標題。在該文檔中,可以插入以下規(guī)則:
h1, h2, h3, h4, h5, h6 {color: yellow; background: blue;}
由于層疊,這個規(guī)則會覆蓋先前導(dǎo)入的灰底白字標題規(guī)則。如果理解了層疊規(guī)則,并充分利用了這些規(guī)則,就能創(chuàng)建相當復(fù)雜的樣式表,這樣不僅很容易地修改,還會使你的頁面看上去很專業(yè)。
層疊并不僅限于網(wǎng)頁設(shè)計師使用。在網(wǎng)上沖浪的人(或讀者)還可以利用某些瀏覽器創(chuàng)建自己的樣式表(這稱為讀者樣式表,原因顯而易見),這些樣式表可以與創(chuàng)作人員創(chuàng)建的樣式表以及瀏覽器使用的樣式層疊。因此,如果讀者是一個色盲,就可以創(chuàng)建這樣一個樣式,使超鏈接突出顯示:
a:link, a:visited {color: white; background: black;}
讀者樣式表可以包含幾乎所有內(nèi)容:可以是一個指令,如果用戶視力不好,這個指令可以讓文字足夠大以便用戶閱讀,也可以是一些規(guī)則,能夠刪除圖像以便更快地閱讀和瀏覽,甚至可以是一些樣式,將用戶最喜歡的圖片放在每個文檔的背景上(當然,不推薦這種做法,不過這種做法確實是可能的)。這樣就能讓讀者自己定制網(wǎng)上體驗,而且不必去掉網(wǎng)頁設(shè)計師的所有樣式。
由于提供了導(dǎo)入、層疊和豐富的效果,CSS對所有創(chuàng)作人員或讀者來說都是一個絕佳的工具。
縮減文件大小
除了視覺上的功能以及對創(chuàng)作人員和讀者都很有用之外,CSS還有一些很讓讀者喜歡的特性。它有助于盡可能地縮減文檔大小,以便加快下載。這是怎么做到的呢?前面已經(jīng)提到,很多頁面都使用了表和font元素來得到漂亮的視覺效果。遺憾的是,這些方法都會創(chuàng)建額外的HTML標記,以至于增加文件大小。通過將視覺樣式信息分組放到集中的區(qū)域中,并使用一種相當簡潔的語法表示這些規(guī)則,就可以去除font元素和其他一些常用的標記。因此,CSS一方面可以大大減少下載時間,另一方面又能大大提升讀者的滿意度。
為將來做準備
前面提到過,HTML是一種結(jié)構(gòu)化語言,而CSS是它的補充:這是一種樣式語言。認識到這一點,W3C(也就是討論并批準Web標準的組織)開始從HTML去除樣式元素。之所以這么做,是因為可以用樣式表提供某些HTML元素目前提供的效果,既然如此,還有誰需要使用這些HTML元素呢?
因此,XHTML規(guī)范中有很多已經(jīng)不鼓勵使用的元素,也就是說,這些元素正逐步從語言中消失。最終,這些元素會被標志為廢棄,這說明不要求也不鼓勵瀏覽器支持這些元素。不鼓勵使用的元素包括<font>、<basefont>、<u>、<strike>、<s>和<center>。樣式表的出現(xiàn)使得已經(jīng)不再需要這些元素。隨著時間的推移,還會有更多元素步入這個不鼓勵使用的行列。
不僅如此,HTML還有可能逐步被可擴展標記語言(Extensible Markup Language, XML)所取代。XML是一種比HTML更復(fù)雜的語言,不過它也更強大、更靈活。盡管如此,XML沒有任何提供聲明樣式元素(如<i>或<center>)的方法。相反,XML 文檔很可能要依賴于樣式表來確定其外觀。盡管XML使用的樣式表可以不是CSS,不過它很可能遵循CSS而且與之非常相似。因此,現(xiàn)在學(xué)習(xí)CSS對創(chuàng)作人員是很有好處的,等到HTML被XML取代時這種好處就會更顯著。
所以,重要的是首先要理解CSS和文檔結(jié)構(gòu)之間有何關(guān)聯(lián)。使用CSS可能對文檔表現(xiàn)有深遠的影響,但是到底能做些什么,對此還是有一些限制。先來學(xué)習(xí)一些基本術(shù)語。
元素(element)是文檔結(jié)構(gòu)的基礎(chǔ)。在HTML中,最常用的元素很容易識別,如p、table、span、a和div。文檔中的每個元素都對文檔的表現(xiàn)起一定作用。在CSS中,至少在CSS2.1 中,這意味著每個元素生成一個框(box,也稱為盒),其中包含元素的內(nèi)容。
替換和非替換元素
盡管CSS依賴于元素,但并非所有元素都以同樣的方式創(chuàng)建。例如,圖像和段落就不是同類元素,span和div也不相同,在CSS中,元素通常有兩種形式:替換和非替換。這兩種類型將在第7章詳細討論,其中將介紹框模型(也稱盒模型)的具體內(nèi)容,但是這里還是先做一個簡要介紹。
替換元素
替換元素(replaced element)是指用來替換元素內(nèi)容的部分并非由文檔內(nèi)容直接表示。在XHTML中,我們最熟悉的替換元素例子就是img元素,它由文檔本身之外的一個圖像文件來替換。實際上,img沒有具體的內(nèi)容,通過以下的簡單例子可以了解這一點:
<img src="howdy.gif"/>
這個標記片段不包含任何具體內(nèi)容,只有一個元素名和一個屬性。除非將其指向一個外部內(nèi)容(在這里,就是由src屬性指定的一個圖像),否則這個元素沒有任何意義。input元素與之類似,取決于input元素的類型,要由一個單選鈕、復(fù)選框或文本輸入框替換。替換元素顯示時也生成框。
非替換元素
大多數(shù)HTML和XHTML元素都是非替換元素(nonreplaced element)。這意味著,其內(nèi)容由用戶代理(通常是一個瀏覽器)在元素本身生成的框中顯示。例如,<span>hi there</span>就是一個非替換元素,文本“hi there”將由用戶代理顯示,段落、標題、表單元格、列表和XHTML中的幾乎所有元素都是非替換元素。
元素顯示角色
除了替換和非替換元素,CSS2.1還使用另外兩種基本元素類型:塊級(block-level)元素和行內(nèi)(inline-level)元素。如果創(chuàng)作人員以前用過HTML或XHTML標記,并了解它們在網(wǎng)頁瀏覽器中的顯示。
當前文章標題:網(wǎng)站制作簡史
當前URL:http://51zuanshi.com.cn/news/wzzz/create-website-history.html