所以我在好的免费照片网站顶部使用了一个悬停菜单。
在桌面上,当您将鼠标悬停在桌面上时,它会正常工作,菜单会出现。 当你将它悬停时,它会消失。
但是,移动设备没有悬停行为,因此在移动设备上单击菜单使其显示时,您无法摆脱它。
如果您点击菜单(但不是子链接)或页面上的任何其他位置,我需要它消失。
以下是我正在使用的HTML代码:
<div class="menu-wrap">
<nav class="menu">
<ul class="clearfix">
<li>
<a href="#">Good Free Photos Menu<span class="arrow">▼</span></a>
<ul class="sub-menu">
<li><a href="https://www.goodfreephotos.com/Free-Stock-Photos/">Free Stock Photos</a></li>
<li><a href="https://www.goodfreephotos.com/public-domain-images/">Public Domain Images</a></li>
<li><a href="https://www.goodfreephotos.com/tags/featured">Featured</a></li>
<li><a href="https://www.goodfreephotos.com/pages/last-100-images">Last 100 images</a></li>
<li><a href="https://www.goodfreephotos.com/news">News</a></li>
<li><a href="https://www.goodfreephotos.com/category/tutorials/">Tutorials</a></li>
</ul>
</li>
</ul>
</nav>
</div>
和css:
.clearfix:after {
display:block;
clear:both;
}
/*----- Menu Outline -----*/
.menu-wrap {
width:100%;
box-shadow:0px 1px 3px rgba(0,0,0,0.2);
background:#3e3436;
}
.menu {
width:1000px;
margin:0px auto;
}
.menu li {
margin:0px;
list-style:none;
font-family:'Ek Mukta';
}
.menu a {
transition:all linear 0.15s;
color:#919191;
}
.menu li:hover > a, .menu .current-item > a {
text-decoration:none;
color:#be5b70;
}
.menu .arrow {
font-size:11px;
line-height:0%;
}
/*----- Top Level -----*/
.menu > ul > li {
float:left;
display:inline-block;
position:relative;
font-size:19px;
}
.menu > ul > li > a {
padding:10px 40px;
display:inline-block;
text-shadow:0px 1px 0px rgba(0,0,0,0.4);
}
.menu > ul > li:hover > a, .menu > ul > .current-item > a {
background:#2e2728;
}
/*----- Bottom Level -----*/
.menu li:hover .sub-menu {
z-index:1;
opacity:1;
}
.sub-menu {
width:160%;
padding:5px 0px;
position:absolute;
top:100%;
left:0px;
z-index:-1;
opacity:0;
transition:opacity linear 0.15s;
box-shadow:0px 2px 3px rgba(0,0,0,0.2);
background:#2e2728;
}
.sub-menu li {
display:block;
font-size:16px;
}
.sub-menu li a {
padding:10px 30px;
display:block;
}
.sub-menu li a:hover, .sub-menu .current-item a {
background:#3e3436;
}
我知道这可能需要一些JavaScript,但我不知道代码是什么。
答案 0 :(得分:0)
您应该阅读以下帖子: CSS :hover behaviour on touchscreen devices
您当前设计的问题在于它依赖于:hover
状态才能工作,这不会一直有效(对于键盘导航,会导致触摸屏出现问题)。
下拉菜单的许多可访问实现都是well documented
您当前的代码可能在当前配置下工作,您只需将焦点设置在菜单之外,例如:
<a href="#">close menu</a>
<div class="menu-wrap">
<nav class="menu">
但是这不会使您的菜单无法访问,并且无法在:hover
状态未被识别为:focus
的浏览器中使用
答案 1 :(得分:-1)
这是我要做的事情:
我首先将悬停状态从css悬停转移到类名.dropdown-open
使用jquery:
如果在计算机上查看网站,请在鼠标悬停和mousout上控制此课程
否则,在元素的mousedown
上切换类。
jQuery看起来像这样:
$(document).ready(function(){
function checkWidthForMenu(){
if($(window).width() > 760) {
$('.sub-menu').mouseover(function(){
$(this).addClass('dropdown-open');
});
$('.sub-menu').mouseout(function(){
$(this).removeClass('dropdown-open');
});
} else {
$(document).mousedown(function(){
$('.sub-menu.dropdown-open').removeClass('dropdown-open');
});
$('.sub-menu').mousedown(function(){
$(this).toggleClass('dropdown-open');
});
}
}
checkWidthForMenu();
$(window).resize(checkWidthForMenu());
});
修改:
亚当对可达性有很好的认识;所以在你的CSS中,将打开的菜单的样式添加到.sub-menu.dropdown-open, .sub-menu:focus {...}
这将使它在悬停和焦点上打开(使用tab键作为导航)