Cтудия веб-дизайна WEB-to-BIZ

css хаки кроссбраузерная верстка студия веб дизайна web to biz
кроссбраузерной верстки хаки CSS-селекторы таблица стилей css internet explorer ie
if IE условные комментарии таблица стилей css if lte IE кроссбраузерная верстка
примеры css хаков для различных версий IE альтернативная таблица css internet explorer
отображению документов основе корректной модели блока ie internet explorer Quirks-режим

::   Главная   ::   Контакт   ::   Карта сайта   ::   Impressum   ::

Главная

О нас

Услуги

Портфолио

Полезные статьи

Веб-дизайн

SEO

CMS

CSS

Партнеры

CSS-хаки

Другие статьи по теме:

  • CSS HTML Конформное определение DOCTYPE
  • CSS импорт таблицы стилей
  • CSS Условные комментарии для Internet Explorer
  • CSS всплывающий инфобокс

 

В большинстве случаев для кроссбраузерной верстки необходимы лишь небольшие изменения и дополнения к таблице стилей. Они могут быть внесены с помощью специальных CSS-селекторов, называемых хаками.
Ниже приведены конформные CSS-хаки  и пример HTML-документа с их применением.

Атрибут-селектор:

p[id] {
   border: 1px solid green;
  }
p[id]#attribut {
   color: lime;
  }

Селектирует элемент (в данном случае <p>), который указывает на любое значение id-атрибута. Приведенная в примере структура селектирует все элементы <p>, содержащие id. Игнорируется IE, включая 6 версию.
Дополнительное задание #ID, в принцире, избыточно. Однако, позволяет исключить стили для IE версий 6 и ниже, а также Netscape 4.

Дочерний селектор:

html>body #ИМЯ {
  свойство:значение;
  }
Отбирает элементы с ID "ИМЯ", которые располагаются внутри тега body, причем body является дочерним потомком html. Хотя body всегда является дочерним потомком html,  этот селектор был применен специально, чтобы исключить влияние данного стиля в браузерах IE 6 и ниже, а также Netscape 4.

Звездочка-HTML-хак:

* html #ID {
  свойство:значение;
  }
Универсальный селектор * обозначает любой элемент. В данном хаке он бессмысленен с точки зрения конформного CSS, т.к. html-элемент не имеет родительского. Однако все ранние IE-версии, включая 6, принимают стиль в данной нотации. Такой хак исключает стилевое свойство для всех браузеров, включая Netscape 4, оставляя его выполним только для ранних IE-версий вплоть до 6.

Звездочка-плюс-HTML-хак:

*:first-child+html #ID {
  свойство:значение;
  }
Данный хак открывает записанное в нем стилевое свойство только для Internet Explorer 7. Его более простая интерпретация *+html принимается также в Opera.

Селектор-комментарий:

#ID/* */ {
  свойство:значение;
  }
Данный хак открывает записанное в нем стилевое свойство только для Internet Explorer 4 и 5 для Windows, а также для Mac.

Медиа-хак:

@media all {
    #ID {
      свойство:значение;
      }
    }
Данный хак открывает записанное в нем стилевое свойство только для IE 4 для Windows и для всех Mac-версий, а также для Netscape 4.

Селектор ID:

p#ИМЯ {
 свойство:значение;
 }
Данный хак открывает записанное в нем стилевое свойство для всех браузеров кроме Netscape 4.

Tan-хак (модифицированный упрощенный хак блочной модели):

* html #id {
  с\войство:значение;
  }
Хак звездочка-HTML воздействует на все ранние версии IE, включая 6, а наклонная черта \ в названии стилевого свойства исключает из этой области влияния все браузеры кроме IE 6ю Так достигается воздействие только на IE6. Обратите внимание, что косая черта в названии свойства не должна располагаться непосредственно перед буквами a - f, т.к. это будет интерпретироваться как шестнадцатиричное число.

Tantek-хак:

селектор {
  свойство:значение;      /* запись для IE 5.x */
  voice-family:"\"}\"";  /* с этих пор игнорирует IE 5.x последующие записи */
  voice-family:inherit;
  свойство:значение;      /* определение свойств для остальных браузеров */
  }
Этот хак влияет только на Internet Explorer 5.x. Применяйте Tantek-хак только в CSS-таблицах, скрытых от Netscape 4, т.к. в нем такая запись вызывает существенную ошибку.

Пример (посмотреть):

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
       "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>CSS-хаки</title>
<style type="text/css">
  body {
    color: white; background: black;
    font-family: Helvetica, Arial, sans-serif;
    }
  p {
    padding: 0.2em;
    }

  #attribut {
    color: red;
    }
  p[id]#attribut {
    color: lime;
    }
  p[id] {
    border: 1px solid green;
    }

  #childselector {
    color: red;
    }
  html>body #childselector {
    color: lime;
    }

  #starhtml {
    color: lime;
    }
  * html #starhtml {
    color: red;
    }

  #starplushtml {
    color: lime;
    }
  *:first-child+html #starplushtml {
    color: red;
    }

  #comment {
    color: red;
    }
  #comment/* */ {
    color: lime;
    }

  #atmedia {
    color: red;
    }
  @media all {
      #atmedia {
        color: lime;
        }
      }

  #element {
    color: red;
    }
  p#element {
    color: lime;
    }

  #tanhack {
    color: lime;
    }
  * html #tanhack {
    color: red;
    c\olor: lime;
    }
  #tantek {
    color: red;
    }
  #tantek {
    voice-family: "\"}\"";
    voice-family: inherit;
    color: lime;
  }
</style>
</head>
<body>
<h1>CSS-хаки</h1>
<p>Следующие примеры будут отображаться конформно зеленым шрифтом в рамках, в противном случае красным шрифтом или без рамки.</p>
<p id="attribut">Атрибут-селектор: IE 4.х, 5.х, 6.х игнорирует селектор [id], [id]#attribut .</p>
<p id="childselector">Дочерний селектор: IE 4.х, 5.х, 6.х игнорирует дочерний селектор типа BODY > P { line-height: 1.3 }.</p>
<p id="starhtml">Звездочка-HTML: ранние IE-версии, включая 6, принимают стили, записанные с хаком * html.</p>
<p id="starplushtml">Звездочка-плюс-HTML: Internet Explorer 7 принимает стиль, записанный в хаке *:first-child+html.</p>
<p id="comment">Cелектор-комментарий: IE 5 версии и ниже для Windows, а также для Mac принимает стиль, записанный в хаке #ID /* */.</p>
<p id="atmedia">Медиа-хак: IE 4 для Windows и для Mac, а также Netscape 4 принимает стиль, записанный в хаке @media all.</p>
<p id="element">Селектор ID: данный конформный селектор вида p#ИМЯ не читает только Netscape 4.</p>
<p id="tanhack">Tan-хак: влияет только на IE 6. Комбинация звездочка-HTML- и Tantek-хака действует толька на IE 6.</p>
<p id="tantek">Tantek-хак: предназначен для IE 5 версии, в Netscape 4 приводит к ошибке чтения всей таблицы стилей!</p>

</body>
</html>

Это важно:

Применяйте хаки только по необходимости. Наиболее валидным вариантом корректировки разночтения таблиц стилей браузерами является применение условных комментариев. Остальные же способы, в т.ч. и хаки могут быть в последующих версиях браузеров ошибочно интерпретированы.