Это возможно, используя только CSS. Смотрите эту скрипку для примера: https://jsfiddle.net/ffqdmcws/
HTML:
<div class="crossfade">
<div class="static"></div>
<div class="hover"></div>
</div>
CSS:
.crossfade {
position: relative;
width: 300px;
height: 200px;
}
.static, .hover {
position: absolute;
width: 100%;
height: 100%;
transition: opacity 1s ease;
}
.static {
background: url('http://lorempixel.com/300/200/food');
opacity: 1;
}
.hover {
background: url('http://lorempixel.com/300/200/cats');
opacity: 0;
}
.crossfade:hover > .static {
opacity: 0;
}
.crossfade:hover > .hover {
opacity: 1;
}
В этом случае у меня есть контейнер DIV с помощью crossfade
класса, и несколько других divs внутри этого, используя классы static
и hover
.
Класс static
содержит фон, который будет показан первоначально, а класс hover
содержит фон, который будет исчезать до наведения. Исходные непрозрачности равны 1 для класса static
и 0 для класса hover
, поэтому вы видите только div с классом static
.
Затем, если вы подключите действие при наведении на контейнер DIV с помощью .crossfade:hover
, для того, чтобы установить opacity: 0;
для static
и opacity: 1;
для hover
, который скрывает static
и показывает hover
, при наведении курсора мыши на контейнере дел.
Наконец, чтобы сделать перекрытие фона, используйте absolute
позиционирование двух внутренних div, так что они всегда друг на друга. Кроме того, для истинного эффекта кроссфейда вам понадобится правило transition: opacity 1s ease;
, в котором говорится, что вы хотите, чтобы непрозрачность переключалась в течение 1 секунды вместо переключения мгновенно. Оба divs, изменяющие непрозрачность от 1-> 0 и от 0-> 1, дают вам эффект кроссфейда фоновых изображений.