我想在我的HTML代碼最上面的DOCTYPE聲明前發表評論(<!-- this -->
風格)。這符合標準嗎?它受主流瀏覽器的支持嗎?這樣做有什麼陷阱嗎?註釋可以在DOCTYPE聲明之前出現嗎?
回答
編寫<!DOCTYPE>
首先肯定是最佳實踐。
我記得奇怪的問題很長,很久以前這裏的一些瀏覽器(可能是IE6)忽略<!DOCTYPE>
,因爲有之前的東西貌似無辜的 - 我認爲只是空格,但也許這是一個註釋。無論如何,這是一個可怕的,可怕的錯誤,必須追查,並且肯定沒有任何理由在<!DOCTYPE>
之前發表評論或空白。
編寫<!DOCTYPE>
首先,我想說的是,只有經驗豐富的Web開發人員才能避免可怕的,難以捉摸的錯誤。
儘管我相信每個標準都可以接受,但您肯定希望避免它,因爲它會將IE引入怪癖模式。
這可能導致IE7在怪異模式呈現爲如果一個DOCTYPE是不存在在所有,根據this page。
doctype之前的評論是允許的,但會導致全部 IE版本恢復到怪癖模式。實際上,它們有時用於這個目的。 XML聲明(<?xml version ...?>
)具有相同的效果,IE6中的和以下。
這是完全有效做
<!-- this, -->
<!DOCTYPE html>
然而,它帶來所有版本的IE爲怪癖模式(除非它是被迫到無怪癖模式 - 請參閱下面的陷阱部分)。最簡單的方法是將註釋移到DOCTYPE下面。
<!DOCTYPE html>
<!-- this, -->
但另一種方式是「升級」註釋成適合條件評論,像這樣的:
<!--[if !IE]> this <![endif]-->
<!DOCTYPE html>
說明:一個條件評論呢不是計數作爲評論,在IE的世界。
替代語法:要忘記/記住,有條件的意見是微軟侵入HTML標準,人們可以例如做
<!--[if anybrowser]> this <![endif]-->
<!DOCTYPE html>
同樣,瞄準IE尤其是一個可以做
<!--[if !anybrowser]> this <![endif]-->
<!DOCTYPE html>
陷阱
註釋內部條件註釋會帶來IE成怪異模式如果IE看到它(即:如果一個使用一個[如果IE]條件,或等效爲[如果IE] - 諸如[if!anybrowser]條件,我上面提到。)。因此,舉例來說,這將帶來IE怪癖模式:
<![if IE]><!-- this --><![endif]>
<!DOCTYPE html>
正如
<!--[if IE]><!--><!-- this <![endif]-->
<!DOCTYPE html>
和許多其它變體。而對於例如
<!--[if IE]><!DOCTYPE html><!--><!-- this <![endif]-->
<!DOCTYPE html>
會不原因怪癖模式,因爲這裏的條件註釋有一個DOCTYPE 之前的任何其他內容,因此IE認爲頁面的第一個內容是DOCTYPE。
最後,最新的IE版本,IE8和IE9,可被迫到標準模式(和怪異模式以及)通過使用另一個Microsoft發明的 - 的X-UA-兼容指令。見http://msdn.microsoft.com/en-us/library/cc288325(v=vs.85).aspx在這種情況下,然後
<!-- this -->
<!DOCTYPE html>
<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=8" ><![endif]-->
將力 IE8和IE9成無怪癖模式,而IE6和IE7將保持在怪癖模式。然而,與此相反,這
<!--[if gte IE 8]><meta http-equiv="X-UA-Compatible" content="IE=8" ><![endif]-->
<!DOCTYPE html>
會力 IE8和IE9爲標準模式,儘管的條件註釋的內容確實不開始用DOCTYPE。而且IE6和IE7也將保持無怪異模式,因爲條件註釋並不針對它們。
- 1. 確定在XML聲明之前放置註釋嗎?
- 2. 我們可以在聲明命名空間之前添加php註釋
- 3. 我需要doctype聲明嗎?
- 4. 在Javascript中,我可以在聲明之前使用變量嗎?
- 5. IE9怪癖模式 - Doctype聲明已註釋掉
- 6. OpenLayers現在使用Doctype聲明
- 7. 在Doctype聲明之前添加腳本標記
- 8. TypeScript可以輸出javadoc註釋嗎?
- 9. 忽略DOCTYPE聲明
- 10. 在聲明之前引用JavaScript值 - 可以有人解釋這個
- 11. CanCan可以嗎?聲明
- 12. 多行註釋聲明後
- 13. Spring聲明與註釋
- 14. 有人可以解釋以下奇怪的函數聲明嗎?
- 15. Javascript SyntaxError:missing;在聲明之前
- 16. 函數在聲明之前
- 17. 我可以在<form method ='post'>聲明之前有if($ _ POST ['submit']){}嗎?
- 18. 我可以在C++中「前進聲明」?
- 19. 在註解處理之前是否可以向類注入額外的註釋?
- 20. 我可以在DLL中使用前向聲明嗎?
- 21. 可以訪問在類聲明中聲明的typedef嗎?
- 22. SBCL前向聲明:可能嗎?
- 23. XSLT拒絕寫DOCTYPE聲明
- 24. 更換cXML的DOCTYPE聲明
- 25. 問題與DOCTYPE聲明
- 26. JSF中的HTML doctype聲明
- 27. DOCTYPE聲明IE問題
- 28. doctype聲明去哪裏?
- 29. Spring MVC + Hibernate + Maven:在bean聲明中發現多個註釋
- 30. 在實現文件中包含註釋類聲明
謝謝,我將把我的評論放在html標籤之後。 – 2009-06-02 19:36:12
如果您希望它能正常工作,它需要包含之前的所有內容。 – nertzy 2009-12-09 21:49:36
這只是咬我一口。我花了4個小時試圖弄清楚爲什麼IE7/8會渲染一切。在檢查每個標籤的正確大括號和東西后,我創建了一個新文件並逐行復制代碼(不是註釋),一切正常。 完全困惑,我隨意地想:「如果...怎麼辦?」當我注意到原始文件中DOCTYPE之前的註釋行時。有我的罪魁禍首! – dariopy 2012-01-26 21:14:02