DIV+CSS 兼容小集
2024-07-11 08:47:47
供稿:網(wǎng)友
關(guān)于div+css兼容IE和firefox的問題
好不容易建立的div+css網(wǎng)頁完全符合W3C標準。在ie7下顯示非常完美,用firefox一測試,乖乖一探糊涂
慘不忍睹。經(jīng)過一番研究發(fā)現(xiàn)兼容很
簡單。
1、增加 div {overflow: hidden;},目的就是讓div自動適應(yīng)內(nèi)容高度
2、橫排的div外套div
另外設(shè)定
ul {
margin: 0px;
padding: 0px;
}
是消除li前面的空格
div+css兼容性問題
CSS 兼容要點:DOCTYPE 影響 CSS 處理
FF: div 設(shè)置 margin-left, margin-right 為 auto 時已經(jīng)居中, IE 不行
FF: body 設(shè)置 text-align 時, div 需要設(shè)置 margin: auto(主要是 margin-left,margin-right) 方可
居中
FF: 設(shè)置 padding 后, div 會增加 height 和 width, 但 IE 不會, 故需要用 !important 多設(shè)一個
height 和 width
FF: 支持 !important, IE 則忽略, 可用 !important 為 FF 特別設(shè)置樣式
div 的垂直居中問題: vertical-align:middle; 將行距增加到和整個DIV一樣高 line-height:200px; 然
后插入文字,就垂直居中了。缺點是
要控制內(nèi)容不要換行
cursor: pointer 可以同時在 IE FF 中顯示游標手指狀, hand 僅 IE 可以
FF: 鏈接加邊框和背景色,需設(shè)置 display: block, 同時設(shè)置 float: left 保證不換行。參照
menubar, 給 a 和 menubar 設(shè)置高度是為了
避免底邊顯示錯位, 若不設(shè) height, 可以在 menubar 中插入一個空格XHTML+CSS兼容性解決方案小集
使用XHTML+CSS構(gòu)架好處不少,但也確實存在一些問題,不論是因為使用不熟練還是思路不清晰,我就先
把一些我遇到的問題寫在下面。
1.在mozilla firefox和IE中的BOX模型解釋不一致導(dǎo)致相差2px解決方法:
div css xhtml xml Example Source Code Example Source Code [www.52css.com]
div{margin:30px!important;margin:28px;}
注意這兩個margin的順序一定不能寫反,據(jù)阿捷的說法!important這個屬性IE不能識別,但別的瀏覽器可
以識別。所以在IE下其實解釋成這樣
:
div css xhtml xml Example Source Code Example Source Code [www.52css.com]
div{maring:30px;margin:28px}
重復(fù)定義的話按照最后一個來執(zhí)行,所以不可以只寫margin:XXpx!important;
2.IE5 和IE6的BOX解釋不一致IE5下div{width:300px;margin:0 10px 0 10px;}div的寬度會被解釋為
300px- 10px(右填充)-10px(左填充)最終
div的寬度為280px,而在IE6和其他瀏覽器上寬度則 是以300px+10px(右填充)+10px (左填充)=320px來計
算的。這時我們可以做如下修改:
div css xhtml xml Example Source Code Example Source Code [www.52css.com]
div{width:300px!important;width :340px;margin:0 10px 0 10px}
關(guān)于這個是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持,如果有人理解的話,請告
訴我一聲,謝了!:)
3.ul標簽在Mozilla中默認是有padding值的,而在IE中只有margin有值所以先定義
div css xhtml xml Example Source Code Example Source Code [www.52css.com]
ul{margin:0;padding:0;}
就能解決大部分問題
4.關(guān)于腳本,在xhtml1.1中不支持language屬性,只需要把代碼改為
div css xhtml xml Example Source Code Example Source Code [www.52css.com]
<script type="text/javascript">
div+css兼容問題解決方案(IE5/5.5/6/7/FF)
之前找了幾個不同版本的可獨立運行的IE瀏覽器,正好拿來試試頁面的兼容性問題。不試不知道,在IE6
和FF中沒問題的頁面在IE5和IE5.5中亂
成一團,一直聽說IE5是WEB標準制作的一個“釘子戶”,現(xiàn)在不得不相信了。
既然有問題,那就找找解決的方法咯,在網(wǎng)上一搜,相關(guān)的文章還是不少的,覺得最直接的方法還是“IE
條件注釋”,很方便的就能為IE的不
同版本寫樣式。但這樣就得為每個版本寫一個樣式,不利于文件的優(yōu)化。
找了一些相關(guān)的CSS HACK后,覺得應(yīng)該可以把IE5/IE5.5/IE6/FF的HACK寫到一起的,經(jīng)過測試,終于找到
了一個不錯的方法,下面我們來看看
怎么實現(xiàn):
大家都知道用!important聲明可以提升指定樣式規(guī)則的應(yīng)用優(yōu)先權(quán),如下面的例子:
E1{
background-color: red !important;
background-color: blue;
}
但這樣寫在IE中會有個問題,看過我的《關(guān)于CSS樣式表優(yōu)先級》和《關(guān)于CSS樣式表優(yōu)先級補遺》,你會
知道在IE6和FF中用! important聲明
可以提高優(yōu)先級別,但在IE6中的!important聲明并不是絕對的,它會被之后的同名屬性定義所替換。也
就是說在上面的例子中,IE6所應(yīng)用的
是最后一個背景色的值,即“blue”;而在FF中背景色的值為“red”。根據(jù)這一點,我們就可以把FF和
IE的樣式分離開。
OK ,解決了FF和IE的問題,現(xiàn)在來解決IE自己的問題。
看過了嘟嘟的《繞過IE6支持IE5的別一種寫法-IE也支持">"》后有感而發(fā),使用“>”IE是否真的可
以認得?我們來看個例子:
E1{
background-color: red;
>background-color: blue;
}
在FF中得到的是背景色紅色,而在IE中得到的背景色是藍色,根據(jù)樣式重定義的規(guī)則,如果瀏覽器可以識
別“>”,則應(yīng)該得到的藍色的背景
,因此可以知道“>”只有IE可以識別,這點是很重要的哦!在后面大家就會知道了。(注:我測試過其
它的一些符號,如“~”、“`”、“
<”等,都只有IE可以識別,在此為了感謝嘟嘟,推薦使用“>”)
我們再來看個例子:
E1{
>background-color: black;
>background-color : green;
}
這個例子在IE6中得到了黑色的背景;而在IE5.5中得到的綠色的背景;在IE5中也得到了黑色的背景。這
就說明了第二句定義只有IE5.5能識別
,這是個很早就公布的HACK,可以在網(wǎng)上找到相關(guān)的資料,要注意的就是在屬性名之后是有一個空格的。
到此我們已經(jīng)把FF、IE5.5、IE6分離
出來了,那IE5呢?其實現(xiàn)在我們只要把IE5跟IE6分開就OK了,來看看例子:
E1{
>background-color: red;
}
E1{
>background-color: black;
}
這里我們又用到一個HACK,就是“E1{}”,這個定義在IE5以上的版本才能識別出來。這個例子得到
的結(jié)果是,在IE5中的背景色為紅色;
在IE5以上版本中得到的是黑色背景。
終于把不同版本的瀏覽器都分離出來了,這樣我們就可以為不同的瀏覽器定義不同的樣式了。來看個完整
的例子:
E1{
width: 500px;
height: 50px;
background-color: red !important;
background-color: blue;
text-align:center;
}
E1{
>background-color: black;
>background-color : green;
}
需要注意的是,在上面例子中“background-color”定義的順利不能改變,即FF-IE5-IE6-IE5.5。對于IE
的定義在屬性前要加“>”,因為
“E1{}”這個HACK在FF中可以識別。也許你會想,上面的例子不是可以寫成:
E1{
width: 500px;
height: 50px;
background-color: red;
>background-color: blue;
text-align:center;
}
E1{
>background-color: black;
>background-color : green;
}
這樣不就又可以省下幾個字節(jié)?是沒錯,可是HACK不是標準,如果濫用HACK,那只會離標準越來越遠!
div+css實現(xiàn)Firefox和IE6兼容的垂直居中
Firefox中使用display: table-cell; vertical-align: middle;可以實現(xiàn)div垂直居中,而IE6中則需要
借助IE6中css的特點實現(xiàn)垂直居中。為
了實現(xiàn)Firefox和IE6兼容的垂直居中,還需要借助于!important標記。Firefox支持!important標記,而
IE6忽略!important標記,因此可以使
用! important標記區(qū)別Firefox和IE6。
[示例代碼]
<html>
<body>
<div style="display: table-cell; vertical-align: middle; height: 200px; border: 1px
solid red;">
<p>垂直居中,F(xiàn)irefox only</p>
<p>垂直居中,F(xiàn)irefox only</p>
<p>垂直居中,F(xiàn)irefox only</p>
</div>
<div style="border: 1px solid red; height: 200px; position: relative;">
<div style="position: absolute; top: 50%;">
<div style="position: relative; top: -50%;">
<p>垂直居中,IE6 only</p>
<p>垂直居中,IE6 only</p>
<p>垂直居中,IE6 only</p>
</div>
</div>
</div>
<div style="border: 1px solid red; height: 200px; position: relative; display:
table-cell; vertical-align: middle;">
<div style="position: static !important; position: absolute; top: 50%;">
<div style="position: relative; top: -50%;">
<p>垂直居中,F(xiàn)irefox IE6 only</p>
<p>垂直居中,F(xiàn)irefox IE6 only</p>
<p>垂直居中,F(xiàn)irefox IE6 only</p>
</div>
</div>
</div>
</body>
</html>
div+css的瀏覽器兼容問題
水平居中,F(xiàn)irefox使用margin-left: auto; margin-right: auto; IE6 使用text-align: center;
垂直居中,F(xiàn)irefox中使用display: table-cell; vertical-align: middle;可以實現(xiàn)div垂直居中,而
IE6中則需要借助IE6中css的特點實現(xiàn)垂
直居中。
!important標記,F(xiàn)irefox支持!important標記,IE6忽略!important標記