快速检查:工作 JSFiddle
有人可以帮助我解释为什么当我单击下拉菜单中的链接时它们不起作用?也许是因为指针事件?
解释为什么这种行为:是的,你是对的,这是因为你使用:active
选择器逻辑的方式,要详细解释,请考虑你的这个 CSS 规则
.container:hover .test1:active {
display: none;
}
您的主菜单下有您的菜单链接,li.test1
并且对内部链接的任何单击也会冒泡到该元素,因此与单击li
. 因此,只要按住鼠标(鼠标按下事件),它就会触发:active
事件并且您正在隐藏links
(即:)li.test1
,但是只有当鼠标同时按下和按下时,单击事件才完成。所以到现在li
是隐藏的 并且mouse up
不再在链接上。因此,如您所见,没有机会触发点击事件。这就是问题所在。
I saw other answers which you seem to be interested in and this really doesn't need any kind of hack, It can be done by just formatting your HTML and with some CSS changes.
解决方案:li.test1
您可以使用两个不同li
的 ,而不是将内部菜单链接包裹在 内,一个X CLose
用于保存menu links
. 有了这个,我们可以确保当li.test1
它处于活动状态(即鼠标按下)时,我们可以隐藏它以及li
与之相邻的另一个新的。所以这意味着当用户点击X Close
li
我们隐藏菜单时,如果他点击其他菜单项,您将被重定向。
所以你的 HTML 结构的变化应该是这样的
<ul class="container">
Drop down menu
<li class="test1">
<a class="dropdown" href="#">X Close</a>
</li>
<li class="MenuLinks">
<ul class="content">
<!-- all your links go here-->
</ul>
</li>
</ul>
主要的 CSS 规则是
.container:hover .test1:active,
.container:hover .test1:active + .MenuLinks {
display: none;
}
下面是一个 SO 工作片段
body {
padding: 20px;
}
.container {
border: 1px solid lime;
padding: 10px;
width: 200px;
list-style-type: none;
}
.test1,
.MenuLinks {
display: none;
border-color: orange;
border-style: dashed;
background: green;
pointer-events: none;
}
.test1 {
padding: 10px;
border-width: 1px 1px 0px 1px;
}
.MenuLinks {
border-width: 0px 1px 1px 1px;
}
.container:hover li {
display: block;
}
/*Rule to hide both test1 and MenuLinks when X Close is clicked*/
.container:hover .test1:active,
.container:hover .test1:active + .MenuLinks {
display: none;
}
a {
pointer-events: auto;
color: lime;
font-weight: bold;
}
<ul class="container">
Drop down menu
<li class="test1">
<a class="dropdown" href="#">X Close</a>
</li>
<!--seperate li for close-->
<li class="MenuLinks">
<!--wrap all your menu items here-->
<ul class="content">
CLOSE THIS CONTENT
<li class="link"><a href="http://www.google.com">Go to link 1</a>
</li>
<li class="link"><a href="https://www.google.co.uk">Go to link 2</a>
</li>
<li class="link"><a href="https://www.google.co.uk">Go to link 3</a>
</li>
</ul>
<li>
</ul>
注意:单击链接时的空白屏幕是由于 google 的跨域安全限制策略导致控制台中出现此错误
Refused to display 'https://www.google.co.in/?gfe_rd=cr&ei=x2VWWLL2Ae-K8Qfwx4ngDQ' in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN'.
但是,当您单击链接时,您可以在网络选项卡中看到请求。
希望这可以帮助!!