一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

兼容性問題

 印度阿三17 2018-10-01

常見瀏覽器兼容性問題與解決方案

所謂的瀏覽器兼容性問題,是指因為不同的瀏覽器對同一段代碼有不同的解析,造成頁面顯示效果不統(tǒng)一的情況。在大多數(shù)情況下,我們的需求是,無論用戶用什么瀏覽器來查看我們的網(wǎng)站或者登陸我們的系統(tǒng),都應(yīng)該是統(tǒng)一的顯示效果。所以瀏覽器的兼容性問題是前端開發(fā)人員經(jīng)常會碰到和必須要解決的問題。

在學(xué)習(xí)瀏覽器兼容性之前,我想把前端開發(fā)人員劃分為兩類:

第一類是精確按照設(shè)計圖開發(fā)的前端開發(fā)人員,可以說是精確到1px的,他們很容易就會發(fā)現(xiàn)設(shè)計圖的不足,并且在很少的情況下會碰到瀏覽器的兼容性問題,而這些問題往往都死瀏覽器的bug,并且他們制作的頁面后期易維護(hù),代碼重用問題少,可以說是比較牢固放心的代碼。

第二類是基本按照設(shè)計圖來開發(fā)的前端開發(fā)人員,很多細(xì)枝末節(jié)差距很大,不如間距,行高,圖片位置等等經(jīng)常會差幾px。某種效果的實現(xiàn)也是反復(fù)調(diào)試得到,具體為什么出現(xiàn)這種效果還模模糊糊,整體布局十分脆弱。稍有改動就亂七八糟。代碼為什么這么寫還不知所以然。這類開發(fā)人員往往經(jīng)常為兼容性問題所困。修改好了這個瀏覽器又亂了另一個瀏覽器。改來改去也毫無頭緒。其實他們碰到的兼容性問題大部分不應(yīng)該歸咎于瀏覽器,而是他們的技術(shù)本身了。

文章主要針對的是第一類,嚴(yán)謹(jǐn)型的開發(fā)人員,因此這里主要從瀏覽器解析差異的角度來分析兼容性問題。

瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)丁和內(nèi)補(bǔ)丁不同
W.SVP.ZU%9

問題癥狀:隨便寫幾個標(biāo)簽,不加樣式控制的情況下,各自的margin 和padding差異較大。

碰到頻率:100%

解決方案:CSS里    *

備注:這個是最常見的也是最易解決的一個瀏覽器兼容性問題,幾乎所有的CSS文件開頭都會用通配符*來設(shè)置各個標(biāo)簽的內(nèi)外補(bǔ)丁是0。

瀏覽器兼容問題二:塊屬性標(biāo)簽float后,又有橫行的margin情況下,在IE6顯示margin比設(shè)置的大

問題癥狀:常見癥狀是IE6中后面的一塊被頂?shù)较乱恍?/p>

碰到頻率:90%(稍微復(fù)雜點的頁面都會碰到,float布局最常見的瀏覽器兼容問題)

解決方案:在float的標(biāo)簽樣式控制中加入 display:inline;將其轉(zhuǎn)化為行內(nèi)屬性

備注:我們最常用的就是div CSS布局了,而div就是一個典型的塊屬性標(biāo)簽,橫向布局的時候我們通常都是用div float實現(xiàn)的,橫向的間距設(shè)置如果用margin實現(xiàn),這就是一個必然會碰到的兼容性問題。

瀏覽器兼容問題三:設(shè)置較小高度標(biāo)簽(一般小于10px),在IE6,IE7,遨游中高度超出自己設(shè)置高度

問題癥狀:IE6、7和遨游里這個標(biāo)簽的高度不受控制,超出自己設(shè)置的高度

碰到頻率:60%

解決方案:給超出高度的標(biāo)簽設(shè)置overflow:hidden;或者設(shè)置行高line-height 小于你設(shè)置的高度。

備注:這種情況一般出現(xiàn)在我們設(shè)置小圓角背景的標(biāo)簽里。出現(xiàn)這個問題的原因是IE8之前的瀏覽器都會給標(biāo)簽一個最小默認(rèn)的行高的高度。即使你的標(biāo)簽是空的,這個標(biāo)簽的高度還是會達(dá)到默認(rèn)的行高。

瀏覽器兼容問題四:行內(nèi)屬性標(biāo)簽,設(shè)置display:block后采用float布局,又有橫行的margin的情況,IE6間距bug

問題癥狀:IE6里的間距比超過設(shè)置的間距

碰到幾率:20%

解決方案:在display:block;后面加入display:inline;display:table;

備注:行內(nèi)屬性標(biāo)簽,為了設(shè)置寬高,我們需要設(shè)置display:block;(除了input標(biāo)簽比較特殊)。在用float布局并有橫向的margin后,在IE6下,他就具有了塊屬性float后的橫向margin的bug。不過因為它本身就是行內(nèi)屬性標(biāo)簽,所以我們再加上display:inline的話,它的高寬就不可設(shè)了。這時候我們還需要在display:inline后面加入display:talbe。

瀏覽器兼容問題五:圖片默認(rèn)有間距

問題癥狀:幾個img標(biāo)簽放在一起的時候,有些瀏覽器會有默認(rèn)的間距,加了問題一中提到的通配符也不起作用。

碰到幾率:20%

解決方案:使用float屬性為img布局

備注:因為img標(biāo)簽是行內(nèi)屬性標(biāo)簽,所以只要不超出容器寬度,img標(biāo)簽都會排在一行里,但是部分瀏覽器的img標(biāo)簽之間會有個間距。去掉這個間距使用float是正道。(我的一個學(xué)生使用負(fù)margin,雖然能解決,但負(fù)margin本身就是容易引起瀏覽器兼容問題的用法,所以我禁止他們使用)

瀏覽器兼容問題六:標(biāo)簽最低高度設(shè)置min-height不兼容

問題癥狀:因為min-height本身就是一個不兼容的CSS屬性,所以設(shè)置min-height時不能很好的被各個瀏覽器兼容

碰到幾率:5%

解決方案:如果我們要設(shè)置一個標(biāo)簽的最小高度200px,需要進(jìn)行的設(shè)置為:{min-height:200px; height:auto !ImportAnt; height:200px; overflow:visible;}

備注:在B/S系統(tǒng)前端開時,有很多情況下我們又這種需求。當(dāng)內(nèi)容小于一個值(如300px)時。容器的高度為300px;當(dāng)內(nèi)容高度大于這個值時,容器高度被撐高,而不是出現(xiàn)滾動條。這時候我們就會面臨這個兼容性問題。

瀏覽器兼容問題七:透明度的兼容CSS設(shè)置

做兼容頁面的方法是:每寫一小段代碼(布局中的一行或者一塊)我們都要在不同的瀏覽器中看是否兼容,當(dāng)然熟練到一定的程度就沒這么麻煩了。建議經(jīng)常會碰到兼容性問題的新手使用。很多兼容性問題都是因為瀏覽器對標(biāo)簽的默認(rèn)屬性解析不同造成的,只要我們稍加設(shè)置都能輕松地解決這些兼容問題。如果我們熟悉標(biāo)簽的默認(rèn)屬性的話,就能很好的理解為什么會出現(xiàn)兼容問題以及怎么去解決這些兼容問題。

1.     /* CSS hack*/

我很少使用hacker的,可能是個人習(xí)慣吧,我不喜歡寫的代碼IE不兼容,然后用hack來解決。不過hacker還是非常好用的。使用hacker我可以把瀏覽器分為3類:IE6 ;IE7和遨游;其他(IE8 Chrome ff Safari opera等)

◆IE6認(rèn)識的hacker 是下劃線_ 和星號 *

◆IE7 遨游認(rèn)識的hacker是星號 *

比如這樣一個CSS設(shè)置:

1.     height:300px;*height:200px;_height:100px;

IE6瀏覽器在讀到height:300px的時候會認(rèn)為高時300px;繼續(xù)往下讀,他也認(rèn)識*heihgt, 所以當(dāng)IE6讀到*height:200px的時候會覆蓋掉前一條的相沖突設(shè)置,認(rèn)為高度是200px。繼續(xù)往下讀,IE6還認(rèn)識_height,所以他又會覆蓋掉200px高的設(shè)置,把高度設(shè)置為100px;

IE7和遨游也是一樣的從高度300px的設(shè)置往下讀。當(dāng)它們讀到*height200px的時候就停下了,因為它們不認(rèn)識_height。所以它們會把高度解析為200px,剩下的瀏覽器只認(rèn)識第一個height:300px;所以他們會把高度解析為300px。因為優(yōu)先級相同且想沖突的屬性設(shè)置后一個會覆蓋掉前一個,所以書寫的次序是很重要的。

 

在網(wǎng)站設(shè)計的時候,應(yīng)該注意css樣式兼容不同瀏覽器問題,特別是對完全使用DIV CSS設(shè)計的網(wǎng),就應(yīng)該更注意IE6 IE7 FF對CSS樣式的兼容,不然,你的網(wǎng)亂可能出去不想出現(xiàn)的效果!


所有瀏覽器 通用
height: 100px;

IE6 專用
_height: 100px;

IE6 專用
*height: 100px;

IE7 專用
* height: 100px;

IE7、FF 共用
height: 100px !important;


一、CSS 兼容
以下兩種方法幾乎能解決現(xiàn)今所有兼容.

1, !important (不是很推薦,用下面的一種感覺最安全)

隨著IE7對!important的支持, !important 方法現(xiàn)在只針對IE6的兼容.(注意寫法.記得該聲明位置需要提前.)

代碼:
<style>
#wrapper {
width: 100px!important; /* IE7 FF */
width: 80px; /* IE6 */
}
</style>

2, IE6/IE77對FireFox <from 針對firefoxie6 ie7的css樣式>

* html 與 *html 是IE特有的標(biāo)簽, firefox 暫不支持.而* html又為 IE7特有標(biāo)簽.

代碼:
<style>
#wrapper { width: 120px; } /* FireFox */
*html #wrapper { width: 80px;} /* ie6 fixed */
* html #wrapper { width: 60px;} /* ie7 fixed, 注意順序 */
</style>

注意:
* html 對IE7的兼容 必須保證HTML頂部有如下聲明:

代碼:
<!DOCTYPE HTML PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN" "http://www./TR/html4/loose.dtd">

