Answers:
一种方法是添加:
pointer-events:none;
到要在其上禁用悬停的元素。
(请注意:这也会同时禁用该元素上的javascript事件,点击事件实际上会落在后面的元素上)。
浏览器支持 (截至2019年8月22日为97.04%)
这似乎更干净
/**
* This allows you to disable hover events for any elements
*/
.disabled {
pointer-events: none; /**<-----------*/
opacity: 0.2;
}
.button {
border-radius: 30px;
padding: 10px 15px;
border: 2px solid #000;
color: #FFF;
background: #2D2D2D;
text-shadow: 1px 1px 0px #000;
cursor: pointer;
display: inline-block;
margin: 10px;
}
.button-red:hover {
background: red;
}
.button-green:hover {
background:green;
}
<div class="button button-red">Im a red button hover over me</div>
<br/>
<div class="button button-green">Im a green button hover over me</div>
<br/>
<div class="button button-red disabled">Im a disabled red button</div>
<br/>
<div class="button button-green disabled">Im a disabled green button</div>
使用:not
伪类可以排除您不希望将鼠标悬停应用于的类:
<div class="test"> blah </div>
<div class="test"> blah </div>
<div class="test nohover"> blah </div>
.test:not(.nohover):hover {
border: 1px solid red;
}
这就是您想要的一个CSS规则!
:hover
。这可能是因为我不确定使用SASS。
touchDevice
类body
并将css规则更改为类似命令,从而禁用了我应用程序中触摸设备的自定义按钮上的任何悬停效果,例如body:not(.touchDevice) .button:hover { ... }
添加一个新的.css类:
#test.nohover:hover { border: 0 }
和
<div id="test" class="nohover">blah</div>
更“特定的” css规则获胜,因此此border:0版本将覆盖其他地方指定的通用版本。
我也遇到了这个问题,我的解决方案是在一个元素上方放置一个我不希望在上面悬停效果的元素:
.no-hover {
position: relative;
opacity: 0.65 !important;
display: inline-block;
}
.no-hover::before {
content: '';
background-color: transparent;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 60;
}
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet" />
<button class="btn btn-primary">hover</button>
<span class="no-hover">
<button class="btn btn-primary ">no hover</button>
</span>