posts - 15,comments - 29,trackbacks - 0

          之前看到很多人一直都問這個問題,不過當時我沒當一回事,因為在 CSS 中要垂直居中,多數(shù)是在有高度的情況下,或者容器高度不定的情況下才用,看上去比較舒服,而且實現(xiàn)的方法也不少,不一定要拘泥于和 table 布局一樣。不過最近有人問了幾個例子,看來對此的需求還不少。現(xiàn)在就把我經(jīng)驗拿出來分享一下,希望大家鼓鼓掌。

          首先,要有一個概念:凡是 table 布局可以實現(xiàn)的,CSS 一定可以實現(xiàn)。CSS 可以實現(xiàn)的,table 未必能做到。

          現(xiàn)在來幾個例子:

          一、單行內(nèi)容的居中
          只考慮單行是最簡單的,無論是否給容器固定高度,只要給容器設置 line-heightheight,并使兩值相等,再加上 over-flow: hidden 就可以了

          .middle-demo-1{
          height: 4em;
          line-height: 4em;
          overflow: hidden;
          }

          優(yōu)點:
          1. 同時支持塊級和內(nèi)聯(lián)極元素
          2. 支持所有瀏覽器
          缺點:
          1. 只能顯示一行
          2. IE中不支持<img>等的居中
          要注意的是:
          1. 使用相對高度定義你的 height 和 line-height
          2. 不想毀了你的布局的話,overflow: hidden 一定要
          為什么?
          請比較以下兩個例子:


          [Ctrl+A 全部選擇 提示:你可先修改部分代碼,再按運行]

          上一個高度是用的絕對單位px,并且沒有隱藏溢出,下一個高度用的單位是相對單位em,并且隱藏了溢出。如果你的瀏覽器支持放大字體,那么盡情地放大字體,看看會出現(xiàn)什么效果。

          二、多行內(nèi)容居中,且容器高度可變
          也很簡單,給出一致的 padding-bottom 和 padding-top 就行

          .middle-demo-2{
          padding-top: 24px;
          padding-bottom: 24px;
          }

          優(yōu)點:
          1. 同時支持塊級和內(nèi)聯(lián)極元素
          2. 支持非文本內(nèi)容
          3. 支持所有瀏覽器
          缺點:
          容器不能固定高度

          三、把容器當作表格單元
          CSS 提供一系列diplay屬性值,包括 display: table, display: table-row, display: table-cell 等,能把元素當作表格單元來顯示。這是再加上 vertical-align: middle, 就和表格中的 valign="middle" 一樣了。

          .middle-demo-3{
          display: table-cell;
          height: 300px;
          vertical-align: middle;
          }

          可惜IE不支持這些屬性,不過在其他瀏覽器上顯示效果非常完美。
          要注意的是:和一個合法的<td>元素必須在<table>里一樣,display: table-cell 元素必須作為 display: table 的元素的子孫出現(xiàn)。

          優(yōu)點:
          不用說了吧,就是表格,效果和表格一模一樣
          缺點:
          IE下無效

          四、以毒攻毒!用 IE 的 bug 解決 IE 中的絕對居中
          先不得不說一句,IE 真的是個很爛的瀏覽器,CSS1中的定義都不支持,害得要我們轉(zhuǎn)個大圈子來造居中。不過就像我說的,凡是 table 布局可以實現(xiàn)的,CSS 一定可以實現(xiàn),即使在 IE 里也不例外。我研究 IE layout 模式多年,還是找出了一個可以在 IE 中絕對居中的方法。這個方法就是基于 IE layout 的 bug,也可以算以毒攻毒。至于原理,不要問我,這是獨門秘學,何況三言兩語也講不清楚,只要好用就行

          .middle-demo-4{
          height: 300px;
          position: relative;
          }
          .middle-demo-4 div{
          position: absolute;
          top: 50%;
          left: 0;
          }
          .middle-demo-4 div div{
          position: relative;
          top: -50%;
          left: 0;
          }

          五、整合三和四,寫出支持所有瀏覽器的垂直居中容器!
          思路是利用 IE 和 非IE 瀏覽器的 CSS hack, 整合三和四的CSS,寫出兼容主流瀏覽器的垂直居中容器。具體代碼就不給出了,大家權(quán)當作練習練習。例子可以在下面的附錄中找到。
          最終實測支持的瀏覽器:IE6+, Mozilla 1.7, Netscape Navigator 8, Opera 8.0+, Firefox 1.0+ 和 Safari 1.0+IE5 下需要加上對合適模型的補正。
          推測支持的瀏覽器:Mozilla 1.5+, Netscape Navigator 7+, Opera 7+
          未測試瀏覽器:Konqueror

          最后附上自己寫的,所有居中布局的范例網(wǎng)頁,大家不明白可以參考。


          [Ctrl+A 全部選擇 提示:你可先修改部分代碼,再按運行]
          posted on 2009-04-17 19:59 流腥魚 閱讀(463) 評論(0)  編輯  收藏 所屬分類: css

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


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 甘孜| 珲春市| 衢州市| 合作市| 堆龙德庆县| 九寨沟县| 庐江县| 淄博市| 黄梅县| 汕头市| 许昌县| 东丽区| 万宁市| 蒙城县| 韩城市| 石首市| 二手房| 余干县| 秀山| 英山县| 广西| 洮南市| 临桂县| 仲巴县| 隆尧县| 商都县| 西平县| 周口市| 京山县| 武冈市| 十堰市| 盐源县| 武隆县| 武胜县| 彭州市| 兴化市| 外汇| 綦江县| 会昌县| 阿克陶县| 堆龙德庆县|