好的!下面给你一个三级页面结构的多级菜单导航示例代码,用HTML + CSS + JavaScript实现,模拟一级、二级、三级页面的导航菜单效果,清晰展现层级关系。
三级页面多级导航菜单示例代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>三级菜单导航示例</title>
<style>
/* 基本样式 */
body {
font-family: Arial, sans-serif;
}
nav {
width: 300px;
}
ul.menu, ul.submenu {
list-style: none;
padding-left: 0;
margin: 0;
}
ul.menu > li {
background: #3498db;
margin-bottom: 2px;
position: relative;
}
ul.menu > li > a {
color: white;
display: block;
padding: 10px 15px;
text-decoration: none;
cursor: pointer;
}
ul.menu > li > a:hover {
background: #2980b9;
}
/* 二级菜单 */
ul.submenu {
display: none; /* 默认隐藏 */
background: #ecf0f1;
}
ul.submenu > li > a {
color: #333;
padding: 8px 25px;
display: block;
text-decoration: none;
cursor: pointer;
border-left: 3px solid transparent;
}
ul.submenu > li > a:hover {
background: #bdc3c7;
border-left: 3px solid #3498db;
}
/* 三级菜单 */
ul.submenu ul.submenu {
padding-left: 15px;
background: #f9f9f9;
}
ul.submenu ul.submenu > li > a {
padding-left: 40px;
}
</style>
</head>
<body>
<nav>
<ul class="menu">
<li>
<a href="#">国内新闻(一级)</a>
<ul class="submenu">
<li>
<a href="#">北京新闻(二级)</a>
<ul class="submenu">
<li><a href="#">北京疫情最新通报(三级)</a></li>
<li><a href="#">北京交通管制通知(三级)</a></li>
</ul>
</li>
<li>
<a href="#">上海新闻(二级)</a>
<ul class="submenu">
<li><a href="#">上海经济发展报告(三级)</a></li>
</ul>
</li>
</ul>
</li>
<li>
<a href="#">国际新闻(一级)</a>
<ul class="submenu">
<li>
<a href="#">美洲新闻(二级)</a>
<ul class="submenu">
<li><a href="#">美国大选报道(三级)</a></li>
</ul>
</li>
<li>
<a href="#">欧洲新闻(二级)</a>
<ul class="submenu">
<li><a href="#">欧盟峰会要点(三级)</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</nav>
<script>
// 简单JS实现点击展开/收起子菜单
document.querySelectorAll('nav ul.menu > li > a').forEach(item => {
item.addEventListener('click', e => {
e.preventDefault();
// 展开一级菜单对应的二级菜单
const submenu = item.nextElementSibling;
if (submenu) {
submenu.style.display = submenu.style.display === 'block' ? 'none' : 'block';
}
});
});
document.querySelectorAll('nav ul.submenu > li > a').forEach(item => {
item.addEventListener('click', e => {
e.preventDefault();
// 展开二级菜单对应的三级菜单
const submenu = item.nextElementSibling;
if (submenu) {
submenu.style.display = submenu.style.display === 'block' ? 'none' : 'block';
}
});
});
</script>
</body>
</html>
说明:
- 一级菜单(国内新闻、国际新闻)是主导航,点击展开对应二级菜单。
- 二级菜单(北京新闻、上海新闻、美洲新闻等)点击展开三级菜单。
- 三级菜单是最终内容页链接。
- 纯前端实现,点击切换显示,简单易懂。
- 可扩展为点击跳转实际页面的超链接。
明白!我给你写一个基于 Vue 3 的三级菜单导航组件示例,代码简洁且可复用,适合现代前端项目。
Vue 3 三级菜单导航组件示例
<template>
<nav>
<ul class="menu">
<li v-for="(item, index) in menuData" :key="index">
<a href="#" @click.prevent="toggle(index)">
{{ item.name }}
<span v-if="item.children?.length">▾</span>
</a>
<ul v-if="item.children?.length" v-show="activeIndex === index" class="submenu">
<li v-for="(sub, subIndex) in item.children" :key="subIndex">
<a href="#" @click.prevent="toggleSub(index, subIndex)">
{{ sub.name }}
<span v-if="sub.children?.length">▸</span>
</a>
<ul v-if="sub.children?.length" v-show="activeSubIndex[index] === subIndex" class="submenu level3">
<li v-for="(third, thirdIndex) in sub.children" :key="thirdIndex">
<a :href="third.url">{{ third.name }}</a>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</nav>
</template>
<script setup>
import { ref } from 'vue';
const menuData = ref([
{
name: '国内新闻',
children: [
{
name: '北京新闻',
children: [
{ name: '北京疫情最新通报', url: '/beijing/epidemic' },
{ name: '北京交通管制通知', url: '/beijing/traffic' },
],
},
{
name: '上海新闻',
children: [
{ name: '上海经济发展报告', url: '/shanghai/economy' },
],
},
],
},
{
name: '国际新闻',
children: [
{
name: '美洲新闻',
children: [
{ name: '美国大选报道', url: '/america/election' },
],
},
{
name: '欧洲新闻',
children: [
{ name: '欧盟峰会要点', url: '/europe/summit' },
],
},
],
},
]);
const activeIndex = ref(null);
const activeSubIndex = ref({});
function toggle(index) {
activeIndex.value = activeIndex.value === index ? null : index;
// 关闭所有二级菜单展开状态
activeSubIndex.value = {};
}
function toggleSub(parentIndex, subIndex) {
if (!activeSubIndex.value) activeSubIndex.value = {};
activeSubIndex.value[parentIndex] = activeSubIndex.value[parentIndex] === subIndex ? null : subIndex;
}
</script>
<style scoped>
nav {
width: 300px;
font-family: Arial, sans-serif;
}
ul.menu,
ul.submenu {
list-style: none;
padding-left: 0;
margin: 0;
}
ul.menu > li > a,
ul.submenu > li > a {
display: block;
padding: 10px 15px;
background: #3498db;
color: white;
text-decoration: none;
cursor: pointer;
user-select: none;
}
ul.menu > li > a:hover,
ul.submenu > li > a:hover {
background: #2980b9;
}
ul.submenu {
background: #ecf0f1;
}
ul.submenu.level3 {
background: #f9f9f9;
}
ul.submenu > li > a {
color: #333;
padding-left: 25px;
}
ul.submenu.level3 > li > a {
padding-left: 40px;
color: #555;
}
span {
float: right;
}
</style>
使用说明
- 一级菜单点击展开/收起对应的二级菜单。
- 二级菜单点击展开/收起对应的三级菜单。
- 三级菜单为具体内容链接,可替换
url
为实际路径。 - 组件纯净且响应式,易于集成。
发表回复