二、萬能 float 閉合(非常重要!) 可以用這個解決多個div對齊時的間距不對,

關(guān)于 clear float 的原理可參見 [How ToClear Floats Without Structural Markup]
將以下代碼加入Global CSS 中,給需要閉合的div加上 class=”clearfix” 即可,屢試不爽.

代碼:
<style>
/* Clear Fix */
.clearfix:after {
content:".";
display:block;
height:0;
clear:both;
visibility:hidden;
}
.clearfix {
display:inline-block;
}
/* Hide from IE Mac \*/
.clearfix {display:block;}
/* End hide from IE Mac */
/* end of clearfix */
</style>

***********************************************************************************************************************

三、其他兼容技巧(相當(dāng)有用)

1, FF下給 div 設(shè)置 padding 后會導(dǎo)致 width 和 height 增加, 但I(xiàn)E不會.(可用!important解決)
2, 居中問題.
1).垂直居中.將 line-height 設(shè)置為當(dāng)前 div 相同的高度, 再通過 vetical-align: middle.( 注意內(nèi)容不要換行.)
2).水平居中. margin: 0 auto;(當(dāng)然不是萬能)
3, 若需給 a 標(biāo)簽內(nèi)內(nèi)容加上 樣式, 需要設(shè)置 display: block;(常見于導(dǎo)航標(biāo)簽)
4, FF 和 IE 對 BOX 理解的差異導(dǎo)致相差 2px 的還有設(shè)為 float的div在ie下 margin加倍等問題.
5, ul 標(biāo)簽在 FF 下面默認(rèn)有 list-style 和 padding . 最好事先聲明, 以避免不必要的麻煩. (常見于導(dǎo)航標(biāo)簽和內(nèi)容列表)
6, 作為外部 wrapper 的 div 不要定死高度, 最好還加上 overflow: hidden.以達(dá)到高度自適應(yīng).
7, 關(guān)于手形光標(biāo). cursor: pointer. 而hand只適用于 IE.貼上代碼:

兼容代碼:兼容最推薦的模式。
/* FF */
.submitbutton {
float:left;
width: 40px;
height: 57px;
margin-top: 24px;
margin-right: 12px;
}
/* IE6 */
*html .submitbutton {
margin-top: 21px;
}
/* IE7 */
* html .submitbutton {
margin-top: 21px;
}

 

 

什么是瀏覽器兼容:當(dāng)我們使用不同的瀏覽器(Firefox IE7 IE6)訪問同一個網(wǎng)站,或者頁面的時候,會出現(xiàn)一些不兼容的問題,有的顯示出來正常,有的顯示出來不正常,我們在編寫CSS的時候會很惱火,剛修復(fù)了這個瀏覽器的問題,結(jié)果另外一個瀏覽器卻出了新問題。而兼容就是一種辦法,能讓你在一個CSS里面獨立的寫支持不同瀏覽器的樣式。這下就和諧了。呵呵!

最近微軟發(fā)布的IE7瀏覽器的兼容性確實給一些網(wǎng)頁制 作人員添加了一個沉重的負(fù)擔(dān),雖然IE7已經(jīng)走向標(biāo)準(zhǔn)化,但還是有許多和FF不同的地方,所以需要用到IE7的兼容,有許多朋友問過IE7的兼容是什么, 其實我也不知道。暫時還沒找到IE7專用的兼容。除了前面那片文章,《針對firefox ie6 ie7的css樣式》中的兼容方式也是很好用的。

有一點邏輯思想的人都會知道可以用IE和FF的兼容結(jié)合起來使用,下面介紹三個兼容,例如:(適合新手,呵呵,高手就在這里路過吧。)

程序代碼

第一個兼容,IE FF 所有瀏覽器 公用(其實也不算是兼容)
height:100px;
第二個兼容 IE6專用
_height:100px;
第三個兼容 IE6 IE7公用
*height:100px;

介紹完了這三個兼容了,下面我們再來看看如何在一個樣式里分別給一個屬性定義IE6 IE7 FF專用的兼容,看下面的代碼,順序不能錯哦:

程序代碼

height:100px;
*height:120px;
_height:150px;

下面我簡單解釋一下各瀏覽器怎樣理解這三個屬性:

在FF下,第2、3個屬性FF不認(rèn)識,所以它讀的是height:100px;

在IE7下,第三個屬性IE7不認(rèn)識,所以它讀第1、2個屬性,又因為第二個屬性覆蓋了第一個屬性,所以IE7最終讀出的是第2個屬性*height:120px;

在IE6下,三個屬性IE6都認(rèn)識,所以三個屬性都可以讀取,又因為第三個屬性覆蓋掉前2個屬性,所以IE6最終讀取的是第三個屬性。

 

 

1 針對firefox ie6 ie7的css樣式

現(xiàn)在大部分都是用!important來兼容,對于ie6和firefox測試可以正常顯示,但是ie7對!important可以正確解釋,會導(dǎo)致頁面 沒按要求顯示!找到一個針對IE7不錯的兼容方式就是使用“* html”,現(xiàn)在用IE7瀏覽一下,應(yīng)該沒有問題了現(xiàn)在寫一個CSS可以這樣:

#1 { color: #333; } /* Moz */
* html #1 { color: #666; } /* IE6 */
* html #1 { color: #999; } /* IE*/

那么在firefox下字體顏色顯示為#333,IE6下字體顏色顯示為#666,IE7下字體顏色顯示為#999。

2 css布局中的居中問題

主要的樣式定義如下:

body {TEXT-ALIGN: center;}
#center { MARGIN-RIGHT: auto; MARGIN-LEFT: auto; }

說明:

首先在父級元素定義TEXT-ALIGN: center;這個的意思就是在父級元素內(nèi)的內(nèi)容居中;對于IE這樣設(shè)定就已經(jīng)可以了。

但在mozilla中不能居中。解決辦法就是在子元素定義時候設(shè)定時再加上“MARGIN-RIGHT: auto;MARGIN-LEFT: auto; ”

需要說明的是,如果你想用這個方法使整個頁面要居中,建議不要套在一個DIV里,你可以依次拆出多個div,只要在每個拆出的div里定義MARGIN-RIGHT:auto;MARGIN-LEFT: auto; 就可以了。

3 盒模型不同解釋.

#box{
width:600px;
//for ie6.0- w\idth:500px;
//for ff ie6.0
}
#box{
width:600px!important
//for ff
width:600px;
//for ff ie6.0
width /**/:500px;
//for ie6.0-
}

4 浮動ie產(chǎn)生的雙倍距離

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

這里細(xì)說一下block,inline兩個元素,Block元素的特點是:總是在新行上開始,高度,寬度,行高,邊距都可以控制(塊元素);Inline元素的特點是:和其他元素在同一行上,…不可控制(內(nèi)嵌元素);

#box{ display:block; //可以為內(nèi)嵌元素模擬為塊元素 display:inline; //實現(xiàn)同一行排列的的效果 diplay:table;

5 IE與寬度和高度的問題

IE不認(rèn)得min-這個定義,但實際上它把正常的width和height當(dāng)作有min的情況來使。這樣問題就大了,如果只用寬度和高度,正常的瀏覽器里這兩個值就不會變,如果只用min-width和min-height的話,IE下面根本等于沒有設(shè)置寬度和高度。比如要設(shè)置背景圖片,這個寬度是比較重 要的。要解決這個問題,可以這樣:

#box{ width: 80px; height: 35px;}html>body #box{width: auto; height: auto; min-width: 80px; min-height: 35px;}

6 頁面的最小寬度

min-width是個非常方便的CSS命令,它可以指定元素最小也不能小于某個寬度,這樣就能保證排版一直正確。但I(xiàn)E不認(rèn)得這個,而它實際上把 width當(dāng)做最小寬度來使。為了讓這一命令在IE上也能用,可以把一個<div> 放到 <body> 標(biāo)簽下,然后為div指定一個類:
然后CSS這樣設(shè)計:

#container{
min-width: 600px;
width:e-xpression(document.body.clientWidth < 600? “600px”: “auto” );
}

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

7 清除浮動

.兼容box{
display:table;
//將對象作為塊元素級的表格顯示
}

或者

.兼容box{
clear:both;
}

或者加入:after(偽對象),設(shè)置在對象后發(fā)生的內(nèi)容,通常和content配合使用,IE不支持此偽對象,非Ie 瀏覽器支持,所以并不影響到IE/WIN瀏覽器。這種的最麻煩的

……#box:after{
content: “.”;
display: block;
height: 0;
clear: both;
visibility: hidden;
}

8&nbp;DIV浮動IE文本產(chǎn)生3象素的bug

左邊對象浮動,右邊采用外補(bǔ)丁的左邊距來定位,右邊對象內(nèi)的文本會離左邊有3px的間距.

#box{
float:left;
width:800px;}
#left{
float:left;
width:50%;}
#right{
width:50%;
}
*html #left{
margin-right:-3px;
//這句是關(guān)鍵
}
HTML代碼
<DIV id=box>
<DIV id=left></DIV>
<DIV id=right></DIV>
</DIV>

9 屬性選擇器(這個不能算是兼容,是隱藏css的一個bug)

p[id]{}div[id]{}
p[id]{}div[id]{}

這個對于IE6.0和IE6.0以下的版本都隱藏,FF和OPera作用

屬性選擇器和子選擇器還是有區(qū)別的,子選擇器的范圍從形式來說縮小了,屬性選擇器的范圍比較大,如p[id]中,所有p標(biāo)簽中有id的都是同樣式的.

10 IE捉迷藏的問題

當(dāng)div應(yīng)用復(fù)雜的時候每個欄中又有一些鏈接,DIV等這個時候容易發(fā)生捉迷藏的問題。
有些內(nèi)容顯示不出來,當(dāng)鼠標(biāo)選擇這個區(qū)域是發(fā)現(xiàn)內(nèi)容確實在頁面。
解決辦法:對#layout使用line-height屬性或者給#layout使用固定高和寬。頁面結(jié)構(gòu)盡量簡單。

11 高度不適應(yīng)

高度不適應(yīng)是當(dāng)內(nèi)層對象的高度發(fā)生變化時外層高度不能自動進(jìn)行調(diào)節(jié),特別是當(dāng)內(nèi)層對象使用
margin 或paddign 時。例:

<div id=”box”>
<p>p對象中的內(nèi)容</p>
</div>

