Экспериментируя с псевдо-классом :hover
и анализируя его преимущества, я рассердился когда узнал о том, что Internet Explorer не поддерживает :hover
естественным путем. В этом браузере данный селектор можно использовать только для элементов ссылок (<a href="">ссылка</a>
). Современные же браузеры могут отображать эффект выделения для любого элемента CSS. Как же добавить hover для Internet Explorer?
Существует так называемый whatever:hover — способ, который позволяет веб-разработчикам использовать селектор :hover
в Internet Explorer. Версия 1.11.040203 (последняя на сегодняшний день) имеет несколько незначительных недостатков, но люди, которые разобрались с этим методом, не жалуются.
Просмотрите вышеприведенную ссылку через любой браузер и поиграйте курсором мыши, наводя его на заголовки, параграфы и списки. Теперь понимаете в чём сила? Дополнительная, второстепенная информация может появляться только по желанию пользователя. Текст при этом можно оставлять просто чёрным текстом. Это разгружает глаза и делает страницу более читабельной. А уже наводя курсор на параграф можно увидеть даты, ссылки данного блока, какие-либо выделения и так далее. В какой-то степени это поддерживает идеологию больших текстов, когда удобно просматривать все использующиеся ссылки в самом конце текста.
Как же заставить Internet Explorer распознавать селектор :hover
с любым элементом каскадных таблиц стилей?
Всё достаточно просто. Скачайте .htc файл (whatever:hover) и прикрепите его следующим способом через CSS-файл:
BODY {
behavior:url("csshover.htc");
}
Это предполагает, что файл csshover.htc
находится в одной директории вместе с CSS-файлом. Иначе необходимо прописать правильный путь. В принципе всё. Экспериментируйте.
Примечание: во время проверки правильности написания кода, W3C CSS-валидатор выдает ошибку, так как используется behavior
, что противоречит правилам. Для тех кому важно, чтобы их код соответствовал веб-стандартам, есть обход данной проблемы.
Так как файл .htc
предназначен только для Internet Explorer, то можно воспользоваться специальными комментариями (conditional comments), которые делают документ валидным. Но в этом случае всё должно находится не в CSS-файле, а между тэгами <head></head>
самого HTML документа:
<!--[if IE]>
<style type="text/css">
BODY { behavior:url("structure/csshover.htc"); }
</style>
<![endif]-->
Ну вот и всё. Удачи.
Если мне память не изменяет, у Зелдмана на alistapart.com была статья по-этому поводу и улучшенный метод.
Память изменяет. Все говорят о методе whatever:hover как о самом достойном и функциональном.
Все подключил, а на IE всеравно ничего не работает… У меня hover используется для тегов div, надо ли добовлять чего-нибудь в мой css код?
Сергей, зайди на
http://www.xs4all.nl/~peterned/csshover.html
и почитай. Скачай новую версию. У меня заработало сразу для li:hover-элементов.
Подключил, все работает !!!
Ура, наконец-то можно наполную заюзать CSS
спасибо за инфо! долго искал решение и нашел. скачал, поставил – работает. css forever!
работает с большими тормозами!
>> работает с большими тормозами!
на смартфоне тестил? 😉
И вправду ужасно тормозит, когда текста много на странице ~107Кб напичканного тегами. Все ховеры начинают тормозить жутко. IE начинает хавать 20-30% ресурсов (Athlon 42 X2 4200+, 1024Mb).
Есть какое-нибудь удобоваримое решение как этого избежать?
Есть. Избегать использования htc.
Скажите как использовать a:hover {background-color: #c20000; text-decoration:none; color: #fff;} КУДА ВСТАВИТЬ этот код можно в html, чтобы селектор работал.. при на ведении мыши на ссылку она подсвечивалась?
> а я такою юзаю. тормозов нет
И работает такое чудо только в IE
Метод хороший, но не решает всех проблем.
Так, например, на больших и сложных документах сам IE даже для стандартного a:hover отжирает 100% (!) проца.
Да и вообще, довольно плохо IE работает с динамическим изменением класса.
Например, опять же, на больших документах css-конструкция:
a:hover {
text-decoration: underline;
}
работает гораздо медленее (в разы!), плюс грузит проц на 100%, чем
<a onmouseover="this.style.textDecoration='underline';" onmouseout="this.style.textDecoration='none';" rel="nofollow">...
В Mozilla всё работает без проблем. Остаётся только повеситься. 🙁
Для тех, у кого этот метод не заработал:
указывайте полный URL к файлу csshover.htc, начиная со слеша “/”
Например,
BODY {
behavior:url(“/csshover.htc”);
}
После этого у меня hover сразу без вопросов заработал
Метода работает, IE, зараза, подвисает правда, но хоть как-то. IE вообще во многом тормозит и лагает. Убить его мало.
пасип, полезная инфа, долго искал!
Не плохо, спасибо. Жаль, что на больших страницах тормозит.
Лечение IE6, без всякого .htc!!!! В стилях нужно написать следующее
a :hover{ <br />
text-indent: 0; /*DO NOT REMOVE THIS OTHERWISE HOVER WILL NOT WORK IN IE6!*/<br />
}
И уже потом ставить что-то типа
a :hover span{ <br />
display: block;<br />
}
Говорят можно поставить и любое другое свойство но вот это точно работает и не мешает – проверено!
Хороший способ, но не хочется подгружать скрипты на сайте, посещаемость очень большая.
Пробовал так
div.dinav:hover > h2.tsnav, div.dinav:hover h2.tsnav {
background:#51856B;
color: #FFFFFF;
}
Работает только в опере 9.5 и сафари
Чё то не получается (((
Вот так делаю:
body {background-color:#353535;
behavior:url(“csshover.htc”);}
.pict img:hover {border:1px solid orange;}
И, конечно, файл csshover.htc в той же директории, что и файл стилей.
Вставляй не в CSS, а в страничку мужду Хедами (HEAD)
У меня все четко работает!
Спасибо.
Надеюсь, народу пригодится.