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.