You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在hover生效时让:not选择器实现其他卡片模糊效果?

实现卡片悬停时其余卡片模糊的方案

核心思路

:hover:not(:hover)的写法逻辑矛盾,单个元素无法同时处于“悬停”和“非悬停”状态。正确的做法是借助卡片容器的悬停状态,结合子元素的选择器组合来实现效果。

具体实现步骤

假设你的HTML结构是容器包裹所有卡片(容器类为.card-container,卡片类为.card):

<div class="card-container">
  <div class="card">卡片1</div>
  <div class="card">卡片2</div>
  <div class="card">卡片3</div>
</div>

对应的CSS写法分三步:

  1. 给卡片添加过渡动画,让模糊效果更平滑:
.card {
  transition: filter 0.3s ease;
}
  1. 当容器被悬停时,给所有卡片统一加上模糊效果:
.card-container:hover .card {
  filter: blur(4px);
}
  1. 让当前被直接悬停的卡片取消模糊,恢复正常显示:
.card-container:hover .card:hover {
  filter: blur(0);
}

原理说明

鼠标悬停在任意卡片上时,父容器也会触发:hover状态,此时所有卡片都会被应用模糊样式。而被直接悬停的卡片会匹配优先级更高的.card-container:hover .card:hover选择器,覆盖模糊样式,最终实现“悬停卡片清晰,其余卡片模糊”的效果。

替代方案(JavaScript实现)

如果需要更灵活的控制逻辑,也可以用JS监听鼠标事件:

const cards = document.querySelectorAll('.card');
cards.forEach(card => {
  card.addEventListener('mouseenter', () => {
    cards.forEach(otherCard => {
      if (otherCard !== card) otherCard.classList.add('blur');
    });
  });
  card.addEventListener('mouseleave', () => {
    cards.forEach(otherCard => otherCard.classList.remove('blur'));
  });
});

对应的模糊样式类:

.blur {
  filter: blur(4px);
  transition: filter 0.3s ease;
}

内容的提问来源于stack exchange,提问作者Icaro Ag

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 00:42:07