2009-06-04 52 views
4

由於代碼(這看起來應該是有效的):條件註釋並且有效的XHTML

<!--[if lt IE 7]> <style type="text/css" media="screen"> 
<!-- 
div.stuff { background-image: none; } 
--></style><![endif]--> 

W3C驗證拋出一個適合:

  • 器分離在評論聲明
  • 無效註釋聲明:發現名稱開始字符外部註釋但內部註釋聲明
  • 字符數據不允許在這裏

等等等等

我不能完全肯定怎麼回事。這是'嵌套'的評論?是由Zend框架視圖助手headStyle

$this->headStyle()->prependStyle('div.stuff { background-image: none; }', 
           array('conditional' => 'lt IE 7') 
           ); 

回答

6

-->」關閉任何評論,沒有嵌套評論的概念。所以在你的代碼中,第一個「-->」關閉了你的兩條評論。然後,<![endif]-->完全在任何評論之外,所以沒有任何意義。

7

生成的代碼你不能有一個--評論裏面,除非它在有效的XML/XHTML結束-->的一部分。只是評論的工作方式。

this source

出於兼容性考慮,字符串 「 - 」(雙連字符)不能在註釋中出現。

您應該找到一種更爲標準的方式來區分瀏覽器(或者更理想的是,佈局不需要根據瀏覽器進行區分)。

+0

所以註釋掉JavaScript元素可以打破文件?這很奇怪......規範中的相關部分是http://www.w3.org/TR/REC-xml/#sec-comments,它指出「爲了兼容性」的意思是「僅包含用於確保XML仍然存在與SGML兼容「。 – Tomalak 2009-06-04 16:34:15

2

這是嵌套註釋。他們不被允許。

0

...爲什麼要註釋掉<style>的全部內容?這並不像你編寫的瀏覽器足夠愚蠢的顯示它。 (即使命令行瀏覽器也隱藏了樣式/腳本塊。)

編輯:啊,等等。這是由Zend生成的。

0

answer given by Phil Booth是在你的HTML註釋正確語法是不正確; HTML註釋不能嵌套。不過,我想更進一步...

您不應該使用HTML註釋來隱藏您的CSS或JavaScript從XHTML驗證。相反,你應該使用CDATA標籤。這是最通用的解決方案,幾乎支持所有瀏覽器和瀏覽器版本。

<head> 
    <style type="text/css"> 
    /* <![CDATA[ */ 
    div.stuff { background-image: none; } 
    /* ]]> */ 
    </style> 
    <script type="text/javascript"> 
    /* <![CDATA[ */ 
    function myFunction() { 
    } 
    /* ]]> */ 
    </script> 
</head> 

這些文章進入更詳細瞭解爲何上述方案是正確的: