【问题标题】:What is the opposite of :hover (on mouse leave)?:hover (鼠标离开时)的反义词是什么?
【发布时间】:2012-06-15 05:55:49
【问题描述】:

有什么方法可以与:hover 仅使用 CSS 做相反的事情吗?如:如果:hoveron Mouse Enter,是否有等效于on Mouse Leave 的CSS?

例子:

我有一个使用列表项的 HTML 菜单。当我悬停其中一个项目时,有一个从 #999black 的 CSS 颜色动画。如何在鼠标离开项目区域时创建相反的效果,动画从black#999

jsFiddle

(请记住,我不想只回答这个例子,而是整个“与:hover相反”的问题。)

【问题讨论】:

  • 你到底想做什么?也许还有其他选择?
  • :hover的反义词很简单:not(:hover);但是,:hover不是onmouseenter 同义,:not(:hover) 也不与onmouseleave 相同。 CSS 没有任何 DOM 事件的概念。
  • @Cthulhu: :hover 仅仅意味着“一个有鼠标指针的元素”。它不指示鼠标指针是否从另一个元素过渡到该元素。它只是意味着鼠标指针当前在元素上。
  • @BoltClock :not(:hover) 实际上会触发任何事情吗?
  • @Moin Zaman:是的。只要您的鼠标不在某个元素上,:not(:hover) 就会适用。这是一个演示:jsfiddle.net/BoltClock/rghBX

标签: css hover


【解决方案1】:

没有,CSS 中没有明确的鼠标离开属性。

您可以使用 :hover 在除相关项目之外的所有其他元素上来实现此效果。但我不确定这会有多实用。

我认为您必须查看 JS / jQuery 解决方案。

【讨论】:

  • 在这种情况下不需要 JS,我现在不鼓励使用它,尽管这是性能的理由。
  • 上面的例子不需要它,但它似乎是整个“鼠标离开”问题的最佳解决方案。
【解决方案2】:

只需使用CSS transitions 而不是动画。

A {
    color: #999;
    transition: color 1s ease-in-out;
}

A:hover {
    color: #000;
}

Live demo

【讨论】:

  • 就像我在示例中所说的,我的问题不在于动画,而在于“鼠标离开”部分。
  • 过渡适用于鼠标悬停和鼠标离开。指定正常状态和:hover 状态的样式就足够了。
  • 如何在网页加载的瞬间停止过渡?
  • @CloudWalker 不确定您的意思。 Transition cannot be stopped, it rolls back when the selector does not match anymore.
  • 例如,如果您将文本颜色从黑色转换为白色,则在加载文本的瞬间,它会从白色变为黑色(与转换持续时间相同)。不确定这是否是我的问题。
【解决方案3】:

你误会了:hover;它表示鼠标在一个项目上,而不是鼠标刚刚进入该项目。

你可以在没有:hover的情况下给选择器添加动画来达到你想要的效果。

过渡是更好的选择:http://jsfiddle.net/Cvx96/

【讨论】:

  • 你的小提琴没有产生预期的结果。
【解决方案4】:

如果我理解正确,您可以通过将转换移动到链接而不是悬停状态来做同样的事情:

ul li a {
    color:#999;       
    transition: color 0.5s linear; /* vendorless fallback */
    -o-transition: color 0.5s linear; /* opera */
    -ms-transition: color 0.5s linear; /* IE 10 */
    -moz-transition: color 0.5s linear; /* Firefox */
    -webkit-transition: color 0.5s linear; /*safari and chrome */
}

ul li a:hover {
    color:black;
    cursor: pointer;
}

http://jsfiddle.net/spacebeers/sELKu/3/

hover的定义是:

:hover 选择器用于在鼠标悬停时选择元素 他们。

根据该定义,悬停的反义词是鼠标在其上方的任何点。比我聪明得多的人写了这篇文章,在两种状态下都设置了不同的转换 - http://css-tricks.com/different-transitions-for-hover-on-hover-off/

#thing {
   padding: 10px;
   border-radius: 5px;

  /* HOVER OFF */
   -webkit-transition: padding 2s;
}

#thing:hover {
   padding: 20px;
   border-radius: 15px;

  /* HOVER ON */
   -webkit-transition: border-radius 2s;
}

【讨论】:

  • "(请记住,我不想只回答这个例子,而是整个“与:hover”相反的问题。)"
  • @Cthulhu - 我现在已经编辑了我的答案。这可能会有所帮助。我认为这个答案太明显了。
  • +1 为我指明了正确的方向。我在浏览器之间存在动画差异。 Chrome 让一切变得更流畅,但我在过渡方面有 0.1 秒的差异,Mozilla 和 IE 都显示错误。我能够通过匹配我的转换号码来解决它。
  • 呃。您引用的:hover 的“定义”来自W3Schools,他们绝不是权威来源。实际规范可以在 w3.org/TR/CSS21/selector.html#dynamic-pseudo-classes 找到,虽然它不是最容易理解的解释。
