everyone!
So here's the problem. I am doing a Frontend Mentor challenge and I applied a hover effect on a object in CSS.
.numero-avaliacao a:hover {
background-color: hsl(217, 12%, 63%);
color: white;
}
And it worked fine. However, after I applied a javascript event on these objects, the hover effect dissapears for all of them. All I did with the JS was change the background color and the color of the objects. However, it seems that somehow this affects the hover effect.
function selecionarNota() {
if (this.style.backgroundColor == 'rgb(251, 116, 19)') {
for (let i = 0; i < numAvaliacao.length; i++) {
numAvaliacao[i].style.backgroundColor = 'hsl(213, 19%, 21%)';
numAvaliacao[i].style.color = 'hsl(217, 12%, 63%)';
}
} else {
for (let i = 0; i < numAvaliacao.length; i++) {
numAvaliacao[i].style.backgroundColor = 'hsl(213, 19%, 21%)';
numAvaliacao[i].style.color = 'hsl(217, 12%, 63%)';
console.log('Teste 2!');
}
this.style.backgroundColor = 'rgb(251, 116, 19)';
this.style.color = 'white';
}
}
I worked out this problem by using mouseover and mouseleave on JS, but I would really like to understand what is happening so I can fix it and be able to use the hover effect as well.
Inline styles have a higher precedence then you external css stylesheet.
When your
:hoverfrom your stylesheet is triggered it can't override your via javascript defined inline style for background-color and color.You could add an
!importanttag after your declaration in your stylesheet.This should do the trick.
Another option would be to add another class to your elements via javascript instead of setting inline style.