Потрясающий эффект при наведении на изображение
20 апреля 2012 | Опубликовано в css | 5 Комментариев »
В этом уроке мы будем учиться делать интересный эффект при наведении на изображение. Мы создадим его при помощи css3, а также добавим JQuery для браузеров, которые не поддерживают прозрачность и cвойство transition. Также мы позаботимся о том, чтобы наши изображения были адаптивными.
Нажмите на изображение, чтобы увидеть демо-версию:
Шаг 1 : Photoshop
Нам нужны 2 версии картинок : изображение, которое мы хотим видеть при наведении и его чёрно-белая копия. Наши картинки размером 845px x 515px.
Шаг 2 : Разметка html
..
<
div
id
=
"wrap"
>
<
ul
>
<
li
>
<
div
>
<
img
src
=
"img/tut1_desaturated.jpg"
/>
<
span
class
=
"shadow"
></
span
>
<
img
class
=
"onhover"
src
=
"img/tut1_color.jpg"
/>
</
div
>
</
li
>
</
ul
>
</
div
>
Шаг 3: Добавляем стили
Давайте сначала сбросим ненужные стили, для этого добавим следующий код:
html, body, div, span, h
1
, h
2
, p, a, ul, li, img
{
margin
:
0
;
padding
:
0
;
border
:
0
;
outline
:
0
;
font-size
:
100%
;
background
:
transparent
;}
ul {
list-style
:
none
;}
#wrap
выровнен по центру и имеет размер 865 px = 845px (размер изображения) + 2x10px (обводка).Диву, в который поместим изображение, назначим свойство position:relative (чтобы правильно расположить 2 варианта изображения) и overflow: hidden (чтобы скрыть ненужные части, когда мы будем вращать и увеличивать изображение).
#wrap {
width
:
865px
;
margin
:
0
auto
;}
ul {
margin-top
:
50px
; }
li div {
width
:
845px
;
height
:
515px
;
overflow
:
hidden
;
position
:
relative
;
border
:
10px
solid
white
; box-shadow:
0
2px
5px
rgba(
0
,
0
,
0
,.
4
);}
Шаг4: Анимация от чёрно-белого к цветному
Основное изображения имеет относительное позиционирование; значение прозрачности для .onhover
(цветное изображение при наведении) -0 и установлено абсолютное позиционирование. При наведении на общий див для .onhover
прозрачность изменяется на 1. Чтобы сделать эффект плавным, добавим свойство transition к изображению
. (В примере не указаны префиксы для браузеров).
img {
position
:
relative
;
top
:
0
;
left
:
0
;
transition:
all
1.5
s .
5
s; }
img.onhover {opacity:
0
;
position
:
absolute
;}
li div:hover img.onhover {opacity:
1
;}
span.shadow
):.shadow {
position
:
absolute
;
top
:
0
;
left
:
0
; opacity:
1
;
background
:
transparent
;
width
:
100%
;
height
:
100%
;
box-shadow:
inset
0
0
60px
20px
rgba(
37
,
27
,
23
,.
5
);
transition:opacity
1.5
s .
5
s;}
li div:hover .shadow {opacity:
0
;}
Шаг 5: Давайте добавим масштабирование и вращение
Нам нужно просто добавить свойство transform, укажите время, а также параметры при наведении.
img {
position
:
relative
;
top
:
0
;
left
:
0
;
transition:
all
1.5
s .
5
s;
transform: rotate(
-4
deg) scale(
1.2
);
transform-origin:
50%
50%
;}
li div:hover img {transform: scale(
1
) rotate(
0
);}
Шаг 6: Делаем изображение адаптивным
Во-первых, давайте немного изменим стили для #wrap
, элементов списка (li div),
чтобы сделать их резиновыми. В последнем случае мы просто не указываем высоту и ширину элемента.
#wrap {
max-width
:
865px
;
margin
:
0
auto
;
width
:
95%
;}
li div {
overflow
:
hidden
;
position
:
relative
;
border
:
10px
solid
white
; box-shadow:
0
2px
5px
rgba(
0
,
0
,
0
,.
4
);}
img {
max-width
:
auto
;
vertical-align
:
bottom
;
width
:
100%
;}
Шаг 7: Добавим jQuery
Добавим JQuerry, чтобы наши изображения корректно отображались в IE.
<!--[
if
lt IE 9]><script>
<script src=
"<a href="http://code.jquery.com/jquery-latest.js">http://code.jquery.com/jquery-latest.js</a>"
></script>
$(document).ready(
function
() {
$(
'.onhover'
).hide();
$(
'li div'
).hover(
function
(){
$(
this
).find(
'.onhover'
).fadeIn(1000);
},
function
(){
$(
this
).find(
'.onhover'
).fadeOut(1000);
})
})
</script><![endif]-->
Это все. Надеюсь, вы вдохновились этим пример -теперь ваша очередь играть со свойством css transitions.
Автор урока — pehaa
Перевод — Дежурка
Комментарии
Похожие статьи
- Использование множественных фоновых изображений CSS: основы
- Создание элементов, расположенных ровно по центру, с высотой и шириной, заданными в процентах
- Использование плавной прокрутки и ее недостатки
- Использование тега span для разделения слов в ссылках в CSS
- Использование порядка расположения множественных фоновых изображений
3 мая 2012 в 8:48
Шикарный эффект, обязательно поэкспериментирую!)
3 октября 2012 в 15:14
Уже 3 дня сижу над одной штукой,
сделать эффект получилось, но:
нужно сделать так, что бы изображений было несколько, а подсвечивалось только то, на которое навёл мышку...
так вот эффект срабатывает сразу для всех фото,
ушёл от списка, каждую картинку в свой див поместил, так работает,
но если поместить эти дивы с фото (или список с фотографиями — проверил) в свой див (для задания позиции на экране) то эффект срабатывает сразу для всех фото всё равно, и в некоторых случаях срабатывает сразу при наведении на общий див, даже не на фото..
помогите кто нибудь!! %)
октября 4, 2012 at 2:24 пп
А Вы можете код показать?
октября 9, 2012 at 9:50 дп
Проблему решил, сделал через список, каждая колонка, в которой текст и рисунок теперь подсвечиваются отдельно при наведении.
Если кому интересно или такая же была проблема, могу кинуть отдельно код.
4 октября 2012 в 21:38
Привет. Сразу скажу я только учусь. Может кто объяснить как задается видимая область картинки. Вот в примере сама картинка больше размером и наклонена, но мы видим только прямоугольный кусок от нее. Это делается простыми средствами html+css или же это дело рук jquery? спасибо.