1. 程式人生 > >十天學會web標準(DIV+CSS)系列(十)div+css網頁標準佈局例項教程

十天學會web標準(DIV+CSS)系列(十)div+css網頁標準佈局例項教程

一、建立站點

前面的課程都是零碎講解一些相關知識,那麼要做一個網站,首先需要建立一個站點。那麼什麼是站點,為什麼要建立一個站點呢?因為網站不同於其它檔案,比如一個圖片,放到哪個盤哪個目錄下都可以訪問。而網站是許多檔案相互關聯的,所以要專門一個目錄把它們分門別類存放起來。如果搞過視訊編輯的朋友都知道,需要先建立一個工程,把原始的視訊檔案、圖片素材分類放好,也是這個道理。下面以在D盤建立一個jiaocheng資料夾為例,在dreamweaver(簡稱DW)裡建立一個站點指向這個資料夾,然後在目錄下新建images資料夾、css資料夾等把各類檔案分別存放起來。

儲存後,一個站點就建立起來了,我用的是DW cs5版本,不同版本介面有所不同。如果要連線FTP,需要設定伺服器選項(後面會涉及到)。站點建立好後,我們先建立一個images和css資料夾,分別用來存放圖片和css檔案。直接在windows的資源管理器下建立或者在dw裡建立都是可以的;在dw建立需要在檔案面板列表的根目錄上點選右鍵,選擇新建資料夾後更改名字即可。

二、結構分析

建立完站點後,就需要對頁面結構進行分析了,根據效果圖,分析頁面分為幾大塊,該怎麼佈局更合理。下面這個圖是我做的一個企業網站的模板,雖然不怎麼好看,但目的是把前邊學的東西全都給串起來,讓大家掌握各種情況的處理方法,先看下效果圖及在網頁中顯示的樣式:

從圖中可以看出整個頁面分為頭部區域、導航區域、主體部分和底部,其中主體部分又分為左右兩列,整個頁面居中顯示,看明白了這點,下邊的框架就好搭建了。整體框架結果圖如下:

三、搭建框架

首先在dw裡新建一個html檔案:

點選建立後會自動生成如下程式碼的一個html檔案,儲存為index.html並把無標題文件改為:主頁。強調一點,許多同學喜歡把第一行程式碼刪除掉,認為沒用,其實這句話的作用大著呢,它標明以何種形式解析文件,如果刪除可能會引起樣式表失效或其它意想不到的問題。接下來需要插入以上各個塊的標籤了,以插入header的標籤為例,其它的插入方法類同。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>主頁</title>
</head>

<body>
</body>
</html>

按照上圖的方法依次插入標籤,或者直接在程式碼檢視中手工輸入,程式碼如下:(注意main和side在maincontent裡包含著呢)

<div id="header">此處顯示 id "header" 的內容</div>
<div id="nav">此處顯示 id "nav" 的內容</div>
<div id="maincontent">
  <div id="main">此處顯示 id "main" 的內容</div>
  <div id="side">此處顯示 id "side" 的內容</div>
</div>
<div id="footer">此處顯示 id "footer" 的內容</div>

從上邊的效果圖分析得知,整個網頁是居中瀏覽器顯示的,按照這樣的寫法需要把以上的header、nav、maincontent、footer都設定寬度並居中,這樣做起來很麻煩,所以再在這些標籤外增加一下父標籤,設定這個父標籤寬度並居中後,是不是所有的標籤都居中了呢。增加後的程式碼如下:

<div id="container">
<div id="header">此處顯示 id "header" 的內容</div>
<div id="nav">此處顯示 id "nav" 的內容</div>
<div id="maincontent">
  <div id="main">此處顯示 id "main" 的內容</div>
  <div id="side">此處顯示 id "side" 的內容</div>
</div>
<div id="footer">此處顯示 id "footer" 的內容</div>
</div>

html框架程式碼寫完後,下邊就需要設定css樣式表了。先測量下效果圖的整體寬度,然後設定container也是這個寬度並居中。說起測量效果圖寬度,方法有多種,可以直接檢視圖片尺寸。如果測量其中某一塊的寬度,可以使用測量軟體,也可以在ps下測量。本人一般在ps下測量,因為效果圖在ps下製作的,所以用ps測量也比較方便。方法是首選項裡把ps的單位改為畫素,然後用選區選中要測量的部分,在資訊面板中就顯示出當前選區的寬高了(如果你實在不知道怎麼改單位,怎麼選區怎麼檢視的,就要補習一下ps啦)。

