Использование смены изображений очень легко выполнить с помощью 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.5 s; |
08 | -moz-transition: opacity 0.5 s; |
09 | -o-transition: opacity 0.5 s; |
Затем при активации элемента изменяется прозрачность:
Способ второй (на пике технологий)
Единственная причина, по которой мы используем элемент 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.5 s; |
09 | -moz-transition: opacity 0.5 s; |
10 | -o-transition: opacity 0.5 s; |
Способ третий (поддерживаем наработки)
Некоторые браузеры не поддерживают ни псевдо элементы, ни трансформации. Если нужно сохранить кросс-браузерность приложения, то придется использовать избыточную разметку 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(); |
Все три способа использованы на странице демонстрации.
Комментариев нет:
Отправить комментарий