產生背景
HTML語言自HTML4.01以來,不再發布新版本,原因就在於HTML語言正變得越來越複雜化、專用化。即標記越來越多,甚至各個瀏覽器生產商也開發出只適合於其特定瀏覽器的HTML標記,這顯然有礙於HTML網頁的相容性。於是W3C組織進而重新從SGML中擷取營養,隨後,發布了XML,XML是一種比HTML更加嚴格的標記語言,全稱是可延伸標記語言 (XML)(EXtensible
Markup
Language)。但是XML過於複雜,且當前的大部分瀏覽器都不完全支援XML。於是XHTML這種語言就派上了用場,XHTML語言就是一種可以將
HTML語言標準化,用XHTML語言重寫後的HTML頁面可以應用許多XML應用技術。使得網頁更加容易擴充,適合自動資料交換,並且更加規整。說了這
麼多,現在該說正題了——CSS。而CSS關鍵就在於其與指令碼語言(如Javascript)及XML技術的融合,即CSS+Javascript+XML(實際上有一種更好的融合:XML+XSL+Javascript)——但XSL,即可延伸樣式表語言 (XSL)相較於CSS過於複雜,不太容易上手。自從CSS出現之後,HTML終於擺脫了雜亂無章的惡夢,開始將頁面內容與樣式分離。
編輯本段應用環境
DIV元素是用來為HTML文檔內大塊(block-level)的內容提供結構和背景的元素。DIV的起始標籤和結束標籤之間的所有內容都是用來構成這個塊的,其中所包含元素的特性由DIV標籤的屬性來控制,或者是通過使用樣式表格式化這個塊來進行控制。
雖然對於在什麼時候用div沒有什麼硬性的規定,但DIV更適用於大體架構的定位.例如我們要定義一塊頭部的地區,一般會這樣定義一個DIV:
這裡就是頭部架構裡要寫的內容
當然,可以用class來定義,但一般來講如不是在同一頁面會重複的元素,用id能更好的區別開來。
查看如下定義代
<ul id="navbar">
<li id="articles">
Articles</li>
<li id="topics">
Topics</li>
<li id="about">
About</li>
<li id="contact">
Contact</li>
<li id="contribute">
Contribute</li>
<li id="feed">
Feed</li>
</ul>
<h1 id="masthead">
<a href="/">
<img src="/pix/alalogo.gif" alt="A LIST Apart: For People Who Make Websites" />
</h1>
No. 214
定義了最上面的導航(ul部分),左邊的大logo和那個圓圓的No.xxxx的標記.。
他沒有使用DIV來做頂部的架構,但卻很好的說明了這些代碼的用途,為什麼?因為他活用了HTML提供的標籤,以及樣式名稱的定義
編輯本段流行優勢
1、符合W3C標準。微軟等公司均為W3C支援者。這一點是最重要的,因為這保證您的網站不會因為將來網路應用的升級而被淘汰。
2、支援瀏覽器的向後相容,也就是無論未來的瀏覽器大戰,勝利的是IE7或者是Firefox,您的網站都能很好的相容。
3、搜尋引擎更加友好。相對與傳統的table, 採用DIV+CSS技術的網頁,對於搜尋引擎的收錄更加友好。
4、樣式的調整更加方便。內容和樣式的分離,使頁面和樣式的調整變得更加方便。 現在YAHOO,MSN等國際門戶網站,網易,新浪等國內門戶網站,和主流的WEB2.0網站,均採用DIV+CSS的架構模式,更加印證了DIV+CSS是大勢所趨。
5、CSS的極大優勢表現在簡潔的代碼,對於一個大型網站來說,可以節省大量頻寬,而且眾所周知,搜尋引擎喜歡清潔的代碼。
6、表現和結構分離,在團隊開發中更容易分工合作而減少相互關聯性。
編輯本段嵌入方式
行內套用
我們可以在HTML檔案內直接宣告樣式。
舉例來說,Thisisfontsize16.
以上的HTML檔案在瀏覽器上會顯現為:Thisisfontsize16.
嵌入套用樣式可以嵌入於HTML檔案中(通常是在<head>內)。
舉例來說,<head><style
type="text/css">div{background-color:#FF0000;}</style><
/head><body>背景顏色是紅色</body>
以上的HTML會顯現出:背景顏色是紅色
外部串連套用在這種方式下,所有的CSS樣式宣告都是存在另外一個檔案中。
該檔案通常名稱為.css。
在HTML檔案的<header>..</header>之中,我們將用以下的程式碼將這個.css檔案串連進入:
<linkrel=style sheettype="text/css" href="external-stylesheet.css">
以上這一行會將在external-stylesheet.css這個檔案內所宣告的樣式加入HTML檔案內。
匯入套用匯入套用外部的CSS樣式也可以被匯入進HTML檔案。
匯入的做法為利用@import這個指令。
@import的文法為:<style type="text/css"><!--@import url("style.css");--></style>
@import指令最初的用意,是為了能夠針對不同的瀏覽器而運用不同的樣式。不過,現在已經
沒有這個必要。現在用@import的目的,最常是要加入多個CSS樣式。當多個CSS樣式被@import的方式加入,而不同CSS樣式互相有衝突時,
後被加入的CSS樣式有優先的順位(詳情請見CSS串接)。
還有一種嵌入的方式是直接寫在標籤上的,不過這種寫法有些限制,大多數標籤都可以接受這種解法:
<div style="color:#000000;">文字</div>
這個代碼通過直接嵌入標籤的形式,使得標籤內的文字更改顏色,而且根據css的優先調用級直接嵌入標籤的寫法也更直接更優先選擇調用。
編輯本段常用標籤
h1
這個標籤或許真正會去用的人很少,因為它顯示的字型真的是太"大"了,但我們是CSSer,有什麼標籤樣式不能改呢?而且它所能表達的意思就如同它原先的
作用一樣明顯(大標題)我想你已經知道怎麼去用它了 ^_^ . ul
這個標籤很多情況是用來定義導航部分的,當然也可以用ol來代替,但瀏覽連線沒有什麼順序之分吧,所以還是用ul來的比較確切(去掉CSS後效果更明顯)
.
b 這個已經不再推薦使用的標籤,在布局上卻能帶來不少的方便(因為短),雖然我不是太贊成使用這個標籤,但有些時候(比如細小地方的布局定義)還是不錯的選擇
h2 h2使用最多的地方應該不是布局上,而是副標題,但有些地方需要定義欄目樣式的話,用這個標籤比較合適,欄目內容就使用p。
編輯本段布局優點
一、使頁面載入得更快
由於將大部分頁面代碼寫在了CSS當中,使得頁面體積容量變得更小。相對於表格嵌套的方式,DIV+CSS將頁面獨立成更多的地區,在開啟頁面的時候,逐層載入。而不像表格嵌套那樣將整個頁面圈在一個大表格裡,使得載入速度很慢。
二、降低流量費用
頁面體積變小,瀏覽速度變快,這就使得對於某些控制主機流量的網站來說是最大的優勢了。
三、修改設計時更有效率
由於使用了DIV+CSS製作方法,在修改頁面的時候更加容易省時。根據地區內容標記,到CSS裡找到相應的ID,使得修改頁面的時候更加方便,也不會破壞頁面其他部分的配置樣式。
四、保持視覺的一致性
DIV+CSS最重要的優勢之一:保持視覺的一致性;以往表格嵌套的製作方法,會使得頁面與頁面,或者地區與地區之間的顯示效果會有偏差。而使用DIV+CSS的製作方法,將所有頁面,或所有地區統一用CSS檔案控制,就避免了不同地區或不同頁面體現出的效果偏差。
五、更好地被搜尋引擎收錄
由於將大部分的HTML代碼和內容樣式寫入了CSS檔案中,這就使得網頁中本文部分更為突出明顯,便於被搜尋引擎採集收錄。
六、對瀏覽者和瀏覽器更具親和力
我們都知道網站做出來是給瀏覽者使用的,對瀏覽者和瀏覽器更具親和力,DIV+CSS在這方面更具優勢。由於CSS富含豐富的樣式,使頁面更加靈活性,它可以根據不同的瀏覽器,而達到顯示效果的統一和不變形。
編輯本段存在問題
儘管DIV+CSS具有一定的優勢,不過現階段CSS+DIV網站建設存在的問題也比較明顯,主要表現在:
第一,對於CSS的高度依賴使得網頁設計變得比較複雜。相對於HTML4.0中的表格版面配置(table),CSS+DIV儘管不是高不可及,但至少要比表格定位複雜的多,即使對於網站設計高手也很容易出現問題,更不要說初學者了,這在一定程度上影響了XHTML網站設計語言的普及應用。
第二,CSS檔案異常將影響整個網站的正常瀏覽。CSS網站製作的設計項目通常放在幾個l外部檔案中,這一個或幾個檔案有可能相當複雜,甚至比較龐大,如果CSS檔案調用出現異常,那麼整個網站將變得慘不忍睹。
第三,對於CSS網站設計的瀏覽器安全色性問題比較突出。基於HTML4.0的網頁設計在IE4.0之後的版本中幾乎不存在瀏覽器安全色性問題,但CSS+DIV設計的網站在IE瀏覽器裡面正常顯示的頁面,到Firefox瀏覽器(FireFox )中卻可能面目全非(這也是為什麼建議網路行銷人員使用Firefox瀏覽器的原因所在 )。CSS+DIV還有待於各個瀏覽器廠商的進一步支援。
第四,CSS+DIV對搜尋引擎最佳化與否取決於網頁設計的專業水平而不是CSS+DIV本身。CSS+DIV網頁設計並不能保證網頁對搜尋引擎的最佳化,甚至不能保證一定比HTML網站有更簡潔的代碼設計,何況搜尋引擎對於網頁的收錄和排序顯然不是以是否採用表格和CSS定位來衡量,這就是為什麼很多傳統表格版面配置製作的網站在搜尋結果中的排序靠前,而很多使用CSS及web標準製作的網頁排名依然靠後的原因。因為對於搜尋引擎而言,網站結構、內容、相關網站連結等因素始終是網站最佳化最重要的指標。
編輯本段常見錯誤
1. 檢查HTML元素是否有拼字錯誤、是否忘記結束標記
即使是老手也經常會弄錯div的嵌套關係。可以用dreamweaver的驗證功能檢查一下有無錯誤。
2. 檢查CSS是否正確
檢查一下有無拼字錯誤、是否忘記結尾的 } 等。可以利用CleanCSS來檢查 CSS的拼字錯誤。CleanCSS本是為CSS減肥的工具,但也能檢查出拼字錯誤。
3. 確定錯誤發生的位置
如果錯誤影響了整體布局,則可以逐個刪除div塊,直到刪除某個div塊後顯示恢複正常,即可確定錯誤發生的位置。
4. 利用border屬性確定出錯元素的布局特性
使用float屬性布局一不小心就會出錯。這時為元素添加border屬性確定元素邊界,錯誤原因即水落石出。
5. float元素的父元素不能指定clear屬性
MacIE下如果對float的元素的父元素使用clear屬性,周圍的float元素布局就會混亂。這是MacIE的著名的bug,倘若不知道就會走彎路。
6. float元素務必指定width屬性
很多瀏覽器在顯示未指定width的float元素時會有bug。所以不管float元素的內容如何,一定要為其指定width屬性。
另外指定元素時盡量使用em而不是px做單位。
7. float元素不能指定margin和padding等屬性
IE在顯示指定了margin和padding的float元素時有bug。因此不要對float元素指定margin和padding屬性(可以在float元素內部嵌套一個div來設定margin和padding)。也可以使用hack方法為IE指定特別的值。
8. float元素的寬度之和要小於100%
如果float元素的寬度之和正好是100%,某些古老的瀏覽器將不能正常顯示。因此請保證寬度之和小於99%。
9. 是否重設了預設的樣式?
某些屬性如margin、padding等,不同瀏覽器會有不同的解釋。因此最好在開發前首先將全體的margin、padding設定為0、列表樣式設定為none等。
10. 是否忘記了寫DTD?
如果無論怎樣調整不同瀏覽器顯示結果還是不一樣,那麼可以檢查一下頁面開頭是不是忘了寫下面這行DTD:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
編輯本段常用工具
沒有基礎的人會覺得CSS+DIV開發很難學習。其實只要深刻理解其代碼含義用任何文字編輯器都可以編輯。目前許多人在用記事本全部手寫代碼。當然也有人為了方便會用些其他工具:
1.Notepad.exe記事本,(程式小,隨時手工編輯,垃圾代碼少,不能可視化預覽)
2.Dreamweaver(老牌網頁編輯工具,功能全,程式比較大,但對DIV+CSS可視化支援程度不太友好)
3..editplus(應該是升級版的記事本工具,代碼編輯有顏色提示)
4.Ultraedit
5.Golive(Adobe宣布已停止開發)
6.Topstyle(功能相當多,附有CSS碼檢查功能,減少寫錯的機會。尤其是它的HELP檔案中詳細的CSS指令介紹,很適於用作參考檔案與初次接觸CSS的人做為學習使用)
編輯本段相容辦法
區別IE6與FF: background:orange;*background:blue;
區別IE6與IE7: background:green !important;background:blue;
區別IE7與FF: background:orange; *background:green;
區別FF,IE7,IE6: background:orange;*background:green !important;*background:blue;
IE7,IE8相容: <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
HEAD
1. CSS中幾種瀏覽器對不同關鍵字的支援,可進行瀏覽器安全色性重複定義 !important 可被FireFox和IE7識別 * 可被IE6、IE7識別 _ 可被IE6識別 *+ 可被IE7識別
2. IE專用的條件注釋 <!--其他瀏覽器 --> <link
rel="stylesheet" type="text/css" href="css.css" /> <!--[if IE
7]> <!-- 適合於IE7 --> <link rel="stylesheet" type="text/css"
href="ie7.css" /> <![endif]--> <!--[if lte IE 6]> <!--
適合於IE6及一下 --> <link rel="stylesheet" type="text/css"
href="ie.css" /> <![endif]-->
3. 幾個瀏覽器對實際像素的解釋 IE/Opera:對象的實際寬度 =
(margin-left) + width + (margin-right) Firefox/Mozilla:對象的實際寬度=
(margin-left) + (border-left-width) + (padding- left) + width +
(padding-right) + (border-right-width) + (margin-right)
4. 滑鼠手勢問題:FireFox的cursor屬性不支援hand,但是支援pointer,IE兩個都支援;所以為了相容都用pointer
5. FireFox中設定HTML標籤的Style屬性時,所有位置、寬高和尺寸值必須後跟px,IE也支援此寫法,因此統一加px單位。如 Obj.Style.Height = imgObj.Style.Height + ‘px';
6. FireFox無法解析簡寫的padding屬性設定,如padding 5px
4px 3px 1px;必須改為 padding-top:5px; padding-right:4px; padding-bottom:3px;
padding-left:1px0;
7. 消除ul、ol等列表的縮排時,樣式應寫成:list-style:none;margin:0px;padding:0px;其中margin屬性對IE有效,padding屬性對FireFox有效
8. CSS控制透明:IE:filter:progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=60); FireFox:opacity:0.6;
9. CSS控制圓角:IE:不支援圓角; FireFox:
-moz-border-radius:4px;或 -moz-border-radius-topleft:4px;
-moz-border-radius-topright:4px; -moz-border-radius-bottomleft:4px;
-moz-border-radius- bottomright:4px;
10. CSS雙線凹凸邊框:IE:border:2px outset; FireFox:
-moz-border-top-colors: #d4d0c8 white; -moz-border-left-colors: #d4d0c8
white; -moz-border-right-colors:#404040 #808080;
-moz-border-bottom-colors:#404040 #808080;
11. IE支援CSS方法cursor:url()自訂游標樣式檔案和捲軸顏色風格;FireFox對以上兩者均不支援
12. IE有Select控制項永遠處於最上層的bug,且所有CSS對Select控制項都不起作用
13. IE支援Form中的Label標籤,包括圖片和文字內容;FireFox不支援包含圖片的Label,點擊圖片不能讓標記 label for 的Radio或CheckBox產生效果
14. FireFox中的TextArea不支援onScroll事件
15. FireFox不支援display的inline和block
16. FireFox對Div設定margin-left, margin-right為auto時已經置中, IE中不行
17. FireFox對Body設定text-align時, Div需要設定margin: auto(主要是margin-left margin-right) 方可置中
18. 對超連結的CSS樣式設定最好遵從這樣的順序:L-V-H-A。即
<style type="text/css"> <!-- a:link {} a:visited {} a:hover {}
a:active {} --> </style> 這樣可以避免一些訪問過後的超連結就不具備hover和active樣式了
19.
IE中設定長段落自動換行在CSS中設定word-wrap:break-word;FireFox中使用JS插入 的方法來實現,具體代碼如下:
<script type="text/javascript"> /* <![CDATA[ */ function
toBreakWord(el, intLen){ var obj=document.getElementById(el); var
strContent=obj.innerHTML; var strTemp="";
while(strContent.length>intLen){
strTemp+=strContent.substr(0,intLen)+" ";
strContent=strContent.substr(intLen,strContent.length); } strTemp+="
"+strContent; obj.innerHTML=strTemp; } if(document.getElementById
&& !document.all) toBreakWord("div_id", 37); /* ]]> */
</script>
20. 在子容器加了浮動屬性後,該容器將不能自動撐開 解決方案:在標籤結束後下一個標籤中加上一個清除浮動的CSS clear:both;
21. 浮動後IE6解釋外邊距為實際邊距的雙倍 解決辦法:加上display:inline
22. IE6片下方會有空隙 解決辦法:為img加上display:block或設定vertical-align 屬性為vertical-align:top | bottom |middle |text-bottom
23. IE6下兩個層中間有空隙 解決辦法:設定右側div也同樣浮動float:left或者相對IE6定義 margin-right:-3px;
24. LI中內容超過長度後以省略符號的顯示方法 <style type="text/css"> <!-- li { width:200px; white-space:nowrap; text-overflow:ellipsis; -o-text-overflow:ellipsis; overflow: hidden; } --> </style> (只適用與IE)
25. 將元素的高度和行高設定成相同值,即可垂直置中文本 <style type="text/css"> <!-- div { height:30px; line-height:30px; } --> </style>
26.
對齊文本與文本輸入框,須在CSS中增加vertical-align:middle;屬性設定 <style
type="text/css"> <!-- … … vertical-align:middle; } -->
</style>
27.
支援WEB標準的瀏覽器設定了固定高度值就不會像IE6那樣被撐開,但是又想設定固定高度又想能夠被撐開呢?解決辦法是去掉height屬性而設定
min-height,為了相容不支援min-height的IE6可以這樣定義: { height:auto!important;
height:200px; min-height:200px; }
28. web標準中IE無法設定捲軸顏色
解決辦法:在CSS中對body的設定改為對html的 <style type="text/css"> <!-- html {
scrollbar-face-color:#f6f6f6; scrollbar-highlight-color:#fff;
scrollbar-shadow-color:#eeeeee; scrollbar-3dlight-color:#eeeeee;
scrollbar-arrow-color:#000; scrollbar-track-color:#fff;
scrollbar-darkshadow-color:#fff; } --> </style>
29. IE6由於預設行高問題無法定義1px左右高度的容器, 解決辦法:在CSS中對容器設定如:overflow:hidden | zoom:0.08 | line-height:1px
30. 給Flash設定透明屬性可使層顯示在Flash之上 <param
name="wmode" value="transparent" /> <!-- 解決IE上的問題 //> <embed
wmode="transparent" …… > <!-- 解決FireFox上的問題 //>
31. FireFox設定Padding屬性後會相應的增加Width和Height屬性值,IE不會 解決辦法:用!important方法多定義一套Height和Width
32. FireFox對div與div之間的空格是忽略的,但IE是處理的;因此盡量在兩個相連的div之間不要有空格和斷行符號,否則可能會造成不同瀏覽器之間格式不正確,比如著名的3px偏差;而且原因很難查明
33. 形如如下格式 <div id="parent"> <div
id="content"> </div> </div>
當Content內容多時,即使parent設定了高度100%或auto,在不同瀏覽器下還是不能完好的自動伸展;解決辦法在層的最下方產生一個高度為
1的空格,代碼如下 <div id="parent"> <div id="content"> </div>
<div style="font: 0px/0px sans-serif;clear: both;display: block">
</div> </div>
34. IE和FireFox對字型small的尺寸解釋不同,FireFox為13px,IE中為16px
35. IE和FireFox對空格的尺寸解釋不同,FireFox為4px,IE中為8px