Есть несколько блоков с разными фонами. Возможно ли добавлять им второй фон на 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>
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Angular 6 - Есть форма с данными запроса:
На данный вопрос уже ответили:
не могу решить проблему следующего характераНа картах fusiontablaes сделал карту, теперь нужно добавить виды сортировок
Есть часы, подскажите как можно вместо линий показывающих деления часов, вставить цифры? Не до конца понимаю, как написать такую функцию