讓FireFox與IE兼容 CSS常見問題大全
在前端開發(fā)中,我們經(jīng)常遇到瀏覽器的兼容性問題,特別是IE與FireFox之間。文章列舉了開發(fā)人員比較常見的FireFox與IE之間的兼容性問題,同時(shí)給出了相關(guān)的解決方法。
51CTO相關(guān)閱讀:CSS hack:實(shí)現(xiàn)IE6、IE7、Firefox兼容
1.超鏈接訪問過后hover樣式就不出現(xiàn)的問題
被點(diǎn)擊訪問過的超鏈接樣式不在具有hover和active了,很多人應(yīng)該都遇到過這個(gè)問題,解決方法是改變CSS屬性的排列順序: L-V-H-A:
- <style type="text/css">
- <!--
- a:link {}
- a:visited {}
- a:hover {}
- a:active {}
- -->
- </style>
- <style type="text/css">
- <!--
- a:link {}
- a:visited {}
- a:hover {}
- a:active {}
- -->
- </style>
2.FireFox下如何使連續(xù)長字段自動(dòng)換行
眾所周知IE中直接使用 word-wrap:break-word 就可以了, FF中我們使用JS插入 的方法來解決:
- <style type="text/css">
- <!--
- div {
- width:300px;
- word-wrap:break-word;
- border:1px solid red;
- }
- -->
- </style>
- <div id="ff">aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- aaaaaaaaaaaaaaaaaaaaaaaaaaa</div>
- <style type="text/css">
- <!--
- div {
- width:300px;
- word-wrap:break-word;
- border:1px solid red;
- }
- -->
- </style>
- <div id="ff">aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- aaaaaaaaaaaaaaaaaaaaaaaaaaa</div>
- Java代碼
- <scrīpt type="text/javascrīpt">
- /* <![CDATA[ */
- function toBreakWord(el, intLen){
- var ōbj=document.getElementById(el);
- var strContent=obj.innerHTML;
- var strTemp="";
- while(strContent.length>intLen){
- strTemp+=strContent.substr(0,intLen)+" ";
- strContent=strContent.substr(intLen,strContent.length);
- }
- strTemp+=" "+strContent;
- obj.innerHTML=strTemp;
- }
- if(document.getElementById && !document.all) toBreakWord("ff", 37);
- /* ]]> */
- </script>
- <scrīpt type="text/javascrīpt">
- /* <![CDATA[ */
- function toBreakWord(el, intLen){
- var ōbj=document.getElementById(el);
- var strContent=obj.innerHTML;
- var strTemp="";
- while(strContent.length>intLen){
- strTemp+=strContent.substr(0,intLen)+" ";
- strContent=strContent.substr(intLen,strContent.length);
- }
- strTemp+=" "+strContent;
- obj.innerHTML=strTemp;
- }
- if(document.getElementById && !document.all) toBreakWord("ff", 37);
- /* ]]> */
- </script>
3.ff下為什么父容器的高度不能自適應(yīng)
在子容器加了浮動(dòng)屬性后,該容器將不能自動(dòng)撐開,解決方法是在標(biāo)簽結(jié)束后加上一個(gè)清除浮動(dòng)的元素。
- clear: both;
- clear: both;
4.IE6的雙倍邊距BUG
浮動(dòng)后本來外邊距10px,但I(xiàn)E解釋為20px,解決辦法是加上:
- display: inline
- display: inline
5. IE6下絕對(duì)定位的容器內(nèi)文本無法正常選擇的問題
此問題在IE6、7中存在,解決問題的辦法是讓IE進(jìn)入到qurks mode。
6. IE6下為什么圖片下方有空隙產(chǎn)生
解決這個(gè)BUG的方法也有很多,可以是改變html的排版,或者設(shè)置img 為display:block 或者設(shè)置vertical-align 屬性為vertical-align:top | bottom |middle |text-bottom
都可以解決.
7. IE6下兩個(gè)層中間怎么有間隙
這個(gè)IE的3PX BUG也是經(jīng)常出現(xiàn)的,解決的辦法是給.right也同樣浮動(dòng) float:left 或者相對(duì)IE6定義.left margin-right:-3px;
8. list-style-image無法準(zhǔn)確定位的問題
list-style-image的定位問題也是經(jīng)常有人問的,解決的辦法一般是用li的背景模擬,這里采用相對(duì)定位的方法也可以解決。
9. LI中內(nèi)容超過長度后以省略號(hào)顯示的方法
此方法適用與IE與OP瀏覽器:
- <style type="text/css">
- <! --
- li {
- width: 200px;
- white-space:nowrap;
- text-overflow:ellipsis;
- -o-text-overflow:ellipsis;
- overflow: hidden;
- }
- -->
- </style>
- <style type="text/css">
- <! --
- li {
- width: 200px;
- white-space:nowrap;
- text-overflow:ellipsis;
- -o-text-overflow:ellipsis;
- overflow: hidden;
- }
- -->
- </style>
#p#
10.web標(biāo)準(zhǔn)中定義id與class有什么區(qū)別嗎
一.web標(biāo)準(zhǔn)中是不容許重復(fù)ID的。
比如 div id="aa" 不容許重復(fù)2次,而class 定義的是類,理論上可以無限重復(fù), 這樣需要多次引用的定義便可以使用他.
二.屬性的優(yōu)先級(jí)問題。
ID 的優(yōu)先級(jí)要高于class,看上面的例子。
三.方便JS等客戶端腳本。
如果在頁面中要對(duì)某個(gè)對(duì)象進(jìn)行腳本操作,那么可以給他定義一個(gè)ID,否則只能利用遍歷頁面元素加上指定特定屬性來找到它,這是相對(duì)浪費(fèi)時(shí)間資源,遠(yuǎn)遠(yuǎn)不如一個(gè)ID來得簡單.
11.如何垂直居中文本
將元素高度和行高設(shè)為一致。
- <style type="text/css">
- <!--
- div {
- height:30px;
- line-height:30px;
- border:1px solid red
- }
- -->
- </style>
- <style type="text/css">
- <!--
- div {
- height:30px;
- line-height:30px;
- border:1px solid red
- }
- -->
- </style>
12.如何對(duì)齊文本與文本輸入框
- 加上vertical-align:middle;
- <style type="text/css">
- <!--
- input {
- width:200px;
- height:30px;
- border:1px solid red;
- vertical-align:middle;
- }
- -->
- </style>
- <style type="text/css">
- <!--
- input {
- width:200px;
- height:30px;
- border:1px solid red;
- vertical-align:middle;
- }
- -->
- </style>
13.為什么FF下面不能水平居中呢
FF下面設(shè)置容器的左右外補(bǔ)丁為auto就可以了。
- <style type="text/css">
- <!--
- div {
- margin:0 auto;
- }
- -->
- </style>
- <style type="text/css">
- <!--
- div {
- margin:0 auto;
- }
- -->
- </style>
14.為什么FF下文本無法撐開容器的高度
標(biāo)準(zhǔn)瀏覽器中固定高度值的容器是不會(huì)象IE6里那樣被撐開的,那我又想固定高度,又想能被撐開需要怎樣設(shè)置呢?辦法就是去掉height設(shè)置min-height:200px; 這里為了照顧不認(rèn)識(shí)min-height的IE6 可以這樣定義:
- {
- height:auto!important;
- height:200px;
- min-height:200px;
- }
- {
- height:auto!important;
- height:200px;
- min-height:200px;
- }
15.為什么IE6下容器的寬度和FF解釋不同呢
- <?xml version="1.0" encoding="gb2312"?>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
- <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
- <style type="text/css">
- <!--
- div {
- cursor:pointer;
- width:200px;
- height:200px;
- border:10px solid red
- }
- -->
- </style>
- <div ōnclick="alert(this.offsetWidth)">web標(biāo)準(zhǔn)常見問題大全</div>
- <?xml version="1.0" encoding="gb2312"?>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
- <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
- <style type="text/css">
- <!--
- div {
- cursor:pointer;
- width:200px;
- height:200px;
- border:10px solid red
- }
- -->
- </style>
- <div ōnclick="alert(this.offsetWidth)">web標(biāo)準(zhǔn)常見問題大全</div>
問題的差別在于容器的整體寬度有沒有將邊框(border)的寬度算在其內(nèi),這里IE6解釋為200PX ,而FF則解釋為220PX,那究竟是怎么導(dǎo)致的問題呢?大家把容器頂部的xml去掉就會(huì)發(fā)現(xiàn)原來問題出在這,頂部的申明觸發(fā)了IE的qurks mode。
16.為什么web標(biāo)準(zhǔn)中IE無法設(shè)置滾動(dòng)條顏色了
解決辦法是將body換成html:
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
- <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
- <style type="text/css">
- <!--
- html {
- scrollbar-face-color:#f6f6f6;
- scrollbar-highlight-color:#fff;
- scrollbar-shadow-color:#eeeeee;
- scrollbar-3dlight-color:#eeeeee;
- scrollbar-arrow-color:#000;
- scrollbar-track-color:#fff;
- scrollbar-darkshadow-color:#fff;
- }
- -->
- </style>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
- <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
- <style type="text/css">
- <!--
- html {
- scrollbar-face-color:#f6f6f6;
- scrollbar-highlight-color:#fff;
- scrollbar-shadow-color:#eeeeee;
- scrollbar-3dlight-color:#eeeeee;
- scrollbar-arrow-color:#000;
- scrollbar-track-color:#fff;
- scrollbar-darkshadow-color:#fff;
- }
- -->
- </style>
#p#
17.為什么我定義的樣式?jīng)]有作用呢
這里你無法用.aa定義到li 遇到這種情況怎么解決呢?答案是提高.aa 的優(yōu)先權(quán)。
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
- <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
- <style type="text/css">
- <!--
- #aa ul li {
- color:red
- }
- .aa {
- color:blue
- }
- -->
- </style>
- <div id="aa">
- <ul>
- <li class="aa">
- web標(biāo)準(zhǔn)常見問題大全
- </li>
- </ul>
- </div>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
- <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
- <style type="text/css">
- <!--
- #aa ul li {
- color:red
- }
- .aa {
- color:blue
- }
- -->
- </style>
- <div id="aa">
- <ul>
- <li class="aa">
- web標(biāo)準(zhǔn)常見問題大全
- </li>
- </ul>
- </div>
18.為什么無法定義1px左右高度的容器
IE6下這個(gè)問題是因?yàn)槟J(rèn)的行高造成的,解決的方法也有很多,例如:
- overflow:hidden | zoom:0.08 | line-height:1px
19.為什么這個(gè)背景顏色無法顯示
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
- <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
- <style type="text/css">
- <!--
- ul {
- background:red
- }
- li {
- float:left;
- width:180px;
- }
- -->
- </style>
- <!--[if lte IE 6]>
- <style>
- .gainlayout { height: 1px; }
- </style>
- <![endif]-->
- <ul class="gainlayout">
- <li>web標(biāo)準(zhǔn)常見問題大全</li>
- <li>web標(biāo)準(zhǔn)常見問題大全</li>
- <li>web標(biāo)準(zhǔn)常見問題大全</li>
- <li>web標(biāo)準(zhǔn)常見問題大全</li>
- <li>web標(biāo)準(zhǔn)常見問題大全</li>
- <div style="clear:both"></div>
- </ul>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
- <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
- <style type="text/css">
- <!--
- ul {
- background:red
- }
- li {
- float:left;
- width:180px;
- }
- -->
- </style>
- <!--[if lte IE 6]>
- <style>
- .gainlayout { height: 1px; }
- </style>
- <![endif]-->
- <ul class="gainlayout">
- <li>web標(biāo)準(zhǔn)常見問題大全</li>
- <li>web標(biāo)準(zhǔn)常見問題大全</li>
- <li>web標(biāo)準(zhǔn)常見問題大全</li>
- <li>web標(biāo)準(zhǔn)常見問題大全</li>
- <li>web標(biāo)準(zhǔn)常見問題大全</li>
- <div style="clear:both"></div>
- </ul>
- <!--[if lte IE 6]>
- <style>
- .gainlayout { height: 1px; }
- </style>
- <![endif]-->
- <!--[if lte IE 6]>
- <style>
- .gainlayout { height: 1px; }
- </style>
- <![endif]-->
20.怎么樣才能讓層顯示在FLASH之上呢
- 解決的辦法是給FLASH設(shè)置透明:
- <param name="wmode" value="transparent" />
21.怎樣使一個(gè)層垂直居中于瀏覽器中
這里我們使用百分比絕對(duì)定位,與外補(bǔ)丁負(fù)值的方法,負(fù)值的大小為其自身寬度高度除以二:
- <style type="text/css">
- <!--
- div {
- position:absolute;
- top:50%;
- left:50%;
- margin:-100px 0 0 -100px;
- width:200px;
- height:200px;
- border:1px solid red;
- }
- -->
- </style>
- <style type="text/css">
- <!--
- div {
- position:absolute;
- top:50%;
- left:50%;
- margin:-100px 0 0 -100px;
- width:200px;
- height:200px;
- border:1px solid red;
- }
- -->
- </style>
22 .圖片垂直與容器內(nèi)
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <style type="text/css">
- <!--
- * {margin:0;padding:0}
- div {
- width:500px;
- height:500px;
- border:1px solid #ccc;
- overflow:hidden;
- position:relative;
- display:table-cell;
- text-align:center;
- vertical-align:middle
- }
- div p {
- position:static;
- +position:absolute;
- top:50%
- }
- img {
- position:static;
- +position:relative;
- top:-50%;left:-50%;
- width:276px;
- height:110px
- }
- -->
- </style>
- <div><p><img src="logo.gif" /></p></div>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <style type="text/css">
- <!--
- * {margin:0;padding:0}
- div {
- width:500px;
- height:500px;
- border:1px solid #ccc;
- overflow:hidden;
- position:relative;
- display:table-cell;
- text-align:center;
- vertical-align:middle
- }
- div p {
- position:static;
- +position:absolute;
- top:50%
- }
- img {
- position:static;
- +position:relative;
- top:-50%;left:-50%;
- width:276px;
- height:110px
- }
- -->
- </style>
- <div><p><img src="logo.gif" /></p></div>
或者使用背景圖的辦法:
- background:url("logo.gif") center no-repeat;
23.如何讓div橫向排列
橫向排列DIV可以使用浮動(dòng)的方式比如float:left,或者設(shè)置對(duì)象為內(nèi)聯(lián),還可以絕對(duì)定位對(duì)象等等。
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
- <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
- <style type="text/css">
- <!--
- div {
- float:left;
- width:200px;
- height:200px;
- border:1px solid red
- }
- -->
- </style>
【編輯推薦】