Удаление поведения CSS ': hover' из элемента


143

У меня есть CSS, который меняет форматирование при наведении курсора на элемент.

HTML:

<div class="test"> blah </div>

CSS:

.test:hover {  border: 1px solid red; }

В некоторых случаях я не хочу применять CSS при наведении курсора. Одним из способов было бы просто удалить класс CSS из div с помощью jQuery, но это нарушило бы другие вещи, поскольку я также использую этот класс для форматирования его дочерних элементов.

Это привело меня к вопросу: есть ли способ удалить стиль CSS с наведением курсора из элемента?

Ответы:


44

Я бы использовал два класса. Сохраните свой тестовый класс и добавьте второй класс под названием 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>


282

Один из способов сделать это - добавить:

pointer-events:none;

к элементу, на котором вы хотите отключить наведение.

(примечание: это также отключает события javascript для этого элемента, события щелчка фактически передаются элементу позади).

Поддержка браузеров (97,73% на 24 августа 2020 г.)

Это кажется намного чище

/**
* 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>


4
Хороший ответ, он не поддерживается только в IE <11, так что это больше не проблема.
Оливье - interfaSys

2
Этот ответ очень чистый и именно то, что я искал. Я использовал его раньше, но для меня это все еще ново, поэтому я часто о нем забываю.
Никореллиус 06

2
Именно то, что мне нужно, идеально: D
Alizoh

5
Голосовать за события указателя нет. Это то, что я искал.
Гаравани,

2
@Bodman-события-указатели: нет; Удалено изменение фона при наведении, но также отключена гиперссылка в моем элементе. Как убрать эффект наведения, но сохранить гиперссылку?
BioDeveloper

231

Используйте :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!


6
Однозначно лучшее решение! Меньше кода и хорошо работает в любом браузере.
Бен Бесуйен,

Это сработало для меня, но мне пришлось внести одно изменение, пробел перед :hover. Это может быть потому, что я использую SASS, не уверен.
nurdyguy

2
Спасибо, я использовал это, чтобы отключить любые эффекты наведения на пользовательские кнопки для сенсорных устройств в моем приложении, добавив touchDeviceкласс bodyи изменив мои правила css на что-то вродеbody:not(.touchDevice) .button:hover { ... }
Александр

1
Да, это решение намного лучше.
Tsurule Vol

2

добавить новый класс .css:

#test.nohover:hover { border: 0 }

а также

<div id="test" class="nohover">blah</div>

Более "конкретное" правило css побеждает, поэтому версия border: 0 будет иметь приоритет над общим, указанным в другом месте.


Это будет. И он также переопределит внешний вид по умолчанию, который отличается. Так что всегда будет браузер, в котором будет видно наведение.
maaartinus

1

У меня также была эта проблема, мое решение заключалось в том, чтобы иметь элемент над элементом, для которого я не хочу, чтобы эффект зависания:

.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>


1
интересное решение.
Bodman

-2

Вы хотите сохранить селектор, поэтому добавить / удалить его не получится. Вместо того, чтобы писать жесткие и быстрые селекторы CSS (или два), возможно, вы можете просто использовать исходный селектор, чтобы применить новое правило CSS к этому элементу на основе некоторого критерия:

$(".test").hover(
  if(some evaluation) {
    $(this).css('border':0);
  }
);
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.