CSS:

#box {background-color:#eee; }
#box p {margin-top: 20px;margin-bottom: 20px; text-align:center; }

解決方法:在P對象上下各加2個空的div對象CSS代碼:.1{height:0px;overflow:hidden;}或者為DIV加上border屬性。

 

 

屏蔽IE瀏覽器(也就是IE下不顯示)
*:lang(zh) select {font:12px !important;} /*FF,OP可見*/
select:empty {font:12px !important;} /*safari可見*/
這里select是選擇符,根據(jù)情況更換。第二句是MAC上safari瀏覽器獨有的。

僅IE7識別
* html {…}
當(dāng)面臨需要只針對IE7做樣式的時候就可以采用這個兼容。

IE6及IE6以下識別
* html {…}
這個地方要特別注意很多地主都寫了是IE6的兼容其實IE5.x同樣可以識別這個兼容。其它瀏覽器不識別。
html/**/ >body select {……}
這句與上一句的作用相同。

僅IE6不識別
select { display /*IE6不識別*/:none;}
這里主要是通過CSS注釋分開一個屬性與值,流釋在冒號前。

僅IE6與IE5不識別
select/**/ { display /*IE6,IE5不識別*/:none;}
這里與上面一句不同的是在選擇符與花括號之間多了一個CSS注釋。

僅IE5不識別
select/*IE5不識別*/ { display:none;}
這一句是在上一句中去掉了屬性區(qū)的注釋。只有IE5不識別

盒模型解決方法
selct {width:IE5.x寬度; voice-family:""}""; voice-family:inherit; width:正確寬度;}
盒模型的清除方法不是通過!important來處理的。這點要明確。

清除浮動
select:after {content:"."; display:block; height:0; clear:both;visibility:hidden;}
在Firefox中,當(dāng)子級都為浮動時,那么父級的高度就無法完全的包住整個子級,那么這時用這個清除浮動的兼容來對父級做一次定義,那么就可以解決這個問題。

截字省略號
select { -o-text-overflow:ellipsis; text-overflow:ellipsis;white-space:nowrapoverflow:hidden; }
這個是在越出長度后會自行的截掉多出部分的文字,并以省略號結(jié)尾,很好的一個技術(shù)。只是目前Firefox并不支持。

只有Opera識別
@media all and (min-width: 0px){ select {……} }
針對Opera瀏覽器做單獨的設(shè)定。

以上都是寫CSS中的一些兼容,建議遵循正確的標(biāo)簽嵌套(divul li 嵌套結(jié)構(gòu)關(guān)系),這樣可以減少你使用兼容的頻率,不要進(jìn)入理解誤區(qū),并不是一個頁面就需要很多的兼容來保持多瀏覽器兼容),很多情況下也許一個兼容都不用 也可以讓瀏覽器工作得非常好,這些都是用來解決局部的兼容性問題,如果希望把兼容性的內(nèi)容也分離出來,不妨試一下下面的幾種過濾器。這些過濾器有的是寫在 CSS中通過過濾器導(dǎo)入特別的樣式,也有的是寫在HTML中的通過條件來鏈接或是導(dǎo)入需要的補(bǔ)丁樣式。

IE5.x的過濾器,只有IE5.x可見
@media tty {
i{content:"";/*" "*/}} @import ’ie5win.css’; /*";}
}/* */

IE5/MAC的過濾器,一般用不著
/**//*/
@import "ie5mac.css";
/**/

下面是IE的條件注釋,個人覺得用條件注釋調(diào)用相應(yīng) 兼容是比較完美的多瀏覽器兼容的解決辦法。把需要兼容的地方單獨放到一個文件里面,當(dāng)瀏覽器版本符合的時候就可以調(diào)用那個被兼容的樣式,這樣不僅使用起來非常方便,而且對于制作這個CSS本身來講,可以更嚴(yán)格的觀察到是否有必要使用兼容,很多情況下,當(dāng)我本人寫CSS如果把全部代碼包括兼容都寫到一個 CSS文件的時候的時候會很隨意,想怎么兼容就怎么兼容,而你獨立出來寫的時候,你就會不自覺的考慮是否有必要兼容,是先兼容 CSS?還是先把主CSS里面的東西調(diào)整到盡可能的不需要兼容?當(dāng)你僅用很少的兼容就讓很多瀏覽器很乖很聽話的時候,你是不是很有成就感呢?你知道怎么選擇了吧~~呵呵

IE的if條件兼容 自己可以靈活使用參看這篇IE條件注釋
Only IE
所有的IE可識別

只有IE5.0可以識別
Only IE 5.0
IE5.0包換IE5.5都可以識別

僅IE6可識別
Only IE 7/-
IE6以及IE6以下的IE5.x都可識別
Only IE 7/-
僅IE7可識別

 

 

Css 當(dāng)中有許多的東西不不按照某些規(guī)律來的話,會讓你很心煩,雖然你可以通過很多的兼容,很多的!important來控制它,但是你會發(fā)現(xiàn)長此以往你會很不甘心,看看許多優(yōu)秀的網(wǎng)站,他們的CSS讓IE6,Ie7,Firefox,甚至Safari,Opera運(yùn)行起來完美無缺是不是很羨慕?而他們看似復(fù)雜的模版下面使用的兼容少得可憐。其實你要知道IE 和 Firefox 并不不是那么的不和諧,我們找到一定的方法,是完全可以讓他們和諧共處的。不要你認(rèn)為發(fā)現(xiàn)了兼容的辦法,你就掌握了一切,我們并不是兼容的奴隸。

div ul li 的嵌套順序

今天只講一個規(guī)則。就是<div><ul><li>的三角關(guān)系。我的經(jīng)驗就是<div>在最外面,里面 是<ul>,然后再是<li>,當(dāng)然<li>里面又可以嵌套<div>什么的,但是并不建議你嵌套很多 東西。當(dāng)你符合這樣的規(guī)則的時候,那些倒霉的,不聽話的間隙就不會在里面出現(xiàn)了,當(dāng)你僅僅是<div>里面放<li>,而不 用<ul>的時候,你會發(fā)現(xiàn)你的間隙十分難控制,一般情況下,IE6和IE7會憑空多一些間距。但很多情況你來到下一行,間隙就沒了,但是前 面的內(nèi)容又空了很大一塊,出現(xiàn)這種情況雖然你可以改變IE的Margin,然后調(diào)整Firefox下面的Padding,以便使得兩者顯示起來得效果很相 似,但是你得CSS將變得臭長無比,你不得不多考慮更多可能出現(xiàn)這種問題補(bǔ)救措施,雖然你知道千篇一律來兼容它們,但是你會煩得要命。

具體嵌套寫法

遵循上面得嵌套方式,<div><ul><li></li></ul></div>然后在CSS 里面告訴 ul {Margin:0pxadding:0px;list- style:none;},其中l(wèi)ist-style:none是不讓<li>標(biāo)記的最前方顯示圓點或者數(shù)字等目錄類型的標(biāo)記,因為IE和 Firefox顯示出來默認(rèn)效果有些不一樣。因此這樣不需要做任何手腳,你的IE6、和IE7、Firefox顯示出來的東西(外距,間距,高度,寬度) 就幾乎沒什么區(qū)別了,也許細(xì)心的你會在某一個時刻發(fā)現(xiàn)一、兩個象素的差別,但那已經(jīng)很完美了,不需要你通過調(diào)整大片的CSS來控制它們的顯示了,你愿意, 你可以僅僅兼容一兩個地方,而且通常這種兼容可以適應(yīng)各種地方,不需要你重復(fù)在不同的地方調(diào)試不同的兼容方式–減輕你的煩 overflow:hidden; }
這個是在越出長度后會自行的截掉多出部分的文字,并以省略號結(jié)尾,很好的一個技術(shù)。只是目前Firefox并不支持。

只有Opera識別
@media all and (min-width: 0px){ select {……} }
針對Opera瀏覽器做單獨的設(shè)定。

以上都是寫CSS中的一些兼容,建議遵循正確的標(biāo)簽嵌套(divul li 嵌套結(jié)構(gòu)關(guān)系),這樣可以減少你使用兼容的頻率,不要進(jìn)入理解誤區(qū),并不是一個頁面就需要很多的兼容來保持多瀏覽器兼容),很多情況下也許一個兼容都不用 也可以讓瀏覽器工作得非常好,這些都是用來解決局部的兼容性問題,如果希望把兼容性的內(nèi)容也分離出來,不妨試一下下面的幾種過濾器。這些過濾器有的是寫在 CSS中通過過濾器導(dǎo)入特別的樣式,也有的是寫在HTML中的通過條件來鏈接或是導(dǎo)入需要的補(bǔ)丁樣式。

IE5.x的過濾器,只有IE5.x可見
@media tty {
i{content:"";/*" "*/}} @import ’ie5win.css’; /*";}
}/* */

IE5/MAC的過濾器,一般用不著
/**//*/
@import "ie5mac.css";
/**/

下面是IE的條件注釋,個人覺得用條件注釋調(diào)用相應(yīng) 兼容是比較完美的多瀏覽器兼容的解決辦法。把需要兼容的地方單獨放到一個文件里面,當(dāng)瀏覽器版本符合的時候就可以調(diào)用那個被兼容的樣式,這樣不僅使用起來非常方便,而且對于制作這個CSS本身來講,可以更嚴(yán)格的觀察到是否有必要使用兼容,很多情況下,當(dāng)我本人寫CSS如果把全部代碼包括兼容都寫到一個 CSS文件的時候的時候會很隨意,想怎么兼容就怎么兼容,而你獨立出來寫的時候,你就會不自覺的考慮是否有必要兼容,是先兼容 CSS?還是先把主CSS里面的東西調(diào)整到盡可能的不需要兼容?當(dāng)你僅用很少的兼容就讓很多瀏覽器很乖很聽話的時候,你是不是很有成就感呢?你知道怎么選擇了吧~~呵呵

IE的if條件兼容 自己可以靈活使用參看這篇IE條件注釋
Only IE
所有的IE可識別

只有IE5.0可以識別
Only IE 5.0
IE5.0包換IE5.5都可以識別

僅IE6可識別
Only IE 7/-
IE6以及IE6以下的IE5.x都可識別
Only IE 7/-
僅IE7可識別

 

 

