【问题标题】:Alter class when hovering siblings first child [duplicate]悬停兄弟姐妹第一个孩子时改变班级[重复]
【发布时间】:2016-07-19 01:29:37
【问题描述】:

说我有:

<div class="block-one"></div>
<div class="block-two">
    <div></div>
    <div></div>
    <div></div>
</div>

block-two 的第一个孩子悬停时,我想更改block-one 的css。如何使用 SASS/SCSS 来完成?我试过了:

.block-two {
    div:first-child:hover {
    }
}

悬停无法使用任何东西,已尝试 & + &,@at-root。

【问题讨论】:

标签: css sass


【解决方案1】:

很抱歉,从 CSS 的角度来看,选择父级的兄弟是不可能的,因为 CSS 不允许您以这种方式看到选择树的上方。

然而,使用 JavaScript/jQuery 是目前最好的方法,这里有一个例子:

$(".block-two > :first-child").hover(function(){
    $(".block-one").css("color", "red");
});

要明确这种方法,可以依赖它,因为您将无法仅通过 CSS 实现这种预期效果。

【讨论】:

  • 如果我将块一放在块二中作为它的第一个孩子会怎样。然后我以 block-two:nth-child(2) 为目标来定位第二个孩子。然后我可以改变它吗?
  • @ThingWings 您将能够使用 adjacent sibling selector +,它看起来像这样:.block-two &gt; :first-child:hover + .block-two &gt; nth-child(2) 假设您想将鼠标悬停在第一个孩子身上并且改变第二个孩子。关键是孩子必须紧跟在所选孩子之后,而不是之前
  • 第 nth-child(2) 将是需要悬停并更改第一个孩子的那个
  • @ThingWings 在这种情况下,您需要颠倒顺序,以便 + 选择器相应地工作。您可能还需要小心在 IE7 或更低版本中使用它。
  • 问题不是我需要前一个元素而不是下一个元素吗?所以它几乎就像我需要一个减号运算符而不是加号?
【解决方案2】:

这可以通过 jQuery 轻松完成:

$(".block-two").hover(
  function() {
    //Mouse is over the element
    $(".block-one").css({"background-color": "#333"});
  },
  function() {
    //Mouse left the element
    $(".block-one").css({"background-color": "#fff"});
  }
);

【讨论】:

  • 嘿 Axel,不需要鼠标移出事件处理程序,您可以使用 CSS 指定默认行为,JavaScript 只会在悬停时应用更改的行为...就像您通常在CSS
  • 好吧,但我正在这样做?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-09
  • 1970-01-01
  • 2018-03-16
相关资源
最近更新 更多