Rising Sun

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            148 隨筆 :: 0 文章 :: 22 評論 :: 0 Trackbacks
          翻譯自:In Search of the Holy Grail
          原文:http://www.alistapart.com/articles/holygrail
          這個翻譯的頁面版權歸greengnn所有,轉載請注明出處
          第一步:創建一個結構

          xhtml開始于header, footer, and container
          <div id="header"></div>

          <div id="container"></div>

          <div id="footer"></div>

          CSS先定義container,給將要加入的sideleft,和sideright留下個位置
          #container {
           padding-left: 200px; /* LC width */
           padding-right: 150px; /* RC width */
          }

          我們的布局現在看起來是這樣的

          uploads/200602/13_074820_diagram_01.gif


          圖1——創建框架

          第二步:增加內容元素

          在第一步基礎上增加內容元素<div id="header"></div>

          <div id="container">
           <div id="center" class="column"></div>
           <div id="left" class="column"></div>
           <div id="right" class="column"></div>
          </div>

          <div id="footer"></div>

          然后分別定義widths和float 讓元素排列在一條線上,還有清除footer的浮動對齊
          #container .column {
           float: left;
          }
          #center {
           width: 100%;
          }
          #left {
           width: 200px; /* LC width */
          }
          #right {
           width: 150px; /* RC width */
          }
          #footer {
           clear: both;
          }

          這里給center元素定義了100% width,讓它占滿montainer的可用空間,現在的布局變成了這樣

          uploads/200602/13_074922_diagram_02.gif


          圖2:增加內容元素

          第三步:把left放到正確的位置

          要把left放到正確的位置,我們分兩步

          1.讓left和center在同一水平線#left {
           width: 200px; /* LC width */
           margin-left: -100%;
          }

          看看效果

          uploads/200602/13_075000_diagram_03.gif


          圖3——left移動完成一半

          2.用相對定位,把left繼續移動到正確的位置#container .columns {
           float: left;
           position: relative;
          }
          #left {
           width: 200px; /* LC width */
           margin-left: -100%;
           right: 200px; /* LC width */
          }

          上一步,left還需要左移200px,就可以了,所以就采用相對定位,將他再向左推200px,就達到了想要的效果。讓left距離他右邊元素center 200px后,行了,left終于到自己位置上了。

          uploads/200602/13_075037_diagram_04.gif


          圖4——left到了自己的位置

          第四步:讓right也到自己的正確的位置上

          從上圖看,我們只需要把right推倒container的padding-right里面,看看怎么做
          #right {
           width: 150px; /* RC width */
           margin-right: -150px; /* RC width */
          }

          好了,現在元素們都正確歸位了。

          uploads/200602/13_075115_diagram_05.gif


          圖5——right到了自己正確的位置

          第五步:解決bug讓布局更完美
          如果瀏覽器類型變更,center就變得比left小了,完美的布局就被打破,我們給body 設置一個min-width
          來解決這個問題,因為IE不支持他,所以不會有負面影響,調整如下
          body {
           min-width: 550px; /* 2x LC width + RC width */
          }

          這時在IE6(完全打開的窗口)下,left元素距離左側又太遠了,再調整
          * html #left {
           left: 150px; /* RC width */
          }

          這些大小調整是根據上面已經定義的寬度來的,你調整的時候也要根據自己的實際情況。

          現在增加padding

          內容文字貼著容器的邊,相信你看得時候,不會很舒服,調整一下
          #left {
           width: 180px; /* LC fullwidth - padding */
           padding: 0 10px;
           right: 200px; /* LC fullwidth */
           margin-left: -100%;
          }

          當然不能只增加left就算完事,要給一系列元素都必須加上,也要調整增加padding,帶來的新的bug,調整如下
          body {
           min-width: 630px; /* 2x (LC fullwidth +
           CC padding) + RC fullwidth */
          }
          #container {
           padding-left: 200px; /* LC fullwidth */
           padding-right: 190px; /* RC fullwidth + CC padding */
          }
          #container .column {
           position: relative;
           float: left;
          }
          #center {
           padding: 10px 20px; /* CC padding */
           width: 100%;
          }
          #left {
           width: 180px; /* LC width */
           padding: 0 10px; /* LC padding */
           right: 240px; /* LC fullwidth + CC padding */
           margin-left: -100%;
          }
          #right {
           width: 130px; /* RC width */
           padding: 0 10px; /* RC padding */
           margin-right: -190px; /* RC fullwidth + CC padding */
          }
          #footer {
           clear: both;
          }

          /*** IE Fix ***/
          * html #left {
           left: 150px; /* RC fullwidth */
          }
          header和footer的padding可以隨意增加,這里就不提了,還有長度單位用em更具親和力(em可以讓用戶使用瀏覽器來調整自己需要的字體大小)
          但是不能混合使用,選擇em和px的時候明智些,察看效果

          元素等高問題
          采用http://www.positioniseverything.net/articles/onetruelayout/equalheight
          有人翻譯過來的:http://www.blueidea.com/tech/web/2006/3210.asp
          里提到的方法,就不具體解釋了。
          #container {
           overflow: hidden;
          }
          #container .column {
           padding-bottom: 20010px; /* X + padding-bottom */
           margin-bottom: -20000px; /* X */
          }
          #footer {
           position: relative;
          }

          再解決opera 8的bug,代碼調整如下
          <div id="footer-wrapper">
           <div id="footer"></div>
          </div>
          * html body {
           overflow: hidden;
          }
          * html #footer-wrapper {
           float: left;
           position: relative;
           width: 100%;
           padding-bottom: 10010px;
           margin-bottom: -10000px;
           background: #fff; /* Same as body
           background */
          }
          posted on 2007-06-14 10:00 brock 閱讀(246) 評論(0)  編輯  收藏 所屬分類: css
          主站蜘蛛池模板: 长海县| 田阳县| 清原| 乐昌市| 灵丘县| 陇西县| 内丘县| 金湖县| 林州市| 山西省| 镇康县| 宁国市| 石棉县| 拉萨市| 阿瓦提县| 娱乐| 河西区| 久治县| 霍城县| 罗江县| 三门县| 景宁| 漯河市| 达拉特旗| 鹿泉市| 南昌县| 辛集市| 新余市| 绥阳县| 长汀县| 丘北县| 英吉沙县| 光泽县| 惠来县| 嘉义县| 襄汾县| 沂水县| 邵东县| 师宗县| 平安县| 德钦县|