常見瀏覽器兼容性問題與解決方案 所謂的瀏覽器兼容性問題,是指因為不同的瀏覽器對同一段代碼有不同的解析,造成頁面顯示效果不統(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ǔ)丁不同 問題癥狀:隨便寫幾個標(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)的效果!
IE6 專用 IE6 專用 IE7 專用 IE7、FF 共用
1, !important (不是很推薦,用下面的一種感覺最安全) 隨著IE7對!important的支持, !important 方法現(xiàn)在只針對IE6的兼容.(注意寫法.記得該聲明位置需要提前.) 代碼: 2, IE6/IE77對FireFox <from 針對firefoxie6 ie7的css樣式> * html 與 *html 是IE特有的標(biāo)簽, firefox 暫不支持.而* html又為 IE7特有標(biāo)簽. 代碼: 注意: 代碼: 二、萬能 float 閉合(非常重要!) 可以用這個解決多個div對齊時的間距不對, 關(guān)于 clear float 的原理可參見 [How ToClear Floats Without Structural Markup] 代碼: *********************************************************************************************************************** 三、其他兼容技巧(相當(dāng)有用) 1, FF下給 div 設(shè)置 padding 后會導(dǎo)致 width 和 height 增加, 但I(xiàn)E不會.(可用!important解決) 兼容代碼:兼容最推薦的模式。
什么是瀏覽器兼容:當(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 所有瀏覽器 公用(其實也不算是兼容) 介紹完了這三個兼容了,下面我們再來看看如何在一個樣式里分別給一個屬性定義IE6 IE7 FF專用的兼容,看下面的代碼,順序不能錯哦: 程序代碼 height:100px; 下面我簡單解釋一下各瀏覽器怎樣理解這三個屬性: 在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 */ 那么在firefox下字體顏色顯示為#333,IE6下字體顏色顯示為#666,IE7下字體顏色顯示為#999。 2 css布局中的居中問題 主要的樣式定義如下: body {TEXT-ALIGN: center;} 說明: 首先在父級元素定義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{ 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指定一個類: #container{ 第一個min-width是正常的;但第2行的width使用了Javascript,這只有IE才認(rèn)得,這也會讓你的HTML文檔不太正規(guī)。它實際上通過Javascript的判斷來實現(xiàn)最小寬度。 7 清除浮動 .兼容box{ 或者 .兼容box{ 或者加入:after(偽對象),設(shè)置在對象后發(fā)生的內(nèi)容,通常和content配合使用,IE不支持此偽對象,非Ie 瀏覽器支持,所以并不影響到IE/WIN瀏覽器。這種的最麻煩的 ……#box:after{ 8&nbp;DIV浮動IE文本產(chǎn)生3象素的bug 左邊對象浮動,右邊采用外補(bǔ)丁的左邊距來定位,右邊對象內(nèi)的文本會離左邊有3px的間距. #box{ 9 屬性選擇器(這個不能算是兼容,是隱藏css的一個bug) 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ā)生捉迷藏的問題。 11 高度不適應(yīng) 高度不適應(yīng)是當(dāng)內(nèi)層對象的高度發(fā)生變化時外層高度不能自動進(jìn)行調(diào)節(jié),特別是當(dāng)內(nèi)層對象使用 <div id=”box”> CSS: #box {background-color:#eee; } 解決方法:在P對象上下各加2個空的div對象CSS代碼:.1{height:0px;overflow:hidden;}或者為DIV加上border屬性。
屏蔽IE瀏覽器(也就是IE下不顯示) 僅IE7識別 IE6及IE6以下識別 僅IE6不識別 僅IE6與IE5不識別 僅IE5不識別 盒模型解決方法 清除浮動 截字省略號 只有Opera識別 以上都是寫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可見 IE5/MAC的過濾器,一般用不著 下面是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條件注釋 只有IE5.0可以識別 僅IE6可識別
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; } 只有Opera識別 以上都是寫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可見 IE5/MAC的過濾器,一般用不著 下面是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條件注釋 只有IE5.0可以識別 僅IE6可識別
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; } 只有Opera識別 以上都是寫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可見 IE5/MAC的過濾器,一般用不著 下面是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條件注釋 只有IE5.0可以識別 僅IE6可識別
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問題 例如:
浮動后本來外邊距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è)置:
解決辦法是將body換成html 五、如何定義1px左右高度的容器? IE6下這個問題是因為默認(rèn)的行高造成的,解決的方法也有很多,例如:overflow:hidden | zoom:0.08 | line-height:1px 六、怎么樣才能讓層顯示在FLASH之上呢? 解決的辦法是給FLASH設(shè)置透明:
<a >:</a>
這里使用百分比絕對定位,與外補(bǔ)丁負(fù)值的方法,負(fù)值的大小為其自身寬度高度除以二 八、firefox瀏覽器中嵌套div標(biāo)簽的居中問題的解決方法 假定有如下情況:
如果要實現(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兼容表: 在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 { width:200px; height:200px; border:1px solid red;
9. 萬能 float 閉合 說明: 可以用這個解決多個div對齊時的間距不對, 將以下代碼加入GlobalCSS 中,給需要閉合的div加上 class=”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) " "; strContent=strContent.substr(intLen,strContent.length); } strTemp =" " 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部分 2. 集合類對象問題 3. window.event 4. HTML對象的 id 作為對象名的問題 5. 用 idName 字符串取得對象的問題 6. 變量名與某HTML對象 id 相同的問題 7. event.x 與 event.y 問題 8. 關(guān)于frame 9. 取得元素的屬性 10. 在FF中沒有parentElement,parement.children 而用 parentNode,parentNode.childNodes 11. const 問題 12. body 對象 13. url encoding 14. nodeName 和 tagName 問題 15. 元素屬性 16. document.getElementsByName() 和document.all[name] 的問題 17. 調(diào)用子框架或者其它框架中的元素的問題 18. 對象寬高賦值問題
21. 禁止選取網(wǎng)頁內(nèi)容 |
|