CSS-хаки, трюки и жестокие обманы валидатора

Обманывать не хорошо, так в детстве мама говорила, но иногда без этого никак… В web-верстке тоже самое — нужен хак, и заказчик требует валидность, а еще и в портфолио потом работу выкладывать. Вот и приходится хитрить, хотя, по сути, верстка страничка всё равно невалидна, просто обманутый валидатор этого не замечает (да и не хочет он это замечать). Как бы не вопили противники хаков, от этого никуда не уйти.

Постараюсь максимально выложить всё что знаю по этой теме, а что сразу не вспомню (или пока не знаю) буду со временем дописывать…

CSS-хаки для обеспечения кроссбраузерности.

«любимый» Internet Explorer 6.0 и ниже

/*\*/
* html {}
/**/
/* Хак только для IE6 */

Если перед свойством в css поставить подчеркивание “_”, или дефис “-”, то эти свойства будут восприниматься только IE версии 6 и ниже:

.style {_background:#F00;}
\\width:100px; - видят только ie 5.0 и ie 5.5 (неактуально)

Звездочка. Работает для IE7 и ниже:

p { background:red; /* Применимо ко всем браузерам */ *background: green; /* Применимо к IE6 и ниже */ }
#hack{
color:green; /* IE 5.01 */
color/**/:blue; /* IE 5.5 */
c\olor red; /* IE 6 не работает перед буквами a, b, c, d, e, f */
}
* html .ie6 {color:red;} /* Хак только для IE6 */

IE6 и ниже проигнорирует эти правила:

div>span {...}
div+span {...}

IE min-width & max-width: максимальная и минимальная ширина блока:

#element {
min-width:780px;
max-width:1260px;
width expression(document.body.clientWidth < 780? "780px" : document.body.clientWidth > 1260? "1260px" : "auto");
}

Box Model. Хак используется для того, чтобы справиться с глюком эксплорера, в котором border и padding включаются в ширину элемента:

padding:4em;
border:1em solid red;
width:30em;
width/**/:/**/ 25em;

Min-height хак от Дастина Диаза:

selector {
min-height:500px;
height:auto !important;
height:500px; }

Internet Explorer 7.0 и ниже

Не все хаки для IE7 работают если в начале документа не указать !DOCTYPE.

*+html .style {  background: #F00;}

html>body .style {*background: #F00;}

*:first-child+html {} * html {} /* IE 7 и ниже */

*:first-child+html {} /* IE 7 только */

html>body {} /* IE 7 и нормальные браузеры */

html>/**/body {} /* Только нормальные браузеры (не IE 7) */

>body {} /* выбирает элемент body только в IE7 */

html* {} /* выделяет все элементы внутри элемента html. Только для IE7 и ниже. */

//width:100px; - так написаное свойство проигнорируют все браузеры кроме ie 7.0 и меньше

.ie7b {#color:#00FF00;} /* Хак только для IE7,6 */

a:link:visited, a:visited:link В соответствии со стандартами, псевдотеги :link и :visited взаимно исключаемы, то есть :link означает непосещенную ссылку. Тем не менее, IE 7 и ниже проигнорируют эти псевдо-классы, если какой-нибудь другой появится ниже в том же селекторе.

a:link:visited, a:visited:link {} a:link:visited, a:visited:link {} /* выбирает элемент a в IE7 и ниже */

Условные комментарии

Условие может быть таким: 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.

Для всех версий IE:

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

Для 7-й версии:

<!--[if IE 7]><link rel="stylesheet" href="css/cssf-ie7.css" type="text/css" media="screen" /><![endif]-->

Для 5.01, 5.5 и 6.0:

<!--[if lte IE 6]><link rel="stylesheet" href="css/cssf-ie6.css" type="text/css" media="screen" /><![endif]-->

CSS-хаки для браузера Opera

@media all and (-webkit-min-device-pixel-ratio:10000),

not all and (-webkit-min-device-pixel-ratio:0) {

.style {background: #F00;} /* только для Opera */

}
html:first-child {}  /* только для Opera */
html:first-child .style {

background: #F00; /* только для Opera < 9.5 */

}

Можно создать файл opera.css и подключить его в head секции документа:

<head>

    <link rel="stylesheet" href="css/opera.css" type="opera/css" media="screen" />

</head>

CSS хаки для FireFox:

html:first-child .class { color: #368EF1; } /* для FireFox */
@-moz-document url-prefix(){body { color: #368EF1; }}

CSS-хак для Safari

body:first-of-type #element { color: red; }

CSS-хак для Konqueror

html:not(:nth-child(1)) #element { color: red; }

Для нескольких браузеров:

.class, x:-moz-any-link { color: #368EF1; } /* для FireFox, но так же работает в Internet Explorer 7 */
@media all and (min-width: 0) {.safariOperaChrome {color:#FF00FF;}} /* Хак только для Safari, Opera, Google Chrome*/
@media all and (min-width: 0) {div span { background: #FF0}} /*только для Opera* (так же видит Safari 3 и Google Chrome) /
html:not([lang*=""]):not(:only-child) .ffSafariChrome {color:#990000;} /* Хак только для IE7, FireFox */html:root div {…} /* для Firefox (также видит safari3) */

html:root .ffSafariChrome {color:#660066;} /* Хак только для Safari, FireFox, Google Chrome */

body:first-of-type .operaChromeSafari {color:orange;} /* Хак только для Safari, Opera, Google Chrome */
html>/**/body {} /* Все современные браузеры, кроме IE 7 */
/*\*//*/selector{property:value;}/**/ /* MacIE */

Здесь есть всё это в табличном виде.

Размещено в CSS, HTML and tagged , , .

В этом блоке кнопочки для кликания на случай, если пост оказался полезным :)