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

首頁(yè) > 開(kāi)發(fā) > CSS > 正文

CSS高級(jí)技巧:網(wǎng)頁(yè)布局

2024-07-11 08:42:37
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

上一篇CSS教程 文章:CSS高級(jí)技巧:文字環(huán)繞圖片布局
CSS至關(guān)重要的作用, CSS的設(shè)計(jì)初衷.
CSS布局和幾年前table橫行時(shí)的布局又不太一樣, 在結(jié)構(gòu)化語(yǔ)義化的HTML文檔后面, CSS在格式化文檔的渲染效果, 把結(jié)構(gòu)化文檔用表現(xiàn)化語(yǔ)言來(lái)描述. 簡(jiǎn)而言之, 就是CSS不需要表現(xiàn)性標(biāo)簽!
CSS布局技術(shù)依賴(lài)于三個(gè)基本概念: 定位, 浮動(dòng), margin操縱. 布局技術(shù)之間沒(méi)有本質(zhì)的區(qū)別, 相同一種布局讓100個(gè)前端開(kāi)發(fā)工程師來(lái)做, 可能就有100種方法.居中
在table時(shí)代, align和Valign相當(dāng)?shù)暮糜? 而在CSS中卻沒(méi)有簡(jiǎn)單實(shí)現(xiàn)的方法,所以在標(biāo)準(zhǔn)化剛剛開(kāi)始推廣的時(shí)候, 很多重構(gòu)項(xiàng)目中居中問(wèn)題變成了阻礙標(biāo)準(zhǔn)化進(jìn)步的絆腳石.
1. 自動(dòng)外補(bǔ)丁水平居中
一般情況下水平居中比較容易實(shí)現(xiàn), 只需要給要居中的容器設(shè)定寬度, 以及自動(dòng)水平外補(bǔ)丁就可以了.
比如HTML如下:

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

CSS如下:

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

很簡(jiǎn)單不是嗎? 但是有點(diǎn)小問(wèn)題... 我們親愛(ài)的IE家族里, IE5.x和IE 6不支持自動(dòng)外補(bǔ)丁, 但是同樣幸運(yùn)的是, IE將 text-align:center 理解為所有東西居中, 而不只是文本. 哈哈, 可以利用這個(gè)Bug.
將CSS改為:

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

這里就用到了一種Hack,不過(guò)不會(huì)影響其他瀏覽器的Hack就是好Hack,呵呵, 就先這么用著吧~
等等, 好像Netscape那邊也出問(wèn)題了, 用Netscape 6將窗口縮小到小于容器寬度時(shí), 容器的左邊就會(huì)跑到屏幕外邊去了, 而且還不會(huì)有滾動(dòng)條...萬(wàn)惡的瀏覽器大戰(zhàn)啊...
再來(lái)改改我們的CSS:

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

這樣就基本上ok了.
2. 定位法水平居中
我們也可以稍稍復(fù)雜的用定位法來(lái)完成這個(gè)工作. 所謂的定位法是用 position 屬性來(lái)定義容器位置.
同樣用上面一例的HTML代碼,
我們用定位法的CSS如下:

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

為什么用相對(duì)定位( relative )呢? 能用絕對(duì)定位(absolute )嗎?
絕對(duì)定位當(dāng)然也可以, 但是絕對(duì)定位會(huì)將容器提出文檔流, 讓后面的文檔流到定位容器的位置去了, 稍不注意就會(huì)被定為的容器遮蓋住后面的內(nèi)容, 而relative不會(huì)將容器提出文檔流, 后面的文檔流會(huì)給定位的容器留下它應(yīng)有的空間.
3. 垂直居中
CSS中比較大的問(wèn)題出現(xiàn)了, CSS較難使用簡(jiǎn)單的方法來(lái)完成垂直居中.
在容器中要使文字垂直居中, 那可以將容器的line-height設(shè)置的和height一樣來(lái)完成這個(gè)工作,
但是要使容器垂直居中的話(huà), 那就比較復(fù)雜了.
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;}

按理說(shuō)這樣就可以了呀, 但是IE下面一點(diǎn)效果都沒(méi)有...那是因?yàn)镮E的display屬性只接收:block, inline, inline-block, none, inherit, 不接收table, table-cell, table-row, 那就頭痛了呀.
唔, 其實(shí)思路有很多, 我提供其中一種:
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;}

局限性非常大, 必須要已知高度...
更可以對(duì)IE瀏覽器進(jìn)行filter之后hack它. 使用ie獨(dú)有的expression, 雖然在大型腳本上expression表現(xiàn)的相當(dāng)差, 但是簡(jiǎn)單的計(jì)算offsetHeight還是不太會(huì)影響性能, 再怎么說(shuō)M$也針對(duì)expression進(jìn)行過(guò)優(yōu)化.
所以垂直居中還是要看場(chǎng)合自行挑選合適的方案來(lái)解決.

浮動(dòng)布局
現(xiàn)在大家都熟知浮動(dòng)布局了, 不多說(shuō), 這個(gè)是CSS布局的基礎(chǔ)...主要是float和margin的合理應(yīng)用.
Faux Columns:
偉大的Dan的另一項(xiàng)發(fā)明, 呵呵, 其實(shí)很簡(jiǎn)單, 用垂直平鋪背景圖來(lái)做出視覺(jué)上多欄布局等高的效果. 但是很實(shí)用, 不是嗎?
Equal height boxes with CSS:
在標(biāo)準(zhǔn)推行過(guò)程中比較有名的文章之一, 介紹像table一樣進(jìn)行CSS布局, 但是不適用于IE...唉彈性布局
很不錯(cuò)的理念, 原理其實(shí)也不難, 就是用em來(lái)標(biāo)注尺寸, 這樣就可以讓瀏覽器自行放大或縮小任何的容器或是元素了.
下一篇CSS教程 文章:CSS高級(jí)技巧:陰影效果
發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 贺州市| 富平县| 习水县| 尼勒克县| 增城市| 科尔| 绩溪县| 韶山市| 金塔县| 浑源县| 牙克石市| 金乡县| 蒙山县| 罗甸县| 南川市| 石景山区| 来凤县| 成都市| 邵阳市| 扎赉特旗| 安多县| 元江| 建阳市| 九寨沟县| 马龙县| 博湖县| 灌阳县| 崇信县| 乌苏市| 平利县| 广州市| 永顺县| 彭山县| 拉萨市| 手游| 平乐县| 自贡市| 南郑县| 华亭县| 麦盖提县| 元江|