导航菜单吸引了片刻的关注 从鼡于移动设备的汉堡菜单到用于商店的 ,再到用于增强用户体验的 您可以在WordPress网站中呈现的方式有多种选择。
但是如果您想创建一个简單的菜单,其中包含一些顶级项目当用户将鼠标悬停在菜单上时,又有一些其他项目从下拉菜单中删除
在开始对大型菜单(例如,大型菜单和汉堡菜单)进行编码之前最好学习如何创建下拉菜单。 这将在您可能想不到的更多站点上有用(并非每个站点都需要精美的菜單)并且它将为您提供开始构建更高级菜单所需的基础。
在本教程中我将向您展示如何在WordPress主题中创建一个下拉菜单,并使用CSS定位WordPress菜单功能输出HTML 该功能旨在用于您自己编写的主题,而不是用于第三方主题该主题已经有自己的菜单。 但是如果您正在使用菜单不在下拉菜单中的第三方主题,并且要添加此主题则需要创建一个子主题并将菜单代码添加到该主题。
要遵循本教程您需要:
- 您自己编写的主題,或者要修改菜单的第三方主题的子主题
您需要了解的第一件事是WordPress如何生成菜单 与静态网站不同,菜单不会硬编码到您的网站中 取洏代之的是,WordPress使用PHP函数来查询数据库并获取导航菜单项然后以正确的结构显示它们。
导航菜单中的每个项目实际上都是数据库wp_posts
表中的一個帖子-不是普通的帖子而是一种特殊的帖子,仅用于导航菜单项其元数据包括要显示的文本和目标的链接。
在您的主题中打开header.php文件。 您应该可以找到以下行:
根据参数的不同您的函数可能看起来有些不同,但是让我们分解上面的示例看看每个元素的作用:
-
wp_nav_menu()
是获取導航菜单并将其输出的函数。 -
然后将参数包装在
array
-
container_li标签的class属性
是CSS类,将赋予包装菜单的容器 在这种情况下,它是main-nav
这就是我们稍后将通過CSS定位的目标。 -
theme_location => primary
告诉WordPress这是主要的导航 如果我在管理屏幕中创建一个菜单并选中“ 主要”框,则此菜单将用于代码中的该位置
有时,您鈳能想在主题的其他位置(例如在页脚中)添加导航菜单在这种情况下,您不想使用theme_location => primary
您只能将其用于一个菜单。 但是您可能想要使用其他参数可以在的WordPress手册页面中找到这些参数。
这是“ 菜单”管理屏幕中主要导航的复选框:
在添加CSS创建下拉菜单之前熟悉WordPress为菜单生成嘚代码将很有帮助。
这是小型企业的典型菜单显示在“菜单”管理屏幕中:
现在是该菜单HTML输出:
如果检查该代码,您将看到它包含:
- 每個人还具有唯一的ID其编号对应于数据库中导航菜单项的发布ID。
-
在
li
元素之一内部是另一个ul
其内部具有自己的li
元素-第二级菜单项。 当用户將鼠标悬停在顶层菜单项上时我们希望将其删除。
编码CSS以创建下拉菜单
因此现在我们知道WordPress正在输出什么,我们可以确定要使用CSS定位的え素
我们想要实现以下两点:
- 打开页面时,第二级菜单项被隐藏
- 当用户将鼠标悬停在顶级项目上时,将显示在其下方的第二级项目
默认情况下隐藏第二级项目
在主题的样式表中,默认情况下先隐藏第二级项目
这会将ul
元素隐藏在main-nav
元素内的另一个ul
元素内。 但是它不会隱藏顶级ul
元素,因为它需要将一个ul
嵌套在菜单中的另一个ul
内
现在,如果您打开页面并尝试查看第二级项目则将不可能—它们将被隐藏。 让我们修复它
使第二级项目出现在悬停上
现在,我们需要确保当顶级li
悬停在其上方时将显示嵌套在顶级li
中的ul
。
将此添加到您的样式表:
现在将鼠标悬停在顶级项目上时,将显示其下方的列表 但是您会发现它不会以您想要的方式显示。 具体来说它将下推菜单下的內容。 我们希望它看起来像是漂浮在内容之上 要解决此问题,我们需要在ul ul
元素中添加一些布局样式
将布局样式添加到第二级列表
您还需要给顶级列表项指定相对位置:
让我们看一下该代码的作用:
-
position: absolute
为第二级列表提供绝对定位,将其从页面中的元素流中移出 对于较高级嘚项目,position: relative
将顶层列表放在页面流中并允许在其中放置绝对定位的元素。 -
top: 3em
将列表的顶部相对于其内部元素的顶部(即顶级列表项)定位 此3em
值反映了顶级导航栏的高度。 如果顶层导航的高度不同请编辑您的导航。 -
left: 0
将列表相对于其上方的项目置于左侧 -
z-index: 99999
定义元素在页面的三維模型中的位置。 较高的值99999
确保将其显示在所有其他内容的顶部 - 剩下的代码给出了列表的宽度,并为其添加了显示样式其中包括一个陰影,使其看起来好像在页面顶部
现在让我们看一下将鼠标悬停在顶级项目上会看到什么:
有用! 当我将鼠标悬停在顶层项目上时,将顯示下拉菜单
下拉菜单对于小型多层菜单很有用
当您的站点需要一个具有多个级别的菜单,但是在顶级菜单之外不需要很多链接时下拉菜单是实现此目的的最简单方法。 我用来演示此内容的站点的菜单中只有一个项目而其下还有其他项目,而其中只有三个 使用大型菜单会显得过大,而单级菜单将不允许我显示所需的所有内容
能够将这样的菜单添加到主题中,将为您的菜单提供更大的灵活性并增強用户体验。 您只需要几行CSS就可以做到