測量後得知:整體寬度為900px,main部的寬度為664px,side寬度為228px。把這三個基本的寬度測量後,下面就可以寫css程式碼了。由於本例項是按照實際當中應用來做的,所以css樣式表就最好寫在單獨檔案裡了,不要再寫在檔案內部了,這樣可以利用程式碼的重用性,減少很多勞動強度。下面就新建一個css樣式表文件:在DW檔案選單選擇新建,然後在開啟的視窗頁面型別中選擇css,建立後儲存在css資料夾中並命名為layout.css

儲存後先設定全域性的樣式,而後寫每一塊單獨的樣式,全域性樣式如下:

body { margin:0 auto; font-size:12px; font-family:Verdana; line-height:1.5;}
ul,dl,dd,h1,h2,h3,h4,h5,h6,form,p { padding:0; margin:0;}
ul { list-style:none;}
img { border:0px;}
a { color:#05a; text-decoration:none;}
a:hover { color:#f00;}

全域性的樣式定義完後,下面定義以上幾大塊的樣式,先設定下#containerr的樣式如下:

#container { width:900px; margin:0 auto;}

預覽下index.html,發現並沒有改變,這是為什麼呢?因為剛定義的樣式表沒有和html檔案關聯,所以設定的樣式當然不能對它生效了,還記得第一天課時講的幾種樣式並聯方式嗎?下面我操作一遍:在css面板中點選附加樣式表按鈕,然後在彈出的視窗中選擇剛才建立的樣式表文件,確定,ok了,預覽一下,是不是整體已經居中了呢。

如果已經是寬度為900px並居中,說明樣式和檔案關聯好了。這就是為什麼要定義一個站點了,因為許多檔案要關聯在一起才能構成一個完整的網頁,所以要把它們放在一起,才能讓這個頁面找到和它相關的檔案在哪裡。下面設定內部幾大塊的樣式,為了便於觀察,我們把部分塊設定了背景色。程式碼如下:

/*body*/
#container { width:900px; margin:0 auto;}

/*header*/
#header { height:70px; background:#CCFFCC; margin-bottom:8px;}
#nav { height:30px; background:#CCFFCC; margin-bottom:8px;}

 

/*main*/
#maincontent { margin-bottom:8px;}
#main { float:left; width:664px; height:500px; background:#FFFF99;}
#side { float:right; width:228px; height:500px; background:#FFCC99;}

 

/*footer*/
#footer { height:70px; background:#CCFFCC;}

現在預覽一下:在IE6下#maincontent的底部外邊距並沒有生效,而在IE8下,#footer乾脆跑到#maincontent的下邊了,這又是怎麼回事呢?如果前邊幾天你都認真學的話,那麼這個問題已經不是問題了。這就是之前我們講的,如果一個容器內的元素都浮動的話,那麼它的高度將不會去適應內部元素的高度。解決辦法是在#maincontent增加 overflow:auto; zoom:1;,這樣就可以讓它自動適應內部元素的高度了。

現在再預覽一下,是不是都正常了。為了更加保險,建議在header、nav、maincontent、footer之間增加如下一句程式碼並設定css樣式如下,它的作用是清除浮動。

<div class="clearfloat"></div>

.clearfloat {clear:both;height:0;font-size: 1px;line-height: 0px;}

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>主頁</title>
<link href="http://www.aa25.cn/upload/2010-09/16/layout.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="container">
<div id="header">此處顯示 id "header" 的內容</div>
<div class="clearfloat"></div>
<div id="nav">此處顯示 id "nav" 的內容</div>
<div class="clearfloat"></div>
<div id="maincontent">
<div id="main">此處顯示 id "main" 的內容</div>
<div id="side">此處顯示 id "side" 的內容</div>
</div>
<div class="clearfloat"></div>
<div id="footer">此處顯示 id "footer" 的內容</div>
</div>
</body>
</html>

四、切割效果圖

基本框架搭建完畢後,下一步就是要分析每一塊該怎麼切圖了。切圖方法有多種,可以使用ps或fireworks自帶的切片工具,也可以用QQ的截圖或者建立新檔案,把需要的部分複製過來儲存都可以,關鍵看個人喜好了。

用ps的切片工具的話,把需要切割的區域用切片工具切分,如果要設定圖片的名稱,請使用切片選擇工具,然後在切片上雙擊,會彈出如下視窗,填寫名字後確定即可。

切割完後,需要儲存圖片了,選擇檔案——儲存為web和裝置所用格式,在彈出的視窗中點選選中切片,然後在右側可以設定當前切片的圖片格式。這裡有個技巧,一般小型色彩單一的圖片,採用gif格式,照片類大型圖片採用jpg,這樣生成的圖片既能保證質量,圖片體積又小,詳細瞭解可參看:http://www.aa25.cn/div_css/547.shtml

設定完圖片的格式後,就可以儲存了,這裡選擇到images的上一級目錄就行了,ps會自動建立images目錄並把圖片檔案放入,如果已存在,直接放入。在格式處選擇僅限影象,如果選擇html和影象,ps會自動生成一個表格式的網頁,這個頁面不是我們需要的,就不讓它生成了;還有一個需要注意的地方就是選擇所有使用者切片,這樣只把我們手動切割的圖片儲存下來,其它的就不儲存了。儲存後的圖片如下所示,其中hot_bg.gif這張圖片切割時沒有隱藏上邊的文字,一會兒在ps裡再處理一下把文字抹掉。


目前所切的圖片只是一部分,並沒有把整個頁面所需的圖片全都切割下來,比如導航部分所用背景圖片可以放到一張圖片上,下面就用新建檔案,然後用QQ截圖,貼上過去的方法來建立。

分析一下上圖的導航部分:1、兩端的圓角;2、滑鼠劃過狀態和當前欄目狀態寬度應該隨著字數的多少而改變;3、二級導航有滑鼠劃過時的狀態。分析完之後,就需要把需要的圖片整合到一張圖片上了,整合的結果如下圖,這個根據自己的需要進行整合。其實完全可以把其它一些小圖示都整合在一張,但那樣操作起來比較麻煩,所以我們還是歸一下類,把相關的圖示整合到一起。

接下來整合側邊欄的背景圖片,分析發現側邊欄應用同樣的樣式,只不過高度有所不同,而且是四角都是圓角,所以只用一個通用的就可以滿足所有側邊欄塊的需求了。那麼怎麼製作這個通用的背景呢?從下圖我們發現,標題的高度都是一樣的,只不過是下邊的內容高度不同而已,那麼我們把下邊內容的背景製作的足夠長,超過可能出現的最大高度就可以滿足需求了。

整合後的效果如上圖,如果你現在還不明白為什麼要這麼做,那麼一會兒寫完樣式表你就明白了。下面把三個圖示也給切出來,如下圖:

這些完事後,還有聯絡我們的圖片和修飾小圖示了。聯絡我們的圖片如下,這裡的圖片和小圖示要背景透明,這樣才不會遮蓋下面的背景。

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

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

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

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

<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的樣式,然後定義這兩個樣式的屬性。

#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,大家去掉測試下就知道了;

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;}

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

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>主頁</title>
<link href="http://www.aa25.cn/upload/2010-09/21/css/layout1.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="container">
  <div id="header">
    <div id="logo"><img src="http://www.aa25.cn/upload/2010-09/21/images/logo.gif" width="181" height="45" /></div>
    <div id="search">
      <form id="form1" name="form1" method="post" action="">
        搜尋產品
        <input class="inp_srh" type="text" name="textfield" id="textfield" />
        <input class="btn_srh" type="submit" name="button" id="button" value="查詢" />
      </form>
    </div>
  </div>
  <div class="clearfloat"></div>
  <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>
  <div class="clearfloat"></div>
  <div id="maincontent">
    <div id="main">此處顯示  id "main" 的內容</div>
    <div id="side">此處顯示  id "side" 的內容</div>
  </div>
  <div class="clearfloat"></div>
  <div id="footer">此處顯示  id "footer" 的內容</div>
</div>
</body>
</html>

六、佈局頁面——側邊欄

主體部分涉及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;}

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

