CSS хаки
Дата публикации: 31.01.2009
Хак — специальная CSS конструкция, которую понимают одни браузеры и игнорируют другие. Использование хаков часто говорит о непрофессиональности верстальщика. Но встречаются случаи, когда хак — единственный способ решения проблемы (например общеизвестные баги браузеров (см «Глюки браузеров»)). Не стоит так же забывать, что в наше время спешка — обычное явление. Посему сроками «на вчера» — никого не удивишь. Вот и нет времени разбираться почему не выходит так как хочется.
Плюс хаков
Это быстрое решение проблемы. Прописали дополнительных строчек и все отлично, верстаем дальше.
Недостатки хаков
- Нет уверенности как поведет себя сайт с выходом новых версий браузеров. Например, написали код с хаком для Firefox, через месяц выходит новая версия Safari и оказывается она тоже воспринимает этот хак! Приходится переделывать.
- Многие хаки не проходят валидацию — опасность этого описана в предыдущем пункте.
По возможности старайтесь избегать использования хаков. Для исправления ошибок IE используйте отдельный CSS-файл, котjрый подключается с помощью условных комментариев.
Хаки для IE
| Проходят валидацию | ||
|---|---|---|
| Синтаксис | Кто понимает | Пример |
| * html | IE6 |
div {
background: #ff0000;
}
* html div {
background: #000;
}
|
| !important | IE6 |
div {
background: #ff0000 !important; /* для всех браузеров */
background: #000; /* для IE6 */
}
|
| *:first-child+html | IE7 |
div {
background: #ff0000;
}
*:first-child+html div {
background: #000;
}
|
| *+html | IE7+ может понять Opera 9 и ниже |
div {
background: #ff0000;
}
*+html div {
background: #000;
}
|
| html>body | поймут все кроме IE6 |
div {
background: #ff0000;
}
html>body div {
background: #000;
}
|
| #ie#fix | поймут все кроме IE8 |
div {
background: #ff0000; /* для ie8 */
}
div, #ie#fix {
background: #000; /* для остальных браузеров */
}
|
| Не проходят валидацию (не рекомендуемые) | ||
| _свойство: значение и -свойство: значение |
IE6 |
div {
background: #ff0000; /* для всех браузеров */
_background: #000; /* для IE6 */
}
|
| *свойство: значение и //свойство: значение |
IE6 IE7 |
div {
background: #ff0000; /* для всех браузеров */
*background: #000; /* для IE6 и IE7 */
}
|
| html* | IE6 IE7 Chrome Safari |
div {
background: #ff0000;
}
html* div {
background: #000;
}
|
| !ie | IE6 IE7 |
div {
background: #ff0000; /* для всех браузеров */
background: #000 !ie; /* для IE6 и IE7 */
}
|
Хаки для Firefox |
||
| Не проходят валидацию (не рекомендуемые) | ||
| FF 1.5+ Opera 9.6 update: 14.01.10 — неактуально (понимают новые версии opera, chrome, safari)
|
div {
background: #ff0000;
}
html:root div {
background: #000;
}
|
|
| x:-moz-any-link |
FF 1.5+ IE7 |
div {
background: #ff0000;
}
div, x:-moz-any-link {
background: #000;
}
|
| @-moz-document url-prefix() | FF 1.5+ |
div {
background: #ff0000;
}
@-moz-document url-prefix() {
div {
background: #000;
}}
|
Хаки для Opera |
||
| Проходит валидацию | ||
| html:first-child | Opera 7-9.01 |
div {
background: #ff0000;
}
html:first-child div {
background: #000;
}
|
| Не проходят валидацию (не рекомендуемые) | ||
проходит валидацию CSS3 |
Opera 9-9.6
update 14.01.10 — не актуально (понимается новыми версиями ff, chrome, safari)
|
div {
background: #ff0000;
}
@media all and (min-width:0) {
div {
background: #000;
}}
|
| html>/**/body noindex:-o-prefocus, html>/**/body | Opera 9.5-10 |
html>/**/body noindex:-o-prefocus, html>/**/body p {
color:#0f0
}
|
Хаки для Chrome и Safari |
||
| Не проходят валидацию (не рекомендуемые) | ||
|
|
update 14.01.10 — не актуально (понимается новыми версиями opera, ff, safari, chrome)
|
div {
background: #ff0000;
}
body:nth-of-type(1) div {
background: #000;
}
|
|
update 14.01.10 — не актуально (понимается новыми версиями opera, ff, safari, chrome)
|
div {
background: #ff0000;
}
html:root*div {
background: #000;
}
|
|
| html* | Safari Chrome IE6 IE7 |
div {
background: #ff0000;
}
html*div {
background: #000;
}
|
Хаки Konqueror |
| Не проходят валидацию (не рекомендуемые) | ||
| html:not(:nth-child(1)) #element | Konqueror FF 3.5 |
#div {
background: #ff0000;
}
html:not(:nth-child(1)) #div {
background: #000;
}
|
По теме:
- условные комментарии — специальная конструкция, содержимое которой поймет только Internet Explorer
- мета тег X-UA-Compatible — задает режим отображения страниц для IE
- условные СSS
