Удалить поведение ": hover" CSS из элемента
У меня есть CSS, который меняет форматирование при наведении на элемент.
HTML:
<div class="test"> blah </div>
CSS
.test:hover { border: 1px solid red; }
В некоторых случаях я не хочу применять CSS для зависания. Одним из способов было бы просто удалить класс CSS из div с помощью jQuery, но это сломает другие вещи, так как я также использую этот класс для форматирования его дочерних элементов.
Итак, это заставило меня задаться вопросом: есть ли способ удалить стили css c hover из элемента?
Ответы
Ответ 1
Я бы использовал два класса. Сохраните свой тестовый класс и добавьте второй класс под названием testhover, который вы добавляете только к тем, которые хотите навести, - вместе с тестовым классом. Это не совсем то, что вы просили, но без большего контекста это выглядит как лучшее решение и, возможно, самый чистый и простой способ сделать это.
Пример:
.test { border: 0px; }
.testhover:hover { border: 1px solid red; }
<div class="test"> blah </div>
<div class="test"> blah </div>
<div class="test testhover"> blah </div>
Ответ 2
Один из способов сделать это - добавить:
pointer-events:none;
к элементу, который вы хотите отключить при наведении.
(примечание: это также отключает события javascript для этого элемента, события click фактически будут проходить до элемента позади).
Поддержка браузеров (97,04% на 22 августа 2009 г.)
Это кажется намного чище
/**
* 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>
Ответ 3
Используйте псевдокласс класса :not
, чтобы исключить классы, на которые вы не хотите применять зависание:
FIDDLE
<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!
Ответ 4
добавить новый .css класс:
#test.nohover:hover { border: 0 }
и
<div id="test" class="nohover">blah</div>
Чем больше "конкретное" правило css выигрывает, так и эта граница: 0 версия переопределяет общий, указанный в другом месте.
Ответ 5
У меня также была эта проблема, мое решение состояло в том, чтобы иметь элемент выше элемента, на который я не хочу, чтобы эффект зависания:
.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>
Ответ 6
Вы хотите сохранить селектор, поэтому добавление/удаление его не будет работать. Вместо написания жестких и быстрых селекторов CSS (или двух), возможно, вы можете просто использовать оригинальный селектор, чтобы применить новое правило CSS к этому элементу на основе некоторого критерия:
$(".test").hover(
if(some evaluation) {
$(this).css('border':0);
}
);