Будет ли работать таргетинг на IE8 с условными комментариями?

Когда выйдет IE8, будет ли работать следующий код для добавления условной таблицы стилей?

<!--[if IE 8]>
  <link rel="stylesheet" type="text/css" href="ie-8.0.css" />
<![endif]-->

Я читал противоречивые отчеты о том, работает ли это с бета-версией. Я надеюсь, что кто-то может поделиться своим опытом. Спасибо.


person Devon    schedule 03.10.2008    source источник
comment
Чудесно. Еще одно нестандартное расширение от Microsoft.   -  person Onorio Catenacci    schedule 03.10.2008
comment
Этот очень старый и невероятно полезный, потому что он позволяет переключателям CSS без взлома обслуживать разные таблицы стилей для MSIE.   -  person Konrad Rudolph    schedule 03.10.2008
comment
Этот вопрос давно надо было закрыть.   -  person ЯegDwight    schedule 09.03.2010


Ответы (7)


У меня это сработало — и в режиме причуд, и в режиме соответствия стандартам. Однако он не работает при переключении в режим совместимости с IE8.

person Konrad Rudolph    schedule 03.10.2008
comment
Вы имели в виду режим совместимости с IE7? - person Devon; 03.10.2008
comment
Нет: в бета-версии 2 есть режим браузера и режим документа. Режим документа обеспечивает совместимость с IE 7 (а также строгий режим и режим причуд). Режим браузера имеет опции «IE 7», «IE 8» и «режим совместимости с IE 8». Это то, что я имел в виду. - person Konrad Rudolph; 03.10.2008

Одно замечание:

Он работает, НО если вы загружаете страницу/сайт в локальной сети (например, в интранете), он загрузится в режиме IE7 по умолчанию! (обновление - localhost[*] — это особый случай, который отображает в стандартном режиме)

Это противоречит исходному заявлению MSFT о переходе на СТАНДАРТЫ по умолчанию.

e.g.

http://127.0.0.1/mysite/mypage.php  <-- IE8 by default (updated!)
http://localhost/mysite/mypage.php  <-- IE8 by default (updated!)
http://machinename/mysite/mypage.php  <-- IE7 by default
http://192.168.100.x/mysite/mypage.php  <-- IE7 by default
http://google.com/  <-- IE8 by default

[*] — Скотт Диккенс [MSFT] отметил в комментарии здесь, в блоге IE, что localhost был особым сценарием в интрасети (часто используемым для разработки интернет-сайтов), поэтому по умолчанию он будет отображаться в стандартном режиме.

Чтобы проверить, в каком режиме на самом деле отображается страница в IE8, вы можете использовать инструменты разработчика или использовать этот код букмарклета (работает только в IE8):

javascript:
var vMode=document.documentMode;
var rMode='IE5 Quirks Mode';
if(vMode==8){
  rMode='IE8 Standards Mode';
} else if(vMode==7){
  rMode='IE7 Strict Mode';
}
alert('Rendering in: '+rMode);
person scunliffe    schedule 03.10.2008
comment
Я думаю, что это зависит от типа документа (хотя не уверен, не проверял): насколько я понимаю Microsoft, строгий режим IE 8 запускается, как только указан любой действительный тип документа HTML. - person Konrad Rudolph; 04.10.2008
comment
Нет, неправильно. IE8 в локальной сети будет отображаться либо в IE5 (причудливый режим), либо в IE7 (стандартный режим), если у вас указан тип документа. Чтобы увидеть локальный сайт, отображаемый в режиме TRUE IE8 STANDARDS, вы должны явно указать IE, что хотите его (например, пользователь должен выбрать это) - person scunliffe; 04.11.2008
comment
Ок, интересно - откуда ты это знаешь? Можете ли вы предоставить некоторые доказательства? Когда я захожу в инструменты разработчика в IE8, он сообщает, что использует режимы IE8 как для рендеринга, так и для режима браузера при загрузке локальных страниц (например, localhost/somepage.html) - person Konrad; 09.03.2010
comment
@Whyamistilltyping — в блоге IE (blogs.msdn.com/ie) публикуется информация о прогрессе IE. Для IE8 Beta 2 (blogs.msdn.com /ie/archive/2008/08/27/), они цитируют: По умолчанию все сайты в общедоступном Интернете отображаются в стандартном режиме Internet Explorer 8 (просмотр в режиме совместимости отключен), а все веб-сайты интрасети отображаются в Internet Explorer. 7 Стандартный режим (просмотр в режиме совместимости включен). - позже они изменили это поведение (поэтому я сейчас обновляю свой ответ), что страницы, загруженные с локального компьютера, являются исключением и по умолчанию отображаются в стандартном режиме. - person scunliffe; 09.03.2010
comment
... изменение произошло в IE8 RC1 для записи. Прочтите полные комментарии для получения полной информации о кластере... EricLaw [MSFT] разъяснил 5 дней спустя в комментариях: blogs.msdn.com/ie/archive/2008/12/03/ - person scunliffe; 09.03.2010

