2010-12-10 25 views
2

衆所周知,IE6不支持>的直接後代選擇,但我最近發現的是,如果您有多個以逗號分隔的選擇規則,它會忽略所有這些規則,如果其中有一個>有沒有辦法使IE6在遇到'>'時優雅失敗?

這裏是我用來測試問題的代碼段:

<body> 
    <style> 
     .one, .two{ 
      width: 100px; 
      height: 100px; 
      background-color: #FFCCAA; 
     } 
     body .two, body > .one{ 
      background-color: #CCFFAA; 
     } 
    </style> 
    <div class="one"></div> 
    <div class="two"></div>  
</body> 

我認爲(沒有閱讀文檔),這是正常現象,因爲當你寫AAA, BBB你實際上並沒有定義兩個選擇器,但一個有兩個部分。

不過我必須問...有沒有任何解決方案不暗示我的CSS規則兩次寫?

謝謝
阿林

附:使用JavaScript是不可接受的。

+1

你做定義兩個單獨的選擇,但請用逗號將它們組合在一起,它被認爲是一個規則。規範說,在無法識別的選擇器上,整個*規則*被忽略。所以IE6的確如預期那樣優雅地失敗了。 porneL說,唯一真正的解決方案是將選擇器分成自己的規則:/ – BoltClock 2010-12-13 04:48:47

回答

1

您遇到的行爲是standard CSS error recovery的一部分,因此IE6正在做對(對於不支持CSS2的瀏覽器)。

你需要複製的規則,並單獨使用CSS2選擇:

<style> 
    body .two { 
     background-color: #CCFFAA; 
    } 
    body > .one { 
     background-color: #CCFFAA; 
    } 
</style> 
+0

正如我擔心的那樣,這必須是正確的答案。如果您可以通過鏈接到一些確認這一點的官方文件,這將會有所幫助。 – 2010-12-15 09:07:32

1

對不起,但我不相信這是不可能的,沒有使用Javascript。

有一些JS黑客(Dean Edwards IE7腳本彈出腦海),但沒有JS簡單的事實是,IE6不支持它,所以你不能使用它。

我想如果你準備做什麼不涉及JS,你可以考慮谷歌幀插件,它完全取代了IE瀏覽器中的渲染引擎,支持Chrome引擎。但是這比JavaScript所能做的任何事情都要大得多,所以我想你也不想這麼做。

坦率地說,最好的選擇是放棄對IE6的支持。但我明白,這可能不是一種選擇。 (但這對您的理智有好處)

如果您確實需要支持IE6,那麼您唯一真正的選擇就是將類或ID放在所有內容上,而忘記使用除最基本的CSS選擇器之外的任何內容。

對不起。

+1

我傾向於使頁面看起來非常適合最新的瀏覽器,並使其與IE6等「工作」,即主要內容應該顯示,並且導航應顯示並可點擊。 – 2010-12-10 11:02:35

+0

感謝您的意見,但正如我所說,我不想使用JS(我已經知道ie7.js)。在這一刻,複製CSS對我來說比JS更好。 @Nathan我沒有試圖建立一個簡單的網站。如果是這種情況,我會添加類和ID來解決這個問題。 – 2010-12-10 11:22:54

相關問題