div+css網頁標準佈局實例教程(二)

5、佈局頁面——頭部和導航 

有了上邊的基礎,下面的任務就是要利用html和css製做完成一個完整的網頁了。先從頭部開始,第三小節時咱們已經把總體框架給搭建好了,就像蓋房子同樣,總體結構已經出來了,下面就須要填磚分割空間了。先分析下頭部:分爲兩部分,一個是logo靠左側顯示,一個是搜索靠右側顯示,那麼佈局時插入兩個div,一個向左浮動,一個向右浮動的方式來完成。另外還有不少種實現方法,好比logo用h1標籤,搜索用span,或者把logo作爲背景圖片也是能夠的,無論採用哪一種方法,要根據頁面的需求選用一種最合理的方法。若是要在logo加上連接的話,那麼就不能用背景圖片的方法了。css

<div id="header">
<div id="logo">此處顯示 id "logo" 的內容</div>
<div id="search">此處顯示 id "search" 的內容</div>
</div>html

先在header裏插入以上兩塊元素。而後分別插入相應的內容,在logo裏插入咱們事先切割好的logo圖片,在search裏插入一個表單,一個文本框和一個按鈕,插入後以下:web

<div id="header">
<div id="logo"><img src="images/logo.gif" width="181" height="45" /></div>
<div id="search">
<form id="form1" name="form1" method="post" action="">
搜索產品
<input type="text" name="textfield" id="textfield" />
<input type="submit" name="button" id="button" value="查詢" />
</form>
</div>
</div>數據庫

接下來定義css吧,在ps裏測量,頭部的高度是71px,logo距頂部18px,搜索產品距頂部30px,下面在css裏把這些參數都給定義上,看顯示的效果和效果圖中的效果是否是同樣呢?瀏覽器

#logo { float:left; margin-top:18px;}
#search { float:right; margin-top:30px;}框架

這兩項的位置已經差很少了。預覽你會發現,搜索框和按鈕跟效果圖中的不同,這是由於咱們還沒對它設置樣式,接下來把文本框增長一個class爲inp_srh樣式,按鈕增長btn_srh的樣式,而後定義這兩個樣式的屬性。ide

