Использование смены изображений очень легко выполнить с помощью CSS. Задаем элементу фоновое изображение, а затем в его псевдо элементе :hover изменяем background-image. Самым лучшим способом будет совмещение обоих изображений в одно и использование сдвига в background-position. Такая техника называется спрайтом CSS. А если нам нужно плавно заменять одно изображение на другое без резких сдвигов?
Решение задачи заключается в использовании дополнительного элемента поверх оригинала с нулевым значением свойства opacity и значением свойства background-position, установленным в нужное значение. Затем в псевдо элементе :hover плавно изменяем прозрачность. Есть три метода сделать указанное действие. Покажем на примере маленькой стрелочки.

Способ первый (разумный прогресс)
Поместим элемент span в оригинальный элемент. Данный элемент span будет отображать активированное состояние. Да, излишняя разметка - плохо, но нам нужен дополнительный элемент, а псевдо элемент не поддерживает переходы в большинстве браузеров.
1 | <a href="#" class="arrow">Стрелочка<span></span></a> |
Стрелка использует замещение изображений CSS и расположение фона в позицию по умолчанию.
7 | background: url(sprites.png) no-repeat; |
Здесь используется относительное позиционирование для элемента span, который будет позиционироваться абсолютно с тем же самым размером. Положение фона будет сдвигаться на место для смены изображений. Его прозрачность устанавливается в ноль и будут использоваться трансформации CSS3 для размещения его на место.
03 | top: 0; left: 0; bottom: 0; right: 0; |
04 | background: url(sprites.png) no-repeat; |
05 | background-position: -50px 0; |
07 | -webkit-transition: opacity 0.5s; |
08 | -moz-transition: opacity 0.5s; |
09 | -o-transition: opacity 0.5s; |
Затем при активации элемента изменяется прозрачность:
Способ второй (на пике технологий)
Единственная причина, по которой мы используем элемент span - на момент написания урока только Firefox 4 поддерживал трансформации для псевдо элементов. Логично предполагать, что в будущем WebKit и другие браузеры также будут их поддерживать. Мы можем изменить разметку следующим образом:
1 | <a href="#" class="arrow">Стрелочка</a> |
А код CSS практически такой же, только мы используем :after вместо span:
04 | top: 0; left: 0; bottom: 0; right: 0; |
05 | background: url(sprites.png) no-repeat; |
06 | background-position: -50px 0; |
08 | -webkit-transition: opacity 0.5s; |
09 | -moz-transition: opacity 0.5s; |
10 | -o-transition: opacity 0.5s; |
Способ третий (поддерживаем наработки)
Некоторые браузеры не поддерживают ни псевдо элементы, ни трансформации. Если нужно сохранить кросс-браузерность приложения, то придется использовать избыточную разметку HTML и полагаться на JavaScript (jQuery...). Снова возвращаемся к элементу span.
1 | <a href="#" class="arrow">Стрелочка<span></span></a> |
Код CSS почти такой же, как и для выше обозначенных методов, но существенно упрощен, так как мы не используем псевдо классы и трансформации.
02 | display: inline-block; |
07 | background: url(sprites.png) no-repeat; |
11 | top: 0; left: 0; bottom: 0; right: 0; |
12 | background: url(sprites.png) no-repeat; |
13 | background-position: -50px 0; |
jQuery будет управлять затуханием. Сначала мы скрываем элемент span, затем присоединяем функции для обработки событий mouseenter и mouseleave через функцию hover для реализации затухания.
07 | $(this).find("span").stop().fadeIn(); |
09 | $(this).find("span").stop().fadeOut(); |
Все три способа использованы на странице демонстрации.
Комментариев нет:
Отправить комментарий