2009-06-04 10 views
4

Vu le code (qui ressemble à elle doit être valide):Commentaires conditionnels et Valid XHTML

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

Le validateur W3C lance un ajustement:

  • séparateur S dans le commentaire déclaration
  • invalide déclaration du commentaire: trouvé nom début du caractère en dehors du commentaire mais à l'intérieur de la déclaration du commentaire
  • les données de caractères ne sont pas autorisées ici

etc etc

Je ne suis pas totalement sûr de ce qui se passe. Est-ce que ce sont les commentaires "imbriqués"? La balise est générée par le Zend Framework ViewHelper headStyle

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

Répondre

6

"-->" ferme n'importe quel commentaire, il n'y a aucune notion de l'imbrication des commentaires l'un dans l'autre. Donc, dans votre code, le premier "-->" ferme vos deux commentaires. Alors le <![endif]--> est complètement en dehors des commentaires, donc cela n'a aucun sens.

7

Vous ne pouvez pas avoir un -- à l'intérieur d'un commentaire à moins que cela fait partie de la --> se terminant en XML/XHTML valide. Juste la façon dont les commentaires fonctionnent.

De this source:

Pour la compatibilité, la chaîne "-" (double tiret) ne doit pas se produire dans les commentaires.

Vous devriez trouver un moyen plus standard de différencier les navigateurs (ou, idéalement, d'avoir une mise en page qui ne nécessite aucune distinction entre les navigateurs).

+0

donc en commentant les éléments JavaScript peut briser le document? C'est étrange ... La section pertinente dans la spécification est http://www.w3.org/TR/REC-xml/#sec-comments, elle indique que "pour la compatibilité" signifie "inclus uniquement pour s'assurer que XML reste compatible avec SGML ". – Tomalak

2

Ce sont les commentaires imbriqués. Ils ne sont pas autorisés.

0

... et pourquoi commenter tout le contenu de <style>? Ce n'est pas comme si vous étiez en train de coder un navigateur assez bête pour l'afficher. (Même les navigateurs en ligne de commande masquent les blocs style/script.)

Édition: Ah, attendez. C'est généré par Zend.

0

Le answer given by Phil Booth est correct que votre commentaire HTML syntaxe est incorrecte; Les commentaires HTML ne peuvent pas être imbriqués. Cependant, je voudrais aller un peu plus loin ...

Vous ne devriez pas utiliser les commentaires HTML pour cacher votre CSS ou JavaScript à partir de la validation XHTML. Au lieu de cela, vous devez utiliser les balises CDATA. C'est la solution la plus universelle, prenant en charge à peu près tous les navigateurs et versions de navigateurs, anciens et nouveaux.

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

Ces articles vont plus en détail sur la raison pour laquelle la solution mentionnée ci-dessus est correcte: