Есть несколько блоков с разными фонами. Возможно ли добавлять им второй фон на CSS, например, по наведению?
.class:hover {
background-image: url(здесь как-то сохраняется оригинальный фон блока),
url(добавляется второй фон);
}
Блоков многовато, поэтому вариант для каждого просто копировать оригинальный фон + приписывать второй не слишком подходит. Нужно решение для всех блоков разом.
Идеи иссякли...
function fAddBgImage(sClass, sImageAndPos) {
let aBlocks = document.querySelectorAll(sClass);
let aImageAndPos = sImageAndPos.split(' ');
aBlocks.forEach(function(element) {
sBgImage = getComputedStyle(element).backgroundImage;
sBgPos = getComputedStyle(element).backgroundPosition;
element.addEventListener('mouseenter', event => {
element.style.backgroundImage = 'url(' + aImageAndPos[0] + '), ' + sBgImage;
element.style.backgroundPosition = aImageAndPos[1] + ' ' + aImageAndPos[2] + ', ' + sBgPos;
})
element.addEventListener('mouseleave', event => {
element.style.backgroundImage = '';
element.style.backgroundPosition = '';
})
});
}
fAddBgImage('.class_script', 'https://www.gravatar.com/avatar/3a0245702f6ce1969137e44750ca54a9?s=328&d=identicon&r=PG -20% -20%');
.wrap {
display: flex;
flex-flow: row nowrap;
}
.class_manual,
.class_before,
.class_after,
.class_script {
height: 180px;
width: 100%;
font: 14px 'Arial';
color: #ffdb00;
border: 1px solid #333;
background-repeat: no-repeat;
text-shadow: 1px 1px 4px black;
}
.class_manual {
background-image: url(https://i.stack.imgur.com/gJi51.jpg?s=328&g=1);
background-position: 0px 0px;
}
.class_manual:hover {
background-image: url(https://www.gravatar.com/avatar/3a0245702f6ce1969137e44750ca54a9?s=328&d=identicon&r=PG), url(https://i.stack.imgur.com/gJi51.jpg?s=328&g=1);
background-position: -20% -20%, 0px 0px;
}
.class_before {
background-image: url(https://i.stack.imgur.com/gJi51.jpg?s=328&g=1);
background-position: 0px 0px;
position: relative;
overflow: hidden;
}
.class_before:hover::before {
content: '';
position: absolute;
width: 100%;
height: 100%;
display: block;
background-image: url(https://www.gravatar.com/avatar/3a0245702f6ce1969137e44750ca54a9?s=328&d=identicon&r=PG);
background-position: -20% -20%;
background-repeat: no-repeat;
}
.class_after {
background-image: url(https://i.stack.imgur.com/gJi51.jpg?s=328&g=1);
background-position: 0px 0px;
position: relative;
overflow: hidden;
}
.class_after:hover::after {
content: '';
position: absolute;
width: 100%;
height: 100%;
display: block;
background-image: url(https://www.gravatar.com/avatar/3a0245702f6ce1969137e44750ca54a9?s=328&d=identicon&r=PG);
background-position: -20% -20%;
background-repeat: no-repeat;
}
.class_script {
background-image: url(https://i.stack.imgur.com/gJi51.jpg?s=328&g=1);
background-position: 0px 0px;
}
<div class="wrap">
<div class="class_manual"><strong>С использованием ручной правки</strong><br><em>Не подходит, в виду большого количества блоков с разными фонами. Здесь для образца.</em></div>
<div class="class_before"><strong>С использованием псевдоэлемента ::before</strong><br><em>Подходит не для всякой цели, т.к. перекрывает содержимое родительского блока.</em></div>
<div class="class_after"><strong>С использованием псевдоэлемента ::after</strong><br><em>Подходит не для всякой цели, т.к. вытесняется содержимым родительского блока.</em></div>
<div class="class_script"><strong>С использованием JavaScript</strong><br><em>Простой, надёжный и удобный способ, управлять фоновым изображением из скрипта.</em></div>
</div>
@UModeL , чтобы псевдоэлемент не перекрывал содержимое блока, нужно его(содержимое) обернуть в элемент и задать position:relative.
*{
box-sizing:border-box;
}
.block{
max-width:300px;
margin:20px auto 0;
padding:20px;
background:linear-gradient(#cda,#acd);
position:relative;
}
.block__content{
position:relative;
z-index:2;
}
.block:before{
content:'';
display:block;
position:absolute;
top:0;
left:0;
width:100%;
height:100%;
z-index:0;
opacity:0;
background:radial-gradient(circle at center,#cda,#dac) no-repeat center/80%;
transition:all .2s ease;
}
.block:hover:before{
opacity:1;
}
<div class="block">
<div class="block__content">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Laboriosam fugit obcaecati laborum natus ad odio inventore facere similique reprehenderit quod!</div>
</div>
Поставьте им общий класс. Например:
.item_1 {
background-image: url("../img/bg1.jpg");
}
.item_2 {
background-image: url("../img/bg2.jpg");
}
.item:hover {
background-image: url("../img/bg.jpg");
}
<div class="list">
<div class="item item_1"></div>
<div class="item item_2"></div>
<div class="item item_3"></div>
<div class="item item_4"></div>
</div>
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости