css 下拉菜单的背景筛选器

gab6jxml  于 2023-01-10  发布在  其他
关注(0)|答案(2)|浏览(170)

当导航栏的元素被悬停时,下拉菜单打开。我希望英雄div中的背景图片以及导航栏下面的身体的其余部分变得模糊。我尝试使用背景过滤器,但它的工作。我在子菜单类中包含背景过滤器,但它对下面的图像没有影响。我尝试覆盖,但不完全确定如何使用它。

nav {
  display: inline-flex;
  width: 100%;
}

.nav-list {
  display: flex;
  width: 100%;
  margin-top: .7rem;
  padding-left: 1.1rem;
}

.nav-list li {
  position: relative;
}

.nav-list>li>a {
  color: black;
  display: block;
  font-size: 1rem;
  padding: 1.3rem 1rem;
  text-transform: uppercase;
  transition: color 300ms;
}

.nav-list>li>a::after {
  content: "";
  position: absolute;
  background-color: #ff2a00;
  height: 3.6px;
  width: 0;
  left: 0;
  bottom: 0px;
  transition: 0.1s;
}

.nav-list>li>a:hover:after {
  width: 100%;
}

.sub-menu {
  display: flex;
  position: fixed;
  box-sizing: border-box;
  background-color: black;
  visibility: hidden;
  top: 6.5rem;
  left: 3rem;
  width: 82.5rem;
  height: 35rem;
}

.sub-menu a {
  position: relative;
  top: 2rem;
  color: white;
  font-size: 1.1rem;
  font-weight: 200;
  backdrop-filter: blur(5px);
  padding: 0 40px 0 40px;
}

.nav-list li:hover>.sub-menu {
  top: 6.5rem;
  visibility: visible;
  opacity: 1;
}

.hero>img {
  position: relative;
  top: 6.3rem;
  z-index:-1;
  left: 4.5rem;
}
<nav>
  <ul class="nav-list">
    <li>
      <a href="">Test 1</a>
      <ul class="sub-menu">
        <li><a href="#">shirts</a> </li>
        <li><a href="#">Shorts</a></li>
      </ul>
    </li>
    <li>
      <a href="%">Test 2</a>
      <ul class="sub-menu">
        <li><a href="#">shirts</a> </li>
      </ul>
    </li>
  </ul>
</nav>

<div class="hero">
  <img src="https://picsum.photos/200/300" alt="" style="height: 690px;width: 1300px;">
</div>
ngynwnxp

ngynwnxp1#

使用javascript,你可以把一个事件处理器委托给body,然后如果它是nav-list下的一个链接,就给它添加一个blur类。
然后在CSS中,只需要像这样指定要模糊的内容:

.blur .hero{}

x一个一个一个一个x一个一个二个一个x一个一个三个一个

3pvhb19x

3pvhb19x2#

CSS方式:

我认为你正在寻找一个像这样的CSS规则集:

nav:has(a:hover) ~ * {
  filter: blur(1.5rem);
}

当***在:hover上有锚时,将filter: blur(1.5rem);设置为<nav>元素***的下一个同级元素。
但是它使用的:has()仍然没有得到很好的支持(Firefox仍然缺失)。
https://developer.mozilla.org/en-US/docs/Web/CSS/:has
函数:has()CSS伪类表示一个元素,如果作为参数传递的任何相对选择器在锚定到该元素时与至少一个元素匹配。此伪类提供了一种通过将相对选择器列表作为参数来选择父元素或相对于引用元素的上一个同级元素的方法。

Javascript方式:

由于css有一些限制,你可以决定使用js来监听.navbar中每个锚上的mouseovermouseleave事件,这些事件将切换blur类,该类有一个类似于前面使用的css规则,但带有.blur选择器:

const toggleBlur = (event) => {
    document.querySelectorAll('nav ~ *')
    .forEach(el => el.classList.toggle('blur'));
};

const anchors = document.querySelectorAll('.nav-list li a');

anchors.forEach(anchor => anchor.addEventListener('mouseover', toggleBlur));
anchors.forEach(anchor => anchor.addEventListener('mouseleave', toggleBlur));

演示:

这里的演示与您的代码和上面解释的添加:
一个一个二个一个一个一个三个一个一个一个一个一个四个一个

相关问题