CSS中加號 星號及其他符號的作用

2022-09-22 03:54:10 字數 3843 閱讀 8002

在理想世界裡,正確的css應該在任何支援css的瀏覽器裡工作良好。不幸的是, 我們並不是生活在理想的世界裡,瀏覽 器們布滿了bug和不一致。建立乙個跨瀏覽器並且顯示一致的頁面,css開發者必須想盡辦法。通過使用bug和未實現的css,開發者就能夠為不同的瀏覽 器應用不同的規則。hack和filter是開發者強有力的**。了解各種常用的hacks以及它們如何工作,是件重要的事,但什麼時候用和什麼時候不用 它們,也是件同等重要的事情。

css filter或者hack是一種**,用來根據瀏覽器型別,版本號顯示或隱藏css標籤。瀏覽器們對css行為有不同的解釋,對w3c標準的支援程度也不 相同。css 過濾器經常用於在多個瀏覽器中實現一致的布局外觀,因為某些瀏覽器無法渲染。hack(黑客)這樣的稱呼多少有點消極,實質上屬於個人對css**非官方 的修改,誤導人們以為還有更好的方法達到目的,但其實我們沒有,有的人喜歡用patch(補丁)來稱呼它,這樣人們就能知道這本是瀏覽器造成的錯誤。

反斜線符號

這種hack利用了乙個在mac平台上的ie的bug。以\*/結束的注釋在ie mac上是不正確關閉的,所以那些需要被忽略的語句可以放在這種注釋後面。

/* 在ie mac上忽略下面的語句 \*/

selector

/* 忽略結束 */

盒模型hack

(適用於ie6以下版本)

叫它「盒模型hack」是因為它經常被用於解決ie的盒模型錯誤,這個hack可以為ie和其它瀏覽器設定不同的屬性。(在版本6時,ie已經修正了這個盒模型錯誤。)

#elem \"";

voice-family:inherit;

width: [其它瀏覽器中的寬度];

}html>body #elem

第乙個,把voice-family設定為字串"}",但是ie的解析 bug會把它當作乙個反斜線加右括號。選擇 voice-family是因為它不會影響到頁面樣式。第二個規則,使用了html>body hack,是為opera7.0以前瀏覽器,它也有這樣的解析錯誤,但幸好它支援子選擇器,所以有這樣較簡單的方法。

下劃線hack

(適用於ie6及其以下版本)

ie 6 及以下的版本可以識別帶有下劃線字首的屬性,而其它的瀏覽器會忽略它。因此,乙個屬性前面加上下劃線或者連字元,就成為了ie6及以下版本瀏覽器的專有屬性。

#elem

這個hack使用了無效的css,利用了乙個瀏覽器的bug,但是我們有有效的css語句可以完成這樣的事情,所以這個hack不推薦使用。

星號hack

(適用於ie7以下版本)

除了下劃線和連字元,版本7及以下的ie可以識別以非字母字元為字首的屬性,而其它瀏覽器會忽略。

#elem

這個hack不推薦使用,原因同上面的下劃線hack一樣。

星號 html hack

(適用於ie4-6)

html元素是w3c標準dom (document object model)的根元素,但是ie 4至6的版本中還有乙個神秘的父元素。完全相容的瀏覽器會忽略這個* html選擇器,但ie4-6卻會對它正常處理。這樣就可以為這些版本的瀏覽器指定特別的規則。比如,這個規則可以特別指定ie4-6中的文字大小,但對 其它瀏覽器不起作用。

* html p

這個hack使用了完全有效的css。

星號加號hack

(適用於ie7)

雖然ie7不再識別以前的* html hack,但它使用了乙個相似的新的hack。

*:first-child+html p

或者:*+html p

此**只適用於ie7,不適用於其它任何瀏覽器。注意這個hack只在ie7標準模型裡工作正常,在怪異模式下不能用。這個hack也被ie8的相容模式(相當於ie7的標準模式)所支援。和星號html hack一樣,它也使用了有效的css。

子選擇器hack

(適用於ie6及以下版本)

ie6和早期的版本不支援「子選擇器」(>),利用這個我們可以為其它瀏覽器指定特別的規則。舉例來說,這個規則可以讓段落文字在firefox 變成藍色,但在ie7之前的版本裡卻不能。

html > body p

雖然ie7增加了對子選擇器的支援,但人們發現了新的hack可以把ie7也排除。當乙個空的注釋緊跟在子選擇器的後面重複的時候,ie7會不識別後面的規則,就和較早版本的瀏覽器一樣。