#search { float:right; height:24px; margin-top:30px; color:#444;}
.inp_srh { width:140px; height:17px; padding-left:20px; background:url(../images/srh_bg.gif) 0 0 no-repeat; border:1px solid #cbcbcb;}
.btn_srh { width:58px; height:23px; background:url(../images/btn_srh.gif) 0 0 no-repeat; border:none; cursor:pointer; text-indent:-999em;}
#search * { vertical-align:middle;}佈局

咱們給search增長了高度和文字顏色,這點不用多解釋,但高度爲何是24px,是爲了照顧 IE6,你們去掉測試下就知道了;post

inp_srh的寬度和高度並非實際效果圖中的寬高,是由於默認狀況下文本框帶有內邊距形成的。另外就是padding的值也會算到總寬度上的;學習

btn_srh就是應用背景圖像來實現的,說明一點這裏的border的值爲none指的是無邊框,cursor定義鼠標樣式爲手形,以前許多朋友用hand,但這個通不過w3c認證。text-indent:-999em這個屬性許多朋友可能不理解是幹什麼用的了,它的做用至關於word中的首行縮進,這裏設置成-999,意思是向左側縮進-999em,這樣是否是就看不到文字啦,因此它的做用是將按鈕上的文字隱藏,固然也能夠在html代碼中插入空格代替文字,但這樣作有點不太好,在不支持css的設備上查看時,用戶不知道這個按鈕是幹什麼的了。因此建議採用這種形式;

有必要解釋下最後一行,它的特殊之處在樣式名和大括號之間加了一個*號,這裏兼容所用的,屬於css hack部份內容,是定義這些元素都垂直居中對齊。css hack自己就是無心思的東西,因此不作過多解釋,知道當須要垂直居中對齊時就採用這種寫法就好了,可是必定不要濫用,這個屬性也是有缺陷的,當有英文和中文同時出現時,英文會靠上顯示的。有關css hack更多的內容,請參考http://www.aa25.cn/special/css_hack/index.shtml

這些設置完後,把最初搭建框架時設置的header的背景色和底部外邊距給去掉吧。

#header { height:71px;}

至此,頭部的樣式就完成了,下邊該製做導航了。分析一下,導航分爲一級導航和二級導航,因此我須要在nav下再插入nav_main和nav_son兩個塊元素。

<div id="nav">
<div id="nav_l"></div>
<div id="nav_r"></div>
<div class="nav_main">
<ul>
<li><a href="#"><span>首頁</span></a></li>
<li><a href="#" id="nav_current"><span>企業新聞</span></a></li>
<li><a href="#"><span>企業簡介</span></a></li>
<li><a href="#"><span>產品展廳</span></a></li>
<li><a href="#"><span>企業歷史</span></a></li>
<li><a href="#"><span>招商加盟</span></a></li>
<li><a href="#"><span>網上下單</span></a></li>
<li><a href="#"><span>聯繫咱們</span></a></li>
</ul>
</div>
<div class="nav_son">
<ul>
<li><a href="#">企業動態</a></li>
<li><a href="#">領導活動</a></li>
<li><a href="#">產品資訊</a></li>
<li><a href="#">通知公告</a></li>
</ul>
</div>
</div>

先設置nav的高度及背景圖片樣式。

#nav { height:66px; background:url(../images/nav_bg.gif) 0 0 repeat-x; margin-bottom:8px;}

完了以後該一級菜單和二級菜單的樣式了

.nav_main { height:36px; overflow:hidden;}
.nav_main ul li { float:left; font-size:14px; font-weight:bold; margin:5px 5px 0 5px;}
.nav_main ul li a { float:left; display:block; height:26px; line-height:26px; color:#fff; padding-left:20px;}
.nav_main ul li a span { display:block; padding-right:20px;}
.nav_main ul li a:hover { background:url(../images/nav_bg.gif) 0 -163px no-repeat;}
.nav_main ul li a:hover span { background:url(../images/nav_bg.gif) right -163px no-repeat;}
.nav_main ul li a#nav_current { height:31px; line-height:31px; background:url(../images/nav_bg.gif) 0 -132px no-repeat; color:#646464;}
.nav_main ul li a#nav_current span { height:31px; background:url(../images/nav_bg.gif) right -132px no-repeat;}
.nav_son { height:30px;}
.nav_son ul li { float:left; margin-top:4px;}
.nav_son ul li a { display:block; width:78px; height:22px; line-height:22px; text-align:center; color:#6e6e6e;}
.nav_son ul li a:hover { background:url(../images/nav_bg.gif) 0 -198px no-repeat;}

這些樣式的做用就很少講了,之前的課程當中已詳細講解過了,只不過本例使用了雙導航菜單而已。如今在瀏覽器下預覽一下吧,看看效果怎麼樣,是否是和效果圖差很少了,但還有最後一步就是兩端的圓角沒實現,實現圓角的方法也不復雜,只需再增長兩行代碼和兩個樣式便可。在nav下nav_main以前增長以下兩行代碼:

<div id="nav_l"></div>
<div id="nav_r"></div>

而後用樣式表定義一個左側的圓角,一個右側的圓角。css樣式以下:

#nav_l { float:left; height:66px; width:5px; overflow:hidden; background:url(../images/nav_bg.gif) 0 -66px no-repeat; margin-right:10px;}
#nav_r { float:right; height:66px; width:5px; overflow:hidden; background:url(../images/nav_bg.gif) -5px -66px no-repeat;}

預覽一下吧,看看頭部和導航是否是和效果圖中的同樣呢

 


   提示:能夠先修改部分代碼後再運行

6、佈局頁面——側邊欄

主體部分涉及side和main兩部分,的內容比較多,但都不難,本節教程沒有增長什麼新的知識點,學起來並不吃力。主體部分先從側邊欄提及,講解如何切圖時已經說過,側邊欄能夠共用一個樣式,下面就先作一個通用的,插入以下html代碼

<div class="side_box">
<h2><strong>產品</strong>導購</h2>
<div class="side_con">此處顯示 class "side_con" 的內容</div>
</div>

這裏的標題採用h2標籤,不必再用個div,還有「產品導購」中「產品」二字是紅色字體,這裏用strong標籤,這樣能夠省去不少不必的定義,因此在頁面佈局當中必定要合理利用每個標籤。講到這裏,有必要說一下第一節教程中講的爲何不能叫div+css而應該叫xhtml+css了,由於div只是xhtml中的一個標籤,叫div+css會讓許多朋友誤認爲遇到塊級元素就得用div,形成了div的濫用,而合理利用每一個標籤,纔是web標準設計的一個準則。回過頭來定義側邊欄的樣式以下:

#side { float:right; width:228px;}
.side_box { margin-bottom:8px;}
.side_box h2 { height:25px; padding:6px 10px 0 10px; background:url(../images/side_bg.gif) 0 0 no-repeat; font-size:14px; color:#444;}
.side_box h2 strong { color:#f30;}
.side_con { padding:10px; background:url(../images/side_bg.gif) 0 bottom no-repeat;}

預覽一下效果吧,是否是總體效果出來了,下邊就須要定義裏邊各個部分了。

先看下產品導購部分,內容分爲三部分,能夠用ul、li列表的形式實現,前邊的圖標用背景圖片來實現,能夠在li上設置背景圖片,但這樣麻煩一點,每一個都須要設置,並且還得定位,有個更簡便的方法是定義ul的背景圖片,由於在切圖標時,每一個圖標之間的間距是按照效果圖的間距來切的。

<div class="side_box">
<h2><strong>產品</strong>導購</h2>
<div class="side_con product">
<ul>
<li><strong>語音業務:</strong><a href="#">普通電話</a> | <a href="#">語音數字中繼</a></li>
<li><strong>語音業務:</strong><a href="#">普通電話</a> | <a href="#">語音數字中繼</a></li>
<li class="product3"><strong>語音業務:</strong><a href="#">普通電話</a> | <a href="#">語音數字中繼</a></li>
</ul>
</div>
</div>

細心的用戶已發現,這裏的class後跟了兩個樣式名稱,說明一個元素是能夠定義多個樣式的,中間用空格分開。也能夠把product樣式定義在ul上。

說到能夠定義多個樣式,強調一點:許多新手朋友經常大量使用,如一個塊元素須要設置邊框,綠色文字和灰色背景因此就在css裏定義:

.border { border:1px solid #f60;}
.color { color:#080;}
.bg { background:#ccc;}

而後在塊元素上增長:

<div class="border color bg">此處顯示新 Div 標籤的內容</div>

其實這是一個很是很差的寫法,這樣表面看似達到了代碼重用性,但實際當中,當須要把其中一個元素的的邊框改成2px,怎麼改?若是把.border的邊框改了,那麼全部應用這同樣式的元素都改了。若是再在代碼中增長一個樣式,那麼又得去改html代碼,和代碼和結構分離的理念相違背了。一個好的代碼佈局,無論之後怎麼改風格,只用改樣式表,而不用去改html代碼,這才真正作到二者分離了。

扯遠了,不過這點很重要,新手很容易犯這個毛病。回到剛纔的問題上,給第三個li定義了一個product3樣式,而後在樣式表中定義它的底部邊框爲無,由於前邊定義li的底邊框爲1px的虛線,而最後一個不須要,因此單獨定義個樣式把它取消掉,這裏的product根據須要本身定義的名稱,通常用能表達這塊內容意思的簡潔英文來表示,或者用拼音。有關樣式命名上請參考:http://www.aa25.cn/web_w3c/248.shtml。「產品導購」的樣式定義以下:

.product { padding:0px 10px;}
.product ul { background:url(../images/icon2.gif) 5px 12px no-repeat;}
.product ul li { height:58px; padding:14px 0 0 64px; border-bottom:1px dashed #dcdcdc; color:#777;}
.product ul li strong { display:block; height:24px; color:#333;}
.product ul li a { color:#777;}
.product ul li a:hover { text-decoration:underline;}
.product ul li.product3 { border-bottom:none;}

「產品導購」完成後,下邊該「使用問答」了。「使用問答」部分都是一問一答的形式,問答各採用不一樣的圖標,並且問的文字加粗了。因此這部分採用dl、dt、dd的形式來完成。

<div class="side_con ask">
<dl>
<dt><a href="#">最新出的這個產品如何使用?</a></dt>
<dd>該產品採用全新的技術,較上一產品有質的飛躍,功能上加強了許多,使用方法更加簡便...</dd>
</dl>
<dl>
<dt><a href="#">最新出的這個產品如何使用?</a></dt>
<dd>該產品採用全新的技術,較上一...</dd>
</dl>
<dl>
<dt><a href="#">最新出的這個產品如何使用?</a></dt>
<dd>該產品採用全新的技術,較上一產品有質的飛躍,功能上加強了...</dd>
</dl>
<dl>
<dt><a href="#">最新出的這個產品如何使用?</a></dt>
<dd>該產品採用全新的技術,較上一產品有質的飛躍,功能上加強...</dd>
</dl>
<dl>
<dt><a href="#">最新出的這個產品如何使用?</a></dt>
<dd>該產品採用全新的技術,較上一產品有質的飛躍,功能上加強了許多,使用方法更加簡便...</dd>
</dl>
</div>

 

.ask dl { padding:10px 0; border-bottom:1px dashed #dcdcdc;}
.ask dl dt { height:22px; overflow:hidden; font-weight:bold; background:url(../images/icon.gif) 0 -149px no-repeat; padding-left:20px;}
.ask dl dt a { color:#666;}
.ask dl dd { color:#666; background:url(../images/icon.gif) 0 -198px no-repeat; padding-left:20px;}

「使用問答」完成後,側邊欄就剩下「聯繫咱們」了,這個更簡單,直接插入圖片就好了,而後調整一下位置就能夠了。

<div class="side_box">
<h2><strong>聯繫</strong>咱們</h2>
<div class="side_con contact"><a href="#"><img src="images/tel.gif" width="222" height="112" /></a></div>
</div>

 

.contact { padding:2px;}

7、佈局頁面——主體部分

主體部分能夠分三大部分,頂部是幻燈和熱點新聞,中間是圖片列表,下邊是左右兩塊,先來佈局主體部分的頂部。頂部實際上仍是個左右兩列布局,沒什麼複雜之處,就再也不貼代碼了,本節結尾會提供實例的源代碼。講解一點:熱點新聞列表中的日期,是用一個span標籤寫在了內容的前邊,而後把span向右浮動就實現了,「我的登陸」和「商戶登陸」的實現方法也是如此。

以前許多朋友問,像標準之路主頁的幻燈是怎麼實現的?其實實很簡單,只要你動動手,就知道怎麼作的了。但許多同窗遇到個問題不去考慮靠本身能力可否解決,而是上來就問,這是一個很很差的學習態度?先找找辦法,若是實在解決不了,再來問也不遲。方法是查看標準之路主頁源代碼,找到幻燈部分,你會發現有以下一段js代碼,並且代碼中有幾個設置參數的地方,那麼要想在本身網站實現這樣的功能,直接把這部分代碼插入到本身網站相應位置,修改參數中的大小爲本身的大小、圖片地址爲本身的圖片地址,還有就是下載swf文件,並改成相應正確的地址。若是你有html基礎的話,這些一點都不難,仍是那句話,必定要多動手,多動腦。

把如上一段代碼拷貝到本例的幻燈圖片位置,下載實現幻燈的swf文件到本地images文件夾下,地址爲:http://www.aa25.cn/v3/images/indexpic.swf,接下來修改/v3/images/indexpic.swf爲images/indexpic.swf;修改swf_width和swf_height的值爲269和210;files的值爲圖片路徑,links爲圖片的連接地址,texts爲標題名稱,中間也是用|分隔,這樣就實現了幻燈圖片展現了。

幻燈實現後,接下來該中間部分圖片列表了,和第六天學習的橫向圖文列表是同樣的。惟一區別就是多了一個標題。在index_top下插入以下代碼:

<div id="index_pic">
<h2><span></span></h2>
<ul>
<li><a href="#"><img src="images/pic4.gif" width="107" height="87" />產品名稱</a></li>
<li><a href="#"><img src="images/pic4.gif" width="107" height="87" />產品名稱</a></li>
<li><a href="#"><img src="images/pic4.gif" width="107" height="87" />產品名稱</a></li>
<li><a href="#"><img src="images/pic4.gif" width="107" height="87" />產品名稱</a></li>
<li><a href="#"><img src="images/pic4.gif" width="107" height="87" />產品名稱</a></li>
<li><a href="#"><img src="images/pic4.gif" width="107" height="87" />產品名稱</a></li>
<li><a href="#"><img src="images/pic4.gif" width="107" height="87" />產品名稱</a></li>
<li><a href="#"><img src="images/pic4.gif" width="107" height="87" />產品名稱</a></li>
</ul>
</div>

 

#index_pic { border:1px solid #dbdbdb; margin-bottom:8px;}
#index_pic h2 { height:28px; background:url(../images/box_tit_bg.gif) 0 0; border-bottom:1px solid #dbdbdb;}
#index_pic h2 span { display:block; height:25px; background:url(../images/rmcp.gif) 12px 6px no-repeat;}
#index_pic ul { padding:0 0 15px 0; overflow:auto; zoom:1;}
#index_pic ul li { width:107px; float:left; margin:15px 0 0px 21px; display:inline; text-align:center;}
#index_pic ul li a { display:block;}
#index_pic ul li img { margin-bottom:3px;}

此次沒作鼠標劃過期邊框效果,相對以前的簡單一點,須要瞭解鼠標劃過改變邊框效果的請學習http://www.aa25.cn/div_css/907.shtml。本例中「熱門產品」的圖標採用了背景圖片,也能夠採用一個圖片直接插入,但從用戶體驗的角度來說,這些圖片仍是以背景圖片插入爲好,由於背景圖片在整個頁面加載過程當中後來加載的。

圖片列表完了以後,主體部分就剩下「企業歷史」和「招商加盟」兩塊了。這兩塊也是應用左右浮動的方式實現。這兩塊的代碼就不貼出來了,一下子看實例。強調一點是這裏的more:hover的寫法,由於more直接加在a上,因此鼠標進過的樣式就不用再寫a了,或者寫成a.more:hover。

8、底部和細節調整

底部比較簡單,灰色背景部分能夠用h類標籤完成,也能夠用dl、dt、dd來完成,再或者其它標籤也能夠,其它的就再也不贅述。

底部完成後,最後的步驟是要作一些細節調整,好比該對齊的地方是否對齊,圖片的alt屬性是否都加上了,在各類瀏覽器下是否顯示同樣等等。至此整個前臺頁面算製做完成了下面的任務就是該用程序來讀取數據庫裏的內容了,來完成整個站點的製做。

瀏覽器兼容問題一直是讓新手朋友頭疼的地方,其實只要掌握幾個經常使用瀏覽器的特性後,不須要過多的css hack就能夠解決問題的。本例中使用的css hack大體有:

zoom=1:用來解決自適應高度時IE6的兼容問題(這個屬性通不過w3c認證);

display:inline:解決IE6雙倍邊距bug問題;

*:在樣式名和屬性中間加*,這個經常使用在須要垂直居中時使用;

IE6 3像素bug:在佈局時採用左右都浮動的辦法避免了這個問題;

另外還有一些作法也是爲了解決兼容問題而寫的,好比固定高度,就是由於各瀏覽器之間解釋差別,爲了使顯示效果儘量同樣而採用的折中辦法。總之遵循一點,css hack能少用盡可能少用,這樣便於之後維護。

完成這樣一個佈局方法有多種,本例中所講解的方法,只是本人的觀點,不必定是最好的方法,但願你們經過本本例的學習能作到觸類旁通,掌握更多的方法。

本側是左寬右窄型的佈局,若是想把兩個調換個位置,太簡單不過了,只需把#main和#side的向左向右浮動調換一下就實現,這是表格佈局所不及的。因此無論#main和#side在html代碼中是誰先誰後,而讓它們顯示在哪裏徹底是css來完成的。這裏建議#main的代碼寫在#side前邊,由於這要在頁面加載的過程當中會先加載main部分,用戶首先看到的是主要內容,搜索引擎收錄時也會先找到main部分的內容。


   提示:能夠先修改部分代碼後再運行

點擊此處下載實例源代碼及psd源文件

9、相對路徑和相對於根目錄路徑

上邊的例子學完後,你會發如今html中插入的圖片路徑是images/pic4.gif,而在css中插入的圖片路徑是這樣的../images/nav_bg.gif,後者比前者多出了../,這是什麼意思呢?

這就是相對路徑和絕對路徑,../表示返回上一級,由於css文件在css文件夾裏,圖片在images文件夾下,那麼layout.css就須要返回上一級找到images文件夾才能找到相應的圖片。直接文件夾名或是./開頭表示和當前平級,由於index.html和images文件夾平級。無論是帶../仍是不帶,這種寫法都叫相對路徑;另外一種叫相對於根目錄路徑,它的寫法必須以/開始,意思是從根目錄開始一級一級向下查找,無論在哪裏,要使用pic4.gif這個圖片,路徑都必須是/images/pic4.gif;還有一種寫法叫絕對路徑,是以http://加域名開始的,這個很少多說了。

使用相對路徑時,當根目錄放到一個二級目錄下時,文件仍然能夠正常訪問,而使用相對於根目錄路徑時,其中一個頁面放到其它位置時,照樣能關聯麼相關的圖片和其它文件,好比:本例若是用相對於根目錄路徑的話,把index.html放到一個文件夾下後,仍是能夠正常訪問的。總之兩種方法各有優劣,根據你的須要採用一種合適的方法。相對路徑和相對於根目錄路徑是能夠相互更改的,在站點管理——編輯——高級設置的本地信息裏有連接相對於,以下圖,默認爲文檔(就是所說的相對路徑),也能夠改成站點根目錄,相對路徑通常爲直接目錄名,須要返回上級時用../,向上返回兩級時用../../;相對於根目錄路徑始終以/開頭,無論該文件如今在哪一級,它都是以根目錄開始向下找。

相關文章
相關標籤/搜索