Условные комментарии и действительный XHTML - PullRequest
4 голосов
/ 04 июня 2009

Учитывая код (который выглядит так, как будто он должен быть действительным):

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

Валидатор W3C подбрасывает:

  • S разделитель в объявлении комментария
  • неверное объявление комментария: найден начальный символ имени вне комментария, но внутри объявления комментария
  • символьные данные здесь не разрешены

и т. Д.

Я не совсем уверен, что происходит. Это «вложенные» комментарии? Тег генерируется Zend Framework Viewhelper headStyle

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

Ответы [ 6 ]

7 голосов
/ 04 июня 2009

Вы не можете иметь -- внутри комментария, если он не является частью -->, оканчивающейся на допустимый XML / XHTML. Просто так работают комментарии.

Из этого источника :

Для совместимости строка "-" (двойной дефис) НЕ ДОЛЖНА встречаться в комментариях.

Вы должны найти более стандартный способ разграничения между браузерами (или, в идеале, иметь макет, который вообще не требует различий между браузерами).

6 голосов
/ 04 июня 2009

"-->" закрывает любой комментарий, нет понятия о вложении комментариев друг в друга. Итак, в вашем коде первый «-->» закрывает оба ваших комментария. Тогда <![endif]--> полностью за пределами каких-либо комментариев, поэтому не имеет никакого смысла.

2 голосов
/ 04 июня 2009

Это вложенные комментарии. Они не разрешены.

0 голосов
/ 07 апреля 2015

Ответ , данный Филом Бутом , верен в том смысле, что ваш 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>

Эти статьи более подробно объясняют, почему вышеупомянутое решение является правильным:

0 голосов
/ 04 июня 2009

Вы должны опубликовать новый выпуск на трекере. Это хороший способ исправить такие ошибки. http://framework.zend.com/issues/secure/Dashboard.jspa

0 голосов
/ 04 июня 2009

... и зачем комментировать все содержимое <style>? Это не значит, что вы пишете для браузера, который достаточно глуп, чтобы отобразить его. (Даже браузеры командной строки скрывают блоки стиля / скрипта.)

Редактировать: Ах, подожди. Это генерируется Zend.

...