【问题标题】:Fade-in effect on a drop-down menu doesn't happen always下拉菜单上的淡入效果并不总是发生
【发布时间】:2023-03-03 10:02:01
【问题描述】:

我希望我的下拉菜单在鼠标悬停时具有淡入效果。我为此编写了以下代码,但有时只能观察到淡入效果,并非总是如此。代码:

* {
  margin: 0;
  padding: 0;
}

.header {
  position: fixed;
  list-style-type: none;
  height: 35px;
  width: 100%;
  background: #333333;
}

.header > li {
  display: inline-block;
  padding: 8px;
  position: relative;
  color: #FFF;
}

.header > li:hover {
  background: #000000;
}

.dropdown ul {
  list-style-type: none;
  display: none;
  position: absolute;
  top: 100%;
  left: 0;
  color: red;
  width: 100%;
  opacity: 0;
  background: yellow;
  border: 1px solid black;
  transition: opacity 1s;
}

.dropdown:hover ul {
  opacity: 1;
  display: block;
}
<ul class="header">
  <li class="home">Test</li>
  <li class="dropdown">Dropdown &#10097;
    <ul>
      <li>item 1</li>
      <li>item 2</li>
      <li>item 3</li>
    </ul>
  </li>
</ul>

我认为当我在一秒钟内将鼠标悬停在“Dropdown ❱”上时不会出现这种效果。我正在尝试仅使用 HTML 和 CSS 来做到这一点。

我怎样才能实现我想要的?

顺便说一句,如何为菜单创建淡出效果?

【问题讨论】:

    标签: html css drop-down-menu opacity fade


    【解决方案1】:

    你可以使用一点 jQuery 来实现这个...

    $('.header ul').hide();
    $('.header li').hover(function(){
            $(this).find('ul').fadeIn();
    }, function(){
            $(this).find('ul').fadeOut();
    });
    

    JSFIDDLE 链接在这里:https://jsfiddle.net/omerblink/7n59kew1/

    如果你仍然想只保留 HTML / CSS,那就放弃显示的想法并使用可见性。

    .dropdown ul {
      list-style-type: none;
      visibility: hidden;
      position: absolute;
      top: 100%;
      left: 0;
      color: red;
      width: 100%;
      opacity: 0;
      background: yellow;
      border: 1px solid black;
      transition: visibility 1s, opacity 1s;
    }
    
    .dropdown:hover ul {
      opacity: 1;
      visibility: visible;
    }
    

    JSFIDDLE 链接到 HTML/CSS 解决方案:https://jsfiddle.net/omerblink/jwd9hLo1/

    【讨论】:

    • 感谢您的帮助,但第一次使用 jQuery 时没有显示菜单。第二个不使用visibility,因此,当悬停在“Dropdown ❱”下方时,会出现下拉菜单...
    【解决方案2】:

    display 不是 动画 属性,因此您可以使用 visibility 代替 display

    这是animatable-properties的列表。

    * {
      margin: 0;
      padding: 0;
    }
    .header {
      position: fixed;
      list-style-type: none;
      height: 35px;
      width: 100%;
      background: #333333;
    }
    .header > li {
      display: inline-block;
      padding: 8px;
      position: relative;
      color: #FFF;
    }
    .header > li:hover {
      background: #000000;
    }
    .dropdown ul {
      list-style-type: none;
      /*display: none;*/
      visibility: hidden;
      position: absolute;
      top: 100%;
      left: 0;
      color: red;
      width: 100%;
      opacity: 0;
      background: yellow;
      border: 1px solid black;
      transition: visibility 1s, opacity 1s;
    }
    .dropdown:hover ul {
      opacity: 1;
      visibility: visible;
    }
    <ul class="header">
      <li class="home">Test</li>
      <li class="dropdown">Dropdown &#10097;
        <ul>
          <li>item 1</li>
          <li>item 2</li>
          <li>item 3</li>
        </ul>
      </li>
    </ul>

    【讨论】:

    • 谢谢! CSS 是否支持// 行注释?
    • @CoolGuy 欢迎您。不它不是。这是我的错。
    猜你喜欢
    • 1970-01-01
    • 2017-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多