Наконец-то разрешилась известная и очень назойливая проблема, которая не позволяла использовать картинки в свойстве hover должным образом. Из-за Internet Explorer это CSS-свойство сильно ограниченно, но всё-таки нашлось замечательное применение этого свойства к интерфейсу навигации на сайтах с использованием так называемых закладок (CSS tabs).
Вы наверно не раз замечали, когда на каком-либо сайте одна картинка заменятся другой при наведении на неё курсором мыши. Этот метод часто используется в навигации (меню) веб-сайтов. Все картинки необходимо загрузить ещё в самом начале (image preload), вместе с загрузкой страницы сайта. В таких случаях часто используют JavaScript. Необходимые картинки сохраняются в кешэ (cache) браузера. Цель этого процесса — мгновенная смена изображения, чтобы в момент наведения курсора мыши посетитель сайта не ждал пока картинка загрузится с сервера.
Современные браузеры, поддерживающие спецификации W3C, позволяют применять свойство :hover к любому элементу. Проклятый Internet Explorer делает это возможным только для элементов ссылок — a:hover (Свойство :hover для любого CSS элемента).
Уже придумано много способов реализации доступного и семантически правильного навигационного меню на основе закладок, полностью на CSS. Например “Раздвижные двери CSS” (часть I и часть II).
Вскоре после адаптации этого метода эксперименты продолжились. Возникла идея сделать эффект hover на CSS используя картинки, тем самым делая навигацию на сайтах более привлекательной, и при этом не использовать JavaScript. Первым в плотную к этому приблизился Petr Stanicek (Fast Rollovers Without Preload). Оказалось, что возможно использовать только одну картинку для всех состояний (normal, hover, active, visited и т.д.).
Простейший пример использования одной картинки:
#example a {
height: 25px;
width: 175px;
background: url("image.gif") 0 0 no-repeat;
}
#example a:hover {
background-position: 0 -25px;
}
Используется всего одна картинка, а значить подгружать с сервера ничего не надо. Невидимая часть картинки поднимается вверх на 25 пикселей. В обычном состоянии видна верхняя часть, а уже при наведении курсора мыши становится видна нижняя часть картинки.
Рабочий пример навигации на CSS (XHTML и CSS в исходнике).
Mozilla, Opera, Safari, IE5 и IE5.5 без проблем справляются с этой задачей, но только не IE6. Этот браузер всё равно продолжает каждый раз подгружать картинку с сервера, создавая эффект мерцания.
К счастью, один из многочисленных недостатков Internet Explorer был исправлен благодаря Apache и человеку по имени Дин Эдвардс (Dean Edwards). В файле httpd.conf или в .htaccess нужно прописать следующие строки:
ExpiresActive On
ExpiresByType image/gif A2592000
ExpiresByType image/jpeg A2592000
ExpiresByType image/png A2592000
Эти строки говорят браузеру держать в кэше нужные типы файлов (например gif, jpeg и png) 30 дней, то есть 2592000 секунд. Вы можете изменять эти настройки взависимости от потребностей.
Никита а зачем делать такой грамосткий код в CSS’e , есле можно воспользоваться JAVA (onMouseOver, onMouseOut)…
Чтобы избавиться от JavaScript и сделать код html страницы более ‘чистым’
Ну этот код же совсем маленький.. занимает всего символов 100 и того меньше… а так ты нагружаешь CSS файл… какой смысл убрать в одном месте и запихнуть в другое???
)
Уже давно признано считать списки (ul) для навигации наиболее компактным, доступным для текстовых браузеров, PDA, телефонов…
CSS имеет возможность манипулировать этими списками, и, как видишь, совсем неплохо.
отличная идея
спасибо
Идея клевая, а то менюхи на JS достали.
Буду переписывать свою менюшку
Спасибо ,интересная статья.
А почему у вас на сайте так часто используются заглавные буквы вместо строчных?
ДА, согласен. Жаба скрипт достал немного..! CSS rulez !!!
Спасибо давно хотел найти что то подобное и впервую очередь из за поисковой оптимизации
Идея клевая, а то менюхи на JS достали.