【问题标题】:How to make hover css menu fade in and out?如何使悬停css菜单淡入淡出?
【发布时间】:2016-05-27 19:12:37
【问题描述】:

我的标题中有一个无序列表菜单,其中包含父列表项的子菜单。 我一直在尝试设置 :hover 伪类,以便在将光标移到链接上时使子菜单淡入淡出。

问题是我只能让它们淡入,所以当我将光标移开时,它们不会淡出,它们会立即消失。 我不确定我做错了什么,但我在下面包含了第二个 jsfiddle,我已经成功地用一些更简单的 html 实现了我想要的效果。

示例 1:https://jsfiddle.net/ornbovv7/2/

示例 2:https://jsfiddle.net/aou6j8gz/1/

我的代码:

.header {
  width:100%;
  height:100px;
  background-color:#fff;
}

.content {
  width:100%;
  height:500px;
  background-color:pink;
}

nav.main-menu ul {
  position:relative;
  top:30px;
  list-style:none;
}

nav.main-menu ul li {
  cursor:pointer;
  display:inline-block;
  margin:10px 30px 10px 30px;
  padding:0px 20px 45px 20px;
}

nav.main-menu ul ul {
  position:absolute; 
  left:-999em;
  width:175px;
  display:block; 
  height:auto;
  margin:40px 0px 0px 0px;
  padding:0;
  box-shadow: 0 10px 20px rgba(0,0,0,0.05), 0 4px 6px rgba(0,0,0,0.1);
  background-color:#ffffff;
  opacity:0;

  transition: left 0s ease 0.6s, opacity 0.6s ease 0s;
}

nav.main-menu ul li:hover ul {
  left:auto;
  opacity:0.9;
  transition: left 0s ease 0s, opacity 0.6s ease 0s;
}

nav.main-menu ul ul li {
  position:relative;
  float: none;
  padding: 7px 10px 7px 10px;
}

nav.main-menu ul ul li a {
  display:inline-block;
}


<header class="header">

    <nav class="main-menu">
        <div>
            <ul id="menu-header-menu-1" class="menu">

                <li>link 1</li>

                <li>link 2
                     <ul class="sub-menu">
                        <li>sublink 1</li>
                        <li>sublink 2</li>
                        <li>sublink 3</li>
                        <li>sublink 4</li>
                        <li>sublink 5</li>
                    </ul>
                </li>
                <li>link 3
                </li>
            </ul>
        </div>
     </nav>

</header>

【问题讨论】:

  • 不太清楚如何解决,但问题在于定位。左侧立即返回到 -999em,这使它看起来好像过渡不起作用。它正在工作,就在屏幕外..嗯。希望至少有助于确定问题。

标签: html css


【解决方案1】:

left -9999em 和 auto 不能进行转换。 auto 不是数字。

您可以使用指针事件来避免这种情况并删除左坐标:https://jsfiddle.net/ornbovv7/3/

nav.main-menu ul li ul {
  position:absolute; 
  width:175px;
    display:block; 
    height:auto;
    margin:40px 0px 0px 0px;
  padding:0;
  box-shadow: 0 10px 20px rgba(0,0,0,0.05), 0 4px 6px rgba(0,0,0,0.1);
    background-color:#ffffff;
  opacity:0;
    pointer-events:none;
    transition: opacity 0.6s ease 0s;
}

nav.main-menu ul li:hover ul {
  left:auto;
  pointer-events:auto;
  opacity:0.9;
  transition:  opacity 0.6s ease 0s ;
}

或使用左:0;和 li 在相对位置:https://jsfiddle.net/ornbovv7/4/ 此外,您确实需要为左过渡提供延迟,以便它在离开屏幕区域之前消失

nav.main-menu ul li {
  cursor:pointer;
  display:inline-block;
  margin:10px 30px 10px 30px;
  padding:0px 20px 45px 20px;
  position:relative;
}

nav.main-menu ul ul {
  position:absolute; 
  left:-999em;
  width:175px;
    display:block; 
    height:auto;
    margin:40px 0px 0px 0px;
  padding:0;
  box-shadow: 0 10px 20px rgba(0,0,0,0.05), 0 4px 6px rgba(0,0,0,0.1);
    background-color:#ffffff;
  opacity:0;

    transition: left 0s ease 0.6s, opacity 0.6s ease 0s;
}

nav.main-menu ul li:hover ul {
  left:0;
  opacity:0.9;
  transition: left 0s ease 1s, opacity 0.6s ease 0s;
}

【讨论】:

  • 这些都是很好的答案,谢谢。由于指针事件规则,我选择了这个作为接受的答案,我以前甚至没有听说过。我现在已经设法让它工作了:)
【解决方案2】:

一种方法是利用:not 伪标签,结合:hover。几年前我写了一篇关于类似例子的文章 - you can read it here 如果你有兴趣。

通过添加以下内容,我能够让您的第一个示例正常工作:

nav.main-menu ul li:not(:hover) ul {
  left:auto;
  opacity:0;
  transition: left 0s ease 0s, opacity 0.6s ease 0s;
}

Here is a link to the forked fiddle.

希望我正确理解了问题和目标。

【讨论】:

  • 将鼠标指向导航栏下方...您会看到大区域现在触发了事件
  • 同上 Motjaba 示例,当您将其区域悬停在粉红色区域时,子列表会显示:p
  • 感谢 mwielbut,这篇文章读起来很有趣——我最近在一个 hifi 网站上看到了类似的东西,想知道他们是如何通过链接创建这种效果的 :)
猜你喜欢
  • 1970-01-01
  • 2012-10-20
  • 2013-01-07
  • 1970-01-01
  • 1970-01-01
  • 2017-10-29
  • 1970-01-01
  • 2012-10-11
  • 1970-01-01
相关资源
最近更新 更多