效果:

html页面
| <body> |
| <div class="menu"> |
| <ul> |
| <li> |
| <a href="#">一级菜单</a> |
| <ul> |
| <li><a href="#">二级菜单</a></li> |
| <li><a href="#">二级菜单</a></li> |
| <li><a href="#">二级菜单</a></li> |
| <li><a href="#">二级菜单</a></li> |
| <li><a href="#">二级菜单</a></li> |
| </ul> |
| </li> |
| <li> |
| <a href="#">一级菜单</a> |
| <ul> |
| <li><a href="#">二级菜单</a></li> |
| <li><a href="#">二级菜单</a></li> |
| <li><a href="#">二级菜单</a></li> |
| <li><a href="#">二级菜单</a></li> |
| <li><a href="#">二级菜单</a></li> |
| </ul> |
| </li> |
| <li> |
| <a href="#">一级菜单</a> |
| <ul> |
| <li><a href="#">二级菜单</a></li> |
| <li><a href="#">二级菜单</a></li> |
| <li><a href="#">二级菜单</a></li> |
| <li><a href="#">二级菜单</a></li> |
| <li><a href="#">二级菜单</a></li> |
| </ul> |
| </li> |
| <li> |
| <a href="#">一级菜单</a> |
| <ul> |
| <li><a href="#">二级菜单</a></li> |
| <li><a href="#">二级菜单</a></li> |
| <li><a href="#">二级菜单</a></li> |
| <li><a href="#">二级菜单</a></li> |
| <li><a href="#">二级菜单</a></li> |
| </ul> |
| </li> |
| <li> |
| <a href="#">一级菜单</a> |
| <ul> |
| <li><a href="#">二级菜单</a></li> |
| <li><a href="#">二级菜单</a></li> |
| <li><a href="#">二级菜单</a></li> |
| <li><a href="#">二级菜单</a></li> |
| <li><a href="#">二级菜单</a></li> |
| </ul> |
| </li> |
| </ul> |
| </div> |
| </body> |
复制
JS代码
| <script> |
| $(function() { |
| $(".menu>ul>li").hover(function() { |
| $(this.querySelector("ul")).slideToggle() |
| }) |
| }) |
| </script> |
复制
JS代码详解:
-
$(function() { ... })
: 这是jQuery的快捷方式,用于在DOM加载完成后执行代码。它等价于 $(document).ready(function() { ... })
,表示代码会在页面加载完成后执行。
-
$(".menu>ul>li").hover(function() { ... })
: 这是一个选择器,它选中所有具有"class"为"menu"的元素中的直接子元素的<li>
(列表项)。然后,通过.hover()
方法为这些<li>
元素添加悬停事件的监听。
-
function() { ... }
: 这是一个悬停事件的回调函数。当鼠标悬停在匹配的菜单项上时,这个函数会被执行。
-
$(this.querySelector("ul")).slid
Toggle()
: 在悬停事件回调函数中,首先使用this
来获取当前鼠标悬停的菜单项元素。然后,通过querySelector("ul")
来选择这个菜单项元素下的<ul>
(无序列表,也就是子菜单)元素。接着,通过.slideToggle()
方法来切换子菜单的显示状态,如果子菜单是隐藏的,则显示它;如果子菜单是显示的,则隐藏它。.slideToggle()
方法会为显示和隐藏添加动画效果。
CSS代码
| * { |
| padding: 0; |
| margin: 0; |
| } |
| |
| .menu { |
| background: #910000; |
| } |
| |
| .menu>ul { |
| display: flex; |
| justify-content: space-between; |
| width: 80%; |
| margin: auto; |
| } |
| |
| .menu ul li { |
| list-style: none; |
| } |
| |
| .menu>ul>li { |
| position: relative; |
| } |
| |
| .menu ul li a { |
| padding: 10px; |
| display: block; |
| color: white; |
| text-decoration: none; |
| } |
| |
| .menu ul ul { |
| position: absolute; |
| width: 100%; |
| background: #910000; |
| display: none; |
| } |
复制
CSS代码详解:
*
选择器将页面上所有元素的内边距和外边距设置为0,以消除默认的内边距和外边距。.menu
类选择器选中具有 “menu” 类的元素,设置了背景颜色为深红色 (#910000)。.menu>ul
选择器选中直接子元素是 ul
的 .menu
元素,将其样式设置为弹性布局 (display: flex
),并使用 justify-content: space-between
属性使子元素在水平方向上等间距分布。.menu ul li
选择器选中所有 ul
元素下的 li
元素,并移除其默认的列表样式。.menu>ul>li
选择器选中 .menu
元素下的直接子元素 li
,设置其位置为相对定位。.menu ul li a
选择器选中所有 ul
元素内的 li
元素中的锚点 (<a>
标签),设置了内边距、显示为块级元素、文字颜色为白色、去除下划线。.menu ul ul
选择器选中 ul
元素的子 ul
元素(子菜单),设置其位置为绝对定位,宽度为100%,背景颜色与父菜单一致,且初始状态为不显示。