![](/img/trans.png)
[英]Changing backgroundColor with javascript affects CSS's :hover
[英]Javascript backgroundColor does remove css hover?
我的div有课:
.cls { background-color: #ff0000; }
.cls:hover { background-color: #0000ff; }
当我使用javascript
:
mydiv.style.backgroundColor = "#555555";
它有效,但悬停不再起作用了!
我没有在网上找到关于这种行为的太多信息,这是正常的吗?
如何解决可能是另一个问题,但如果你想告诉...
当你从javascript给出背景颜色时 ,它被应用为内联样式,如果你想给出悬停效果,那么应用!important对它很重要 。
.cls { background-color: #ff0000; }
.cls:hover { background-color: #0000ff !important; }
非常有趣,虽然这是奇怪的行为。
var elem = document.getElementsByClassName("cls")[0]; elem.style.backgroundColor = "yellow"; // It'll become inline property
.cls { width: 100px; height: 100px; background-color: #ff0000; } .cls:hover { background-color: #0000ff; }
<div class="cls"></div>
当我们从Javascript应用background-color
时,它将成为内联属性并优先于其他属性,甚至覆盖hover
效果的background-color
。
对于POC,请看这个
.cls { width: 100px; height: 100px; background-color: #ff0000; } .cls:hover { background-color: #0000ff; }
<div class="cls" style="background-color: yellow"></div>
现在,我正在应用inline
background-color
,这里它也优先于css
样式。
这个原因的解决方案是,在hover
添加!important
var elem = document.getElementsByClassName("cls")[0]; elem.style.backgroundColor = "yellow";
.cls { width: 100px; height: 100px; background-color: #ff0000; } .cls:hover { background-color: #0000ff !important; }
<div class="cls"></div>
UPDATE
正如@Mr_Green所说,添加!important
属性不是最佳实践,而是我们可以再添加一个类也将解决您的问题。
var elem = document.getElementsByClassName("cls")[0]; elem.classList.add('secondary');
.cls { width: 100px; height: 100px; background-color: #ff0000; } .secondary { background-color: #000000; } .secondary:hover { background-color: #0000ff; }
<div class="cls"></div>
希望这可以帮助 :)
我认为在Javascript和Jydiv中将类'cls2'赋予mydiv是有用的
.cls:not(.cls2) { background-color: #ff0000; }
.cls2 { background-color:#555555; }
.cls:hover { background-color: #0000ff; }
也许添加onmouseenter,onmouseleave事件监听器来实现悬停。
使用javascript更改背景颜色将覆盖该元素的样式。
如果你真的想用javascript添加悬停效果你可以参考这篇文章: 更改:使用JavaScript悬停CSS属性
我建议你将JQuery用于这些类型的代码。
检查片段。 它的工作
var myDiv = document.querySelectorAll('.cls')[0]; myDiv.style.background='green'
.cls{ background-color: #ff0000; height:100px; width:100px; } .cls:hover { background-color: #0000ff !important; }
<div class="cls"> </div>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.