点击手机

时间:2017-05-29 03:43:49

标签: javascript css menu hover accessibility

所以我在好的免费照片网站顶部使用了一个悬停菜单。

在桌面上,当您将鼠标悬停在桌面上时,它会正常工作,菜单会出现。 当你将它悬停时,它会消失。

但是,移动设备没有悬停行为,因此在移动设备上单击菜单使其显示时,您无法摆脱它。

如果您点击菜单(但不是子链接)或页面上的任何其他位置,我需要它消失。

以下是我正在使用的HTML代码:

<div class="menu-wrap">
  <nav class="menu">
    <ul class="clearfix">       
      <li>

        <a href="#">Good Free Photos Menu<span class="arrow">&#9660;</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,但我不知道代码是什么。

2 个答案:

答案 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键作为导航)