因此,我决定开始更深入地学习 CSS,并尝试实现纯 CSS 下拉菜单/选择框。我首先研究了一些在线教程中提供的代码。
最终,我想出了这个,我认为这是相当不错的。然而,我得出的结论是,在所有情况下,CSS 菜单可能永远都不是 Javascript 菜单的合适替代品,因为当你放弃 Javascript 时会出现一些微妙的问题。
如果下拉菜单中的项目只是<a href
链接,那么一切都应该没问题。但是,如果您希望每个链接触发 Javascript 事件,则会遇到以下问题:
当用户单击下拉框中的某个项目时,您显然希望下拉框消失。如果下拉框中的项目是
<a>
元素,则会自动发生这种情况。如果它们不是<a>
元素,则下拉框不会在单击时消失 - 这给您留下了两个选择:(A)连接一些侦听的 Javascript,onclick
然后使下拉框消失,或者(B ) 使用 css:active
选择器将下拉框的display
属性设置为none
. (A) 很愚蠢,因为此时您基本上回到了 Javascript 菜单,并且 (B) 不起作用,因为它阻止了在您单击菜单中的项目时触发 Javascript 事件。所以,你必须使用
<a>
标签。这意味着如果要将事件与菜单项选择相关联,则需要onclick
在<a>
标签中使用内联。没关系,除非您这样做,否则它会阻止下拉菜单消失(如我的 jsfiddle 链接中所示)。<a>
所以,真的,只有当用户选择一个菜单项时你想做的只是通过链接导航到另一个页面时,纯 CSS 下拉菜单才似乎可行。我找不到任何方法来触发不附带一些问题的 Javascript 函数。
问:那么,我说的准确吗?或者有没有办法创建一个只有 CSS 的下拉菜单,(A)当用户点击它时消失,(B)触发一个 Javascript 函数?