CSS-метод для включения IE6-хаков

  • CSS имеет @import, правильно?
  • IE6 понимает *html selector взломать, правильно?

Можно ли комбинировать их как

//*html @import url(ie6hacks.css);

или, возможно,

//*html { @import url(ie6hacks.css); }

?

Хорошие браузеры должны пропустить это, будет ли он работать в IE6? Как это выглядит как решение? Я отчетливо вижу, что он выглядит уродливым, как обычный CSS.

Ответ 1

Можно ли комбинировать их как

* html @import url(ie6hacks.css);

Нет. at-rules, такие как @import, не являются селекторами, поэтому их нельзя комбинировать с другими селекторами.

Есть способы заставить at-rules работать как хаки, например:

@import url(/* no! */iehacks.css);

будет загружен IE6/7, но не другими браузерами. Однако я бы не рекомендовал его использовать; такого рода вещи могут быть действительно хрупкими. Этот конкретный пример также недействителен CSS.

Как говорит Дэниел, если вам нужны отдельные файлы .css для хаков, лучший подход - условный тег ссылки. Красота "* html" заключается в том, что вы можете вводить хакерские правила в ту же таблицу стилей, которую проще управлять, если их немного; если в любом случае у вас есть отдельная таблица стилей, она не дает никаких преимуществ.

IMO "* html" для IE6 - единственный взлом, который он по-прежнему легитимно использовать сегодня. Все вещи в коробке мертвы вместе с IE5 - если вы не используете режим Quirks IE6, который вам не нужно - и другие браузеры, даже IE7, как правило, слишком хороши, чтобы иметь возможность атаковать простым взломом; несколько хаков, которые могут их настроить, слишком сложны/хрупки/недействительны, чтобы действительно использовать.

(И, как изобретатель упрощенной модели модели ячменя, я говорю им, что они счастливы.)

Ответ 2

Зачем беспокоиться об этом сумасшедшем взломе, когда вы можете использовать условные комментарии, чтобы включить только тот CSS-код, который вам нужен?

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

Некоторые ресурсы:

Если вы действительно должны использовать @import, вы можете воспользоваться тем фактом, что IE не соответствует спецификациям для правила @import. Обычно это должно быть самое первое в стиле стилей или теге стиля, или оно полностью игнорируется. Однако IE6 (по крайней мере, когда я его тестировал), похоже, не заботится. Вдоль этих строк вы можете сделать это:

<style type="text/css">
.NotARealClass { }

@import url("ie-style.css");
</style>

Обратите внимание, что я не тестировал это ни в чем, кроме FF3 (где он не загружает ie-style.css) и IE6 (где он загружает его в любом случае). Ваш пробег может отличаться.

Ответ 3

К сожалению, *html hack не может использоваться для импорта других таблиц стилей.

Вот статья, объясняющая этот хак и другие, которые полезны для атаки на ошибки, связанные с IE.