提问者:小点点

在没有JS的情况下,对悬停在另一个元素上的元素应用效果


我有这个代码:http://codepen.io/hwg/pen/azzoyp

我试图做的是应用模糊效果(SVG过滤器兼容性)到其他元素悬停另一个。

CSS最重要的部分如下

.oi:hover ~ a {color:green;filter: url('#blur');}

这将使用选择器来影响具有类的链接的同级。这很好,但它只影响悬停后的元素。不是容器div中的所有同级。

这仅仅在CSS中是可能的吗?

我已经看到您可以像这里所看到的那样使用JS:使用jQuery将效果悬停在一个元素上,然后应用到另一个元素和其他问题中。

如果可能的话,我只是不想使用JS,希望得到任何帮助!

谢啦!

嵌入代码:

null

.btn {
  background:lightblue;
  padding:1em;
  font-family:sans-serif;
  margin:0.4em;
  display:inline-block;
  transition:0.25s all ease-in-out;
  border-radius: 5px;
}

.oi ~ a {color:red;}
.oi:hover ~ a {color:green;filter: url('#blur');}
.oi:hover {transform: scale(1.5,1.5);color:red;}

div {margin: 100px auto;display:block;width:100%;}
<div>
  <a class="btn">Cholla</a>
  <a class="btn">Cholla</a>
  <a class="btn oi">Cholla</a>
  <a class="btn">Cholla</a>
  <a class="btn">Cholla</a>
  <a class="btn">Cholla</a>
</div>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
  <defs>
    <filter id="blur">
      <feGaussianBlur stdDeviation="5" />
    </filter>
  </defs>
</svg>

null


共2个答案

匿名用户

CSS常规同级选择器将只选择该元素之后的同级。(来源:https://developer.mozilla.org/en-us/docs/web/css/general_sibling_selectors)

使用父元素类或类,然后删除所选元素上效果。即:

null

.btn {
  background:lightblue;
  padding:1em;
  font-family:sans-serif;
  margin:0.4em;
  display:inline-block;
  transition:0.25s all ease-in-out;
  border-radius: 5px;
  color: red;
}

.oi {color:black;}
.btn_wrapper {margin: 100px auto;padding:0;display:block;width:100%;}
.btn_wrapper:hover .btn {color:green;filter: url('#blur');}
.btn_wrapper:hover .btn:hover {transform: scale(1.5,1.5);color:red;filter: none;}
<div class="btn_wrapper">
  <a class="btn">Cholla</a>
  <a class="btn">Cholla</a>
  <a class="btn oi">Cholla</a>
  <a class="btn">Cholla</a>
  <a class="btn">Cholla</a>
  <a class="btn">Cholla</a>
</div>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
  <defs>
    <filter id="blur">
      <feGaussianBlur stdDeviation="5" />
    </filter>
  </defs>
</svg>

匿名用户

这仅仅在CSS中是可能的吗?

不幸的是,不是以一种有弹性的方式。

CSS只能向下(级联)DOM,因为这样的选择器只能标识元素的子元素或出现在元素后面的同级元素。

为了实现您想要的目标,您可能需要求助于javascript解决方案--您希望实现的目标在jQuery中是微不足道的,例如:

$('.oi').on('mouseover', function(){
  $(this).siblings('a')....
});

或者,在CSS中最接近的是:

null

.btn {
  background: lightblue;
  padding: 1em;
  font-family: sans-serif;
  margin: 0.4em;
  display: inline-block;
  transition: 0.25s all ease-in-out;
  border-radius: 5px;
}
a {
  color: red;
}
div:hover a {
  color: green;
  filter: url('#blur');
}
.oi:hover {
  transform: scale(1.5, 1.5);
  color: red;
}
div {
  margin: 100px auto;
  display: block;
  width: 100%;
}
<div>
  <a class="btn">Cholla</a>
  <a class="btn">Cholla</a>
  <a class="btn oi">Cholla</a>
  <a class="btn">Cholla</a>
  <a class="btn">Cholla</a>
  <a class="btn">Cholla</a>
</div>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
  <defs>
    <filter id="blur">
      <feGaussianBlur stdDeviation="5" />
    </filter>
  </defs>
</svg>