Как обходным путем: IE6 не поддерживает селектора атрибутов CSS
В одном из проектов, которые я работаю, используется CSS-атрибут select [att]
Селектора CSS
который не поддерживается ie6:
Поддержка селекторов CSS в IE6 (найдите текст "Селектора атрибутов" )
Есть ли способ обхода/взлома, который, конечно, действителен html/css для решения этой проблемы?
Ответы
Ответ 1
Поскольку IE6 по существу ограничен:
- Селектор классов
- Селекторы идентификаторов
- (пробел) селекторов-потомков
- a: только псевдоселекторы
возможны только следующие варианты:
- Используйте больше классов для идентификации ваших элементов.
- Использовать JavaScript ( сильно не рекомендуется, за исключением особо специализированных случаев)
Мне очень полезно воспользоваться возможностью назначать несколько классов элементу, разделяя их пробелом: class="foo bar"
Ответ 2
Это невозможно, без печального HTML-кода с стеком чужих селекторов классов.
Я бы рекомендовал создать ваш сайт, чтобы ваш полностью действующий CSS работал для людей, использующих современные браузеры, и что он все еще можно использовать в IE6, хотя визуально не совсем правильно. Вам просто нужно найти правильный баланс между тем, чтобы ваш сайт стал стандартным и наклонился назад для пользователей, которые не будут обновляться. Это сломанный браузер, рассматривающий его как таковой.
Ответ 3
Если вам нужен селектор атрибутов в IE6, вы можете использовать Dean Edward IE.js.
http://dean.edwards.name/IE7/
Это сделает IE 5+ более похожим на IE7
supports the following CSS selectors:
parent > child
adjacent + sibling
adjacent ~ sibling
[attr], [attr="value"], [attr~="value"] etc
.multiple.classes (fixes bug)
:hover, :active, :focus (for all elements)
:first-child, :last-child, only-child, nth-child, nth-last-child
:checked, :disabled, :enabled
:empty, :contains(), :not()
:before/:after/content:
:lang()
У меня не было IE6 (используйте IE7), поэтому я не могу сказать, что он сработал, но попробуйте
Ответ 4
Вы можете использовать выражения CSS Internet Explorer в сочетании с безопасным подчеркиванием ( "_", IE6 и более ранними версиями) CSS hack:
/* Adds dotted bottom border to `<ABBR>` with a `title` attribute. */
abbr {
_border-bottom: expression(this.title ? '1px dotted' : 'none');
}
abbr[title] {
border-bottom: 1px dotted;
}
Я действительно понимаю, что вы просили "действительный" CSS, но если CSS-хак над фриками вы, пожалуйста, прочитайте "Безопасные CSS-хаки" .
Вышеупомянутое может быть изменено на:
.ie6 abbr {
_border-bottom: expression(this.title ? '1px dotted' : 'none');
}
abbr[title] {
border-bottom: 1px dotted;
}
То есть, если ваш HTML начинался с:
<!--[if lt IE 7]><html class="ie6"><![endif]-->
<!--[if IE 7]> <html class="ie7"><![endif]-->
<!--[if IE 8]> <html class="ie8"><![endif]-->
<!--[if gt IE 8]><!--><html><!--<![endif]-->
Ответ 5
Dean Edwards Библиотека JavaScript IE7 предоставляет поддержку селектора атрибутов для IE 5 и 6.
Ответ 6
Использовать классы, это единственное обходное решение, к сожалению.
Ответ 7
Если вы используете jQuery на своем сайте, другой параметр SuperSelectors - он проходит через таблицы стилей ваших сайтов, динамически добавляя классы к элементам так что даже IE6 может искупаться в правильном использовании селекторов CSS, таких как ul li:first-child li:nth-child(odd) a:hover
.