Css 當(dāng)中有許多的東西不不按照某些規(guī)律來的話,會讓你很心煩,雖然你可以通過很多的兼容,很多的!important來控制它,但是你會發(fā)現(xiàn)長此以往你會很不甘心,看看許多優(yōu)秀的網(wǎng)站,他們的CSS讓IE6,Ie7,Firefox,甚至Safari,Opera運(yùn)行起 來完美無缺是不是很羨慕?而他們看似復(fù)雜的模版下面使用的兼容少得可憐。其實你要知道IE 和 Firefox 并不不是那么的不和諧,我們找到一定的方法,是完全可以讓他們和諧共處的。不要你認(rèn)為發(fā)現(xiàn)了兼容的辦法,你就掌握了一切,我們并不是兼容的奴隸。

div ul li 的嵌套順序

今天只講一個規(guī)則。就是<div><ul><li>的三角關(guān)系。我的經(jīng)驗就是<div>在最外面,里面 是<ul>,然后再是<li>,當(dāng)然<li>里面又可以嵌套<div>什么的,但是并不建議你嵌套很多 東西。當(dāng)你符合這樣的規(guī)則的時候,那些倒霉的,不聽話的間隙就不會在里面出現(xiàn)了,當(dāng)你僅僅是<div>里面放<li>,而不 用<ul>的時候,你會發(fā)現(xiàn)你的間隙十分難控制,一般情況下,IE6和IE7會憑空多一些間距。但很多情況你來到下一行,間隙就沒了,但是前 面的內(nèi)容又空了很大一塊,出現(xiàn)這種情況雖然你可以改變IE的Margin,然后調(diào)整Firefox下面的Padding,以便使得兩者顯示起來得效果很相 似,但是你得CSS將變得臭長無比,你不得不多考慮更多可能出現(xiàn)這種問題補(bǔ)救措施,雖然你知道千篇一律來兼容它們,但是你會煩得要命。

具體嵌套寫法

遵循上面得嵌套方式,<div><ul><li></li></ul></div>然后在CSS 里面告訴 ul{Margin:0pxadding:0px;list- style:none;},其中l(wèi)ist-style:none是不讓<li>標(biāo)記的最前方顯示圓點或者數(shù)字等目錄類型的標(biāo)記,因為IE和 Firefox顯示出來默認(rèn)效果有些不一樣。因此這樣不需要做任何手腳,你的IE6、和IE7、Firefox顯示出來的東西(外距,間距,高度,寬度) 就幾乎沒什么區(qū)別了,也許細(xì)心的你會在某一個時刻發(fā)現(xiàn)一、兩個象素的差別,但那已經(jīng)很完美了,不需要你通過調(diào)整大片的CSS來控制它們的顯示了,你愿意, 你可以僅僅兼容一兩個地方,而且通常這種兼容可以適應(yīng)各種地方,不需要你重復(fù)在不同的地方調(diào)試不同的兼容方式–減輕你的煩 overflow:hidden; }
這個是在越出長度后會自行的截掉多出部分的文字,并以省略號結(jié)尾,很好的一個技術(shù)。只是目前Firefox并不支持。

只有Opera識別
@media all and (min-width: 0px){ select {……} }
針對Opera瀏覽器做單獨的設(shè)定。

以上都是寫CSS中的一些兼容,建議遵循正確的標(biāo)簽嵌套(divul li 嵌套結(jié)構(gòu)關(guān)系),這樣可以減少你使用兼容的頻率,不要進(jìn)入理解誤區(qū),并不是一個頁面就需要很多的兼容來保持多瀏覽器兼容),很多情況下也許一個兼容都不用 也可以讓瀏覽器工作得非常好,這些都是用來解決局部的兼容性問題,如果希望把兼容性的內(nèi)容也分離出來,不妨試一下下面的幾種過濾器。這些過濾器有的是寫在 CSS中通過過濾器導(dǎo)入特別的樣式,也有的是寫在HTML中的通過條件來鏈接或是導(dǎo)入需要的補(bǔ)丁樣式。

IE5.x的過濾器,只有IE5.x可見
@media tty {
i{content:"";/*" "*/}} @import ’ie5win.css’; /*";}
}/* */

IE5/MAC的過濾器,一般用不著
/**//*/
@import "ie5mac.css";
/**/

下面是IE的條件注釋,個人覺得用條件注釋調(diào)用相應(yīng) 兼容是比較完美的多瀏覽器兼容的解決辦法。把需要兼容的地方單獨放到一個文件里面,當(dāng)瀏覽器版本符合的時候就可以調(diào)用那個被兼容的樣式,這樣不僅使用起來非常方便,而且對于制作這個CSS本身來講,可以更嚴(yán)格的觀察到是否有必要使用兼容,很多情況下,當(dāng)我本人寫CSS如果把全部代碼包括兼容都寫到一個 CSS文件的時候的時候會很隨意,想怎么兼容就怎么兼容,而你獨立出來寫的時候,你就會不自覺的考慮是否有必要兼容,是先兼容 CSS?還是先把主CSS里面的東西調(diào)整到盡可能的不需要兼容?當(dāng)你僅用很少的兼容就讓很多瀏覽器很乖很聽話的時候,你是不是很有成就感呢?你知道怎么選擇了吧~~呵呵

IE的if條件兼容 自己可以靈活使用參看這篇IE條件注釋
Only IE
所有的IE可識別

只有IE5.0可以識別
Only IE 5.0
IE5.0包換IE5.5都可以識別

僅IE6可識別
Only IE 7/-
IE6以及IE6以下的IE5.x都可識別
Only IE 7/-
僅IE7可識別

 

 

Css 當(dāng)中有許多的東西不不按照某些規(guī)律來的話,會讓你很心煩,雖然你可以通過很多的兼容,很多的!important來控制它,但是你會發(fā)現(xiàn)長此以往你會很不甘心,看看許多優(yōu)秀的網(wǎng)站,他們的CSS讓IE6,Ie7,Firefox,甚至Safari,Opera運(yùn)行起 來完美無缺是不是很羨慕?而他們看似復(fù)雜的模版下面使用的兼容少得可憐。其實你要知道IE 和 Firefox 并不不是那么的不和諧,我們找到一定的方法,是完全可以讓他們和諧共處的。不要你認(rèn)為發(fā)現(xiàn)了兼容的辦法,你就掌握了一切,我們并不是兼容的奴隸。

div ul li 的嵌套順序

今天只講一個規(guī)則。就是<div><ul><li>的三角關(guān)系。我的經(jīng)驗就是<div>在最外面,里面 是<ul>,然后再是<li>,當(dāng)然<li>里面又可以嵌套<div>什么的,但是并不建議你嵌套很多 東西。當(dāng)你符合這樣的規(guī)則的時候,那些倒霉的,不聽話的間隙就不會在里面出現(xiàn)了,當(dāng)你僅僅是<div>里面放<li>,而不 用<ul>的時候,你會發(fā)現(xiàn)你的間隙十分難控制,一般情況下,IE6和IE7會憑空多一些間距。但很多情況你來到下一行,間隙就沒了,但是前 面的內(nèi)容又空了很大一塊,出現(xiàn)這種情況雖然你可以改變IE的Margin,然后調(diào)整Firefox下面的Padding,以便使得兩者顯示起來得效果很相 似,但是你得CSS將變得臭長無比,你不得不多考慮更多可能出現(xiàn)這種問題補(bǔ)救措施,雖然你知道千篇一律來兼容它們,但是你會煩得要命。

具體嵌套寫法

遵循上面得嵌套方式,<div><ul><li></li></ul></div>然后在CSS 里面告訴 ul {Margin:0pxadding:0px;list- style:none;},其中l(wèi)ist-style:none是不讓<li>標(biāo)記的最前方顯示圓點或者數(shù)字等目錄類型的標(biāo)記,因為IE和 Firefox顯示出來默認(rèn)效果有些不一樣。因此這樣不需要做任何手腳,你的IE6、和IE7、Firefox顯示出來的東西(外距,間距,高度,寬度) 就幾乎沒什么區(qū)別了,也許細(xì)心的你會在某一個時刻發(fā)現(xiàn)一、兩個象素的差別,但那已經(jīng)很完美了,不需要你通過調(diào)整大片的CSS來控制它們的顯示了,你愿意, 你可以僅僅兼容一兩個地方,而且通常這種兼容可以適應(yīng)各種地方,不需要你重復(fù)在不同的地方調(diào)試不同的兼容方式–減輕你的煩。你可以ul.class1, ul.class2, ul.class3{xxx:xxxx}的方式方便的整理出你要兼容的地方,而統(tǒng)一兼容。嘗試一下吧,再也不要亂嵌套了,雖然在Div CSS的方式下你幾乎可以想怎么嵌套就怎么嵌套,但是按照上面的規(guī)律你將輕松很多,從而事半功倍!

去掉ie有默認(rèn)最低高度

<div style="height:2px;background:red;overflow:hidden;"></div>

其中height:2px為你要設(shè)的高度,overflow:hidden最為關(guān)鍵,他就是幫你去掉默認(rèn)高度

 

隨著最新CSS的不斷完善,越來越多的網(wǎng)站采用DIV CSS布局。而原來使用table套 table的網(wǎng)頁布局模式也逐漸應(yīng)該淘汰了。由于目前IE6不能支持有些標(biāo)準(zhǔn)的CSS,需要用微軟特有的CSS來修復(fù)這些BUG.而且現(xiàn)在隨著瀏覽器層出不窮,要是頁面能夠適應(yīng)盡量多的瀏覽器成為一個課題。 但是隨著CSS標(biāo)準(zhǔn)的進(jìn)一步完善,瀏覽器將最終都會遵循這個標(biāo)準(zhǔn),到時候?qū)慏IV CSS布局的頁 面就不那么麻煩了。

但是現(xiàn)在,我們還是需要處理CSS在不同瀏覽器下的兼容性。一下是一個網(wǎng)友寫的CSS兼容技巧,值得大家參考。

CSS兼容技巧

1 FF下給 div 設(shè)置 padding 后會導(dǎo)致 width 和 height 增加, 但I(xiàn)E不會.

            可用important解決

2 居中問題.

  1).垂直居中.將 line-height 設(shè)置為 當(dāng)前 div 相同的高度, 再通過vertical-align: middle.( 注意內(nèi)容不要換行.)

   2).水平居中. margin: 0 auto;(當(dāng)然不是萬能)

