Как обойти это: IE6 не поддерживает CSS "атрибут" селекторы
Один из проектов, над которым я работаю, использует селектор CSS "attribute" [att]
который не поддерживается ie6: поддержка селекторов CSS в IE6 (см. текст "Селекторы атрибутов")
Есть ли обходной путь / взлом, который, конечно, действительный HTML / CSS, чтобы преодолеть эту проблему?
7 ответов
Поскольку IE6 существенно ограничен:
- селекторы классов
- Селекторы ID
- (пробел) селекторы потомков
- а:-псевдоселекторы
Ваши единственные варианты:
- Используйте больше классов, чтобы идентифицировать ваши элементы
- Использовать JavaScript (настоятельно не рекомендуется, за исключением особо специализированных случаев)
Я считаю очень полезным использовать возможность присваивать элементу несколько классов, разделяя их пробелом: class="foo bar"
К сожалению, это невозможно без добавления в ваш HTML стека посторонних селекторов классов.
Я бы порекомендовал спроектировать ваш сайт так, чтобы ваш полностью действующий CSS работал для людей, использующих современные браузеры, и чтобы он все еще мог использоваться в IE6, хотя визуально не совсем правильно. Вам просто нужно найти правильный баланс между приведением вашего сайта в соответствие со стандартом и отклонением назад для пользователей, которые не будут обновляться. Это сломанный браузер, относитесь к нему как к такому.
Если вам нужен селектор атрибутов в IE6, вы можете использовать Dean Edward IE.js. http://dean.edwards.name/IE7/
Это сделает IE 5+ более похожим на IE7
поддерживает следующие селекторы CSS: родитель> ребенок смежный + родной брат смежный брат [attr], [attr="value"], [attr~="value"] и т. д..multiple.classes (исправляет ошибку): hover,: active,: focus (для всех элементов): первый ребенок, последний ребенок, единственный ребенок, nth-child, nth-last-child: проверено,: отключено,: включено: empty,: содержит (),: не (): До /: после / содержания:: Языки ()
У меня не было IE6 (используйте IE7), поэтому я не могу сказать, что это сработало, но попробуйте
Вы можете использовать CSS-выражения Internet Explorer в сочетании с безопасным хакером CSS ("_", IE6 и более ранними):
/* 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]-->
Библиотека JavaScript Дина Эдвардса IE7 обеспечивает поддержку селектора атрибутов для IE 5 и 6.
Если вы используете jQuery на своем сайте, другой вариант - SuperSelectors - он просматривает таблицы стилей вашего сайта, динамически добавляя классы к элементам, так что даже IE6 может греться в свете надлежащей поддержки селекторов CSS, таких как ul li:first-child li:nth-child(odd) a:hover
,