志當(dāng)存高遠(yuǎn),功到自然成!

          少年強(qiáng)則中國強(qiáng),少年進(jìn)步則中國進(jìn)步!

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            53 Posts :: 2 Stories :: 2 Comments :: 0 Trackbacks
          最初發(fā)現(xiàn)遇到“IE7下拉框顯示不全”這個問題時,一直以為是由于IE7的瀏覽器的兼容問題,并未找到這個問題的解決方案。但是開發(fā)應(yīng)用系統(tǒng)過程中,不少用戶都反應(yīng)使用IE7瀏覽器時,出現(xiàn)下拉框顯示不完整的情況。隨著IE7不斷的普及,會有更多的用戶遇到同樣的問題,所以這個問題必須解決,問題是怎么解決,問題出在哪里?
          查找了幾天,查看jsp是否哪里寫錯了,但是并未找到結(jié)果。后來安裝了IE7瀏覽器后,在本地重現(xiàn)了一下,部分下拉框還是出現(xiàn)缺失的現(xiàn)象,我突然發(fā)現(xiàn)有的頁面下拉框是完整的,而有的頁面是缺失的,難道頁面有什么區(qū)別?我仔細(xì)比較了一下完整顯示下拉框和缺失顯示下拉框的頁面,發(fā)現(xiàn)它們的區(qū)別在于頁面聲明的部分"<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">",難道是IE7不支持該標(biāo)簽,或者說該標(biāo)簽在IE7瀏覽器已經(jīng)過時了?我刪除該標(biāo)簽后,驗證了一下,確實問題是出在這里。

          在網(wǎng)上收集整理了一些IE6和IE7關(guān)于CSS兼容表現(xiàn)的資料
          JSP的DOCTYPE聲明說明:
          html
          PUBLIC
          "-// W3C// DTD
          HTML 4.01 Transitional// EN" "http://www.w3.org/TR/html4/loose.dtd">
          (1) (2) (3) (4) (5) (6) (7) (8)

          [Top Element] [Availability] "[Registration]// [Organization]// [Type] [Label]// [Language]" "[URL]">
          (1) (2) (3) (4) (5) (6) (7) (8)

          (1) Top Element: DTD中聲明的最頂層元素,例如html。
          (2) Availability: 指示標(biāo)識符是公共標(biāo)識符號(PUBLIC)還是系統(tǒng)資源(SYSTEM),例如本地文件、url等。
          (3) Registration: 指示組織是否注冊為ISO成員,+表示已經(jīng)注冊為ISO成員,-表示沒有注冊。W3C沒有注冊,所以使用-。
          (4) organization: 對于HTML、XHTML而言指維護(hù)DTD的組織標(biāo)識符,W3C。
          (5) Type: Public Text Class,引用對象的類型,對于HTML、XHTML而言為DTD。
          (6) Label: Public Text Description,引用內(nèi)容的唯一名稱描述,Label里面可以包含一個版本號(4.01),可以包含一個Defintion(有三種Definition: Frameset, Strict, Transitional,下面會描述)。
          (7) Language: 語言代碼。
          (8) URL: 引用DTD的url。
          各個瀏覽器對HTML、CSS的處理,在細(xì)節(jié)上存在很多差異,為了向W3C標(biāo)準(zhǔn)靠近,并且HTML、CSS的標(biāo)準(zhǔn)也在不斷的發(fā)展,因此同一個瀏覽器的不同版本之間,也會存在細(xì)節(jié)處理上的不一致性。現(xiàn)在瀏覽器使用DOCTYPE聲明來決定該使用那種模式處理HTML、CSS,通常提到的有standards mode(標(biāo)準(zhǔn)模式,strict Mode)和quirks mode(兼容模式compliant mode)。標(biāo)準(zhǔn)模式指瀏覽器采用盡量靠近目前W3C規(guī)范的方式,支持目前版本的HTML、XHTML、CSS規(guī)范;兼容模式指瀏覽器按照以前的老版本的方式處理,以兼容那些舊版本的web應(yīng)用。另外需要注意的是,雖然目前主要的瀏覽器都支持這兩種模式,但都有差別,例如Firefox除了上面兩種模式外,還有一個almost standards mode。
          下面是HTML 4.01的DTD,分別為Strict, Transitional, Frameset

          IE 6 CSS增強(qiáng)、IE 7 CSS兼容性
          References: Cascading Style Sheet Compatibility in Internet Explorer 7、 CSS Enhancements in Internet Explorer 6
          Label中的Definition三種類型:Frameset,支持FRAMESET文檔;Transitional,支持除了FRAMESET以外其它所有元素;Strict,不支持W3C準(zhǔn)備淘汰的元素、屬性。這種描述有點讓人糊涂,也無法跟標(biāo)準(zhǔn)standards mode、quirks mode對應(yīng)上,至于具體的定義可以參考W3C標(biāo)準(zhǔn)。

          下面這個表格是比較有用的:
          Label Definition URL present URL not present
          No !DOCTYPE present Off Off
          HTML (No Version Present) Off Off
          HTML 2.0 Off Off
          HTML 3.0 Off Off
          HTML 3.2 Off Off
          HTML 4.0 No Definition Present On On
          HTML 4.0 Frameset On Off
          HTML 4.0 Transitional On Off
          HTML 4.0 Strict On On
          XHTML On On
          XML On On
          Unrecognized !DOCTYPE On On


          其中On表示使用strict mode(standards mode),Off表示使用compliant mode(quirks mode)。URL present/URL not present表示DTD文檔的url是否有在DOCTYPE中聲明;Definition為空或者No Definition Present表示Definition沒有定義。從IE 6開始支持這兩種模式的切換,在strict mode下,IE盡量保持與W3C標(biāo)準(zhǔn)一致,而compliant mode下,IE將保持與以前的IE版本兼容。用這個表格,對照1中幾種DOCTYPE可以知道,只有在strict mode下,IE 7才支持filter:progid:DXImageTransform.Microsoft.Alpha這個濾鏡。讓人奇怪的是,也只有在strict mode下,IE 7才支持filter: alpha(opacity=60),compliant mode下是不支持的,而這個寫法是針對IE 5.5之前版本的。
          在strict mode下面,兩個比較重要的差異點:
          a) Box的height、width計算問題



          CSS標(biāo)準(zhǔn)中,width、height指圖中Content的寬度、高度,而IE在計算寬度、高度時,將包括padding、border

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 康平县| 仁寿县| 绥中县| 西平县| 永泰县| 南丹县| 科技| 乌兰察布市| 上饶县| 湖北省| 汕尾市| 兰溪市| 巴林右旗| 兴宁市| 金塔县| 得荣县| 北海市| 桐庐县| 天峨县| 南昌市| 临猗县| 郎溪县| 鹤岗市| 稻城县| 嘉善县| 绿春县| 冷水江市| 武平县| 长子县| 阿图什市| 鲜城| 德州市| 广灵县| 旌德县| 城口县| 和平区| 河间市| 辽宁省| 阿拉善左旗| 天门市| 津市市|