Любой человек создававший себе сайт, ну и конечно абсолютно любой верстальщик сталкивался и знает что браузер internet explorer (ie) читает стили как то по своему и более того очень часто версия 6 и 7 совершенно по разному отображают ваш код. По этой причине некоторым частенько приходилось переверстывать некоторые элементы или отказываться от некоторых приемов.
Еще одной причиной написать этот пост было то, что я вспомнил что уважаемый Shibaon‘чег как то давненько столкнулся с проблемкой когда все отображалось корректно, но сам код файла стилей получался невалидный,а для него это на тот момент было очень важно, как и до сих пор наверное 🙂
Кроме того это актуально еще и потому что семейство Internet Explorer до сих пор является самым часто используемым браузером, и даже так мной нелюбимый (и я думаю многими) Internet Explorer 6, который вообще читает стили как ему вздумается.
Так вот решение этих проблем довольно простое. Вы имеете возможность просто написать отдельные стили которые будут работать только в браузере internet explorer (ie)
Первым самым простым способом является возможность подключать отдельный файл стилей для всех ie либо для конкретной версии, а другие (нормальные :)) браузеры не будут читать и воспринимать этот файл.
Самое интересное что таким способом можно еще и скрывать html-код как от всех версий internet explorer (ie) так и от определенной.
Например, надпись «Привет Мир» будет отображаться во всех браузерах кроме ie7, если поместить её в условие:
<![if !IE 7]>
<p>Привет Мир</p>
<![endif]>
Вот такая интересная особенность.
Далее у нас идут такие фишечки и хаки которые отлично работают но делают код не валидным, а некоторым это важно, хотя я считаю что несколько небольших ошибок обнаруженных валидатором погоды не делают:
Например если перед css свойством поставить два слеша ( // ), то это свойство будет прочитано только internet explorer (ie) всех версий, а другие его просто проигнорируют.
Для IE7 имеется хак
*:first-child+html ваш_элемент {…}
или
*+html ваш_элемент {…}
Для IE6 можно просто перед свойством использовать знак минус(-) или нижнее подчеркивание(_)
Можно еще сделать так:
* html ваш_элемент {…}
Например
div {
background: green; /* для нормальных браузеров */
//background: blue; /* для всех ie */
-background: red; /* для ie6 */
}
* html div {
background: red; /* ещё один способ для ie6, кому как удобнее 🙂 */
}
Т.е в данном примере фон (background) будет зеленого цвета в нормальных браузерах (Opera, FF), синим в IE7 и красным в IE6
Ну конечно цвета это так для примера, а вообще обычно используется для корректного отображание положения и расстояний, отступов в пикселях и процентах.
Ну и в догонку пару хаков для других браузеров т.е не воспринимаемые IE но работающие для других
Для FireFox:
html:root ваш_элемент {…} /* актуально и для Safari */
или
ваш_элемент, x:-moz-any-link {…}
Для Opera:
html:first-child ваш_элемент {…}
или
@media all and (min-width: 0) {
ваш_элемент {…}
}
Вот вобщем несколько приколов как справится с internet explorer пользуйтесь наздоровье 🙂
Комментарии
5 комментариев к записи "Отдельные стили css для браузеров Internet Explorer (ie)"
Роман Немеров |
27 мая, 2009 0:51 |
помню есть такая штука для ie — вроде экспрешн читается )))
Шмель |
29 ноября, 2010 22:39 |
Спасибо. Еще актуально.
vov41k |
23 февраля, 2011 20:11 |
Здравствуйте.
Столкнулся с проблемой.
Нужно для IE9 поставить margin: 0 21px 0.3em 22px;
А для всех остальных margin: -1em 21px 0.3em 22px;
Пытался ставить некоторыми способами что описаны выше, то ничего не работает. и почему IE9 не хочет читать .css подключенный отдельно для него (
asp |
24 октября, 2011 1:46 |
vov41k говорит:
Здравствуйте.
Столкнулся с проблемой.
Нужно для IE9 поставить margin: 0 21px 0.3em 22px;
А для всех остальных margin: -1em 21px 0.3em 22px;
Пытался ставить некоторыми способами что описаны выше, то ничего не работает. и почему IE9 не хочет читать .css подключенный отдельно для него (
Только что проверил.
Методы изложенные выше работают
помню есть такая штука для ie — вроде экспрешн читается )))