从悬停状态切换到点击二十二菜单

时间:2017-07-20 作者:mwz

我想知道我怎样才能更改“二十一二”主题中的菜单,以便在单击而不是悬停时显示子菜单项?

3 个回复
最合适的回答,由SO网友:Tim Elsass 整理而成

菜单可能会有点混乱,因为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

  1. 键盘导航:
在不用鼠标的情况下使用键盘测试此解决方案时,我能够轻松成功地在菜单、子菜单和嵌套子菜单之间切换。按enter键并没有将我带到有子项的项目的链接,但在最后一个子项上按enter键可以打开链接。这看起来就像我从op的问题中期望的通过键盘导航的方式。用aria标签重写导航,为屏幕阅读器上的用户提供更好的体验,并允许使用箭头键更好地处理导航(如果这是您的站点所关心的问题),可能不会有什么坏处。

移动或触摸设备:点击事件将是触摸点击模拟的最后一次触发。触摸事件的流程为:

touchstart(触摸启动)touchmove(触摸移动)touchend(触摸结束)mouseover(鼠标移动)mousedown(鼠标下移)点击鼠标handling the mobile menus on the touchstart event in their navigation.js, 所以在点击时调用preventdefaulton应该仍然可以让它在移动设备上表现良好。

SO网友:Rick Hellewell

基本答案是,您需要更改菜单项元素以具有onclick() 函数而不是onfocus() . Onfocus() 是鼠标悬停在元素上时发生的情况。Onclick() 单击图元时发生。

在何处执行此操作取决于主题代码。您需要深入研究创建菜单项的主题代码,并更改菜单元素的操作,它也可以位于<form> tlement公司。

并且,使用子主题,这样,如果主主题得到更新,您就不会丢失所做的更改。

SO网友:Cedon

您添加了:focus 伪类与相同的规则:hover.

a:hover {
   color: red;
}
成为

a:hover, 
a:focus {
   color: red;
}

结束

相关推荐

强制移除父主题css/js并从子主题中调用它们

我使用多个站点,只有一个站点。我想强制我的父主题不要调用任何css/js。同时,我想强制我的子主题使用其函数包含新的CSS/JS。php文件。我在这个伟大的门户网站上看到了许多建议,但没有一个对我有用。我的问题是我无法阻止父主题函数。php停止加载CSS/JS你能用一个CSS的例子和一个Js的例子解释一下吗?非常感谢。