addEventListener в качестве третьего аргумента { once: true }.
background-image: repeating-linear-gradient(45deg, #fff, #fff 2px, transparent 2px, transparent 50px);
ul ul {
display: none;
}
input[type="radio"]:checked ~ ul {
display: block;
}
top: 0; для .pic.
.el {
animation: blink 2s linear infinite;
background: #000;
}
.el:nth-child(1) { animation-delay: 0s; }
.el:nth-child(2) { animation-delay: 0.5s; }
.el:nth-child(3) { animation-delay: 1s; }
.el:nth-child(4) { animation-delay: 1.5s; }
@keyframes blink {
0%, 20% {
background: #000;
}
10% {
background: #F00;
}
}
const wrapper = document.querySelector('.block');
const blockSelector = '.block_one';
const activeClass = 'active';
wrapper.addEventListener('mouseover', onHover);
wrapper.addEventListener('mouseout', onHover);
function onHover({ type, target }) {
const block = type === 'mouseover' && target.closest(blockSelector);
this.querySelectorAll(blockSelector).forEach(n => {
n.classList.toggle(activeClass, !!block && n !== block);
});
}.block:has(.block_one:hover) .block_one:not(:hover) {
/* сюда переносим стили того класса, который через js добавлялся */
}