【解决方案5】:
【解决方案6】:

:hover 的反义词似乎是 :link

(编辑:技术上不是相反的,因为有 4 个选择器 :link:visited:hover:active。如果包括 :focus,则有五个。)

例如,当定义规则.button:hover{ text-decoration:none } 以删除按钮上的下划线时,在某些浏览器中滚动按钮时会显示下划线。我已经用.button:hover, .button:link{ text-decoration:none }修复了这个问题

这当然只适用于实际上是链接的元素(具有 href 属性)

【讨论】:

  • 您的信息不正确。 :link 只是选择链接,就这么简单。看这里:link的定义:developer.mozilla.org/en-US/docs/Web/CSS/%3Alink
  • @Strive55 啊,谢谢,有道理。您提供的链接指出“为了适当地设置链接样式,您需要将 :link 规则放在其他规则之前,如 LVHA 顺序所定义的那样::link — :visited — :hover — :active。”如果我理解正确,这意味着如果没有其他选择器适用(:visited、:hover 或 :active),那么 :link 就是适用的选择器。技术上并不相反,因为有 4 个,但它仍然有效
【解决方案7】:

虽然这里的答案已经足够了,但我真的认为W3Schools 这个问题上的例子非常简单(它立即消除了困惑(对我来说))。

使用:hover 选择器在您移动时更改按钮的样式 鼠标悬停在上面。

提示:使用transition-duration属性来确定速度 “悬停”效果:

例子

.button {
    -webkit-transition-duration: 0.4s; /* Safari & Chrome */
    transition-duration: 0.4s;
}

.button:hover {
    background-color: #4CAF50; /* Green */
    color: white;
}

总而言之,对于您希望“进入”和“退出”动画相同的过渡,您需要在主选择器.button 而不是悬停选择器.button:hover 上使用过渡。对于您希望“进入”和“退出”动画不同的过渡,您需要指定不同的主选择器和悬停选择器过渡。

【讨论】:

    【解决方案8】:

    将您的持续时间放在非悬停选择中:

    li a {
      background-color: #111;
      transition:1s;
    }
    
    li a:hover {
      padding:19px;
    }
    

    【讨论】:

    • 就我而言,这有帮助。它将转换回默认值。
    【解决方案9】:

    只需在类初始添加一个过渡和动画的名称,在你的情况下,ul li a,只需添加一个“过渡”属性,这就是你所需要的

    ul li {
        display: inline;
        margin-left: 20px;
    }
    
    ul li a {
        color: #999;
        transition: 1s;
        -webkit-animation: item-hover-off 1s;
        -moz-animation: item-hover-off 1s;
        animation: item-hover-off 1s;
    }
    
    ul li a:hover {
        color: black;
        cursor: pointer;
        -webkit-animation: item-hover 1s;
        -moz-animation: item-hover 1s;
        animation: item-hover 1s;
    }
    
    @keyframes item-hover {
        from {
          color: #999;
          }
        to {
          color: black;
          }
    }
        
    @-moz-keyframes item-hover {
        from {
            color: #999;
          }
        to {
            color: black;
          }
    }
        
    @-webkit-keyframes item-hover {
        from {
            color: #999;
          }
        to {
            color: black;
          }
    }
    
    @keyframes item-hover-off {
        from {
          color: black;
          }
        to {
          color: #999;
          }
    }
        
    @-moz-keyframes item-hover-off {
        from {
            color: black;
          }
        to {
            color: #999;
          }
    }
        
    @-webkit-keyframes item-hover-off {
        from {
            color: black;
          }
        to {
            color: #999;
          }
    }
    <ul>
        <li><a>Home</a></li>
        <li><a>About</a></li>
        <li><a>Contacts</a></li>
    </ul>

    【讨论】:

      【解决方案10】:

      只需为您正在处理的元素添加一个过渡。请注意,页面加载时可能会产生一些影响。就像您更改了边框半径一样,您会在 dom 加载时看到它。

      .element {
        width: 100px;
        transition: all ease-in-out 0.5s;
      }
       
       .element:hover {
        width: 200px;
          transition: all ease-in-out 0.5s;
      }

      【讨论】:

        【解决方案11】:

        相反的是使用:not

        例如

        selection:not(:hover) { rules }

        【讨论】:

        • 这不是公认的答案吗?这正是 OP 所要求的!
        • 这是我非常想要的东西。
        • 多么好的答案,我在悬停时将颜色与 div 的背景图像混合,但鼠标离开时没有动画。我用这个答案再次将白色混合到背景图像中,以欺骗 CSS。
        • 这是正确答案!!谢谢!!
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-07-22
        • 2011-01-04
        • 2014-04-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多