3 若需給 a 標(biāo)簽內(nèi)內(nèi)容加上樣式, 需要設(shè)置 display: block;(常見于導(dǎo)航標(biāo)簽)

4 FF 和 IE 對 BOX 理解的差異導(dǎo)致相差 2px 的還有設(shè)為 float的div在ie下 margin加倍等問題.

5 ul 標(biāo)簽在 FF 下面默認(rèn)有l(wèi)ist-style 和 padding . 最好事先聲明, 以避免不必要的麻煩. (常見于導(dǎo)航標(biāo)簽和內(nèi)容列表)

6 作為外部 wrapper 的 div 不要定死高度, 最好還加上 overflow: hidden.以達(dá)到高度自適應(yīng).

7 關(guān)于手形光標(biāo). cursor: pointer. 而hand 只適用于 IE.

針對firefox ie6 ie7的css樣式

現(xiàn)在大部分都是用!important來hack,對于ie6和firefox測試可以正常顯示,

但是ie7對!important可以正確解釋,會導(dǎo)致頁面沒按要求顯示!找到一個針

對IE7不錯的hack方式就是使用“* html”,現(xiàn)在用IE7瀏覽一下,應(yīng)該沒有問題了。

現(xiàn)在寫一個CSS可以這樣:

#1 { color: #333; } /* Moz */

* html #1 { color: #666; } /* IE6*/

* html #1 { color: #999; } /* IE7*/

那么在firefox下字體顏色顯示為#333,IE6下字體顏色顯示為#666,IE7下字體顏色顯示為#999。

css布局中的居中問題

主要的樣式定義如下:

body {TEXT-ALIGN: center;}

#center { MARGIN-RIGHT: auto;MARGIN-LEFT: auto; }

說明:

首先在父級元素定義TEXT-ALIGN: center;這個的意思就是在父級元素內(nèi)的內(nèi)容居中;對于IE這樣設(shè)定就已經(jīng)可以了。

但在mozilla中不能居中。解決辦法就是在子元素定義時候設(shè)定時再加上“MARGIN-RIGHT: auto;MARGIN-LEFT: auto; ”

需要說明的是,如果你想用這個方法使整個頁面要居中,建議不要套在一個DIV里,你可以依次拆出多個div,

只要在每個拆出的div里定義MARGIN-RIGHT: auto;MARGIN-LEFT: auto; 就可以了。

盒模型不同解釋

#box{ width:600px; //for ie6.0-w/idth:500px; //for ff ie6.0}

#box{ width:600px!important //forff width:600px; //for ff ie6.0 width /**/:500px; //for ie6.0-}

浮動ie產(chǎn)生的雙倍距離

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

這里細(xì)說一下block,inline兩個元素,Block元素的特點是:總是在新行上開始,高度,寬度,行高,邊距都可以控制(塊元素);Inline元素的特點是:和其他元素在同一行上,…不可控制(內(nèi)嵌元素);

#box{ display:block; //可以為內(nèi)嵌元素模擬為塊元素 display:inline; //實現(xiàn)同一行排列的的效果 diplay:table;

IE不認(rèn)得min-這個定義,但實際上它把正常的width和height當(dāng)作有min的情況來使。這樣問題就大了,如果只用寬度和高度,

正常的瀏覽器里這兩個值就不會變,如果只用min-width和min-height的話,IE下面根本等于沒有設(shè)置寬度和高度。

比如要設(shè)置背景圖片,這個寬度是比較重要的。要解決這個問題,可以這樣:

#box{ width: 80px; height:35px;}html>body #box{ width: auto; height: auto; min-width: 80px;min-height: 35px;}

 頁面的最小寬度

min-width是個非常方便的CSS命令,它可以指定元素最小也不能小于某個寬度,這樣就能保證排版一直正確。但I(xiàn)E不認(rèn)得這個,

而它實際上把width當(dāng)做最小寬度來使。為了讓這一命令在IE上也能用,可以把一個

放到 標(biāo)簽下,然后為div指定一個類:

然后CSS這樣設(shè)計:

#container{ min-width: 600px;width:expression(document.body.clientWidth < 600? “600px”: “auto” );}

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

清除浮動

