如何寫出兼容大部分瀏覽器的CSS 代碼


前陣子一直在從事b/s 項目的開發,在css 方面有一些心得體會,特寫來與大家分享,歡迎大家評論,不過請勿人身攻擊啊,因為在前幾年我也寫過一篇文章:[原]兼容瀏覽器的布局CSS心得體會

樓下有很多人的評論:

image

image

image

就讓我繼續毀人吧。

 

1:使用Firefox 當主開發瀏覽器

為什么我推薦使用firefox 做為主開發瀏覽器,

首先目前市場上瀏覽器很多,ie6 + ,firefox ,opera,chrome,qq 瀏覽器,360瀏覽器,搜狗瀏覽器…

為什么我把qq 瀏覽器,360瀏覽器,搜狗瀏覽器 這些也算進去,是因為這些瀏覽器雖然使用ie的內核,但是在某些地方顯示的效果不一樣。

有很多人在開發的時候選擇ie 做為瀏覽器,當然我認為如果使用ie 做為主開發瀏覽器的話,那應該是使用

ie8+ ,畢竟在ie8+ 的時候才出現了比較強大的工具,另外如果使用ie的話,那么你經常問自己的問題是“ie 下顯示正常,為什么firefox 下顯示不正常呢?”,這點后面會有解釋。

 

回歸正題:我推薦使用firefox 做為主開發瀏覽器的原因:

a:firefox 下面有開發神器firebug.

firebug 究竟有多厲害,相信使用過的人都知道的,另外firebug 還有yslow,等一系列測速插件,並且firebug啟動速度也比較快。

b:firefox 有很多開發插件,雖然firebug已經很出色了,但是這些插件在某些地方還是很有用的。

c:firefox 是遵守css 標准的瀏覽器,眾所周知ie 在這方面做的比較爛。

以前我曾經看過一篇文章,大致講的是

“ie 下顯示正常,為什么firefox 下顯示不正常呢?”,

其實我感覺應該這樣理解

“為什么firefox 下顯示不正常,但是在ie下顯示正常呢?”

因為當你這樣問自己后,你自己就會去查找,究竟是哪些元素ie沒有遵守css 標准呢。

d:firebug 雖然有控制台,但是有時候javascript 代碼console.write(“something”);,並不會正常的顯示到控制台上面去,

當你碰到console 失敗的時候,請嘗試下下面的步驟

1:啟用firebug

image

2:禁用所有面板和清空激活列表。

image

3:重新啟用firebug。

image

2:使用reset.css

使用reset.css 可以省掉很多事情,比如ul ,li 他們在很多瀏覽器下面的margin ,padding 都不一樣,

通過使用reset.css 可以將大部分不一致的地方給屏蔽掉,沒有理由不使用reset.css啊。

下面是我隨便挑選的一個reset.css.

yui reset.css

3:學習一些基本的CSS 知識

如果想寫好css 的話,那么一些基本的css知識是應該知道的,比如float,margin,padding,position..屬性,還有盒子模型,文檔流模型,在這里沒什么技巧,我只能推薦一些書籍了。

精通CSS:高級Web標准解決方案(第2版)

一些基本的書籍隨便看看,上面的這本書籍才是經典中的經典,個人認為學css不看這本書,看遍千本也枉然。

 

4:常見的bug

常見的一些bug你應該都知道的,事實上在我寫css的這段時間,我發現大部分bug 都基本上是這些bug,大部分顯示不正確的也是這些bug.

a:clearfix

在很多時候一刀切是非常管用的,尤其是對於那些非常喜歡用float的同學。

clearfix

  

b:double margin (雙倍邊距)

有時候你會發現兩個元素的margin 在不同的瀏覽器上顯示不一樣,如果你查看css 的時候發現你設置了float的話,那么很可能你碰到了double margin.  解決這個辦法的原因很簡單,比如設置margin 為0 (即不使用margin,我最早就是這種想法),

最根本的是設置float 元素的display = “inline”.

由於float 元素本來display 就是inline .所以每當你要使用float 的時候,請記住將display 設為inline.

 

c:關於width ,height,line-height,border

border 是一個很好用的東西,在很多時候,僅僅給元素加個border就解決實際問題了,因為加了border的元素在ie 下面就有了hasLayout 屬性。

line-height 也是一個非常讓人頭痛的屬性,有時候你會發現無論你怎么設置height,height 好像不起作用似的,height不起作用有可能是display :line ,也有可能float,同樣也有可能是line-height。

有人說過只要是float 的對象就應該設置width,height,關於這點我認為在某些情況下設置width 是必要的,但是設置height 就不一定了。

 

d:bug 其實沒有那么多

有很多些css 的同學,當碰到一兩個比較棘手的問題的時候,就說這個是ie的bug,可是大部分情況下,是自己的寫法沒有符合標准,或者是沒有正確的理解css,所以他們經常做的就是,試試加個width,加個height。試試加個border,試試修改下margin,padding。 當然很多時候運氣比較好,一下就加對了,但運氣不好的時候就比較郁悶了。解決了bug 是運氣,沒解決bug就是ie的bug,可是事實上ie 的bug 大部分都曾經出現過,所以在對待bug 的時候,還是要心平氣和的分析問題,解決問題。

 

5:應該記住的一些瀏覽器css寫法

如果你使用firefox 做為主開發瀏覽器的話,我相信你的頁面在opera,chrome 下應該也不會太亂,但是ie 我就不敢保證了,這個時候就應該調整ie 兼容性了。

有很多種方式,比如使用條件注釋針對各個ie 瀏覽器引入不同的css。

條件注釋

 

我個人比較喜歡的一種方式還是使用css hacker.

我是從ie8,ie7,ie6,逐漸的調的,因為越到后面需要調的東西越多,而通過這種方式來調的話,我的css 代碼改動是比較小的,即所謂的小步前進吧。

首先找出是哪個元素引起布局混亂,然后看看是不是屬於哪些常見的bug,接着給這個元素設定一個

border.

通過慢慢的查找,相信除了ie6 ,布局應該都是ok的。但是ie6應該怎么做呢?

image

我比較喜歡的是 “_”

image 

參考自:http://zhidao.baidu.com/question/329196001.html

6 :金子般的table

有很多人都不喜歡table,所以才有了div without table. 對於這些人來說table是不需要的,div 是神。

我以前寫過一篇文章:你也可以的,Div Without Table

早這篇文章中,我使用div來布局,雖然題目叫做Div Without Table ,但是我並不是想表達Table 是沒用的,Table 是應該被Without 的,我始終堅信一個原則“div 布局,table 展示數據”。

為什么table 是金子呢?

首先table 是一個很早就出現的元素,而且由於table 比較簡單,所以各個瀏覽器對table 的渲染 大部分都是一致的,所以使用table你很容易實現一些功能。

a:居中顯示

在有些時候居中顯示會讓你比較郁悶,你會感覺到table 的好用和舒服。

b:n行n列

對於幾行幾列的這種布局,不要懷疑,不要猶豫,使用table吧。

c:某些讓你改bug 很郁悶的地方。

有時候你會發現你調來調去總是調不好,如果這個bug 引入table 的代價比較小的話,個人也推薦使用table。

 

傳說div 比table 渲染的要快,因為table 必須得等到</table> ,table 中的元素才會被渲染出來,我沒有測試過,不知道是不是這樣。

 

7:使用一些CSS 框架

如果你的頁面可以使用一些CSS框架的話,那就嘗試使用一款CSS框架吧,960grid, blueprint 應該都還算可以。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM