Удалить поведение ": 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);
  }
);