作者: ecsun  鏈接:http://papa.javaeye.com/blog/225125  發(fā)表時(shí)間: 2008年08月06日

聲明:本文系JavaEye網(wǎng)站發(fā)布的原創(chuàng)博客文章,未經(jīng)作者書面許可,嚴(yán)禁任何網(wǎng)站轉(zhuǎn)載本文,否則必將追究法律責(zé)任!

瀏覽器兼容:Web標(biāo)準(zhǔn)化建站(DIV+CSS)必看的常見(jiàn)問(wèn)題解決方法

經(jīng)常我們用DIV+CSS建站的時(shí)候,發(fā)現(xiàn)在IE6,IE7,Firefox里面顯示經(jīng)常一塌糊涂,而在外貿(mào)網(wǎng)站建設(shè)中,因?yàn)闉g覽著對(duì)象是國(guó)外,F(xiàn)irefox的市場(chǎng)份額很大,為了讓我們的客戶能看到一個(gè)完美專業(yè)的顯示效果,所以Firefox必須考慮!

以下是一些常見(jiàn)問(wèn)題和解決方法

1、居中問(wèn)題
div里的內(nèi)容,ie默認(rèn)為居中,而ff默認(rèn)為左對(duì)齊。
使ff內(nèi)容居中的方法是增加代碼margin:auto;

2、高度問(wèn)題
設(shè)有兩橫行div排列,上面的div設(shè)置高度 (height),如果div里的實(shí)際內(nèi)容大于所設(shè)高度,在ff中會(huì)出現(xiàn)兩個(gè)div重疊的現(xiàn)象;但在ie中,下面的div會(huì)自動(dòng)給上面的div讓出空間。所以為避免出現(xiàn)層的重疊,高度一定要控制恰當(dāng),或者干脆不寫高度,讓他自動(dòng)調(diào)節(jié)。
或者設(shè)置:overflow:hidden

3、clear:both;
拿footer為例,有時(shí)候如果上面使用了float控制的n列的布局,那么在用ff瀏覽時(shí)footer很有可能不老實(shí),到處亂動(dòng)——因?yàn)樗€在受到浮動(dòng)(float)的控制。如果想讓它老老實(shí)實(shí)呆在頁(yè)面下方,在footer的div中寫入clear:both;就可以達(dá)到效果了!

4、浮動(dòng)ie產(chǎn)生的雙倍距離
#box{
float:left;
width:100px;
margin:0 0 0 100px; //這種情況之下IE會(huì)產(chǎn)生200px的距離
display:inline; //使浮動(dòng)忽略
}


5、重點(diǎn)講解:display:block,inline兩個(gè)元素 display(顯示)
display:block; //可以為內(nèi)嵌元素模擬為塊元素
display:inline; //實(shí)現(xiàn)同一行排列的的效果
diplay:table; //for ff,模擬table的效果

Display:block元素的特點(diǎn)是:
總是在新行上開(kāi)始;
高度,行高以及頂和底邊距都可控制;
寬度缺省是它的容器的100%,除非設(shè)定一個(gè)寬度
<div>, <p>, <h1>, <form>, <ul> 和 <li>是塊元素的例子。

display:inline就是將元素顯示為行內(nèi)元素.
inline元素的特點(diǎn)是:
和其他元素都在一行上;
高,行高及頂和底邊距不可改變;
寬度就是它的文字或圖片的寬度,不可改變。
<span>, <a>, <label>, <input>, <img>, <strong> 和<em>是inline元素的例子。

