Кроссбраузерность кода – основное требование для верстальщика практически в любой web-студии. Для достижения этой задачи есть масса способов. Главный из которых – тщательно продуманная структура документа. Однако, если структура html страницы сложна, или придумать структуру так, чтобы она одинаково отображалась во всех браузерах, не удалось, на помощь верстальщику приходят всевозможные css-хаки. Не претендую на оригинальность или уникальность подборки трюков в этой статье, но постараюсь описать как можно больше способов и инструкций по достижению кроссбраузерности.
Основная головная боль верстальщика в 99,99% связана с браузерами от Microsoft, т.е. с Internet Explorer. Сайт, одинаково хорошо интерпретируемый Opera, Mozilla, Safari и Chrome, может выглядеть совершенно по-разному в Internet Explorer 8, Internet Explorer 7, не говоря уже о более ранних версиях.
Наиболее красивое решение для обеспечения кроссбраузерности с Internet Explorer — использовать условные комментарии в HTML коде. Суть в том, что для каждой версии браузера создается свой CSS файл, в котором проблемные свойства определенным образом перезаписываются:
Будет работать только в IE6 и ниже:
Условие может быть таким: IE – для любой версии IE
lt IE v – (less than) для всех браузеров IE, версия которых меньше чем v
lte IE v – (less than or equal) для всех браузеров IE, версия которых меньше чем v, или такая же
gte IE v – (greater than or equal) – для IE, версия которых больше или равна v
gt IE v – (greater than) – для IE, версия которых больше v.
Иногда ради того, чтобы переписать одно свойство, подключать новый CSS файл слишком громоздко. Для этого есть специальные CSS-хаки.
CSS хаки для Internet Explorer
* html .class{background:red} /* В случае если у html-страницы есть доктайп, этот хак работает только для IE6. В случае quirks-mode, хак работает в IE6 и IE7 */ *+html .class{background:red} /*В случае, если у html-страницы есть доктайп, этот хак работает в IE7, может понять Opera 9 и ниже */ *:first-child+html .class{background:red} /*В случае, если у html-страницы есть доктайп, этот хак работает в IE7: */ html>body {} /*Все кроме IE6 */ div, #ie#fix /* все кроме IE8 */ div+span {...} /* IE6 и ниже проигнорирует это правило */ div>span {...} /* IE6 и ниже проигнорирует это правило */ .myClass { color:red\0/; /* только IE8*/ } .myClass { color:red\9; /* только IE9*/ } *:lang(ru) #lightMOD { display: block } /* Хитрый селектор — все современные браузеры — не IE6 или IE7 */ html>/**/body #lightMOD { display: block } /* Вживленный комментарий — все современные браузеры — не IE6 или IE7 */ c\olor red; /* IE 6 не работает перед буквами a, b, c, d, e, f */ .ie7b {#color:#00FF00;} /* Хак только для IE7,6 */
Если перед свойством в css поставить подчеркивание “_”, или дефис “-“, то эти свойства будут восприниматься только IE версии 6 и ниже.
Если перед свойством в css поставить звездочку ”*”, то эти свойства будут восприниматься только IE версии 7 и ниже.
>body {} выбирает элемент body только в IE7.
html* {} выделяет все элементы внутри элемента html. Только для IE7 и ниже а также Chrome и Safari.
Если после значения свойства поставить !ie, то свойство применится только в браузерах IE.
CSS хаки для Mozilla Firefox
С Mozilla Firefox проблем обычно не бывает. Но тем не менее хаки и для этого браузера могут оказаться полезными:
html:root ваш_элемент {...} /* этот работает ещё и для Safari и chrome*/ ваш_элемент, x:-moz-any-link {...} ваш_элемент, x:-moz-any-link, x:default { display: block } /* только FF 3.0 */
CSS хаки для Opera
@media all and (min-width: 0) { .class { color: #368EF1; } /* для Opera */ } html:first-child .class { color: #368EF1; } /* для Opera */
CSS хаки для Safari
html[xmlns*=""] body:last-child .class { color: #368EF1; } /* для Safari < 4.0 */ body:last-child:not(:root:root) .style { background: #F00; } /* для Safari < 4.0 */ @media screen and (-webkit-min-device-pixel-ratio:0) {.myClass {...}} /* для Safari < 4.0 и Chrome */
CSS хаки для Chrome
body:nth-of-type(1) .style{ }