主體部分可以分三大部分,頂部是幻燈和熱點新聞,中間是圖片列表,下邊是左右兩塊,先來佈局主體部分的頂部。頂部實際上還是個左右兩列布局,沒什麼複雜之處,就不再貼程式碼了,本節結尾會提供例項的原始碼。講解一點:熱點新聞列表中的日期,是用一個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。

八、底部和細節調整

底部比較簡單,灰色背景部分可以用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部分的內容。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>主頁</title>
<link href="http://www.aa25.cn/upload/2010-09/21/css/layout.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="container">
  <div id="header">
    <div id="logo"><img src="http://www.aa25.cn/upload/2010-09/21/images/logo.gif" alt="企業名稱" width="181" height="45" /></div>
    <div id="search">
      <form id="form1" name="form1" method="post" action="">
        搜尋產品
        <input class="inp_srh" type="text" name="textfield" id="textfield" />
        <input class="btn_srh" type="submit" name="button" id="button" value="查詢" />
      </form>
    </div>
  </div>
  <div class="clearfloat"></div>
  <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>
  <div class="clearfloat"></div>
  <div id="maincontent">
    <div id="main">
      <div id="index_top">
        <div id="pic">
     <script language='javascript' type="text/javascript">
            linkarr = new Array();
            picarr = new Array();
            textarr = new Array();
            var swf_width=269;
            var swf_height=210;
            var files = "http://www.aa25.cn/upload/2010-09/21/images/pic.jpg|http://www.aa25.cn/upload/2010-09/21/images/pic1.jpg|http://www.aa25.cn/upload/2010-09/21/images/pic2.jpg|http://www.aa25.cn/upload/2010-09/21/images/pic3.jpg";
            var links = "#|#|#|#";
            var texts = "";
            for(i=1;i<picarr.length;i++){
              if(files=="") files = picarr[i];
              else files += "|"+picarr[i];
            }
            for(i=1;i<linkarr.length;i++){
              if(links=="") links = linkarr[i];
              else links += "|"+linkarr[i];
            }
            for(i=1;i<textarr.length;i++){
              if(texts=="") texts = textarr[i];
              else texts += "|"+textarr[i];
            }
            document.write('<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" width="'+ swf_width +'" height="'+ swf_height +'">');
            document.write('<param name="movie" value="http://www.aa25.cn/upload/2010-09/21/images/indexpic.swf"><param name="quality" value="high">');
            document.write('<param name="menu" value="false"><param name=wmode value="opaque">');
            document.write('<param name="FlashVars" value="bcastr_file='+files+'&bcastr_link='+links+'&bcastr_title='+texts+'">');
            document.write('<embed src="http://www.aa25.cn/upload/2010-09/21/images/indexpic.swf" wmode="opaque" FlashVars="bcastr_file='+files+'&bcastr_link='+links+'&bcastr_title='+texts+'& menu="false" quality="high" width="'+ swf_width +'" height="'+ swf_height +'" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />'); document.write('</object>');
          </script>
          <div id="login"><span><a href="#"><img src="http://www.aa25.cn/upload/2010-09/21/images/btn_login1.gif" alt="個人使用者登入" width="131" height="39" /></a></span><a href="#"><img src="http://www.aa25.cn/upload/2010-09/21/images/btn_login.gif" alt="經銷商登入" width="131" height="39" /></a></div>
        </div>
        <div id="hot_news">
          <div id="news_top">
            <h1>蘋果iphone 4手機將於9月25日在中國上市</h1>
            <p>日前中國聯通正式宣佈將於9月25日9時在中國大陸市場全面推出iPhone4,併為iPhone4使用者量身定製了合約計劃。</p>
          </div>
          <div id="news_list">
            <ul>
              <li><span>9-22</span><a href="#">純CSS實現三列DIV等高佈局</a></li>
              <li><span>9-22</span><a href="#">HTML元素的ID和Name屬性的區別</a></li>
              <li><span>9-22</span><a href="#">完美相容ie6,ie7,ie8以及firefox的css透明濾鏡</a></li>
              <li><span>9-22</span><a href="#">DIV+CSS實現放大鏡效果的分頁樣式</a></li>
              <li><span>9-22</span><a href="#">javascript為FF設定首頁</a></li>
              <li><span>9-22</span><a href="#">複製到系統剪貼簿之IE,ff相容版</a></li>
            </ul>
          </div>
        </div>
      </div>
      <div id="index_pic">
        <h2><span></span></h2>
        <ul>
         <li><a href="#"><img src="http://www.aa25.cn/upload/2010-09/21/images/pic4.gif" alt="產品名稱" width="107" height="87" />產品名稱</a></li>
          <li><a href="#"><img src="http://www.aa25.cn/upload/2010-09/21/images/pic4.gif" alt="產品名