.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。
:为触摸设备提供单独的移动菜单。这是伟大的,因为大多数设计有单独的移动菜单无论如何。
问题:
@media screen (max-width: 1000px)
这将不是一个足够的方法来检测用户是否能够悬停/聚焦,例如,所有拥有大触摸屏的人都将被排除在外。
想法二:
preventDefault()
点击链接。检查之前是否检测到鼠标移动,如果是,请按照链接进行操作。如果不需要再次单击。
问题:需要两次点击可能对用户不友好(许多人不会意识到链接是可点击的)。