comentários podem aparecer antes da declaração DOCTYPE?
Pergunta
Eu gostaria de colocar um comentário (estilo <!-- this -->
) no topo do meu código HTML, que precede a declaração DOCTYPE. Será que esta em conformidade com as normas? É apoiado pelos principais navegadores? Há algum armadilhas em fazer isso?
Solução
Escrevendo o <!DOCTYPE>
primeira é certamente a melhor prática.
Lembro-me de problemas estranhos um longo, longo tempo atrás onde algum navegador (provavelmente IE6) ignorou um <!DOCTYPE>
porque havia algo aparentemente inocente antes que - eu acho que apenas espaços em branco, mas talvez fosse um comentário . Em qualquer caso, era, um erro horrível horrível ter de rastrear, e há certamente nunca qualquer boa razão para ter comentários ou espaços em branco antes do <!DOCTYPE>
.
Escrevendo o <!DOCTYPE>
primeira é, eu diria, apenas algo experientes desenvolvedores web fazer para evitar horríveis, bugs evasivo.
Outras dicas
É plenamente válida fazer
<!-- this, -->
<!DOCTYPE html>
No entanto, traz todas versões do IE em quirks-mode (a menos que seja forçada em nenhum -quirks modo - veja a Gotchas seção abaixo). O mais simples é mover o comentário abaixo o DOCTYPE.
<!DOCTYPE html>
<!-- this, -->
Mas outra forma é a “upgrade” o comentário em um adequado condicional comentário, como este:
<!--[if !IE]> this <![endif]-->
<!DOCTYPE html>
Explicação:. a condicional comentário não count como um comentário, no mundo de IE
sintaxe alternativa: Para esquecer / lembre-se que comentários condicionais são uma intrusão Microsoft para o padrão HTML, pode-se, por exemplo, fazer
<!--[if anybrowser]> this <![endif]-->
<!DOCTYPE html>
Do mesmo modo, para atingir IE em particular, pode-se fazer
<!--[if !anybrowser]> this <![endif]-->
<!DOCTYPE html>
Gotchas
Um comentário dentro um comentário condicional trará IE em quirks-mode se IE vê-lo (que é: se um usa um < strong> [if IE] condição, ou um equivalente a [if IE] - como o [! se anybrowser] condição que eu mencionei acima).. Assim, por exemplo, isso traria IE em peculiaridades-mode:
<![if IE]><!-- this --><![endif]>
<!DOCTYPE html>
Como seria
<!--[if IE]><!--><!-- this <![endif]-->
<!DOCTYPE html>
e muitas outras variantes. Considerando, por exemplo,
<!--[if IE]><!DOCTYPE html><!--><!-- this <![endif]-->
<!DOCTYPE html>
faria não causa peculiaridades-mode, porque aqui o comentário condicional tem um DOCTYPE antes de qualquer outro conteúdo e, assim, IE considera que o primeiro conteúdo da página é um DOCTYPE.
Finalmente, as novas versões do IE, IE8 e IE9 , pode ser forçada para padrões de modo (e peculiaridades de modo bem) pelo uso de outro Microsoft invenção - a x-UA-Compatible directiva. Consulte http://msdn.microsoft.com/en-us/library/ cc288325 (v = VS.85) .aspx Nesse caso, em seguida,
<!-- this -->
<!DOCTYPE html>
<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=8" ><![endif]-->
força IE8 e IE9 em no-peculiaridades Modo, enquanto IE6 e IE7 permanecerá em peculiaridades Modo. Considerando que, em contraste, este
<!--[if gte IE 8]><meta http-equiv="X-UA-Compatible" content="IE=8" ><![endif]-->
<!DOCTYPE html>
faria força IE8 e IE9 em modo de padrões, apesar que o conteúdo do comentário condicional não começar com um DOCTYPE. E IE6 e IE7 também permanecerá no modo não-peculiaridades desde o comentário condicional não orientá-las.
Embora seja aceitável pelo padrão creio eu, você definitivamente querer evitá-lo, como ele vai jogar IE em modo de peculiaridades.
Isso pode causar IE7 para processar em peculiaridades modo como se um doctype não estava lá em tudo, de acordo com desta página .
Comentários antes do doctype são permitidos, mas causam todas versões do IE para reverter para o modo de peculiaridades. Eles são, na verdade, utilizado para o efeito, às vezes. A declaração XML (<?xml version ...?>
) têm o mesmo efeito, no IE6 e abaixo .