html >/**/ body p

否定偽類hack

(可區分ie和非ie)

ie的所有版本都不支援css3 : not() 偽類。有一種變異的hack使用 : root 偽類,此偽類也同樣不被ie識別。

.yourselector /* ie中的值 */

html:not([dummy]) .yourselector /* safari, opera and firefox中的值 */

這種否定選擇器接受任何型別作為引數,屬性,通用,類或id選擇器,或者偽類。然後它會把後面的屬性應用於所有不匹配此語法的元素上。

body:empty hack

(適用於firefox 2.0及以下版本)

:empty 偽類,在css3中介紹過的,用於選擇不含任何內容的元素。然而,geck0 1.8.1 和之後版本(應用在firefox2.0.x 及之後的版本)錯誤地選擇了body:empty 即使body元素包含有內容(一般情況都如此)。這樣我們可以向firefox 2.0x及以下版本提供專用的css規則。

/* 讓 p 元素在 firefox 2.0.x 及以下的版本中不顯示 */

body:empty p

此hack使用有效的css.

!important 怪僻

(適用於ie8以下版本)

ie8及以下版本有一些和!imporant有關的怪僻,它允許乙個賦值優先順序更高。ie7及更早版本接受任意字串替代important,並且會正常處理該值,而其它瀏覽器則會忽略。

/* 在ie8及以下版本下設文字為藍色,其它瀏覽器中為黑色 */

body

相似地,ie8及更早版本接受在!important宣告後面的非字母符號,而其它瀏覽器會忽略它。

body

ie6及以下版本有乙個!important帶來的問題,當在同一段**塊中同一元素的同一屬性有了不同的值,本應結果是第二個值被第乙個取代,但ie6及更低版本並不這麼做。

/* 在ie6及更低版本中設文字為藍色 */

body

所有這些hack使用的是有效的css。

動態屬性

在版本5至7,ie曾支援過一種語法適用於動態變化的css屬性,有時被稱為css表示式。動態屬性通常混合其它hack以補償更早版ie中不支援的屬性。

div

有條件的注釋

有條件的注釋只在windows平台的ie上被識別,並從ie5起開始支援,它甚至可以區分版本5.0,5.5和6.0。

**:下面是一些「有條件的注釋」,可以顯示你正在使用的ie版本。如果你看不到,那麼你用的不是ie:

注意它的語法:

- gt: 高於

- lte:低於或相當

說明:1.它們的基本結構和html注釋一樣()。因此其它所有瀏覽器會把它們當作正常的注釋忽略掉。

2.windows ie裡的程式可以識別這個特殊的

ie8 hack

ie8不能識別「*」和「_」的css hack,所以我們可以使用"\9"來區分ie的各個版本。

color:#0000ff\9; ; /*ie6,ie7,ie8*/

*color:#ffff00; /*ie7*/

_color:#ff0000; /*ie6*/

小結使用hack隱藏**在瀏覽器更新時經常會導致頁面不正常顯示。許多hack曾用於在ie6及更低版本中隱藏css,但在版本7下不再工作,因為ie改進了對css 標準的支援。微軟的ie開發小組曾要求人們使用有條件的注釋,代替使用hack。

整理:

url中加號問題

今天一哥們問我乙個問題 說是提交資料的時候 資料中的 加號 在後台獲取的時候 被空格代替了!我去試了一下 發現還真是這樣 有點無語!這樣後台獲取testname的值 12 3 1 12 3 1 加號不見了!腫麼解決 辦法很多!有的說用encodeuricomponent對加號進行編碼。不過我用的是 ...

在網路傳輸中加號變空格問題

http請求引數中英文 號是要進行url編碼的,因為在http請求引數中加號就是空格的替代字元 因為空格對於http協議規定的url來說是乙個非法字元 所以當你的請求引數 現了乙個加號,就會一律理解成乙個空格。解決的方法就是對加號進行編碼轉換,url編碼的方法是將需要轉換的字元,轉換成英文百分號加字...

CSS 加號選擇器( )

加號選擇器 就是指對找到的某類的元素除第乙個元素以外的兄弟元素起作用,即第乙個元素不起作用,後面的兄弟元素都會起作用 效果 給每乙個li加乙個border left,採用加號選擇器,就沒有使第乙個li標籤產生作用 案例 doctype html html lang en head meta char...