下拉菜单的淡入效果并不总是发生
Fade-in effect on a drop-down menu doesn't happen always
我希望我的下拉菜单在鼠标悬停时具有淡入效果。我为此编写了以下代码,但有时只能观察到淡入效果,并非总是如此。代码:
* {
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 ❱
<ul>
<li>item 1</li>
<li>item 2</li>
<li>item 3</li>
</ul>
</li>
</ul>
我认为当我在一秒钟内将鼠标悬停在“Dropdown ❱”上时不会出现这种效果。我正在尝试仅使用 HTML 和 CSS 来执行此操作。
我怎样才能达到我想要的?
顺便说一句,如何为菜单创建淡出效果?
display
不是 animatable 属性 所以你可以使用 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 ❱
<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 link 此处: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 link 到 HTML/CSS 解决方案:https://jsfiddle.net/omerblink/jwd9hLo1/
我希望我的下拉菜单在鼠标悬停时具有淡入效果。我为此编写了以下代码,但有时只能观察到淡入效果,并非总是如此。代码:
* {
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 ❱
<ul>
<li>item 1</li>
<li>item 2</li>
<li>item 3</li>
</ul>
</li>
</ul>
我认为当我在一秒钟内将鼠标悬停在“Dropdown ❱”上时不会出现这种效果。我正在尝试仅使用 HTML 和 CSS 来执行此操作。
我怎样才能达到我想要的?
顺便说一句,如何为菜单创建淡出效果?
display
不是 animatable 属性 所以你可以使用 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 ❱
<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 link 此处: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 link 到 HTML/CSS 解决方案:https://jsfiddle.net/omerblink/jwd9hLo1/