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?

Foi útil?

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.

(Veja Disparo diferentes modos de renderização )

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 .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top