Своеобразное использование условных комментариев в IE - PullRequest
4 голосов
/ 25 августа 2011

Сегодня я столкнулся с использованием условных комментариев IE, которых я никогда раньше не видел, и которые заставляют меня чесать голову.HTML начинается так:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<!--[if IE 7 ]>    <html class="no-js ie7" lang="en"> <![endif]-->
<!--[if IE 8 ]>    <html class="no-js ie8" lang="en"> <![endif]-->
...
</html>

Мне было интересно, как IE7 справится с этим документом.Похоже, что документ будет содержать два HTML-тега, первый из которых будет закрыт.Конечно, это не будет разбираться.Но это так.Я решил исследовать.

В браузерном режиме IE7 IE9 тег html заканчивается как

<html class="no-js ie7" lang="en" xmlns="http://www.w3.org/1999/xhtml">

Похоже, что атрибуты из тега html включенного условного комментария объединяются ссуществующий тег HTML.При дальнейшей обработке оказывается, что атрибуты в условном HTML-теге добавляются к существующему тегу, если они еще не существуют в первом HTML-теге.Например,

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html class="not so fast" xmlns="http://www.w3.org/1999/xhtml">
    <!--[if IE 7 ]>    <html class="no-js ie7" lang="en"> <![endif]-->

приводит к:

<html class="not so fast" lang="en" xmlns="http://www.w3.org/1999/xhtml" sizcache="0" sizset="0">

Здесь атрибут класса условно включенного тега html не имеет никакого эффекта, поскольку безусловный тег html уже определяет атрибут класса.Откуда взялись атрибуты sizcache и sizset - полная загадка.

В любом случае, ни одно из наблюдаемого поведения не было бы тем, чего я ожидал.В документации Microsoft по условным комментариям ничего не говорится об этом использовании условных комментариев, и поиск в Google оказался сухим.Позже страница содержит таблицу стилей, в которой есть селекторы, которые ссылаются на классы ie7 и ie8 для переопределения стандартных стилей в ситуациях, когда IE 7 и 8 отображают их неправильно.

Мне просто любопытно, видел ли кто-нибудь такое использованиеусловных комментариев или знает, задокументировано ли это поведение смешивания где-либо.

1 Ответ

1 голос
/ 25 августа 2011

Это похоже на вариацию методики, разработанной Полом Айришем , но не завершенной и, я подозреваю, менее предсказуемой.

...