下拉菜单上的淡入效果并不总是发生



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

* {
  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。

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

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

display不是可设置动画的属性,因此可以使用visibility而不是display

这是可设置动画的属性列表。

* {
  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>

您可以使用一点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;
}

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

最新更新