.hackbox{ display:table; //將對象作為塊元素級的表格顯示}或者.hackbox{ clear:both;}

或者加入:after(偽對象),設(shè)置在對象后發(fā)生的內(nèi)容,通常和content配合使用,IE不支持此偽對象,非Ie 瀏覽器支持,

所 以并不影響到IE/WIN瀏覽器。這種的最麻煩的……#box:after{ content: “.”; display: block; height: 0; clear: both; visibility: hidden;}

DIV浮動IE文本產(chǎn)生3象素的bug

左邊對象浮動,右邊采用外補(bǔ)丁的左邊距來定位,右邊對象內(nèi)的文本會離左邊有3px的間距.

#box{ float:left;width:800px;}#left{ float:left; width:50%;}#right{ width:50%;}*html #left{margin-right:-3px; //這句是關(guān)鍵}

HTML代碼

屬性選擇器(這個不能算是兼容,是隱藏css的一個bug)

p[id]{}div[id]{}

這個對于IE6.0和IE6.0以下的版本都隱藏,FF和OPera作用

屬性選擇器和子選擇器還是有區(qū)別的,子選擇器的范圍從形式來說縮小了,屬性選擇器的范圍比較大,如p[id]中,所有p標(biāo)簽中有id的都是同樣式的.

IE捉迷藏的問題

當(dāng)div應(yīng)用復(fù)雜的時候每個欄中又有一些鏈接,DIV等這個時候容易發(fā)生捉迷藏的問題。

有些內(nèi)容顯示不出來,當(dāng)鼠標(biāo)選擇這個區(qū)域是發(fā)現(xiàn)內(nèi)容確實在頁面。

解決辦法:對#layout使用line-height屬性或者給#layout使用固定高和寬。頁面結(jié)構(gòu)盡量簡單。

高度不適應(yīng)

高度不適應(yīng)是當(dāng)內(nèi)層對象的高度發(fā)生變化時外層高度不能自動進(jìn)行調(diào)節(jié),特別是當(dāng)內(nèi)層對象使用

margin 或paddign時。

例:

       p對象中的內(nèi)容

CSS:#box{background-color:#eee; }

#box p {margin-top:20px;margin-bottom: 20px; text-align:center; }

解決方法:在P對象上下各加2個空的div對象CSS代碼:.1{height:0px;overflow:hidden;}或者為DIV加上border屬性。

 

一、超鏈接點擊過后hover樣式就不出現(xiàn)的問題?

被點擊訪問過的超鏈接樣式不再具有hover和active樣式了,解決方法是改變CSS屬性的排列順序: L-V-H-A

二、IE6的margin雙倍邊距bug問題

例如:

 


<style type="text/css">
    body {margin:0;}
    div {float:left; margin-left:10px; width:200px; height:200px; border:1px solid red;}
</style>
 
 

浮動后本來外邊距10px,但I(xiàn)E解釋為20px,解決辦法是加上display:inline;

三、為什么中火狐瀏覽器下文本無法撐開容器的高度?

標(biāo)準(zhǔn)瀏覽器中固定高度值的容器是不會象IE6里那樣被撐開的,那我又想固定高度,又想能被撐開需要怎樣設(shè)置呢?辦法就是去掉height設(shè)置min-height:200px; 這里為了照顧不認(rèn)識min-height的IE6 可以這樣定義:

 

div { height:auto!important; height:200px; min-height:200px; }
 

四、為什么web標(biāo)準(zhǔn)中無法設(shè)置IE瀏覽器滾動條顏色了?

原來樣式設(shè)置:

 


<style type="text/css">
    body { 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>
 
 

解決辦法是將body換成html

五、如何定義1px左右高度的容器?

IE6下這個問題是因為默認(rèn)的行高造成的,解決的方法也有很多,例如:overflow:hidden | zoom:0.08 | line-height:1px

六、怎么樣才能讓層顯示在FLASH之上呢?

解決的辦法是給FLASH設(shè)置透明:

 

<a >:</a>
<pre lang="html" line="1">
<param name="wmode" value="transparent" />
七、怎樣使一個div層居中于瀏覽器中?

 


<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>
 
 

這里使用百分比絕對定位,與外補(bǔ)丁負(fù)值的方法,負(fù)值的大小為其自身寬度高度除以二

八、firefox瀏覽器中嵌套div標(biāo)簽的居中問題的解決方法

假定有如下情況:

 


<div id="a">
<div id="b"> </div>
</div>
 
 

如果要實現(xiàn)b在a中居中放置,一般只需用CSS設(shè)置a的text-align屬性為center。這樣的方法在IE里看起來一切正常;但是在Firefox中b卻會是居左的。

解決辦法就是設(shè)置b的橫向margin為auto。例如設(shè)置b的CSS樣式為:margin: 0 auto;

 

瀏覽器的內(nèi)核

Mozilla Firefox ( Gecko )

Internet Explorer ( Trident )

Opera ( Presto )

Safari ( WebKit )

Google Chrome ( WebKit )

騰訊TT、世界之窗、360瀏覽器、遨游瀏覽器都是給IE加了個外殼,不過如果電腦上裝的是ie8的話,這些瀏覽器還是調(diào)用ie7的內(nèi)核。搜狗瀏覽器比較特殊,它有兩種瀏覽模式:一是兼容模式,該模式使用IE內(nèi)核;二是高速模式,該模式使用WebKit內(nèi)核。解決ie7、ie8兼容性最好的辦法是在head標(biāo)簽中加入meta 類型<metahttp-equiv="X-UA-Compatible" content="IE=EmulateIE7" />,只要IE8一讀到這個標(biāo)簽,它就會自動啟動IE7兼容模式

CSSHack

解決瀏覽器兼容性問題的主要方法是CSS hack。由于不同的瀏覽器,比如Internet Explorer 6,Internet Explorer 7,Mozilla Firefox等,對CSS的解析認(rèn)識不一樣,因此會導(dǎo)致生成的頁面效果不一樣,得不到我們所需要的頁面效果。這個時候我們就需要針對不同的瀏覽器去寫不同的CSS,讓它能夠同時兼容不同的瀏覽器,能在不同的瀏覽器中也能得到我們想要的頁面效果。這個針對不同的瀏覽器寫不同的CSS code的過程,就叫CSS hack,也叫寫CSS hack。

CSS Hack的原理是什么

由于不同的瀏覽器對CSS的支持及解析結(jié)果不一樣,還由于CSS中的優(yōu)先級的關(guān)系。我們就可以根據(jù)這個來針對不同的瀏覽器來寫不同的CSS。比如 IE6能識別下劃線"_"和星號" * ",IE7能識別星號" * ",但不能識別下劃線"_",而firefox兩個都不能認(rèn)識。等等

各瀏覽器CSS hack兼容表:

 
IE6
IE7
IE8
Firefox
Opera
Safari
!important
 
Y
 Y
Y
 Y
Y
_
Y
 
 
 
 
 
*
Y
Y
 
 
 
 
*
 
Y
 
 
 
 
\9
Y
Y
Y
 
 
 
\0
 
 
Y
 
 
 
nth-of-type(1)
 
 
 
 
Y
Y
如何解決瀏覽器的兼容性

在head標(biāo)簽中加入meta 類型<meta http-equiv="X-UA-Compatible"content="IE=EmulateIE7" />,這樣就解決了ie7、ie8兼容問題。現(xiàn)在剩下ie6、ie7、Firefox、Chrome(Safari與Chrome使用同一內(nèi)核)、Opera這幾種瀏覽器的兼容性問題,我們需要使用CSS Hack來解決該問題。代碼如下所示:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0Transitional//EN""http://www./TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>

<head>

<meta http-equiv="Content-Type"content="text/html; charset=utf-8" />

<meta http-equiv="X-UA-Compatible"content="IE=EmulateIE7" />

<title>瀏覽器兼容性問題</title>

<style type="text/css">

.t1

{

       color:#000000; /*所有瀏覽器都支持 此處填寫Firefox的css*/

       *color:#0000FF;/* ie6 id7 支持此處填寫ie7的css*/

       _color:#66CCCC;/* ie6支持  此處填寫ie6的css*/

}

@media all and (-webkit-min-device-pixel-ratio:10000),not all and (-webkit-min-device-pixel-ratio:0)

{ .t1{color:#9900FF}} /* oprea支持  此處填寫oprea的css*/

@media screen and (-webkit-min-device-pixel-ratio:0)

{

.t1{color:#336600}/* Chrome、Safari支持  此處填寫Chrome的css*/

}

</style>

</head>

<body>

<div class="t1">ff、ie8、ie7、ie6、oprea、Safari兼容性css 書寫模式<br>

.t1{

       color:#000000; /*所有瀏覽器都支持 此處填寫Firefox的css**/<br>

       *color:#0000FF;/* ie6 id7 支持此處填寫ie7的css*/<br>

       _color:#66CCCC;/* ie6支持  此處填寫ie6的css*/<br>

}<br>

/* oprea支持此處填寫oprea的css*/<br>

@media all and (-webkit-min-device-pixel-ratio:10000),not all and (-webkit-min-device-pixel-ratio:0)<br>

{ .t1{color:#CC66FF}}<br>

/* Chrome、Safari支持 此處填寫Chrome的css*/<br>

@media screen and (-webkit-min-device-pixel-ratio:0)

{

.t1{color:#336600}}

}

</div>

</div>

</body>

</html>

常見的瀏覽器兼容問題

Css樣式是與DOCTYPE引入的W3C//DTD有關(guān)的,不同的dtd對css的解析也不同,我們現(xiàn)在統(tǒng)一使用<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0Transitional//EN""http://www./TR/xhtml1/DTD/xhtml1-transitional.dtd">

css兼容問題:

 

1. 默認(rèn)的內(nèi)外邊距不同

問題:

各個瀏覽器默認(rèn)的內(nèi)外邊距不同

解決:

*{margin:0;padding:0;}

 

2. 水平居中的問題

問題:

設(shè)置 text-align: center  

ie6-7文本居中,嵌套的塊元素也會居中

ff /opera /safari /ie8文本會居中,嵌套塊不會居中

解決:

塊元素設(shè)置

1、margin-left:auto;margin-right:auto

2、margin:0 auto;

3、<div align=”center”></div>

3. 垂直居中的問題

問題:

在瀏覽器中 想要垂直居中,設(shè)置vertical-align:middle; 不起作用。例如:ie6下文本與文本輸入框?qū)Σ积R,需設(shè)置vertical-align:middle,但是文本框的內(nèi)容不會垂直居中

解決:

給容器設(shè)置一個與其高度相同的行高

line-height:與容器的height一樣

4. 關(guān)于高度問題

問題:

如果是動態(tài)地添加內(nèi)容,高度最好不要定義。瀏覽器可以自動伸縮,然而如果是靜態(tài)的內(nèi)容,高度最好定好。

如果設(shè)定了高度,內(nèi)容過多時,ie6下會自動增加高度、其他瀏覽器會超出邊框

解決:

1.設(shè)置overflow:hidden;

2.高度自增height:auto!important;height:100px;

 

5. IE6 默認(rèn)的div高度

問題:

ie6默認(rèn)div高度為一個字體顯示的高度,所在ie6下div的高度大于等于一個字的高度,因此在ie6下定義高度為1px的容器,顯示的是一個字體的高度

解決:

為這個容器設(shè)置下列屬性之一

1、設(shè)置overflow:hidden;

2、設(shè)置line-height:1px;

3、設(shè)置zoom:0.08

 

6. IE6 最小高度(寬度)的問題

問題:

ie6不支持min-height、min-width屬性,默認(rèn)height是最小高度,width是最小寬度。

解決:

    使用ie6不支持但其余瀏覽器支持的屬性!important。

設(shè)置屬性min-height:200px; height:auto !important;height:200px;

 

7. td高度的問題

問題:

table中td的寬度都不包含border的寬度,但是oprea和ff中td的高度包含了border的高度

解決:

       設(shè)置line-height和height一樣。在ie中如果td中的沒有內(nèi)容,那么border將不會顯示

8. div嵌套p時,出現(xiàn)空白行

問題:

div中顯示<p>文本</p>,ff、oprea、Chrome:top和bottom都會出現(xiàn)空白行,但是在ie下不會出現(xiàn)空白行。

解決:

設(shè)置p的margin:0px,再設(shè)置div的padding-top和padding-bottom

9. IE6-7圖片下面有空隙的問題

問題:

塊元素中含有圖片時,ie6-7中會出現(xiàn)圖片下有空隙

解決:

1、在源代碼中讓</div>和<img>在同一行

2、將圖片轉(zhuǎn)換為塊級對象display:block;

3、設(shè)置圖片的垂直對齊方式 vertical-align:top/middle/bottom

4、改變父對象的屬性,如果父對象的寬、高固定,圖片大小隨父對象而定,那么可以對父元素設(shè)置:overflow:hidden;

5、設(shè)置圖片的浮動屬性  float:left;

10. IE6雙倍邊距的問題

問題:

ie6中設(shè)置浮動,同時又設(shè)置margin時,會出現(xiàn)雙倍邊距的問題

例float:left;width:100px;margin:0 100px;

解決:

       設(shè)置display:inline;

 

11. IE6 weidth為奇數(shù),右邊多出1px的問題

問題:

父級元素采用相對定位,且寬度設(shè)置為奇數(shù)時,子元素采用絕對定位,在ie6中會出現(xiàn)右側(cè)多出1像素

解決:

將寬度的奇數(shù)值改成偶數(shù)

 

12. IE6兩個層之間3px的問題

問題:

       左邊層采用浮動,右邊沒有采用浮動,這時在ie6中兩層之間就會產(chǎn)生3像素的間距

解決:

1、右邊層也采用浮動  float

2、左邊層添加屬性  margin-right:-3px;

 

13. IE6 子元素絕對定位的問題

問題:

       父級元素使用padding后,子元素使用絕對定位,不能精確定位

解決:

       在子元素中設(shè)置 _left:-20px; _top:-1px;

 

14. 顯示手型cursor:hand

問題:

       ie6/7/8、opera      都支持  但是safari 、 ff 不支持

解決:

寫成 cursor:pointer;  (所有瀏覽器都能識別)  

 

15. IE6-7 line-height失效的問題

問題:

       在ie中img與文字放一起時, line-height不起作用

解決:

都設(shè)置成float

16. td自動換行的問題

問題:

Table寬度固定,td自動換行

解決:

設(shè)置Table的,td的word-wrap:break-word

17. 子容器浮動后,父容器擴(kuò)展問題

問題:

子容器都float以后,父容器沒有設(shè)定高度,父容器將不會擴(kuò)展

解決:

只需要添加一個clear:both的div,代碼如下:

<div style="border:1px solid#333;width:204px">

    <divstyle="width:100px;border:1px solid #333; float:left; ">子容器a</div>

    <divstyle="width:100px;border:1px solid #333; float:left;">子容器b</div>

    <divstyle="clear:both"></div>

</div>

18. 透明png圖片會帶背景色

問題:

在ie6下透明的png圖片會帶一個背景色

解決:

background-image: url(icon_home.png);/* 其他瀏覽器 */

background-repeat: no-repeat;

_filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='icon_home.png');/* IE6 */

_background-image: none; /* IE6 */

19. list-style-position默認(rèn)值的問題

問題:

ie下list-style-position默認(rèn)為inside,  firefox默認(rèn)為outside

解決:

css中指定為outside即可解決兼容性問題

 

20. list-style-image準(zhǔn)確定位的問題

問題:

       li前設(shè)置圖片時,圖片與其后的文字對齊問題

解決:

1、采用背景定位 和 字符縮進(jìn)的方法

background:url() no-repeat left center;text-index:16px;

2、采用相對定位方法

li 設(shè)置list-style:url();

li的子元素position:relative;top:-5px;

21. ul標(biāo)簽?zāi)J(rèn)值的問題

問題:

       ul標(biāo)簽在ff中默認(rèn)是有padding值的,而在ie中只有margin有值

解決:

       定義ul{margin:0;padding:0;}就能解決大部分問題

22. IE中l(wèi)i指定高度后,出現(xiàn)排版錯誤

問題:

在ie下如果為li指定高度可能會出現(xiàn)排版錯位

解決:

       設(shè)置line-height

23. ul或li浮動后,顯示在div外

問題:

div中的ul或li設(shè)置float以后,都不在div中

解決:

必須在ul標(biāo)簽后加<divstyle="clear:both"></div>來閉合外層div

24. ul浮動后,margin變大

問題:

ul設(shè)置 float后,在ie中margin將變大

解決:

設(shè)置ul的display:inline,li的list-style-position:outside

25. li浮動后,margin變大

問題:

li設(shè)置 float后,在ie中margin將變大

解決:

設(shè)置li的display:inline

26. 嵌套使用ul、li的問題

問題:

ie的bug,嵌套使用ul、li時,里層的li設(shè)置float以后,外層li不設(shè)置float, 里面的ul頂部和它外面的li總是有一段間距

解決:

設(shè)置里面的ul的zoom:1

 

27. IE6-7 li底部有3px的問題

問題:

       這個bug產(chǎn)生的充要條件是li的子元素浮動并且li設(shè)置了以下CSS屬性之一:width、height、zoom、padding-top、padding-bottom、margin-top、margin-bottom。

解決:

1、div設(shè)置clear:left|both,這時li不能設(shè)置width、height、zoom。

2、li設(shè)置float:left,這時li可以設(shè)置width、height、zoom。

3、li設(shè)置clear:left|both,這時li不能設(shè)置width、height、zoom。

4、IE6/IE7的這個Bug可以通過給li中的div設(shè)置vertical-align:top|middle|bottom解決。

 

28. IE6 垂直列表間隙的問題

問題:

       li中有a且設(shè)置display:block時,ie6中列表間會出現(xiàn)空隙

解決:

1、li中加display:inline;

2、li使用float  然后 clear:both;

3、給包含的文本末尾添加一個空格

4、設(shè)置width

 

29. IE6 列表背景顏色失效的問題

問題:

當(dāng)父元素設(shè)置position:relative;時,在ie6中第一個ul、ol、dl的背景顏色失效

解決:

       ul、ol、dl 都設(shè)置為position:relative;

 

30. IE6-7 列表背景顏色失效的問題2

問題:

做橫向?qū)Ш綑跁r,ul設(shè)置為float且有背景色,li設(shè)置為float。ie6-7背景顏色失效

解決:

很多ie的bug都可以通過觸發(fā)layout來解決 ul添加屬性

1、height:1%;

2、float:left;

3、zoom:1;

 

31. 列表不能換行的問題

問題:

       li設(shè)置為浮動,后面的li緊隨其后,不能換行

解決:

1、為這個ul定義合適的寬高

2、給包含這個ul 的父div定義合適的寬高。

 

32. li中的內(nèi)容以省略號顯示

問題:

li中內(nèi)容超過長度時,想以省略號顯示, 此方法適用于ie6-7-8、opera、safari瀏覽器

ff瀏覽器不支持

解決:

li{width:200px;white-space:nowrap;text-overflow:ellipsis;

-o-text-overflow:ellipsis; overflow: hidden; }

 

33. 超鏈接訪問過后hover樣式不出現(xiàn)的問題

問題:

       點擊超鏈接后,hover、active樣式?jīng)]有效果

解決:

       改變CSS屬性的排列順序: L-V-H-A

 

34. 禁用中文輸入法的問題

問題:

       不能在輸入框中輸入漢字

解決:

只在ie系列 和ff中有效

ime-mode:disabled    (但可以粘貼)

禁用粘貼:

onpaste="return false"

 

35. 除去滾動條的問題

問題:

       隱藏滾動條

解決:

1、只有ie6-7支持<bodyscroll="no">

2、除ie6-7不支持 body{overflow:hidden}

3、所有瀏覽器 html{overflow:hidden}

 

36. 讓層顯示在FLASH之上

問題:

       想讓層的內(nèi)容顯示在flash上

解決:

把FLASH設(shè)置透明

1、<param name=" wmode "value="transparent" />

2、<param name="wmode"value="opaque"/>

 

37. 去除鏈接虛線邊框的問題

問題:

當(dāng)點擊超鏈接后,ie6/7/8  ff會出現(xiàn)虛線邊框 ,而opera、safari沒有虛線邊框

解決:

ie6/7中 設(shè)置為a { blr:expression(this.onFocus=this.blur()) }

ie8 和 ff 都不支持expression  在ie8 、ff中設(shè)置為 :focus { outline: none; }

 

38. css濾鏡的問題

問題:

    css濾鏡只在ie中有效,F(xiàn)irefox, Safari(WebKit), Opera只能夠設(shè)置透明,它們不支持濾鏡filter,無法實現(xiàn)圖片切換中間變換的效果,只能通過透明度來設(shè)置。

解決:

       ff中設(shè)置透明度   -moz-opacity:0.10; opacity:0.6;

ie中只設(shè)置filter:alpha(opacity=50); 時,ie6-7失效,還要設(shè)置

1、zoom:1;  2、width:100%;

 

39. IE6背景閃爍的問題

問題:

       鏈接、按鈕用CSSsprites作為背景,在ie6下會有背景圖閃爍的現(xiàn)象。原因是:IE6沒有將背景圖緩存,每次觸發(fā)hover的時候都會重新加載

解決:

       可以用JavaScript設(shè)置ie6緩存這些圖片:

document.execCommand("BackgroundImageCache",false,true);

 

40. 出現(xiàn)重復(fù)文字的問題

問題:

<div style="width:400px">

  <divstyle="float:left"></div>

  <!– _ –>

  <div style="float:right;width:400px">↓這就是多出來的那只豬</div>

</div>

解決:

1、  改變結(jié)構(gòu),不出現(xiàn)【一個容器包含2兩個具有“float”樣式的子容器】的結(jié)構(gòu)。

2、減小第二個容器的寬度,使父容器寬度減去第二個容器寬度的值大于3

3、去掉所有的注釋。

4、修正注釋的寫法。<!--[if !IE]>這里是注釋內(nèi)容<![endif]-->

5、在第二個容器后面加一個或者多個<divstyle="clear"></div>來解決。

41. ff、chrome絕對定位無效

問題:

在IE給td設(shè)置position:relative,然后給它包含的一個容器使用position:absolute進(jìn)行定位是有效的,但在FF和Chrome下卻不可以。

解決:

設(shè)置td的display:block。

 

42. IE6 絕對定位的問題

問題:

<div style="position:relative;border:1px solidorange;text-align:center;">

<div style="position:absolute;top:0;left:0;

background:#CCC;">dovapour</div>

<a href="#" title="vapour的blog">內(nèi)容</a>

</div>

解決:

left的定位錯誤問題

1、給父層設(shè)置zoom:1觸發(fā)layout。

2、給父層設(shè)置寬度width

 

bottom的定位錯誤問題

1、給父層設(shè)置zoom:1觸發(fā)layout。

2、給父層設(shè)置高度height

 

43. 子容器寬度大于父容器寬度時,內(nèi)容超出

問題:

子DIV的寬度和父DIV的寬度都已經(jīng)定義,在IE6中如果其子DIV的寬度大于父DIV的寬度,父DIV的寬度將會被擴(kuò)展,在其他瀏覽器中父DIV的寬度將不會擴(kuò)展,子DIV將超出父DIV

解決:

設(shè)置overflow:hidden,子DIV將不會超出父DIV。

44. float的div閉合的問題

問題:

例如:<#div id=”floatA” ><#div id=”floatB”><#div id=” NOTfloatC” >這里的NOTfloatC并不希望繼續(xù)平移,而是希望往下排。(其中floatA、floatB的屬性已經(jīng)設(shè)置為 float:left;)  

這段代碼在IE中毫無問題,問題出在其他瀏覽器中。原因是NOTfloatC并非float標(biāo)簽,必須將float標(biāo)簽 閉合。

解決:

在 <#div class=”floatB”> <#divclass=”NOTfloatC”>之間加上 < #div class=”clear”>這個div一定要注意位置,而且必須與兩個具有float屬性的div同級,之間不能存在嵌套關(guān)系,否則會 產(chǎn)生異常。并且將clear這種樣式定義為為如下即可:.clear{ clear:both;}

 

45. 單選框、復(fù)選框與后面的文字對不齊

問題:

     單選框、復(fù)選框與后面的文字對不齊。

解決:

.align{font-size:12px;}

.align input{ display:block; float:left;}

.align label{ display:block; float:left;padding-top:3px; *padding-top:5px;}

 

需注意的問題:

 

1. 設(shè)置padding后高度和寬帶都會增加

說明:

       除了ie5.5,其他所有瀏覽器中,設(shè)置padding以后高度和寬帶都會增加

2. 使用XHTML 1.0 Transitional后,div寬度

說明:

       在使用XHTML 1.0Transitional以后div寬度都不包含border的寬度了,設(shè)置寬度的時候需要注意下。

3. 外層相對定位,內(nèi)層絕對定位

說明:

ie6下,外層div的postion: relative,并設(shè)置text-align,內(nèi)層div的postion:absolute,這時內(nèi)層的位置是相對于text-align而言的

例如:

<div style="position:relative;border:1px solidorange;text-align:center;zoom:1"> position:relative

<divstyle="position:absolute;top:0;left:0;background:#CCC;">position:absolute</div>

</div>

4.   顯示的大小不一致

說明:

默認(rèn)字本顯示問題,導(dǎo)致 顯示的大小不一致,在ie下比較小一點,其他的瀏覽器都一致,當(dāng)你使用了 造成問題時請注意。

5. 邊框重疊說明

說明:

為 table、td 都指定了邊框后,然后使用border-collapse:collapse讓邊框重疊,可以看出在發(fā)生重疊時,F(xiàn)irefox是用 td 覆蓋 table 的,而 IE 是用 table 覆蓋 td 的。使用時候需要注意。

6. 設(shè)置td padding的說明

說明:

設(shè)置td的padding以后高度和寬帶都會增加,padding-left和padding-right的效果都一樣增加了td的寬帶,但是padding-top和padding-bottom的效果不一樣。最好不要使用td的ding-top和padding-bottom

7. ul設(shè)置的說明

說明:

ul一般設(shè)置:list-style-type:none;margin:0px;padding:0px;li一般設(shè)置:list-style-type:none;list-style-position:outside

8. 使一個層垂直居中于瀏覽器中

說明:

使用百分比絕對定位,與外補(bǔ)丁負(fù)值的技巧,負(fù)值的大小為其自身寬度高度除以二

div {
position:absolute; top:50%; lef:50%; margin:-100px 0 0 -100px;

width:200px; height:200px; border:1px solid red;
}

 

9. 萬能 float 閉合

說明:

可以用這個解決多個div對齊時的間距不對, 將以下代碼加入GlobalCSS 中,給需要閉合的div加上 class=”clearfix” 即可

<style>
/* Clear Fix */
.clearfix:after { content:".";display:block;height:0; clear:both;visibility:hidden;
}
.clearfix {
    display:inline-block;
}
/* Hide from IE Mac \*/
.clearfix {display:block;}
/* End hide from IE Mac */
/* end of clearfix */
</style>

10. 觸發(fā)layout

說明:

IE6中很多Bug都可以通過觸發(fā)layout得到解決.下列的CSS屬性或取值會讓一個元素獲得layout:        

position:absolute 絕對定位元素的包含區(qū)塊(containing block)就會經(jīng)常在這一方面出問題

float:left|right 由于layout元素的特性,浮動模型會有很多怪異的表現(xiàn)

display:inline-block 當(dāng)一個內(nèi)聯(lián)級別的元素需要layout的時候就往往符用到它,這也可能也是這個CSS屬性的唯一效果----讓某個元素有l(wèi)ayout

width: 除auto外的任何值

height: 除auto外的任何值

zoom: 除auto外的任何值

 

11、如何使連續(xù)長字段自動換行

ff最新版本 word-wrap:break-word;就可以了

ff舊版本 還要使用javascript完成文字換行

<style type="text/css">

div {

       width:300px;

      word-wrap:break-word;

       border:1px solidred;

       }

</style>

 

<script type="text/javascript">

function toBreakWord(intLen){

var obj=document.getElementById("ff");

var strContent=obj.innerHTML;

var strTemp="";

while(strContent.length>intLen){

strTemp =strContent.substr(0,intLen) "&#10;";

strContent=strContent.substr(intLen,strContent.length);

}

strTemp ="&#10;" strContent;

obj.innerHTML=strTemp;

}

if(document.getElementById  && !document.all)  toBreakWord(37)

 

12、設(shè)置滾動條顏色 只對ie系列有效 在html中 而不是設(shè)置body

<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>

IE不支持float:inherit overflow:hidden有2個用法,一個是隱藏溢出,另一個是清除浮動。

<div>, <p>, <h1>, <form>, <ul>和 <li>是塊元素的例子

<span>, <a>, <label>, <input>,<img>, <strong> 和<em>是inline元素

<body oncontextmenu="return false"ondragstart="return false"  tstart="returnfalse"  scroll="auto">

這行代碼放在body中,去掉了頁面鼠標(biāo)右鍵快捷菜單,達(dá)到防止圖片另存為的目的。

 

javascript部分
1. document.form.item 問題
問題:
代碼中存在 document.formName.item("itemName") 這樣的語句,不能在FF下運(yùn)行
解決方法:
改用 document.formName.elements["elementName"]

2. 集合類對象問題
問題:
代碼中許多集合類對象取用時使用(),IE能接受,F(xiàn)F不能
解決方法:
改用 [] 作為下標(biāo)運(yùn)算,例:
document.getElementsByName("inputName")(1) 改為document.getElementsByName("inputName")[1]

3. window.event
問題:
使用 window.event 無法在FF上運(yùn)行
解決方法:
FF的 event 只能在事件發(fā)生的現(xiàn)場使用,此問題暫無法解決??梢园?event 傳到函數(shù)里變通解決:
onMouseMove = "functionName(event)"
function functionName (e) {
    e = e || window.event;
    ......
}

4. HTML對象的 id 作為對象名的問題
問題:
在IE中,HTML對象的 ID 可以作為 document 的下屬對象變量名直接使用,在FF中不能
解決方法:
使用對象變量時全部用標(biāo)準(zhǔn)的 getElementById("idName")

5. 用 idName 字符串取得對象的問題
問題:
在IE中,利用eval("idName") 可以取得 id 為 idName 的HTML對象,在FF中不能
解決方法:
用 getElementById("idName") 代替 eval("idName")

6. 變量名與某HTML對象 id 相同的問題
問題:
在FF中,因為對象 id 不作為HTML對象的名稱,所以可以使用與HTML對象 id 相同的變量名,IE中不能
解決方法:
在聲明變量時,一律加上 var ,以避免歧義,這樣在IE中亦可正常運(yùn)行
最好不要取與HTML對象 id 相同的變量名,以減少錯誤

7. event.x 與 event.y 問題
問題:
在IE中,event 對象有x,y屬性,F(xiàn)F中沒有
解決方法:
在FF中,與 event.x 等效的是 event.pageX ,但event.pageX IE中沒有
故采用 event.clientX 代替 event.x ,在IE中也有這個變量
event.clientX 與 event.pageX 有微妙的差別,就是滾動條
要完全一樣,可以這樣:
mX = event.x ? event.x : event.pageX;
然后用 mX 代替 event.x

8. 關(guān)于frame
問題:
在IE中可以用 window.testFrame 取得該frame,F(xiàn)F中不行
解決方法:
window.top.document.getElementById("testFrame").src = 'xx.htm'
window.top.frameName.location = 'xx.htm'

9. 取得元素的屬性
在FF中,自己定義的屬性必須 getAttribute() 取得

10. 在FF中沒有parentElement,parement.children 而用 parentNode,parentNode.childNodes
問題:
childNodes 的下標(biāo)的含義在IE和FF中不同,F(xiàn)F的 childNodes 中會插入空白文本節(jié)點
解決方法:
可以通過 node.getElementsByTagName() 來回避這個問題
問題:
當(dāng)html中節(jié)點缺失時,IE和FF對 parentNode 的解釋不同,例如:
<form>
<table>
<input/>
</table>
</form>
FF中 input.parentNode 的值為form,而IE中 input.parentNode 的值為空節(jié)點
問題:
FF中節(jié)點自己沒有 removeNode 方法
解決方法:
必須使用如下方法 node.parentNode.removeChild(node)

11. const 問題
問題:
在IE中不能使用 const 關(guān)鍵字
解決方法:
以 var 代替

12. body 對象
FF的 body 在 body 標(biāo)簽沒有被瀏覽器完全讀入之前就存在,而IE則必須在 body 完全被讀入之后才存在
這會產(chǎn)生在IE下,文檔沒有載入完時,在body上appendChild會出現(xiàn)空白頁面的問題
解決方法:
一切在body上插入節(jié)點的動作,全部在onload后進(jìn)行

13. url encoding
問題:
一般FF無法識別js中的&
解決方法:
在js中如果書寫url就直接寫&不要寫&

14. nodeName 和 tagName 問題
問題:
在FF中,所有節(jié)點均有 nodeName 值,但 textNode 沒有 tagName 值,在IE中,nodeName 的使用有問題
解決方法:
使用 tagName,但應(yīng)檢測其是否為空

15. 元素屬性
IE下 input.type 屬性為只讀,但是FF下可以修改

16. document.getElementsByName() 和document.all[name] 的問題
問題:
在IE中,getElementsByName()、document.all[name] 均不能用來取得 div 元素
是否還有其它不能取的元素還不知道(這個問題還有爭議,還在研究中)

17. 調(diào)用子框架或者其它框架中的元素的問題
在IE中,可以用如下方法來取得子元素中的值
document.getElementById("frameName").(document.)elementName
window.frames["frameName"].elementName
在FF中則需要改成如下形式來執(zhí)行,與IE兼容:
window.frames["frameName"].contentWindow.document.elementName
window.frames["frameName"].document.elementName

18. 對象寬高賦值問題
問題:
FireFox中類似 obj.style.height = imgObj.height 的語句無效
解決方法:
統(tǒng)一使用 obj.style.height = imgObj.height "px";
19. innerText的問題
問題:
innerText 在IE中能正常工作,但是innerText 在FireFox中卻不行
解決方法:
在非IE瀏覽器中使用textContent代替innerText


20. event.srcElement和event.toElement問題
問題:
IE下,even對象有srcElement屬性,但是沒有target屬性;Firefox下,even對象有target屬性,但是沒有srcElement屬性
解決方法:
var source = e.target || e.srcElement;
var target = e.relatedTarget || e.toElement;

21. 禁止選取網(wǎng)頁內(nèi)容
問題:
FF需要用CSS禁止,IE用JS禁止
解決方法:
IE: obj.onselectstart = function() {return false;}
FF: -moz-user-select:none;
22. 捕獲事件
問題:
FF沒有setCapture()、releaseCapture()方法
解決方法:
IE:
obj.setCapture();
obj.releaseCapture();
FF:
window.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP);
window.releaseEvents(Event.MOUSEMOVE|Event.MOUSEUP);
if (!window.captureEvents) {
       o.setCapture();
}else {
       window.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP);
}
if (!window.captureEvents) {
       o.releaseCapture();
}else {
       window.releaseEvents(Event.MOUSEMOVE|Event.MOUSEUP);
}

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    午夜国产成人福利视频| 亚洲高清亚洲欧美一区二区| 黄色激情视频中文字幕| 日韩在线视频精品中文字幕| 视频一区二区黄色线观看| 精品国产亚洲一区二区三区| 国产传媒高清视频在线| 偷拍偷窥女厕一区二区视频| 欧美一级特黄大片做受大屁股| 日本乱论一区二区三区| 91麻豆精品欧美一区| 日本女人亚洲国产性高潮视频| 亚洲伦片免费偷拍一区| 日本亚洲欧美男人的天堂| 丰满人妻熟妇乱又乱精品古代| 欧美精品久久一二三区| 日韩精品视频免费观看| 亚洲一区二区三区三州| 欧美日韩国产综合在线| 一区二区三区日韩中文| 青青操精品视频在线观看| 国产精品一区二区三区激情| 亚洲天堂精品1024| 久久精品亚洲欧美日韩| 欧美区一区二区在线观看| 国产自拍欧美日韩在线观看| 国产高清精品福利私拍| 乱女午夜精品一区二区三区| 久久国产精品熟女一区二区三区| 欧美日韩黑人免费观看| 欧美视频在线观看一区| 国产精品福利一级久久| 国产精品一区二区视频成人 | 国产精品欧美一区两区| 久久天堂夜夜一本婷婷| 亚洲夫妻性生活免费视频| 国产免费成人激情视频| 亚洲国产另类久久精品| 99久免费精品视频在线观| 一区二区三区国产日韩| 国产传媒欧美日韩成人精品|