【发布时间】:2018-10-09 23:06:35
【问题描述】:
看看下面的菜单:
.clearfix::after {
content: "";
clear: both;
display: table;
}
#my-menu-inner > ul {
margin:10px;
width:100%;
background-color:yellow;
list-style-type:none;
position:relative;
}
#my-menu-inner > ul > li {
float:left;
margin:20px;
}
#my-menu-inner > ul > li > a {
padding:20px;
border:1px solid black;
display:block;
}
#my-menu-inner > ul > li > div.sub {
position:absolute;
top:calc(100% - 20px);
background-color:red;
padding:40px;
display:none;
left:0;
width:100vw;
}
#my-menu-inner > ul > li a:hover + div.sub, #my-menu-inner > ul > li a:focus + div.sub,
#my-menu-inner > ul > li > div.sub:hover, #my-menu-inner > ul > li > div.sub:focus {
display:block;
}
<div id="whatever">Just something before ...</div>
<div id="my-menu">
<div id="my-menu-inner">
<ul class="clearfix">
<li>
<a href="http://www.example.com/foo/">foo</a>
<div class="sub">
<ul>
<li><a href="http://www.example.com/mobile/">mobile</a></li>
<li><a href="http://www.example.com/users/">users</a></li>
</ul>
</div>
</li>
<li>
<a href="http://www.example.com/bar/">bar</a>
<div class="sub">
<ul>
<li><a href="http://www.example.com/never/">never</a></li>
<li><a href="http://www.example.com/see-me/">see me</a></li>
</ul>
</div>
</li>
</ul>
</div>
</div>
对于拥有鼠标或触摸板的每个人来说,这是一个很好用的菜单。但是:移动设备用户将永远不会看到子菜单,因为他们一旦单击其中一个链接就会立即转到href 位置。而且它们没有悬停状态,ofc。
我的想法:
想法 1:为触摸设备提供单独的移动菜单。这很棒,因为大多数设计都有单独的移动菜单。
问题:@media screen (max-width: 1000px) 不足以检测用户是否能够悬停/聚焦,因为例如每个拥有大触摸屏的人都会被排除在外。
想法 2: preventDefault() 点击链接。检查之前是否检测到鼠标移动,如果是,请点击链接。如果不需要第二次点击。
问题:要求两次点击可能对用户不友好(很多人不会认为该链接是可点击的)。
有什么好的推荐方法来处理这种情况?
【问题讨论】:
标签: javascript html css responsive-design touch