2009-10-28 117 views
2

爲IE和其他瀏覽器分離CSS的最佳方式是什麼?我正在考慮針對IE,Firefox和Safari用戶。尤其是現在在大多數瀏覽器中支持CSS3但IE。針對特定瀏覽器使用不同的CSS樣式

的各種方式來做到這一點,我已經遇到的

  1. 加載單獨的樣式表 有條件使用<!--[if IE]>
  2. 下劃線黑客和其他各種內嵌IE黑客

我喜歡(2)作爲(1)是額外的工作,特別是在開發時。但(2)似乎並不一直工作。什麼是最有效的方法?

+0

您是否針對特定的瀏覽器,除了解決瀏覽器錯誤問題? – outis 2009-10-28 14:22:05

+0

我針對的是支持CSS3的瀏覽器,而沒有支持CSS3的瀏覽器 – sean 2009-10-28 14:24:49

+0

沒有支持所有CSS3的瀏覽器,並且Internet Explorer和Firefox都支持某些CSS 3.(對於CSS 3的定義因爲你可以給它的當前狀態) – Quentin 2009-10-28 14:31:52

回答

3

我會有一個樣式表,一切都在文檔的頂部拾取。

下面這個做你的 [! - [如果IE]] 有條件的樣式表。

在這裏只是覆蓋在IE中導致問題的樣式。 - 被挑選的特定班級的最後一種風格是將要遵循的風格。

+0

這正是我所做的,因爲我討厭搞我的標準兼容樣式表來破解ie的修復。 – 2009-10-28 14:27:58

+0

謝謝。這對我來說。 :) – sean 2009-10-28 14:33:08

2

我們的團隊處理CSS以下三個規則:

  1. 確保通用/ CSS共同文件的工作,因爲他們應該用盡可能靠近他們可能可以所有瀏覽器。
  2. 在單獨的文件中處理所有IE「錯誤」,控制IE樣式條件加載樣式表。
  3. 除非無法按照前兩條規則使其工作,否則不允許黑客入侵。
1

我同意將所有核心CSS保存在一個文件中。如果您使用的是ASP.NET,那麼您可以使用WebHandler來管理實際發送的CSS。我相信其他語言也有類似的解決方案。這允許你只發送你需要的東西並且允許它被緩存。另一個好處是你可以合併多個css文件(如果你是這樣做的話)並且只出現一個。當您減少對Web服務器的請求數時,這是很好的做法。

然後,您可以編寫像[如果lt IE 8] margin:0px;它不會被髮送到IE8或FF等

如果你只是使用HTML,那麼你必須去上面提到的[! - [如果IE]]風格的條件。

我們在我們非常大的項目中使用WebHandler,並且我不會以任何其他方式進行操作。

請參閱http://www.conditional-css.com/download。它可用於PHP,C#和C

祝你好運。

1
<!--[if !IE]><!--><link rel="stylesheet" href="non-ie.css"><!--<![endif]--> 
<!--[if IE]><link rel="stylesheet" href="ie.css"><![endif]--> 

這個技巧廣泛使用Yandex(又名「俄語谷歌」)來減少HTTP請求。例如,使用這個的market.yandex.ru

1

您也可以使用這種方式;某些時候條件可能不適用於需要在代碼中間編寫樣式的地方。

<?php $browser = $_SERVER['HTTP_USER_AGENT']; ?> 
    <?php if (strstr($browser, "MSIE 6.0")) { ?> 
    <link rel="stylesheet" href="ie6style.css" type="text/css" media="screen" /> 
    <?php }else{ ?> 
    <link rel="stylesheet" href="default.css" type="text/css" media="screen" /> 
    <?php } ?> 

檢查$browser有:

IE - 「MSIE」

火狐 - 「火狐」

Safari瀏覽器 - 「野生動物園」

劇 - 「歌劇」

Chrome - 「Chrome」

+0

這隻有在他使用PHP時纔有效 – Marcelo 2012-11-25 13:34:19