问题描述
在本例中,当您将鼠标悬停在“父链接”下方时,会显示下拉菜单。我只希望在我将鼠标悬停在“父链接”上而不是在其下方时显示下拉菜单。有什么办法可以阻止吗?
代码:
<ul class="menu">
<li>
<a href="#">Parent Link</a>
<ul>
<li><a href="#">Child Link</a></li>
<li><a href="#">Child Link</a></li>
<li><a href="#">Child Link</a></li>
<li><a href="#">Child Link</a></li>
</ul>
</li>
</ul>
.menu {
display: block;
margin: 0 auto;
position: relative;
width: 200px;
}
.menu > li > a {
background: blue;
color: #fff;
display: block;
padding: 10px 20px;
text-align: center;
text-decoration: none;
}
.menu ul {
background: #ddd;
height: 0;
left: 0;
opacity: 0;
position: absolute;
transition: all .5s ease;
top: 35px;
width: 100%;
}
.menu li:hover ul {
height: 200px;
opacity: 1;
transform: translateY(0);
}
.menu ul a {
color: #000;
display: block;
padding: 5px 20px;
}
解决方法
我能想到的唯一方法是不使用 opacity:1 使用 display:none;当你想显示它时,将它更改为 display:block/flex/grid 或另一种方式是使用 javascript,通过向父链接添加一个事件侦听器,并且当 mouseenter 将动画的类切换为 active 或名称类以及鼠标离开时切换或删除类。
,您已将悬停设置为所有链接所在的 li,您必须将悬停添加到锚标记并使用 +
对与锚标记同级的 ul 标记进行操作。
.menu li a:hover + ul {
height: 200px;
opacity: 1;
transform: translateY(0);
}
,
这是您当前的代码 -
.menu {
display: block;
margin: 0 auto;
position: relative;
width: 200px;
}
.menu > li > a {
background: blue;
color: #fff;
display: block;
padding: 10px 20px;
text-align: center;
text-decoration: none;
}
.menu ul {
background: #ddd;
height: 0;
left: 0;
opacity: 0;
position: absolute;
transition: all .5s ease;
top: 35px;
width: 100%;
}
.menu li:hover ul {
height: 200px;
opacity: 1;
transform: translateY(0);
}
.menu ul a {
color: #000;
display: block;
padding: 5px 20px;
}
<ul class="menu">
<li>
<a href="#">Parent Link</a>
<ul>
<li><a href="#">Child Link</a></li>
<li><a href="#">Child Link</a></li>
<li><a href="#">Child Link</a></li>
<li><a href="#">Child Link</a></li>
</ul>
</li>
</ul>
修改后的代码
只需将 menu-ul
更改为 display:none
并在悬停时将其更改为 display:block
.menu {
display: block;
margin: 0 auto;
position: relative;
width: 200px;
}
.menu > li > a {
background: blue;
color: #fff;
display: block;
padding: 10px 20px;
text-align: center;
text-decoration: none;
}
.menu ul {
background-color: #f1f1f1;
display: none;
height: 0;
left: 0;
opacity: 0;
position: absolute;
transition: all .5s ease;
top: 35px;
width: 100%;
}
.menu:hover ul{display: block;}
.menu li:hover ul {
height: 200px;
opacity: 1;
transform: translateY(0);
}
.menu ul a {
color: #000;
display: block;
padding: 5px 20px;
}
<ul class="menu">
<li>
<a href="#">Parent Link</a>
<ul>
<li><a href="#">Child Link</a></li>
<li><a href="#">Child Link</a></li>
<li><a href="#">Child Link</a></li>
<li><a href="#">Child Link</a></li>
</ul>
</li>
</ul>
试试这个,当父级悬停时,在 display: none;
上添加 <ul>
,然后在 display:block;
上添加 <ul>
。
.menu ul {
background: #ddd;
height: 0;
left: 0;
opacity: 0;
position: absolute;
transition: all .5s ease;
top: 35px;
width: 100%;
display: none; /*dont display it yet*/
}
.menu > li:hover ul {
display: block; /*dispplay ul on hover*/
height: 200px;
opacity: 1;
transform: translateY(0);
}
.menu {
display: block;
margin: 0 auto;
position: relative;
width: 200px;
}
.menu > li > a {
background: blue;
color: #fff;
display: block;
padding: 10px 20px;
text-align: center;
text-decoration: none;
}
.menu ul {
background: #ddd;
height: 0;
left: 0;
opacity: 0;
position: absolute;
transition: all .5s ease;
top: 35px;
width: 100%;
display: none;
}
.menu > li:hover ul {
display: block;
height: 200px;
opacity: 1;
transform: translateY(0);
}
.menu ul a {
color: #000;
display: block;
padding: 5px 20px;
}
<ul class="menu">
<li>
<a href="#">Parent Link</a>
<ul>
<li><a href="#">Child Link</a></li>
<li><a href="#">Child Link</a></li>
<li><a href="#">Child Link</a></li>
<li><a href="#">Child Link</a></li>
</ul>
</li>
</ul>