【问题标题】:How can I avoid transition delays when switching hover between siblings?在兄弟姐妹之间切换悬停时如何避免转换延迟?
【发布时间】:2017-04-23 02:14:19
【问题描述】:

没有javascript的兄弟姐妹之间切换悬停时如何避免转换延迟?

我的目标是制作一个具有以下行为的大型菜单:

  1. 如果用户将鼠标悬停在给定的大型菜单上 1.5 秒,该菜单将打开。
  2. 如果用户将鼠标完全从超级菜单上移开,超级菜单会立即关闭。
  3. 如果用户将鼠标从一个大型菜单项移动到另一个,则第二个菜单将替换第一个菜单。

如下所示,我当前的变体具有以下行为(差异为粗体):

  1. 如果用户将鼠标悬停在给定的大型菜单上 1.5 秒,该菜单将打开。
  2. 如果用户将鼠标完全从超级菜单上移开,超级菜单会立即关闭。
  3. 如果用户将鼠标从一个大型菜单项移动到另一个,第一个菜单会保持打开状态 1.5 秒。然后,第二个菜单替换第一个菜单。

它也有定位故障,但我暂时忽略这些;这只是一个原型。

这很容易用 javascript 完成,但我的目标是纯粹使用 CSS3。

.power > div {
    display:inline-block;height:25px;background-color:lightblue;
    padding:0;margin:0
}

.hider {
  position:absolute;top:-999px;
  width:80%;
  background-color:pink;
}

.power div:hover .hider {
  top:25px;
  left:0px;
  transition: all 0s 1.5s;
}

.power:hover div .hider{
  background-color:orange;
  transition: all 0s 1.5s;
}
<div class="power">
  <div class="one">Menu-One
    <div class="hider"><br/></br/>One</div>
  </div>
  <div class="two">Menu-Two
    <div class="hider"><br/></br/>Two</div>
  </div>
</div>

【问题讨论】:

    标签: css hover css-transitions


    【解决方案1】:

    您可以通过例如使用opacity 来做到这一点,就像这样,在不透明度(影响所有)和每个子菜单的单独重新定位(没有过渡)方面存在延迟

    .power > div {
      display: inline-block;
      height: 25px;
      background-color: lightblue;
      padding: 0;
      margin: 0
    }
    .hider {
      position: absolute;
      top: -999px;
      opacity: 0;
      width: 80%;
      background-color: pink;
    }
    .power div:hover .hider {
      left: 0px;
      top: 25px;
    }
    .power:hover div .hider {
      opacity: 1;
      background-color: orange;
      transition: opacity 0s 1.5s;
    }
    <div class="power">
      <div class="one">Menu-One
        <div class="hider">
          <br/>
          <br/>One
        </div>
      </div>
      <div class="two">Menu-Two
        <div class="hider">
          <br/>
          <br/>Two
        </div>
      </div>
    </div>

    【讨论】:

    • 聪明,但在 t=0 时,您的实现会无形地覆盖恰好位于其下的任何组件。例如,尝试将鼠标悬停在 jsfiddle.net/zjhrj0L5/1 上的菜单上,然后立即单击“点击我”。我认为jsfiddle.net/r6ub7rya 通过独立使用 left 和 top 来解决不同的鼠标悬停问题,但我想知道是否有原因每个人在使用菜单 voodoo 时总是设置 top 和 left。
    • @Brian 谢谢 :) ...当涉及到可能隐藏在下面的组件时,请告诉我,我可能会给您一两个提示。大多数情况下,最好的解决办法是确保这些元素有一个 position 而不是默认的 static,当这不起作用时,z-index 可以是一个方便的后备。
    • 谢谢,使用 left vs top 而不是 opaque vs left/top 效果很好。基本上,一个 x/y 坐标是在鼠标悬停单个菜单项时立即设置的,而另一个 x/y 坐标是在将鼠标悬停在整个菜单上 1.5 秒后设置的。与您使用的技巧几乎相同。
    猜你喜欢
    • 2021-03-07
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    • 2017-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多