国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > CSS > 正文

CSS高級技巧:網頁布局

2024-07-11 08:21:04
字體:
來源:轉載
供稿:網友

上一篇css教程 文章:css高級技巧:文字環繞圖片

布局

css至關重要的作用, css的設計初衷.

css布局和幾年前table橫行時的布局又不太一樣, 在結構化語義化的html文檔后面, css在格式化文檔的渲染效果, 把結構化文檔用表現化語言來描述. 簡而言之, 就是css不需要表現性標簽!

css布局技術依賴于三個基本概念: 定位, 浮動, margin操縱. 布局技術之間沒有本質的區別, 相同一種布局讓100個前端開發工程師來做, 可能就有100種方法.

居中

在table時代, align和valign相當的好用, 而在css中卻沒有簡單實現的方法,所以在標準化剛剛開始推廣的時候, 很多重構項目中居中問題變成了阻礙標準化進步的絆腳石.

1. 自動外補丁水平居中

一般情況下水平居中比較容易實現, 只需要給要居中的容器設定寬度, 以及自動水平外補丁就可以了.

比如html如下:

<body>
    <div class="wrapper">
    </div>
</body>

css如下:

body{}
.wrapper{width:760px;margin:0 auto;}

很簡單不是嗎? 但是有點小問題... 我們親愛的ie家族里, ie5.x和ie 6不支持自動外補丁, 但是同樣幸運的是, ie將 text-align:center 理解為所有東西居中, 而不只是文本. 哈哈, 可以利用這個bug.

將css改為:

body{text-align:center;}
.wrapper{width:760px;margin:0 auto;text-align:left;}

這里就用到了一種hack,不過不會影響其他瀏覽器的hack就是好hack,呵呵, 就先這么用著吧~

等等, 好像netscape那邊也出問題了, 用netscape 6將窗口縮小到小于容器寬度時, 容器的左邊就會跑到屏幕外邊去了, 而且還不會有滾動條...萬惡的瀏覽器大戰啊...

再來改改我們的css:

body{min-width:760px;text-align:center;}
.wrapper{width:760px;margin:0 auto;text-align:left;}

這樣就基本上ok了.

2. 定位法水平居中

我們也可以稍稍復雜的用定位法來完成這個工作. 所謂的定位法是用 position 屬性來定義容器位置.

同樣用上面一例的html代碼,

我們用定位法的css如下:

body{margin:0;padding:0;}
.wrapper{position:relative;left:50%;width:760px;margin-left:-380px;}

為什么用相對定位( relative )呢? 能用絕對定位( absolute )嗎?

絕對定位當然也可以, 但是絕對定位會將容器提出文檔流, 讓后面的文檔流到定位容器的位置去了, 稍不注意就會被定為的容器遮蓋住后面的內容, 而relative不會將容器提出文檔流, 后面的文檔流會給定位的容器留下它應有的空間.

3. 垂直居中

css中比較大的問題出現了, css較難使用簡單的方法來完成垂直居中.

在容器中要使文字垂直居中, 那可以將容器的line-height設置的和height一樣來完成這個工作,

但是要使容器垂直居中的話, 那就比較復雜了.

html如下:

<body>
    <div class="wrapper">
        <div id="box">123</div>
    </div>
</body>

css如下:

body{margin:0;padding:0;height:100%;}
.wrapper{display:table-cell;vertical-align:middle;width:600px;height:400px;border:solid 1px red;}
#box{width:200px;margin:auto;vertical-align:middle;border:solid 1px blue;}

按理說這樣就可以了呀, 但是ie下面一點效果都沒有...那是因為ie的display屬性只接收:block, inline, inline-block, none, inherit, 不接收table, table-cell, table-row, 那就頭痛了呀.

唔, 其實思路有很多, 我提供其中一種:

css如下:

body{margin:0;padding:0;height:100%;}
.wrapper{width:600px;height:400px;border:solid 1px red;}
#box{width:200px;height:200px;position:relative;top:50%;left:50%;margin-top:-100px;margin-left:-100px;border:solid 1px green;}

局限性非常大, 必須要已知高度...

更可以對ie瀏覽器進行filter之后hack它. 使用ie獨有的expression, 雖然在大型腳本上expression表現的相當差, 但是簡單的計算offsetheight還是不太會影響性能, 再怎么說m$也針對expression進行過優化.

所以垂直居中還是要看場合自行挑選合適的方案來解決.


 浮動布局

現在大家都熟知浮動布局了, 不多說, 這個是css布局的基礎...主要是float和margin的合理應用.

faux columns:

偉大的dan的另一項發明, 呵呵, 其實很簡單, 用垂直平鋪背景圖來做出視覺上多欄布局等高的效果. 但是很實用, 不是嗎?

equal height boxes with css:

在標準推行過程中比較有名的文章之一, 介紹像table一樣進行css布局, 但是不適用于ie...唉

彈性布局

很不錯的理念, 原理其實也不難, 就是用em來標注尺寸, 這樣就可以讓瀏覽器自行放大或縮小任何的容器或是元素了.

下一篇css教程 文章:css高級技巧:陰影效果

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 靖宇县| 绥德县| 兴山县| 大埔区| 扎鲁特旗| 华阴市| 墨竹工卡县| 康保县| 芒康县| 上饶市| 万山特区| 天门市| 忻州市| 东乡族自治县| 新昌县| 醴陵市| 新竹县| 北碚区| 永川市| 肥西县| 滦南县| 通州区| 合江县| 阳原县| 根河市| 华宁县| 新蔡县| 许昌市| 临泉县| 峨眉山市| 遂昌县| 自贡市| 手机| 夏邑县| 康保县| 措勤县| 禄丰县| 巴南区| 波密县| 禄丰县| 隆回县|