Итак, в этой статье я расскажу об общих сведениях при построении выпадающих меню
на CSS и приведу 3 примера построения таких меню. Основная идея выпадающего меню
на CSS крутиться вокруг написания CSS-кода с наследованием тегов, псевдо-класса
:hover и некоторых CSS-селекторов. В Internet Explorer версиях ниже 7-й очень
ущербная поддержка CSS (не полная поддержка CSS 2.1), и псевдо-класс :hover
работает только для ссылок. Поэтому для построения выпадающего меню в IE 6 есть
два простых выхода. Первый — это использовать специальное расширение файлов
*.htc, которое майкрософт, видимо, и разработала в своё время чтобы скрыть
недостатки своего браузера. Файлы *.htc — это практически чистый Javascript, и
поэтому если в браузере он не будет включен, код не будет выполнен. Второй
выход — использовать ссылку (HTML-тег <A>), как родительский контейнер для
субменю. Этот способ конечно же не пройдет валидацию W3C, и чтобы можно было
размещать «ссылки внутри ссылки» с нормальным отображением в браузерах, нужно
каждое субменю «оборачивать» в пустую таблицу. Стоит также отметить, для
устранения всяких глюков для IE 6, нам может пригодиться выражение expression,
внутри которого заключается JS-код. Еще, также, все приведенные ниже способы
выпадающего меню тестировались с включенным «доктайпом» XHTML 1.0 Transitional и
возможно могут не работать без него.
Рассмотрим ниже способ выпадающего
одноуровневого меню, который не требует подключения никаких HTC-файлов, работает
в IE 6, но не проходит W3C-валидацию:
Из-за того что IE 6 не может не глючно убирать или
вообще может не убирать подменю для стиля ".menu1 span table" пришлось
воспользоваться «хаком» для IE 6 и через выражение expression устанавливать
свойство display в none. Дело в том что выражение JS или, как в данном случае,
строка, внутри expression, не кэшируется и выполняется постоянно. Поэтому после
добавления этого экспрешна, IE 6 стал нормально скрывать выпадающее подменю.
Способ хорошо подойдет для несложных одноуровневых меню, если вас не забодит
валидация HTML-кода на странице.
Следующий
пример выпадающего меню приведен с использованием файла csshover.htc,
который написал Peter Nederlof. Он необходим для того, чтобы все HTML-элементы в
DOM-дереве документа, после загрузки страницы, обретали также возможность
(обрабатывали события onmouseover и onmouseout) использования псевдо-класса
:hover для IE 6. Файл этот весит всего-лишь 4.3 Кб и подключается на страницу в
CSS файле при помощи вставки body { behavior:url(csshover2.htc); } Общий CSS
и HTML код такого одноуровневого CSS-меню приведен ниже:
Но и тут, конечно-же, не обошлось без «выкрутасов»
всеми любимого Internet Explorer 6. Но впринципе, как такового меню, это не
касается. Я просто решил сделать полупрозрачную подложку для выпадающего
субменю, и IE6 не захотел растягивать абсолютный блок с полупрозрачностью по
всей высоте родительского блока. Пришлось засунуть ему кочергу в
задницу ему немного помочь, и опять воспользоваться услугами выражения
expression, для получения высоты родительского блока. Приведенный выше HTML-код
меню отлично проходит валидацию, если что. А если ничего, то пользуйте первый
способ.
В третьем способе, будет реализовано
многоуровневое выпадающее CSS-меню, без попыток реанимации его работы в IE 6.
Кому это надо может заняться его доработкой. В этом примере используется
селектор CSS ">", что в примере: "A > B", означает установку стилей для
"B", если он является непосредственным потомком "A". Как и для всех
приведенных выше меню, нетрудными манипуляциями с CSS-кодом, можно привести меню
к нужному визуальному отображению. А вот и сам код третьего варианта
меню:
Если
возникли вопросы при прочтении этой статьи, или в общем и в целом, как обычно,
велкам в комменты. Также посоветую один интересный сайт, посвященный самым
разным CSS-меню: http://www.cssplay.co.uk/
Для комфортного отображения сайта: 1) Лучше пользоваться браузерами Opera 9+, Mozilla Firefox 3+ или Internet Explorer 8+. 2) Лучше монитор с разрешением не меньше 1024x768 (ширина x высота) пикселей. 3) Если пользоваться программой Adguard вы можете сэкономить на трафике и перестанете видеть не нужную рекламу ! Отличная программа для блокировки всякой рекламы на сайтах ! Ссылка на сайт программы Ссылка на установочный пакет программы