菜单可能会有点混乱,因为JS和CSS经常与不同的东西交互。
看看Twenty12主题,实现这一点的一个快速方法是删除正在添加的CSS:子菜单的悬停显示。
在里面style.css you would see .main-navigation ul li:hover > ul, on line 1,567.
在您的子主题中,您可以删除该选择器,并保持其他两个选择器和所有属性不变。
这将禁用:hover,但是您还需要决定菜单、子菜单和子菜单等的行为。
您是否希望子菜单与子菜单的行为方式相同?
是否要禁用嵌套在下面的顶级菜单项?
是否要在菜单项旁边创建一个切换,并使链接在父项上保持可单击状态?
也许只需单击一下就会打开子菜单,双击就会将用户带到URL?
通过从上面删除CSS,您可以让父菜单项成为指向“#”的自定义链接,并让链接文本成为您想要的父项。
Twenty12已经在js/navigation.js file, 这就是在元素上切换焦点类,所以只要删除这一行CSS并更改菜单结构,一切都应该正常。
如果这是针对您自己的站点或受控环境,那么这可能就是您所需要的全部。如果您不想更改菜单结构,或者想要一个替代的解决方案来处理这个问题,那么您可以很容易地使用JS来防止单击时出现链接。此代码允许这种情况发生,并且您不必乱弄菜单结构:
( function( $ ) {
$( \'#menu-primary\' ).find( \'.menu-item-has-children > a\' ).on( \'click\', function( e ) {
e.preventDefault();
});
} )( jQuery );
如果您正在基于Twenty12创建一个新主题,那么您还应该考虑其他人可能打算如何使用该主题,并希望他们的菜单能够正常工作。您可以创建自定义控件,以允许切换悬停与单击的行为,并允许父菜单项为链接等。
编辑:
How would your JS affect users who don\'t use mice though?
最好的方法是尝试一下!:P
- 键盘导航:
在不用鼠标的情况下使用键盘测试此解决方案时,我能够轻松成功地在菜单、子菜单和嵌套子菜单之间切换。按enter键并没有将我带到有子项的项目的链接,但在最后一个子项上按enter键可以打开链接。这看起来就像我从op的问题中期望的通过键盘导航的方式。用aria标签重写导航,为屏幕阅读器上的用户提供更好的体验,并允许使用箭头键更好地处理导航(如果这是您的站点所关心的问题),可能不会有什么坏处。
移动或触摸设备:点击事件将是触摸点击模拟的最后一次触发。触摸事件的流程为:
touchstart(触摸启动)touchmove(触摸移动)touchend(触摸结束)mouseover(鼠标移动)mousedown(鼠标下移)点击鼠标handling the mobile menus on the touchstart event in their navigation.js, 所以在点击时调用preventdefaulton应该仍然可以让它在移动设备上表现良好。