HTML折叠菜单

本文介绍了一种使用HTML、CSS及JavaScript实现的可折叠菜单栏设计方案。通过简单的鼠标点击操作,用户可以展开或收起子菜单,提高了网页导航的用户体验。文章详细解释了代码结构,包括样式设置和JavaScript交互逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<html>
<head>
<meta charset="UTF-8">
    <title>Insert title here</title>
    <script type="text/javascript">
var itemHeight = 40;
var dividerHeight = 1;

function openMenu(obj) {
    menuTitleId = obj.id;
    menuId = "menu" + menuTitleId.substring(10);
    indicatorId = "indicator" + menuTitleId.substring(10);

    menu = document.getElementById(menuId);
    indicator = document.getElementById(indicatorId);
    height = menu.style.height;

    if (height == "0px" || height == "") {
        childAmount = menu.getElementsByTagName('div').length;
        dividerAmount = menu.getElementsByTagName('li').length;
        height = childAmount * itemHeight + dividerAmount * dividerHeight;
        menu.style.height = height + "px";
        indicator.style.transform = "rotate(180deg)";
    } else {
        menu.style.height = "0px";
        indicator.style.transform = "rotate(0deg)";
    }
}
</script>
<style>

.menus {
width: 320px;
overflow: hidden;
box-shadow: 1px 1px 4px gray;
/* border-bottom: 1px solid black;
border-top: 1px solid black; */
border: 1px solid gray;
border-radius: 5px;
}

.menu {
overflow: hidden;
height: 0px;
transition: all 0.3s ease;
}

.menu_title {
width: 305px;
height: 50px;
line-height: 50px;
background: #fafafa;
color: gray;
font-size: 20px;
padding-left: 15px;
transition: all 0.3s ease;
cursor: pointer;
position: relative;
font-weight: bold;
overflow: hidden;
}

.menu_title:hover {
background: #dedede;
color: black;
}

.indicator {
width: 50px;
height: 50px;
font-weight: bold;
position: absolute;
right: 0px;
top: 0px;
transition: all 0.3s ease;
font-weight: bold;
text-align: center;
}

.item {
width: 290px;
height: 40px;
line-height: 40px;
background: gray;
color: white;
padding-left: 30px;
transition: all 0.3s ease;
cursor: pointer;
overflow: hidden;
}

.item:hover {
background: #B22222;
}

.item a {
width: 290px;
height: 40px;
display: block;
text-decoration: none;
color: white;
text-decoration: none;
}

.item_divider {
width: 322px;
height: 1px;
background: white;
display: block;
opacity: 0.8;
}

.menu_divider {
width: 100%;
height: 1px;
background: gray;
}

</style>
</head>
<body>

<div class="menus">

    <div id="menu_title1" class="menu_title" onclick="openMenu(this)">
        Menu1
        <div class="indicator" id="indicator1">^</div>
    </div>
    <div class="menu" id="menu1">
        <div class="item">
            <a href="#">Item1</a>
        </div>
        <li class="item_divider"></li>
        <div class="item">
            <a href="#">Item2</a>
        </div>
        <li class="item_divider"></li>
        <div class="item">
            <a href="#">Item3</a>
        </div>
        <li class="item_divider"></li>
        <div class="item">
            <a href="#">Item4</a>
        </div>
    </div>

    <li class="menu_divider"></li>

    <div id="menu_title2" class="menu_title" onclick="openMenu(this)">
        Menu2
        <div class="indicator" id="indicator2">^</div>
    </div>
    <div class="menu" id="menu2">
        <div class="item">
            <a href="#">Item1</a>
        </div>
        <li class="item_divider"></li>
        <div class="item">
            <a href="#">Item2</a>
        </div>
    </div>

    <li class="menu_divider"></li>

    <div id="menu_title3" class="menu_title" onclick="openMenu(this)">
        Menu3
        <div class="indicator" id="indicator3">^</div>
    </div>
    <div class="menu" id="menu3">
        <div class="item">
            <a href="#">Item1</a>
        </div>
        <li class="item_divider"></li>
        <div class="item">
            <a href="#">Item2</a>
        </div>
        <li class="item_divider"></li>
        <div class="item">
            <a href="#">Item3</a>
        </div>
    </div>
</div>
</body>
</html>

这里写图片描述

### 实现三层折叠菜单HTML和CSS方法 要创建一个三层折叠菜单,可以使用HTML结构来定义菜单项,并结合CSS实现折叠效果。以下是一个完整的示例代码: #### HTML 结构 ```html <div class="menu"> <ul> <li> <a href="#">第一层菜单</a> <ul> <li> <a href="#">第二层菜单</a> <ul> <li><a href="#">第三层菜单项1</a></li> <li><a href="#">第三层菜单项2</a></li> </ul> </li> <li><a href="#">第二层菜单项2</a></li> </ul> </li> <li><a href="#">第一层菜单项2</a></li> </ul> </div> ``` #### CSS 样式 ```css .menu ul { list-style: none; padding: 0; margin: 0; } .menu li { position: relative; } .menu a { display: block; padding: 10px; text-decoration: none; color: #333; background-color: #f4f4f4; border-bottom: 1px solid #ddd; } .menu ul ul { display: none; position: absolute; top: 0; left: 100%; width: 150px; } .menu ul li:hover > ul { display: block; } .menu ul ul ul { top: 0; left: 100%; } ``` 以上代码通过嵌套的`<ul>`和`<li>`标签实现了三层菜单结构[^1]。CSS中的`display: none`和`:hover`伪类用于控制子菜单的显示与隐藏。当用户将鼠标悬停在父菜单项上时,对应的子菜单会显示出来。 此外,为了增加用户体验,可以添加一些动画效果,例如使用`transition`属性让菜单的展开和收缩更加平滑[^2]。 ```css .menu ul ul { opacity: 0; transition: opacity 0.3s ease-in-out; } .menu ul li:hover > ul { opacity: 1; } ``` 通过上述代码,可以实现一个美观且功能强大的三层折叠菜单。 ###
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值