При наведении на картинку, она меняется

Чтобы при наведении на картинку, она менялась, достаточно применить псевдокласс :hover.

Самый простой вариант

В первом примере мы будет изменять фоновое изображение background.
<style type="text/css"> 
.izo { 
background: url(http://изо1.jpg) no-repeat 50% 50%;  
display: block;
width: 400px; 
height: 400px; 
}

.izo:hover { 
background: url(http://изо2.jpg) no-repeat 50% 50%; 
} </style> 

<a href="#" class="izo"></a>

Второй вариант, когда при наведении на картинку, она меняется

То же самое можно оформить с помощью прозрачности фона. Только здесь тег a не пустует.
<style type="text/css">
.demoizo {
  display: block;
  text-align: center;
 }

.demoizo:hover, .demoizo:focus, .demoizo:active {
  background: url(http://изо2.jpg) no-repeat 50% 50%;
 }

.demoizo:hover img, .demoizo:focus img, .demoizo:active img  {
  background: transparent;
  visibility: hidden;
}
</style>


<a href="#" class="demoizo">
<img src="http://изо1.jpg" />
</a>

Третий вариант

Или благодаря тому, что размещаем один элемент под другим с помощью position: absolute (см. vagabundia.blogspot.com).
<style type="text/css">
  .demo { 
    position:relative; 
    margin:0 auto; 
    height: 400px;
    width:400px;
    display: block;
}

  .demo img { 
    left: 0; 
    position:absolute; 
    top: 0; 
}

  .demo img.raz {opacity:0;filter:alpha(opacity=0);}
  .demo:hover img.raz {opacity:1;filter:alpha(opacity=100);}
  .demo:hover img.dva, .demo img.dva:hover {opacity:0;filter:alpha(opacity=0);}
    
</style>

<a class="demo" href="#">
<img class="raz" src="http://изо2.jpg" />
<img class="dva" src="http://изо1.jpg" />
</a>
Добавив свойство transition в последнем примере, изменения будут происходить более плавно.
.demo img {
  -moz-transition: all 1s ease-in-out;
  -webkit-transition: all 1s ease-in-out;
  -o-transition: all 1s ease-in-out;
  transition: all 1s ease-in-out;
}

На метлеВедьмочка

Пункт 3.1. Здесь же можно внести свойство transform.
.demo img.raz {
  -moz-transform:scale(0);
  -webkit-transform:scale(0);
  -o-transform:scale(0);
  -ms-transform:scale(0);
}

.demo:hover img.raz {
  -moz-transform:scale(1);
  -webkit-transform:scale(1);
  -o-transform:scale(1);
  -ms-transform:scale(1);
}

.demo:hover img.dva {
  -moz-transform:scale(0);
  -webkit-transform:scale(0);
  -o-transform:scale(0);
  -ms-transform:scale(0);
}

На метлеВедьмочка

Пункт 3.2. Или так.
.demo img.raz {
  -moz-transform:scale(1,0);
  -webkit-transform:scale(1,0);
  -o-transform:scale(1,0);
  -ms-transform:scale(1,0);
}
 .demo:hover img.raz {
  -moz-transform:scale(1);
  -webkit-transform:scale(1);
  -o-transform:scale(1);
  -ms-transform:scale(1);
}
 .demo:hover img.dva {
  -moz-transform:rotate(360deg) scale(0);
  -webkit-transform:rotate(360deg) scale(0);
  -o-transform:rotate(360deg) scale(0);
  -ms-transform:rotate(360deg) scale(0);
}

На метлеВедьмочка

Пункт 3.3. А можно воспользоваться свойством margin.
.demo { overflow:hidden; }

.demo img.dva, .demo:hover img.raz { margin-top: 0px; }

.demo:hover img.dva { margin-top: 400px; }

.demo img.raz { margin-top: -400px; }

На метлеВедьмочка

Пункт 3.4. Главное, чтоб фантазии хватило.
.demo { overflow:hidden; }

.demo img.dva, .demo:hover img.raz { margin: 0px; }

.demo:hover img.dva {
  margin-top:400px; 
  margin-left:400px;
  -moz-transform:rotate(90deg);
  -webkit-transform:rotate(90deg);
  -o-transform:rotate(90deg);
  -ms-transform:rotate(90deg);
}

.demo img.raz {
 margin-top:-400px; margin-left:-400px;
}

На метлеВедьмочка
Последний предложенный Пункт 3.5. будет в разных браузерах отображаться по разному при наведении на картинку курсора, поскольку нет единой договорённости относительно сочетания transform: translate и transform-origin. Мне нравится больше вариант в Mozilla Firefox.
.demo:hover img.dva {
  -moz-transform: translate(250px, -1400px) scale(0.5, 0.5);
  -webkit-transform: translate(250px, -1400px) scale(0.5, 0.5);
  -o-transform: translate(250px, -1400px) scale(0.5, 0.5);
  -ms-transform: translate(250px, -1400px) scale(0.5, 0.5);
  -moz-transform-origin: 0px 2700px;
  -webkit-transform-origin: 0px 2700px;
  -o-transform-origin: 0px 10000px;
  -ms-transform-origin: 0px 2700px;
  opacity:0.3;filter:alpha(opacity=0.3);} 

  .demo:hover img.raz {z-index: 2;} 

Ведьмочка
На метле


На www.cssplay.co.uk дан более трудоёмкий способ.


Возможно вы искали вариант, когда при наведении на картинку, она увеличивается.
в f t
наверх ↑

55 комментариев:

Morskaia
Супер вещь:)
Евгений
Объясните, куда нужно вставлять те коды, которые вы приводите
Крутая вещь!!!
NMitra
Потренируйтесь сначала в теле сообщения (при написании/редактировании сообщения) на вкладке "HTML". В дальнейшем, если какой-либо вариант планируете распространить на все страницы, то стили CSS - код между

<style type="text/css">
,,,,,,,
</style>

без тега style можно внести согласно этой статье http://shpargalkablog.ru/2011/12/kak-izmenit-shablon-blogger.html
WeB XaSeR
Оригинальны 3 и 5 варианты, прикольно.. А с кроссбраузерностью как?
NMitra
IE пока не поддерживает, в следующей версии (-ms-).
NMitra
Смена картинки будет происходить, только без эффектов.
Ellis_Wood
Это что-то новенькое!! класно=)
Ольга У.
Просто супер!
Черников Александр
Спасибо!
admin
У вас в примере две фотки, попробовал добавить 3 фотку, а показывает все равно две...
NMitra
Всё верно. Одна картинка становится прозрачной, поэтому становится видна нижняя. Я не ставила перед собой цели сделать фотогалерею. Посмотрите здесь http://www.cssplay.co.uk/menu/click-gallery-previous-next.html, http://www.cssplay.co.uk/menu/cssplay-any-size-gallery.html . А стили можно добавить любые.
Анонимный
Спасибо! Все получилось!
NMitra
Рада слышать.
Ольга Корчёмкина
Красота! Спасибо большое за идею! Буду использовать при необходимости.
Оксана
Все это очень интересно! Но у меня почему-то не получилось. Что я делаю не так? Вроде все просто.
NMitra
Подробнее: страница где пробуете, какие картинки, что хотите добиться?
NMitra
Мне нужно наглядно увидеть что вы делаете.
Ольга
Спасибо за подробное описание, только не понятно, куда нужно этот скрипт вставить? Если на страницу с картинкой, то ничего не получается.
NMitra
При написании статьи, вкладка "HTML". Добавьте код, напишите в комментариях страницу, где внесли изменения. Только тогда я смогу понять почему не получается.
Марина
Подскажите, пожалуйста, что делать для того, чтобы поверх меняющейся картинки получилось разместить "неменяющуюся"? Придумала такой дизайн - а вот теперь релизовать не получается. Помогите, пожалуйста!
NMitra
Одной из картинок прописать псевдоэлементы с content: url(); - http://shpargalkablog.ru/2012/02/before-after-css.html
Анонимный
Помогите пожалуйста,решил вставить картинки первым способом, вставил 1 картинку с пареходом на вторую.

Захотел на той же странице еще вставить картинки, вставил другие совсем картинки НО ПОКАЗЫВАЮТ ДВЕ ПЕРВЫХ хотя в коде ссылки на другие картинки.

Как это исправить?

Александр, ICQ:387818339
NMitra
Заменить class="izo" на class="izo1"

.izo1 {}

.izo1:hover {}

Подробнее http://shpargalkablog.ru/2011/08/kak-ispolzovat-css.html
Асиля
Крутоо:)))
NMitra
Согласна)))
Ефименко Владислав
Я новенький в этом деле) Не могли бы вы подсказать почему картинки не меняются плавно, как у вас?
NMitra
Мне нужно увидеть что вы для этого сделали. Покажите страницу.
Lina
А у меня получаются 2 картинки рядом, или одна и не меняется...
Lina
А в первом примере вообще ничего не появляется...
NMitra
Покажите страницу с вашими экспериментами.
Lina
http://karen.arte-madeira.com.pt/#
NMitra
Вы стили CSS не прописываете. Не знаю вашу платформу, но, как правило, есть переключатель на HTML версию статьи. Код следует добавить именно там.
Анонимный
Подскажите, пожалуйста, а можно сделать так, чтобы при наведении картинка увеличивалась и сменилась на другую в этот момент как на сайте мегафона внизу?
NMitra
На скорую руку http://shpargalkablog.ru/2013/06/css.html
Если не нужна тень у картинок, то есть получиться ещё проще
Анонимный
агроменское спасибо
Анонимный
Спасибо. всё работает))
Sineoka
Огромное спасибо!!! Так долго искала код, и только ваш заработал))
NMitra
Рада, что всё удалось )
jeka
Ели на одной странице несколько изображений с разными эффектами переходов, то все работают с эффектом последней картинки - почему, и как это исправить?
Заранее спамибо!
NMitra
class="demo" для каждого эффекта свой
class="demo izo1"
class="demo izo2"
и следовательно
.izo1 img.raz {
-moz-transform:scale(0);
-webkit-transform:scale(0);
-o-transform:scale(0);
-ms-transform:scale(0);
}
jeka
Дело в том, что я чайник в CSS, не получается разобраться в Вашем ответе. Покажите пожалуйста на примере, буду премного благодарен. Хотел для примера загрузить то, что у меня - не получается. Какой то недопустимый тег.
Где что на что менять ума не приложу.
Спасибо что помогаете таким как я!
jeka
Простите за назойливость.
Сделал так: class="demo1-2-3" href="#"> где 1;2;3 для разных эффектов
Соответственно в css там где demo то же проставил для разных эффектов 1;2;3
Все работает.
NMitra
С селекторами лучше разбираться на http://shpargalkablog.ru/2011/08/kak-ispolzovat-css.html
Наоборот, хорошо, что отписались!
Kate Donskaya
Здравствуйте, я новичок совсем)
подскажите пожалуйста,можно ли делать эффект перекатывания не с картинкой, а с текстом, и как?
Заранее спасибо большое!!))
Kate Donskaya
И еще вопрос: по этому уроку с картинками все получилось, но как мне сделать эту картинку ссылкой на страницу? дело в том, что когда я вставляю адрес ссылки после значения href="#", она работает, но некорректно: открывается указанная в ссылке страница прямо в поле с кодом! (с полями прокрутки по бокам)(((...
NMitra
Здравствуйте, измените html

<div class="demo">
<div class="raz">текст, ссылка, картинка, что угодно</div>
<div class="dva">текст, ссылка, картинка, что угодно</div>
</div>
Dmitry Khramov
Super!
NMitra
Благодарю )
Serge Pol
а плгины для ВП эсть такие??
NMitra
Мне это не известно, предпочитаю чистый код JS или PHP
Анонимный
Скажите, как сделать чтобы одна картинка накладывалась на другую, т.е. чтобы первая не исчезала?
NMitra
См http://jsfiddle.net/NMitra/tqdfsytp/2/
Теория http://shpargalkablog.ru/2011/04/css-nalozhenie.html
Unknown
Я неправильно вопрос задал. Как сделать, чтобы при наведении на картинку появлялась другая картинка, при этом первая не исчезала. Хочу сделать светящуюся тень при наведении на картинку.

1-й вариант, делаю две разные картинки - "тень" и "картинка", тогда при наведении тень остается, а картинка исчезает.

2-й вариант, делаю две картинки, "картинка с тенью" и "картинка без тени", тогда при первом наведении исчезают обе картинки, только через несколько секунд начинает нормально работать. Даже если сайт был загружен 10 минут назад.

Скажите, как избежать исчезания картинок, ведь первое впечатление о сайте очень важно.
Сайт yut-vl.ru
NMitra
Второй вариант http://jsfiddle.net/tqdfsytp/4/
box-shadow не подходит? http://shpargalkablog.ru/2011/06/css-box-shadow.html
Или filter: drop-shadow?
Роман Пахомов
Спасибо большое, у меня все получилось благодаря вам, теперь все работает как часы, очень большую помощь вы мне оказали!