1. 程式人生 > >position:fixed 與IE中視窗定位

position:fixed 與IE中視窗定位

[if IE 6]>與<![endif]

< !--[if lte IE 6]> ……< ![endif]-->
< !--[if lte IE 6]> ……< ![endif]-->
Ite:less than or equal to意思是小於或等於IE6瀏覽器,用於IE瀏覽器的條件註釋,常用於CSShack,針對IE的JS等。
在進行WEB標準網頁的學習和應用過程 中,網頁對瀏覽器的相容性是經常接觸到的一個問題。其中因微軟公司的Internet Explorer(簡稱IE)佔據瀏覽器市場的大半江山,此外還有Firefox、Opera等。需要對這些瀏覽器進行相容。
同時,單就IE而 言,因IE版本的升級更替,目前瀏覽者使用的主要停留在 IE5(IE5.5)、IE6和IE7這三個版本中。而這3個版本對於我們製作的WEB標準網頁(XHTML+CSS)解釋執行的顯示狀況不盡相同。並且,其他非IE瀏覽器與IE對某些CSS解釋也不一樣。所以,通過IE瀏覽器中的專有條件註釋可有針對性的進行相關屬性的定義。
條件註釋只能用於 Explorer 5+ Windows(以下簡稱IE)(條件註釋從IE5開始被支援)。如果你安裝了多個IE,條件註釋(Conditional comments)將會以最高版本的IE為標準(目前為IE 7)。
條件註釋只能在windows Internet Explorer(以下簡稱IE)下使用,因此我們可以通過條件註釋來為IE新增特別的指令。
通俗點,條件註釋就是一些if判斷,但這些判斷不是 在腳本里執行的,而是直接在html程式碼裡執行的,比如:

< !--[if IE]>
這裡是正常的html程式碼
< ![endif]-->


1,條件註釋的基本結構和HTML的註釋(< !-- --> )是一樣的。因此IE以外的瀏覽器將會把它們看作是普通的註釋而完全忽略它們。
2,IE將會根據if條件來判斷是否如解析普通的頁面內容一樣解析條件註釋裡的內容。
3,條件註釋使用的是HTML的註釋結構,因此他們只能使用在HTML檔案裡,而不能在CSS檔案中使用。
可使用如下 程式碼檢測當前IE瀏覽器的版本(注意:在非IE瀏覽器中是看不到效果的)
< !--[if IE]>
< h1> 您正在使用IE瀏覽器< /h1>
< !--[if IE 5]>
< h2> 版本 5< /h2>
< ![endif]-->
< !--[if IE 5.0]>
< h2> 版本 5.0< /h2>
< ![endif]-->
< !--[if IE 5.5]>
< h2> 版本 5.5< /h2>
< ![endif]-->
< !--[if IE 6]>
< h2> 版本 6< /h2>
< ![endif]-->
< !--[if IE 7]>
< h2> 版本 7< /h2>
< ![endif]-->
< ![endif]-->
那如果當前的瀏覽器是IE,但版本比IE5還低,該怎麼辦呢,可以使用< !-[if ls IE 5]> ,當然,根據條件註釋只能在IE5+的環境之下,所以< !-[if ls IE 5]> 根本不會被執行。
lte: 就是Less than or equal to的簡寫,也就是小於或等於的意思。
lt :就是Less than的簡寫,也就是小於的意思。
gte: 就是Greater than or equal to的簡寫,也就是大於或等於的意思。
gt :就是Greater than的簡寫,也就是大於的意思。
! :就是不等於的意思,跟javascript裡的不等於判斷符相同


Conditional comments屬於CSS hack? 條件判斷屬於CSS hack嗎?
嚴格地說是屬於CSS hack。因為就好象其他真正的css hack一樣,它使得我們可以給一些瀏覽器賦予特殊的樣式,再則它不依賴於某個瀏覽器的BUG來控制另外一個瀏覽器(的樣式)。除此之外,條件判斷還能用來做一些超出CSS HACK範圍的事情(雖然這種情況很少發生)。
因為條件判斷不依賴於某個瀏覽器的hack,而是一個經過深思熟慮的特色功 能,所以我相信它是可以被放心地使用的。當然,其他瀏覽器也有可能支援條件判斷(到目前為止還沒有),但是看起來,他們應該不會使用如< !-[if IE]> 這樣的語法。
應該如何應用條件註釋
本文一開始就說明了,因為IE各版本的瀏覽器對我們製作的WEB標準的頁面解釋不一樣,具體就是對CSS的解釋不同,我們為了相容這些,可運用條件註釋來各自定義,最終達到相容的目的。比如:
< !- 預設先呼叫css.css樣式表 ->
< link rel=" stylesheet" type=" text/css" href=" css.css" />
< !-[if IE 7]>
< !- 如果IE瀏覽器版是7,呼叫ie7.css樣式表 ->
< link rel=" stylesheet" type=" text/css" href=" ie7.css" />
< ![endif]->
< !-[if lte IE 6]>
< !- 如果IE瀏覽器版本小於等於6,呼叫ie.css樣式表 ->
< link rel=" stylesheet" type=" text/css" href=" ie.css" />
< ![endif]->

這 其中就區分了IE7和IE6向下的瀏覽器對CSS的執行,達到相容的目的。同時,首行預設的css.css還能與其他非IE瀏覽器實現相容。
注 意:預設的CSS樣式應該位於HTML文件的首行,進行條件註釋判斷的所有內容必須位於該預設樣式之後。
比如如下程式碼,在IE瀏覽器下執行顯示為 紅色,而在非IE瀏覽器下顯示為黑色。如果把條件註釋判斷放在首行,則不能實現。該例題很能說明網頁對IE瀏覽器和非IE瀏覽器間的相容性問題解決。
< style type=" text/css" >
body{
background-color: #000;
}
< /style>
< !-[if IE]>
< style type=" text/css" >
body{
background-color: #F00;
}
< /style>
< ![endif]->
同時,有人會試圖使用< !-[if !IE]> 來定義非IE瀏覽器下的狀況,但注意:條件註釋只有在IE瀏覽器下才能執行,這個程式碼在非IE瀏覽下非單不是執行該條件下的定義,而是當做註釋視而不見。
正 常就是預設的樣式,對IE瀏覽器需要特殊處理的,才進行條件註釋。
在HTML檔案裡,而不能在CSS檔案中使用。

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

<!--[if !IE]><!--> 除IE外都可識別 <!--<![endif]-->
<!--[if IE]> 所有的IE可識別 <![endif]-->
<!--[if IE 5.0]> 只有IE5.0可以識別 <![endif]-->
<!--[if IE 5]> 僅IE5.0與IE5.5可以識別 <![endif]-->
<!--[if gt IE 5.0]> IE5.0以及IE5.0以上版本都可以識別 <![endif]-->
<!--[if IE 6]> 僅IE6可識別 <![endif]-->
<!--[if lt IE 6]> IE6以及IE6以下版本可識別 <![endif]-->
<!--[if gte IE 6]> IE6以及IE6以上版本可識別 <![endif]-->
<!--[if IE 7]> 僅IE7可識別 <![endif]-->
<!--[if lt IE 7]> IE7以及IE7以下版本可識別 <![endif]-->
<!--[if gte IE 7]> IE7以及IE7以上版本可識別 <![endif]-->