Настройки представления Инструменты/Совместимость

снимите их все

person Community    schedule 20.03.2009

Спасибо за помощь. Я нашел решение, по-видимому, проблема заключалась в том, что каждая таблица стилей использовала свой собственный атрибут заголовка. Как только я удалил заголовок со всех, кроме основной таблицы стилей, без проблем.

Это странная проблема, уникальная для IE8, и хотя мне сказали, что она должна работать таким образом, что-то связанное с «Предпочтением таблицы стилей» — она служит только для создания проблем, поскольку решение требует, чтобы вы удалили заголовок, который может быть полезен. при написании сценариев и т. д. - когда вам нужно вызвать таблицу стилей.

В любом случае, не уверен, является ли это ошибкой или так и должно быть, но я надеюсь, что Microsoft продолжит расследование.

Спасибо

person Community    schedule 07.08.2009
comment
Я думаю, что вы не должны добавлять одинаковые заголовки в разные связанные таблицы стилей. AFAIR, который тоже плохо работал в Konqueror (много лет назад). - person hurikhan77; 10.01.2010

Зачем вообще писать отдельную таблицу стилей для IE8?

Если вы уже выполняли отладку для IE7, вы можете принудительно перевести IE8 в режим совместимости и, таким образом, отобразить свой код так, как если бы IE8 был IE7.

Все, что вам нужно сделать, это поместить это ПРЯМО ПОД открывающим тегом заголовка. В другом месте и не получится.

И тогда это в среднем на полчаса или около того меньше работы над проектом, не требуется интенсивная отладка для IE8!

Даже Msn.com делает это — какая-то ирония, а?

Недавно написал об этом сообщение в блоге: http://blog.sankhomallik.com/2009/11/16/stop-wasting-time-debugging-on-ie8-when-you-dont-have-to-or-get-ie8-to-behave-like-ie7/

person Sankho Mallik    schedule 16.11.2009
comment
Что произойдет, когда появится IE9? - person codeinthehole; 17.11.2009

IE8 выглядит довольно хорошо по сравнению с IE7, у меня есть таблицы стилей для IE6, IE7 и IE8; сначала я думал, что условные комментарии не работают для IE8, после небольшого эксперимента я обнаружил, что некоторые правила не применялись IE8 только потому, что мне нужно было сначала поставить предка или родительский класс, например у меня был такой класс

.niceclass {some:properties;more:properties;}

это работало только, если я изменил его на что-то вроде:

.parentclass .niceclass {some:properties;more:properties;} или

#parentselector .niceclass {some:properties;more:properties;}

Кстати, в моем css только для IE8 у меня есть только одно переопределяющее правило, остальное отображается почти как Firefox, хотя это все равно не заставляет меня покинуть FF !.

person Eze    schedule 21.11.2009

Со своей стороны, я хотел использовать закругленные границы с помощью css. IE8 в Vista не поддерживает такое. И поскольку графика была такой, что закругленные границы также отображали красивую закругленную тень, страница выглядела ужасно в IE8.

Я пытался использовать условные комментарии, но безрезультатно, IE8 не оценивал выражение if IE и, следовательно, не включал внешнюю таблицу стилей.

Затем я попытался перевести его в режим причудливости/совместимости, однако это все равно не сработало, поскольку хаки CSS, которые я использовал, больше не работали для IE8.

И последнее, но не менее важное: я нашел работающий CSS-хак, который корректно отображает страницу в режиме совместимости.

* + html #test[id] { color:lime } 

Теперь я не знаю, работает ли это для IE7 или ниже, поэтому у вас будет как минимум три разных хака для каждого выпуска IE, который вы хотите поддерживать, т.е.

* + html #test,
    html+body #test,
    * html body #test
    { color:lime }

Интересно, что ждет нас в следующей регрессии Internet Exploiter.

person Carsten    schedule 28.12.2009