html如何制作二级菜单

HTML5二级菜单的实现原理

HTML5二级菜单的实现主要依赖于HTML、CSS和JavaScript这三种技术,HTML用于定义菜单的结构,CSS用于美化菜单的样式,而JavaScript则用于实现菜单的交互功能。

html如何制作二级菜单

1、HTML5中的无序列表(<ul>)和列表项(<li>)元素可以用于创建一级菜单,每个一级菜单项都可以包含一个子菜单,子菜单可以通过嵌套无序列表来实现。

2、为了实现二级菜单的展开和收起效果,我们可以使用CSS的伪类选择器(如:hover)来控制菜单项的显示和隐藏,当用户将鼠标悬停在某个一级菜单项上时,该菜单项下的二级菜单会显示出来;当用户将鼠标离开该菜单项时,二级菜单会收起来。

3、JavaScript可以用于处理用户的交互操作,如点击一级菜单项时展开或收起对应的二级菜单,JavaScript还可以用于实现动态生成菜单的功能,例如根据用户的角色或权限来显示不同的菜单项。

HTML5二级菜单的实现方法

下面我们以一个简单的示例来说明如何使用HTML5、CSS和JavaScript实现二级菜单。

1、我们需要在HTML中定义一个包含一级菜单的无序列表:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>HTML5二级菜单</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <nav>
        <ul class="menu">
            <li class="menu-item"><a href="">首页</a></li>
            <li class="menu-item">
                <a href="">产品</a>
                <ul class="submenu">
                    <li><a href="">手机</a></li>
                    <li><a href="">平板</a></li>
                    <li><a href="">笔记本</a></li>
                </ul>
            </li>
            <li class="menu-item"><a href="">关于我们</a></li>
        </ul>
    </nav>
    <script src="script.js"></script>
</body>
</html>

2、接下来,我们需要使用CSS来为一级菜单和二级菜单添加样式:

/* style.css */
body {
    font-family: Arial, sans-serif;
}
nav {
    background-color: 333;
}
.menu {
    list-style: none;
    padding: 0;
}
.menu-item {
    display: inline-block;
    position: relative;
}
.menu-item a {
    color: white;
    display: block;
    padding: 10px;
}
.submenu {
    display: none;
    list-style: none;
    padding: 0;
}

3、我们需要使用JavaScript来为一级菜单项添加鼠标悬停事件监听器,以实现二级菜单的展开和收起功能:

// script.js
document.querySelectorAll('.menu-item').forEach(function (menuItem) {
    menuItem.addEventListener('mouseenter', function (event) {
        var submenu = event.target.querySelector('.submenu');
        if (submenu) {
            submenu.style.display = 'block';
        } else if (menuItem === document.querySelector('.menu-item')) { // 如果当前点击的是顶级菜单,则展开所有子菜单(这里仅作示例,实际应用中可以根据需要进行调整)
            document.querySelectorAll('.submenu').forEach(function (submenu) {
                submenu.style.display = 'block';
            });
        } else if (menuItem.parentElement && menuItem.parentElement.classList.contains('submenu')) { // 如果当前点击的是同级菜单的父级菜单,则只展开该父级菜单下的子菜单(这里仅作示例,实际应用中可以根据需要进行调整)
            event.target.parentElement.querySelector('.submenu').style.display = 'block';
        } else if (menuItem.parentElement && menuItem.parentElement.parentElement && menuItem.parentElement.parentElement.classList.contains('submenu')) { // 如果当前点击的是同级菜单的祖父级菜单,则展开该祖父级菜单下的子菜单(这里仅作示例,实际应用中可以根据需要进行调整)
            event.target.parentElement.parentElement.querySelector('.submenu').style.display = 'block';
        } else if (menuItem.parentElement && menuItem.parentElement.parentElement && menuItem.parentElement.parentElement.parentElement && menuItem.parentElement.parentElement.parentElement.classList.contains('submenu')) { // 如果当前点击的是同级菜单的曾祖父级菜单,则展开该曾祖父级菜单下的子菜单(这里仅作示例,实际应用中可以根据需要进行调整)
            event.target.parentElement.parentElement.parentElement.querySelector('.submenu').style.display = 'block';
        } else if (event.target !== menuItem && event.target !== menuItem.nextSibling && event.target !== menuItem.previousSibling) { // 如果当前点击的不是当前一级菜单项的其他部分,则收起所有子菜单(这里仅作示例,实际应用中可以根据需要进行调整)
            document.querySelectorAll('.submenu').forEach(function (submenu) {
                submenu.style.display = 'none'; // 将所有子菜单设置为不可见状态(这里仅作示例,实际应用中可以根据需要进行调整)
            }); // 将所有子菜单设置为不可见状态(这里仅作示例,实际应用中可以根据需要进行调整)

原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/218667.html

(0)
K-seoK-seoSEO优化员
上一篇 2024年1月14日 00:24
下一篇 2024年1月14日 00:28

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

免备案 高防CDN 无视CC/DDOS攻击 限时秒杀,10元即可体验  (专业解决各类攻击)>>点击进入