OMG,到底在尋找什么..................
          (構造一個完美的J2EE系統所需要的完整知識體系)
          posts - 198,  comments - 37,  trackbacks - 0
          原貼地址:http://www.tblog.com.cn/article.asp?id=283

          一、頁面布局與規劃

            好久沒有認真寫點東西了,想起最近這些時間經常有朋友問到我有關于DIV+CSS布局的問題,其實歸根結底還是由于沒有入門造成的。那么接下來的這篇文章就帶領大家入門吧...

            在網頁制作中,有許多的術語,例如:CSS、HTML、DHTML、XHTML等等。在下面的文章中我們將會用到一些有關于HTML的基本知識,而在你學習這篇入門教程之前,請確定你已經具有了一定的HTML基礎。下面我們就開始一步一步使用DIV+CSS進行網頁布局設計吧。

            所有的設計第一步就是構思,構思好了,一般來說還需要用PhotoShop或FireWorks(以下簡稱PS或FW)等圖片處理軟件將需要制作的界面布局簡單的構畫出來,以下是我構思好的界面布局圖。



            下面,我們需要根據構思圖來規劃一下頁面的布局,仔細分析一下該圖,我們不難發現,圖片大致分為以下幾個部分:
            1、頂部部分,其中又包括了LOGO、MENU和一幅Banner圖片;
            2、內容部分又可分為側邊欄、主體內容;
            3、底部,包括一些版權信息。
            有了以上的分析,我們就可以很容易的布局了,我們設計層如下圖:


            根據上圖,我再畫了一個實際的頁面布局圖,說明一下層的嵌套關系,這樣理解起來就會更簡單了。


            DIV結構如下:
            │body {} /*這是一個HTML元素,具體我就不說明了*/
            └#Container {} /*頁面層容器*/
               ├#Header {} /*頁面頭部*/
               ├#PageBody {} /*頁面主體*/
               │ ├#Sidebar {} /*側邊欄*/
               │ └#MainBody {} /*主體內容*/
               └#Footer {} /*頁面底部*/
            至此,頁面布局與規劃已經完成,接下來我們要做的就是開始書寫HTML代碼和CSS。


          二、寫入整體層結構與CSS

            接下來我們在桌面新建一個文件夾,命名為“DIV+CSS布局練習”,在文件夾下新建兩個空的記事本文檔,輸入以下內容:
          程序代碼 程序代碼
          <!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="css.css" rel="stylesheet" type="text/css" />
          </head>

          <body>
          </body>
          </html>

            這是XHTML的基本結構,將其命名為index.htm,另一個記事本文檔則命名為css.css。

            下面,我們在<body></body>標簽對中寫入DIV的基本結構,代碼如下:
          程序代碼 程序代碼

          <div id="container"><!--頁面層容器-->
            <div id="Header"><!--頁面頭部-->
            </div>
            <div id="PageBody"><!--頁面主體-->
              <div id="Sidebar"><!--側邊欄-->
              </div>
              <div id="MainBody"><!--主體內容-->
              </div>
            </div>
            <div id="Footer"><!--頁面底部-->
            </div>
          </div>

            為了使以后閱讀代碼更簡易,我們應該添加相關注釋,接下來打開css.css文件,寫入CSS信息,代碼如下:

          程序代碼 程序代碼

          /*基本信息*/
          body {font:12px Tahoma;margin:0px;text-align:center;background:#FFF;}

          /*頁面層容器*/
          #container {width:100%}

          /*頁面頭部*/
          #Header {width:800px;margin:0 auto;height:100px;background:#FFCC99}

          /*頁面主體*/
          #PageBody {width:800px;margin:0 auto;height:400px;background:#CCFF00}

          /*頁面底部*/
          #Footer {width:800px;margin:0 auto;height:50px;background:#00FFFF}

            把以上文件保存,用瀏覽器打開,這時我們已經可以看到基礎結構了,這個就是頁面的框架了。
            關于以上CSS的說明(詳細請參考CSS2.0中文手冊,網上有下載):

            1、請養成良好的注釋習慣,這是非常重要的;

            2、body是一個HTML元素,頁面中所有的內容都應該寫在這標簽對之內,我就不多說了;

            3、講解一些常用的CSS代碼的含義:

              font:12px Tahoma;
              這里使用了縮寫,完整的代碼應該是:font-size:12px;font-family:Tahoma;說明字體為12像素大小,字體為Tahoma格式;

              margin:0px;
              也使用了縮寫,完整的應該是:

              margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px
              或
              margin:0px 0px 0px 0px

              順序是 上 / 右 / 下 / 左,你也可以書寫為margin:0(縮寫);
              以上樣式說明body部分對上右下左邊距為0像素,如果使用auto則是自動調整邊距,
              另外還有以下幾種寫法:
              margin:0px auto;
              說明上下邊距為0px,左右為自動調整;
              我們以后將使用到的padding屬性和margin有許多相似之處,他們的參數是一樣的,
              只不過各自表示的含義不相同,margin是外部距離,而padding則是內部距離。

              text-align:center
              文字對齊方式,可以設置為左、右、中,這里我將它設置為居中對齊。

              background:#FFF
              設置背景色為白色,這里顏色使用了縮寫,完整的應該是background:#FFFFFF。
              background可以用來給指定的層填充背景色、背景圖片,以后我們將用到如下格式:
              background:#ccc url('bg.gif') top left no-repeat;
              表示:使用#CCC(灰度色)填充整個層,使用bg.gif做為背景圖片,
              top left
              表示圖片位于當前層的左上端,no-repeat表示僅顯示圖片大小而不填充滿整個層。
              top/right/left/bottom/center
              用于定位背景圖片,分別表示 上 / 右 / 下 / 左 / 中;還可以使用
              background:url('bg.gif') 20px 100px;
              表示X座標為20像素,Y座標為100像素的精確定位;
              repeat/no-repeat/repeat-x/repeat-y
              分別表示 填充滿整個層 / 不填充 / 沿X軸填充 / 沿Y軸填充。

              height / width / color
              分別表示高度(px)、寬度(px)、字體顏色(HTML色系表)。

            4、如何使頁面居中?
              大家將代碼保存后可以看到,整個頁面是居中顯示的,那么究竟是什么原因使得頁面居中顯示呢?
              是因為我們在#container中使用了以下屬性:
              margin:0 auto;
              按照前面的說明,可以知道,表示上下邊距為0,左右為自動,因此該層就會自動居中了。
              如果要讓頁面居左,則取消掉auto值就可以了,因為默認就是居左顯示的。
              通過margin:auto我們就可以輕易地使層自動居中了。

            5、這里我只介紹這些常用的CSS屬性了,其他的請參看CSS2.0中文手冊。

          三、頁面頂部制作(1)

            當我們寫好了頁面大致的DIV結構后,我們就可以開始細致地對每一個部分進行制作了。

            在上一章中我們寫入了一些樣式,那些樣式是為了預覽結構而寫入的,我們把css.css中的樣式全部清除掉,重新寫入以下樣式代碼:
          程序代碼 程序代碼
          /*基本信息*/
          body {font:12px Tahoma;margin:0px;text-align:center;background:#FFF;}
          a:link,a:visited {font-size:12px;text-decoration:none;}
          a:hover{}

          /*頁面層容器*/
          #container {width:800px;margin:10px auto}

            樣式說明:

            a:link,a:visited {font-size:12px;text-decoration:none;}
            a:hover {}


            這兩項分別是控制頁面中超鏈接的樣式,具體我就不說明了,請大家參閱手冊。

            #container {width:800px;margin:10px auto}

            指定整個頁面的顯示區域。
            width:800px指定寬度為800像素,這里根據實際所需設定。
            margin:10px auto,則是頁面上、下邊距為10個像素,并且居中顯示。
            上一章中我們講過,對層的margin屬性的左右邊距設置為auto可以讓層居中顯示

            接下來,我們開始制作TOP部分,TOP部分包括了LOGO菜單Banner,首先我們要做的就是對設計好的圖片進行切片,以下是在FW下完成的切片:

            我將TOP部分切片為兩部分,第一部分包括了LOGO和一條橫線。由于LOGO圖片并沒有太多的顏色,這里我于是將這一部分保存為GIF格式,調色板選擇為精確,選擇Alpha透明度,色版為白色(此處顏色應與背景色相同),導出為logo.gif,圖像寬度為800px

            到這里,有的朋友就說了,* 為什么要使用GIF格式?使用JPEG不是更好嗎?
            因為GIF格式的圖片文件更小,這樣能使頁面載入的速度更快,當然使用此格式之前必須確定圖片并沒有使用太多的顏色,當我們使用了GIF格式時,從肉眼上并不能看出圖片有什么太大的變化,因此這是可行的。

            * 接下來的Banner部分還能使用GIF格式嗎?
            答案是不能,因為Banner部分是一個細致的圖片,如果使用GIF格式顏色會有太大的損失,所以必須使用JPEG格式,將文件導出為banner.jpg

            * 合理的切片是非常之重要的,因為切片的方法正確與否決定了CSS書寫的簡易程度以及頁面載入速度。

            切好片后,我們還需要對TOP部分進行分析并將DIV結構寫入Header中代碼如下:
          程序代碼 程序代碼
            <div id="menu">
             <ul>
              <li><a href="#">首頁</a></li>
              <li class="menuDiv"></li>
              <li><a href="#">博客</a></li>
              <li class="menuDiv"></li>
              <li><a href="#">設計</a></li>
              <li class="menuDiv"></li>
              <li><a href="#">相冊</a></li>
              <li class="menuDiv"></li>
              <li><a href="#">論壇</a></li>
              <li class="menuDiv"></li>
              <li><a href="#">關于</a></li>
             </ul>
            </div>
            <div id="banner">
            </div>

            為什么要這么寫呢,因為對菜單使用列表<li>形式,可以在以后方便對菜單定制樣式。

            而為什么要添加以下代碼呢?
            <li class="menuDiv"></li>
            插入這一段代碼是可以方便地對菜單選項之間插入一些分隔樣式,例如預覽圖中的豎線分隔

            然后我們在css.css中再寫入以下樣式:
          程序代碼 程序代碼
          /*頁面頭部*/
          #header {background:url(logo.gif) no-repeat}

            樣式說明:
            #header {background:url(logo.gif) no-repeat}
            給頁面頭部分加入一個背景圖片LOGO,并且不作填充。

            這里,我們沒有指定header層的高度,為什么不指定呢?

            因為header層中還有菜單和banner項,所以層的高度暫時是未知的,而層的屬性又可以讓層根據內容自動設定調整,因此我們并不需要指定高度。


          三、頁面頂部制作(2)----使用列表<li>制作菜單

            開始此節的學習前,請確認你已經參照之前的幾節內容寫入了DIV、CSS到index.htm和css.css文件中。
            這一節我將告訴大家如何用列表<li>來制作菜單。
          程序代碼 程序代碼
          ????????<div id="menu">
          ??????????<ul>
          ????????????<li><a href="#">首頁</a></li>
          ????????????<li class="menuDiv"></li>
          ????????????<li><a href="#">博客</a></li>
          ????????????<li class="menuDiv"></li>
          ????????????<li><a href="#">設計</a></li>
          ????????????<li class="menuDiv"></li>
          ????????????<li><a href="#">相冊</a></li>
          ????????????<li class="menuDiv"></li>
          ????????????<li><a href="#">論壇</a></li>
          ????????????<li class="menuDiv"></li>
          ????????????<li><a href="#">關于</a></li>
          ??????????</ul>
          ????????</div>

            以上是這部分的結構,有關于<ul></ul>、<li></li>這兩個HTML元素大家自己去參考相關的內容吧,它們最主要的作用就是在HTML中以列表的形式來顯示一些信息。

            還有一點需要大家一定要分清楚的,當在HTML中定義為id="divID"時,在CSS對應的設置語法則是#divID{} ,如果在HTML中定義為class="divID"時,則在CSS中對應的設置語法是.divID。
            如果id="divID"這個層中包括了一個<img></img>,則這個img在CSS中對應的設置語法應該是#divID img {},同樣,如果是包含在class="divID"這個層中時,則設置語法應該是.divID img {},這一點希望大家要分清楚了。
            另外,HTML中的一切元素都是可以定義的,例如table、tr、td、th、form、img、input...等等,如果你要在CSS中設置它們,則直接寫入元素的名稱加上一對大括號{}就可以了。所有的CSS代碼都應該寫在大括號{}中。

            按照上面的介紹,我們先在css.css中寫入以下代碼:
          程序代碼 程序代碼
          #menu ul {list-style:none;margin:0px;}
          #menu ul li {float:left;}

            解釋一下:
            #menu ul {list-style:none;margin:0px;}
            list-style:none,這一句是取消列表前點,因為我們不需要這些點。
            margin:0px,這一句是刪除UL的縮進,這樣做可以使所有的列表內容都不縮進。

            #menu ul li {float:left;}
            這里的 float:left 的左右是讓內容都在同一行顯示,因此使用了浮動屬性(float)。

            到這一步,建議大家先保存預覽一下效果,我們再添加下面的內容,效果如下:



            這時,列表內容是排列在一行,我們在#menu ul li {}再加入代碼margin:0 10px
          程序代碼 程序代碼
          #menu ul {list-style:none;margin:0px;}
          #menu ul li {float:left;margin:0 10px}

            margin:0 10px的作用就是讓列表內容之間產生一個20像素的距離(左:10px,右:10px),預覽的效果如下:



            現在,雛形已經出來了,我們再來固定菜單的位置,把代碼改成如下:
          程序代碼 程序代碼
          #menu {padding:20px 20px 0 0}
          /*利用padding:20px 20px 0 0來固定菜單位置*/
          #menu ul {float:right;list-style:none;margin:0px;}
          /*添加了float:right使得菜單位于頁面右側*/
          #menu ul li {float:left;margin:0 10px}


            這時,位置已經確定了,可是構思圖中,菜單選項之間還有一條豎線,怎么辦呢?
            別忘了,我們早就已經留好了一個空的<li class="menuDiv"></li>,要想加入豎線就使用它了。
            按照上面說的方法,我們再添加以下代碼:
          程序代碼 程序代碼
          .menuDiv {width:1px;height:28px;background:#999}
          ,保存預覽一下,豎線是否已經出來了?關于這段代碼就不多講了,應該是很容易理解的。



            不過,菜單選項的文字卻在頂部,我們再修改成以下代碼:
          程序代碼 程序代碼
          #menu ul li {float:left;margin:0 10px;display:block;line-height:28px}

            關于display:block;line-height:28px大家可以去參閱一下手冊,我就不多講了。

            效果基本上已經實現了,剩下的就是修改菜單的超鏈接樣式,在css.css中添加以下代碼:
          程序代碼 程序代碼
          #menu ul li a:link,#menu ul li a:visited {font-weight:bold;color:#666}
          #menu ul li a:hover{}

            這個也不多說了,沒什么好說的了,最后的效果如下:


          四、頁面制作(1)----用好border和clear

            由于找工作找房子的原因,隔了這么久才能開始寫教程,心里感覺很對不起一直在關注本站的朋友,今天是找到房子的第二天,于是趕快繼續寫教程。

            這一節里面,主要就是想告訴大家如何使用好borderclear這兩個屬性。

            首先,如果你曾用過table制作網頁,你就應該知道,如果要在表格中繪制一條虛線該如何做,那需要制作一個很小的圖片來填充,其實我們還有更簡單的辦法,只要在<td></td>中加入這么一段就可以了,你可以試試:
            <div style="border-bottom:1px dashed #ccc"></div>

            大家可以再次參考手冊,然后你就能明白dashed、solid、dotted...等的作用,利用它們你可以制作出許多效果來,實線、虛線、雙線、陰影線等等。
          程序代碼 程序代碼
          <div id="banner"></div>

            以上代碼便可以實現設計草圖中的banner,在css.css中加入以下樣式:
          程序代碼 程序代碼
          #banner {
          ????background:url(banner.jpg) 0 30px no-repeat; /*加入背景圖片*/
          ????width:730px; /*設定層的寬度*/
          ????margin:auto; /*層居中*/
          ????height:240px; /*設定高度*/
          ????border-bottom:5px solid #EFEFEF; /*畫一條淺灰色實線*/
          ????clear:both /*清除浮動*/
          }

            通過border很容易就繪制出一條實線了,并且減少了圖片下載所占用的網絡資源,使得頁面載入速度變得更快。

            另一個要說明的就是clear:both,表示清除左、右所有的浮動,在接下來的布局中我們還會用這個屬性:clear:left/right。在這里添加clear:both是由于之前的ul、li元素設置了浮動,如果不清除則會影響banner層位置的設定。
          程序代碼 程序代碼
          <div id="pagebody"><!--頁面主體-->
          ????<div id="sidebar"><!--側邊欄-->
          ????</div>
          ????<div id="mainbody"><!--主體內容-->
          ????</div>
          </div>

            以上是頁面主體部分,我們在css.css中添加以下樣式:
          程序代碼 程序代碼
          #pagebody {
          ????width:730px; /*設定寬度*/
          ????margin:8px auto; /*居中*/
          }
          #sidebar {
          ????width:160px; /*設定寬度*/
          ????text-align:left; /*文字左對齊*/
          ????float:left; /*浮動居左*/
          ????clear:left; /*不允許左側存在浮動*/
          ????overflow:hidden; /*超出寬度部分隱藏*/
          }
          #mainbody {
          ????width:570px;
          ????text-align:left;
          ????float:right; /*浮動居右*/
          ????clear:right; /*不允許右側存在浮動*/
          ????overflow:hidden
          }

            為了可以查看到效果,建議在#sidebar和#mainbody中加入以下代碼,預覽完成后可以刪除這段代碼:
          程序代碼 程序代碼
          border:1px solid #E00;
          height:200px

            保存預覽效果,可以發現這兩個層完美的浮動,在達到了我們布局的要求,而兩個層的實際寬度應該160+2(border)+570+2=734px,已經超出了父層的寬度,由于clear的原因,這兩個層才不會出現錯位的情況,這樣可以使我們布局的頁面不會因為內容太長(例如圖片)而導致錯位。


            而之后添加的overflow:hidden則可以使內容太長(例如圖片)的部份自動被隱藏。通常我們會看到一些網頁在載入時,由于圖片太大,導致布局被撐開,直到頁面下載完成才恢復正常,通過添加overflow:hidden就可以解決這個問題。

            CSS中每一個屬性運用得當,就可以解決許多問題,或許它們與你在布局的頁并沒有太大的關系,但是你必須知道這些屬性的作用,在遇到難題的時候,可以嘗試使用這些屬性去解決問題。


          最近看過許多網友制作的SKIN的CSS文件,發現其中有著許多冗余的代碼。下面我來跟大家介紹一下,如何清除這些冗余的代碼,讓你的CSS文件更加簡潔。

            一、margin、padding屬性
            參照相關資料我們可以知道,margin和padding代表的意思分別是外部邊距和內部填充距離,在許多網友的CSS中,關于這兩個屬性的冗余代碼是出現得最多的。比如:margin:0px,大家可以查看一下自己的CSS文件中,是否許多的margin:0px,其中有的是不需要的,你可以嘗試刪除它,當然也并不是所有的margin:0px都沒有用,相同,padding:0px也一樣。

            另外,margin和padding中各項屬性的順序是:上右下左,你只要記住是順時針方向就好了。我們再看看這兩段代碼:
          margin:0px 0px 0px 10px;
          margin-left:10px;
          其實他們的作用是一樣的,下面的則是一種縮寫,使用縮寫我們可以減少CSS代碼,并使閱讀起來更為方便。(padding也相同。)

            二、!important;屬性
            !important是CSS1就定義的語法,作用是提高指定樣式規則的應用優先權。IE是不支持這個語法的,而其他的瀏覽器都支持,通過這一點,我們可以得知,設置了優先權的代碼是不會被IE執行的。所以我們可以important的后面添加CSS樣式,使其可以區別于IE和FireFox等瀏覽器。

            上次在看Miles的CSS代碼時,我看到了這樣一句:
          height:50px !important;height:50px;
            這里就是多余的了,我們可以這樣寫:height:50px就夠了,這個錯誤在我剛開始制作CSS時也曾出現過。

            三、text-align、font樣式
            這兩個樣式的作用我就不說了,但是這兩個樣式在許多網友的CSS中也存在許多冗余。下面我來舉例說明一下,層的定義如下:
          <div id="main">
          ? ? <div id="body1">
          ??????? <div?id="content1">
          ??? ??? </div>
          ??? </div>
          ??? <div id="body2">
          ??? </div>
          <div>

          CSS文件如下(錯誤示例):
          #main{width:500px;text-algin:left;font-size:12px;color:#000000;}
          #body1{width:500px;text-algin:center;font-size:12px;color:#FF0000;}
          #content{text-algin:left;font-size:12px;color:#000000;}
          #body2{text-algin:left;font-size:12px;color:#000000;}

            大家可以從上面的代碼中輕易地看出,有許多的冗余代碼,現在我們來書寫正確的代碼:
          #main{width:500px;text-algin:left;font-size:12px;color:#000000;}
          #body1{text-algin:center;color:#FF0000;}
          #content{width:300px;text-algin:left;color:#000000;}
          #body2{}

            以上就是正確的代碼,由于大家在制作SKIN時,對PJBLOG的DIV結構沒搞清楚,才會出現這種錯誤。

            四、display:none的使用
            display:none的作用就是使被定義的層不顯示。我們再來看看這段代碼:
          #blogTitle{font-size:0px;margin:10px 3px 3px 40px;height:20px;color:#FFC1E6;display:none}

            大家有沒有覺得這有些多余呢,是的,既然設置了不顯示,為何還要保留那些不必要的樣式呢?出現這種情況我就知道,這個SKIN是改自某人的。

            五、還是margin和padding
            我還是通過例子來給大家說明,層的定義同上,以下是CSS的定義(錯誤示例):
          #main{margin:5px 0px 5px 0px;}
          #body1{margin:12px 0px 10px 0px;}
          #content{margin:8px 0px 2px 0px;}
          #body2{margin:10px 0px 15px 0px;}

            現在我們再來書寫正確的樣式:
          #main{}
          #body1{margin-top:17px ;}
          #content{margin:8px 0px 2px 0px;}
          #body2{margin:20px 0px ;}

            這里需要大家制作一下示例才能了解,首先#main{margin:5px 0px 5px 0px;}是沒有必要的,他無非定義的就是整個頁面的上、下外邊距。(在一定場合下卻需要這樣書寫)我們同樣可以通過定義#body1的上邊距和#body2的下邊距來設置,所以才有了#body1{margin-top:17px ;}#body2{margin:20px 0px ;}(這里定義的是#body2的上下邊距為20px,左右邊距為0px,也是縮寫的一種方式。)

            同樣的道理,于是我們可以省略了#body1的下邊距,在#content層在定義上邊距,另外大家還需要先弄清楚層的嵌套關系,否則就會出錯。

            好了,寫到這里我也該去睡了,以上就是這些時間查看大家的CSS文件獲得的經驗,希望對大家書寫CSS的時候有所幫助,制作出來的SKIN更加簡潔、明了。

          posted on 2006-11-06 09:09 OMG 閱讀(1178) 評論(0)  編輯  收藏 所屬分類: WEb編程

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          <2006年11月>
          2930311234
          567891011
          12131415161718
          19202122232425
          262728293012
          3456789

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          IT風云人物

          文檔

          朋友

          相冊

          經典網站

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 收藏| 郴州市| 天全县| 叶城县| 台安县| 罗甸县| 临洮县| 邯郸县| 嘉义市| 霍州市| 秦安县| 惠水县| 烟台市| 滁州市| 房山区| 墨脱县| 蕉岭县| 北宁市| 吐鲁番市| 陆丰市| 偏关县| 拉萨市| 封丘县| 保定市| 那坡县| 甘孜| 舟山市| 沂源县| 云阳县| 称多县| 永年县| 文安县| 政和县| 石台县| 佳木斯市| 西城区| 普兰县| 防城港市| 荆州市| 阿巴嘎旗| 岳普湖县|