css 如何悬停在父级输入上而不在子级输入上

ruarlubt  于 2023-05-08  发布在  其他
关注(0)|答案(1)|浏览(80)

基本上我有

.parent {

  height:200px;

}

.title {

  user-select: none;

}

.parent:hover {

 background:green;

}
<div class="parent">
  <div class="title">
    Hello World!
  </div>
  <input type="text" placeholder="Hello Input!">
</div>

我想悬停效果时被禁用悬停输入。
我该怎么做?
一个改进是当光标变为textcursor时自动禁用悬停效果。

3okqufwl

3okqufwl1#

您可以使用:not(:has(input:hover))作为纯CSS的解决方案,但请注意,:has()并不是在所有浏览器中普遍支持的。

.parent {
  height:200px;
}

.title {
  user-select: none;
}

.parent:hover:not(:has(input:hover)) {
  background:green;
}
<div class="parent">
  <div class="title">
    Hello World!
  </div>
  <input type="text" placeholder="Hello Input!">
</div>

否则,您可以在JavaScript中侦听输入是否悬停:

const input = document.querySelector('input');

input.addEventListener('mouseenter', ({ target }) => {
  target.closest('.parent').classList.add('foo');
});

input.addEventListener('mouseleave', ({ target }) => {
  target.closest('.parent').classList.remove('foo');
});
.parent {
  height:200px;
}

.title {
  user-select: none;
}

.parent:hover:not(.foo) {
  background:green;
}
<div class="parent">
  <div class="title">
    Hello World!
  </div>
  <input type="text" placeholder="Hello Input!">
</div>

相关问题