例子:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>無(wú)標(biāo)題文檔</title>
<style type="text/css">
#inline{width:400px; height:40px;background:#99CCCC;padding:15px 0px 0px 15px}
#inline ul{ margin:0px; list-style:none;}
#inline ul li{display:inline; font-size:12px;margin-left:5px}
#block{width:400px; height:40px;background:#FFCC99;padding:15px 0px 0px 15px}
#block ul{ margin:0px; list-style:none;}
#block ul li{display:block; font-size:12px;height:20px}
#div_inline{ width:800px;display:inline;height:120px;}
</style>
</head>
<body>
<div id="inline">
<ul>
<li>天天招生網(wǎng)
<li>心血管網(wǎng)
<li>高血壓網(wǎng)
<li>先心病網(wǎng)
</ul>
</div>
<p>
<div id="block">
<ul>
<li>天天招生網(wǎng)</li>
<li>心血管網(wǎng)</li>
<li>高血壓網(wǎng)</li>
<li>先心病網(wǎng)</li>
</ul>
</div>
</p>
</body></html>


6、IE與FF寬度和高度的問(wèn)題
min -width是個(gè)非常方便的CSS命令,它可以指定元素最小也不能小于某個(gè)寬度,這樣就能保證排版一直正確。整體最窄770px,最寬1024px,也就是說(shuō)窗口小于770xp就出底部滾動(dòng)條,如果大于1024px自動(dòng)屏幕居中。IE不認(rèn)得min-這個(gè)定義,但實(shí)際上它把正常的width和height當(dāng)作有min的情況來(lái)使。這樣,如果只用寬度和高度,正常的瀏覽器里這兩個(gè)值就不會(huì)變,如果只用min-width和min-height的話,IE下面根本等于沒(méi)有設(shè)置寬度和高度。
CSS這樣設(shè)計(jì):
#container{
min-width: 600px;
width:expression(document.body.clientWidth < 600? "600px": "auto" );
}

第一個(gè)min-width是正常的;但第2行的width使用了Javascrīpt,這只有IE才認(rèn)得,這也會(huì)讓你的HTML文檔不太正規(guī)。它實(shí)際上通過(guò)Javascrīpt的判斷來(lái)實(shí)現(xiàn)最小寬度。

同樣的辦法也可以為IE實(shí)現(xiàn)最大寬度:
#container
{
min-width: 600px;
max-width: 1200px;
width:expression(document.body.clientWidth < 600? "600px" : document.body.clientWidth > 1200? ”1200px“ : ”auto";
}


7、FF: 支持 !important, IE 則忽略,
可用 !important (例:height:30px!important; height:26px;)為 FF 特別設(shè)置樣式
div 的垂直居中問(wèn)題: vertical-align:middle; 將行距增加到和整個(gè)DIV一樣高 line-height:200px; 然后插入文字,就垂直居中了。缺點(diǎn)是要控制內(nèi)容不要換行
cursor: pointer 可以同時(shí)在 IE FF 中顯示游標(biāo)手指狀, hand 僅 IE 可以
FF: 鏈接加邊框和背景色,需設(shè)置 display: block, 同時(shí)設(shè)置 float: left 保證不換行(背景圖片需要設(shè)置 float: left )。參照 menubar, 給 a 和 menubar 設(shè)置高度是為了避免底邊顯示錯(cuò)位, 若不設(shè) height, 可以在 menubar 中插入一個(gè)空格
在FF和IE中的BOX模型解釋不一致導(dǎo)致相差2px解決方法:
div{margin:30px!important;margin:28px;}

注意這兩個(gè)margin的順序一定不能寫反,據(jù)阿捷的說(shuō)法!important這個(gè)屬性IE不能識(shí)別,但別的瀏覽器可以識(shí)別。所以在IE下其實(shí)解釋成這樣:

div css xhtml xml Example Source Code Example Source Code [www.52css.com]
div{maring:30px;margin:28px}

重復(fù)定義的話按照最后一個(gè)來(lái)執(zhí)行,所以不可以只寫margin:XXpx!important;

在Firefox/Mozilla 瀏覽器中,對(duì)象的實(shí)際寬度= (margin-left) + (border-left-width) + (padding- left) + width + (padding-right) + (border-right-width) + (margin-right);而在IE/Opera瀏覽器中,對(duì)象的實(shí)際寬度 = (margin-left) + width + (margin-right)。

已有 0 人發(fā)表留言,猛擊->>這里<<-參與討論


JavaEye推薦