Как я могу изменить стиль CSS для IE6?

Я хочу иметь определенный стиль CSS, отличный от IE6. В основном я использую спрайты CSS с файлом PNG. Но для IE6 я хочу использовать версию .gif.

Я не хочу использовать оператор <!-- if lte IE6. Я хочу включить его в сам файл CSS.

Как мне это сделать?


Редактировать:

Мне это нужно, потому что я хочу, чтобы мои пользователи включали один файл CSS, а не 4 строки кода. Мои пользователи абсолютно новички. Не хочу их путать. Плюс единственное изменение, которое я хочу - использовать .gif вместо текущего .png.


Редактировать:

Как _background-image: звучит? Что-то не так?
Можно также использовать условный оператор внутри файла CSS?


person Alec Smart    schedule 12.06.2009    source источник
comment
Могу я спросить, почему вы против использования условных выражений? я не уверен, возможно ли вообще то, о чем вы говорите ...   -  person Chris Drappier    schedule 12.06.2009
comment
Условные комментарии - рекомендуемый способ сделать это, и единственная веская причина, по которой я могу придумать использование css-хаков, таких как * html, - это если дополнительная загрузка действительно мешает. Однако я бы категорически избегал обнюхивания пользовательского агента.   -  person annakata    schedule 12.06.2009
comment
@Chris - это вполне возможно, на самом деле есть как минимум дюжина хаков для этого :)   -  person annakata    schedule 12.06.2009
comment
Тот же вопрос - почему не условные утверждения?   -  person roryf    schedule 12.06.2009
comment
Конечно возможно. CSS подобен любому другому тексту, который вы можете выплюнуть условно.   -  person belgariontheking    schedule 12.06.2009
comment
Мне это нужно, потому что я хочу, чтобы мои пользователи включали один файл CSS, а не сложный четырехстрочный код. Если они могут выяснить, где находится блок ‹head›, и вставить туда таблицы стилей CSS, они должны быть достаточно умными, чтобы скопировать дополнительные три строки в то же место.   -  person ceejayoz    schedule 12.06.2009
comment
@OP: под пользователями вы имеете в виду коллег-разработчиков? Какой продукт вы создаете там, где ваши пользователи разрабатывают html-код?   -  person belgariontheking    schedule 12.06.2009
comment
@annakata, теперь я вижу, что есть хаки, но их использование кажется большим беспорядком, когда вы могли бы просто правильно указать пространство имен своего стиля IE с помощью условного оператора. @rich, я думаю, вы обнаружите, что в конце концов будет более запутанным пытаться сделать все стили на одном листе, а не иметь 2. да, вы сейчас пытаетесь внести только одно изменение, но если ваше приложение успешно, этого не будет в будущем.   -  person Chris Drappier    schedule 12.06.2009
comment
Кого-нибудь еще удивляет, как много людей, кажется, не знают о взломах CSS? Теперь я знаю, что я стар.   -  person annakata    schedule 15.06.2009


Ответы (6)


Если вы не хотите использовать условные комментарии, вы можете использовать хак * html:

h1 {
    color: green;
}

* html h1 {
    color: red; /* this will only be applied by IE 6, 5.5, 5, and 4 */
}
person NickFitz    schedule 12.06.2009
comment
+1 за ответ, который ищет Алек ... но уж точно не для поощрения взломов css, когда условные операторы IE намного лучше. - person Ryan Florence; 12.06.2009
comment
сокращение загрузок - веская причина, но она должна относиться к все меньшему количеству сайтов в наши дни - person annakata; 12.06.2009
comment
Очевидно, что условные комментарии (не утверждения) лучше, но они специально исключены в исходном вопросе. Я считаю, что это наименее вредная альтернатива. - person NickFitz; 12.06.2009

По-видимому, вы можете поместить определенные операторы IE6 в CSS, добавив к ним знак подчеркивания.

См. http://vexxhost.com/blog/2007/03/01/only-css-hack-you%E2%80%99ll-ever-need-seriously/

person Robert Harvey    schedule 12.06.2009

Как вы, очевидно, заметили из полученных ответов, использование условных комментариев для этого настолько стандартно, что люди говорят вам делать это, даже если вы специально сказали, что не хотите.

Но если вам абсолютно необходимо, чтобы определение пользовательского агента выполнялось на уровне файла CSS, я бы написал PHP-скрипт, который выводит CSS (а не HTML) и анализирует пользовательский агент в PHP. Если файл должен называться stylesheet.css или что-то еще, Apache перезаписывает или может использовать MultiViews, чтобы сделать PHP-скрипт доступным под этим именем.

person chaos    schedule 12.06.2009

Вот довольно полный список нежелательных хаков: http://www.javascriptkit.com/dhtmltutors/csshacks3.shtml

person Max Schmeling    schedule 12.06.2009

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

Я бы очень рекомендовал вам не заниматься сниффингом пользовательских агентов, это чревато множеством проблем, например, многие браузеры сообщают о себе как IE, даже если это не так (я думаю, по умолчанию в Opera 7). Строке User-Agent нельзя доверять, и ее следует использовать только в крайнем случае.

person roryf    schedule 12.06.2009
comment
Если вы не узнаете взлом CSS, я не думаю, что вы имеете дело с изменением файла CSS, но, несмотря на то, что проблема обслуживания больше связана с перекрестным огнем того, что CSS будет и не будет применяться в будущих браузерах и экзотических непреднамеренных браузеры. - person annakata; 12.06.2009
comment
Речь идет не о распознавании взлома CSS, а о знании того, что он должен делать. Согласитесь с перспективой, поэтому рекомендуется использовать условные выражения. Бывали случаи, когда мне хотелось, чтобы в Safari / Firefox было что-то подобное ... - person roryf; 12.06.2009

Используйте условный комментарий.

<!--[if IE 6]>
<link rel="stylesheet" href="/ie6.css">
<![endif]-->

edit: Теперь, когда Wellbog исправил ваш вопрос, нет никакого способа сделать это с помощью чистого действительного CSS.

Вы могли бы использовать PHP или другой серверный язык для обнаружения IE6 из строки пользовательского агента и обслуживания другого файла CSS, но гораздо лучше просто использовать технику условного комментирования.

По какой причине вы отказываетесь использовать существующее, работающее, не требующее взлома решение Microsoft?

person ceejayoz    schedule 12.06.2009
comment
Он специально сказал, что не хочет. - person Welbog; 12.06.2009
comment
У вас было столько же возможностей отредактировать вопрос, чтобы увидеть остальную часть очевидного отрезанного предложения, как и у меня. - person Welbog; 12.06.2009
comment
Я видел достаточно очевидных сокращенных предложений, в которых не был скрытый HTML, чтобы не тратить свое время на чтение мыслей. - person ceejayoz; 12.06.2009