только для ie8 и ie9 (не ie7)

У меня есть простая страница, и все работает нормально, за исключением того, что ie8 и ie9 перемещают один из моих элементов на 1 пиксель вправо, а его значительный b/c приводит к белой линии шириной 1 пиксель прямо на черном фоне. Ужасный. Я пробовал много хаков css, например, условные комментарии, но такие вещи, как <!--[if gt IE 7]> или <!--[if gte IE 8]>, не работают. Распознается только <!--[if gte IE 7]>, также нацелен на ie7, но ie7 идеально отображает пиксель страницы. Итак, я попытался отменить изменения для ie7 с дополнительным комментарием <!--[if IE 7]>, но это убило исправления в более поздних версиях ie. IE8 и 9, кажется, думают, что они ie7.

Мой код до сих пор

<!--[if gte IE 7]>
<style>
#promo {margin-left:-1px;}
</style>
<![endif]-->

РЕДАКТИРОВАТЬ: Решено. Кажется, это ошибка в IETester, все работает нормально в правильно установленных проводниках.


person Valerij    schedule 18.03.2011    source источник


Ответы (3)


Если это только одна вещь, которую вам нужно поднять, вы также можете использовать:

<!--[if IE 7 ]>    <html class= "ie7"> <![endif]-->
<!--[if IE 8 ]>    <html class= "ie8"> <![endif]-->

Это даст элементу html класс .ie7 или .ie8 в зависимости от того, что они используют или что вы указали. Затем вы можете настроить таргетинг на то, что хотите переопределить, например:

.ie7 #promo {margin-left:-1px;} or

.ie8 #promo {margin-left:-3px;} и настроить таргетинг на них по отдельности. Вы также можете указать правило для IE 9.

И включите его в свою основную таблицу стилей внизу. Это избавляет вас от необходимости создавать множество разных таблиц стилей.

Поскольку IE9 не рендерит как IE9, я думаю, что Internet Explorer фактически вернется к предыдущему рендереру, если он установлен по совершенно неизвестным мне причинам. Кажется, Пол Айриш упоминает об этом в своем выступлении на HTML5 Boilerplate на веб-сайте onTwik.

Они используют некоторый код в своем файле .htaccess, чтобы заставить IE использовать самый последний движок рендеринга, и фактически заставят IE использовать движок Chrome, если он установлен:

<IfModule mod_setenvif.c>
  <IfModule mod_headers.c>
    BrowserMatch MSIE ie
    Header set X-UA-Compatible "IE=Edge,chrome=1" env=ie
  </IfModule>
</IfModule>
person Community    schedule 18.03.2011

Я бы рекомендовал использовать настоящую таблицу стилей с условными комментариями IE.

Эта статья дает хороший обзор, но я бы избегал раздела о хаках.

http://css-tricks.com/how-to-create-an-ie-only-stylesheet/

person ScottE    schedule 18.03.2011

Делаете ли вы что-нибудь, что заставляет IE8/9 переходить в представление совместимости? Если это так, вы могли бы невольно заставить эти браузеры считать себя IE7, по крайней мере, насколько это важно для интерпретации этих условий.

person Pops    schedule 18.03.2011
comment
я использую тип документа html5 - может ли это быть причиной - person Valerij; 18.03.2011
comment
Само по себе это маловероятно, поскольку HTML5 не существовало, когда IE7 был текущей версией IE. - person Pops; 18.03.2011