Blogger Information
Blog 36
fans 4
comment 3
visits 31904
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
7.19 二级菜单 css与原生js的2种实现方式小案例
大灰狼的博客
Original
935 people have browsed it

二级菜单 css方式与原生js的2种实现方式小案例

先看效果图 二级菜单随一级菜单相对定位(功能性案例未美化UI勿怪)

1.png

首先htm结构使用了 div.nav >ul>li +ul>li 的结构。除了最外层容器设置class="nav" 其子元素均不用任何设置

css实现比较简答个人也觉得这个适合css实现
关键就2个 
ul ul{display: none;} 第一子菜单默认隐藏
ul:hover ul{display: block;} 第二鼠标经过ul显示子菜单ul 很简单把?
看代码

实例

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>二级菜单css版</title>
		<style type="text/css">
			*{margin: 0;padding: 0;}
			li{list-style: none;line-height: 30px;}
			.nav{position: relative; display: inline-block;background: #44AAFF; padding: 10px;border: 1px solid #393D49;}
			ul{border-bottom: 1px solid #003366;}
			ul ul{display: none;}
			ul ul li{display: inline-block; padding: 8px;}
			ul:hover ul{display: block;position: absolute;margin-top: -30px;left: 85px;width: 260px;border: 1px solid #393D49;background:#EAEAEA;}
			
		</style>
	</head>
	<div class="nav">
		<ul>
			<li>一级菜单1</li>
			<ul>
				<li>111我是二级菜单1</li>
				<li>111我是二级菜单2</li>
				<li>111我是二级菜单3</li>
				<li>111我是二级菜单4</li>
				<li>111我是二级菜单5</li>
				<li>111我是二级菜单6</li>
				<li>111我是二级菜单7</li>
				<li>111我是二级菜单8</li>
			</ul>
		</ul>
		<ul>
			<li>一级菜单2</li>
		</ul>
		<ul>
			<li>一级菜单3</li>
			<ul>
				<li>333我是二级菜单1</li>
				<li>333我是二级菜单2</li>
				<li>333我是二级菜单3</li>
				<li>333我是二级菜单4</li>
				<li>333我是二级菜单5</li>
				<li>333我是二级菜单6</li>
				<li>333我是二级菜单7</li>
				<li>333我是二级菜单8</li>
			</ul>
		</ul>
		<ul>
			<li>一级菜单4</li>
			<ul>
				<li>444我是二级菜单1</li>
				<li>444我是二级菜单2</li>
				<li>444我是二级菜单3</li>
				<li>444我是二级菜单4</li>
				<li>444我是二级菜单5</li>
				<li>444我是二级菜单6</li>
				<li>444我是二级菜单7</li>
				<li>444我是二级菜单8</li>
			</ul>
		</ul>
		<ul>
			<li>一级菜单5</li>
			<ul>
				<li>555我是二级菜单1</li>
				<li>555我是二级菜单2</li>
				<li>555我是二级菜单3</li>
				<li>555我是二级菜单4</li>
				<li>555我是二级菜单5</li>
				<li>555我是二级菜单6</li>
				<li>555我是二级菜单7</li>
				<li>555我是二级菜单8</li>
			</ul>
		</ul>
	</div>
	<body>
	</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例


原生js版本

仅仅是在前面css版本上做了小修改通过js来实现(实战中肯定css适合此场景 js太多此一举 但此处就事论事 只是讲js实现)

为了保证dom结构够简单总容器外 其他元素未增加任何id class之类(通过父子兄弟关系选择)。
使用了冒泡事件,鼠标移入移除。

实例

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>二级菜单原生JS版</title>
		<style type="text/css">
			*{margin: 0;padding: 0;}
			li{list-style: none;line-height: 30px;}
			.nav{position: relative; display: inline-block;background: #44AAFF; padding: 10px;border: 1px solid #393D49;}
			ul{border-bottom: 1px solid #003366;}
			ul ul{display: none;}
			ul ul li{display: inline-block; padding: 8px;}
			.active{display: block;position: absolute;margin-top: -30px;left: 85px;width: 350px;border: 1px solid #393D49;background:#EAEAEA;}
			
		</style>
	</head>
	<div class="nav">
		<ul>
			<li>一级菜单1</li>
			<ul>
				<li>111我是二级菜单1</li>
				<li>111我是二级菜单2</li>
				<li>111我是二级菜单3</li>
				<li>111我是二级菜单4</li>
				<li>111我是二级菜单5</li>
				<li>111我是二级菜单6</li>
				<li>111我是二级菜单7</li>
				<li>111我是二级菜单8</li>
			</ul>
		</ul>
		<ul>
			<li>一级菜单2</li>
		</ul>
		<ul>
			<li>一级菜单3</li>
			<ul>
				<li>333我是二级菜单1</li>
				<li>333我是二级菜单2</li>
				<li>333我是二级菜单3</li>
				<li>333我是二级菜单4</li>
				<li>333我是二级菜单5</li>
				<li>333我是二级菜单6</li>
				<li>333我是二级菜单7</li>
				<li>333我是二级菜单8</li>
			</ul>
		</ul>
		<ul>
			<li>一级菜单4</li>
			<ul>
				<li>444我是二级菜单1</li>
				<li>444我是二级菜单2</li>
				<li>444我是二级菜单3</li>
				<li>444我是二级菜单4</li>
				<li>444我是二级菜单5</li>
				<li>444我是二级菜单6</li>
				<li>444我是二级菜单7</li>
				<li>444我是二级菜单8</li>
			</ul>
		</ul>
		<ul>
			<li>一级菜单5</li>
			<ul>
				<li>555我是二级菜单1</li>
				<li>555我是二级菜单2</li>
				<li>555我是二级菜单3</li>
				<li>555我是二级菜单4</li>
				<li>555我是二级菜单5</li>
				<li>555我是二级菜单6</li>
				<li>555我是二级菜单7</li>
				<li>555我是二级菜单8</li>
			</ul>
		</ul>
	</div>
<script type="text/javascript">
	//拿到导航菜单总容器div.nav 	
	var navDIV = document.getElementsByClassName('nav')[0];
	//给菜单导航绑定冒泡事件 鼠标移入和移除
	navDIV.addEventListener('mouseover', subShow, false);
	navDIV.addEventListener('mouseout', subShow, false);
	//鼠标移入 二级菜单显示函数
	function subShow(ev) {
		//判断ul是否属于一级菜单中的ul
		if(ev.target.parentElement.parentElement.nodeName === 'DIV') {
			//判断是否存在二级菜单ul 再添加或取消active样式
			if(ev.target.parentElement.children.length === 2) {
				ev.target.nextElementSibling.classList.toggle('active');
			};
		};
	};
</script>
	<body>
	</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例


Correction status:qualified

Teacher's comments:虽然可以实现效果,但不建议将代码与具体的标签名称绑定, 写html, 应该是面向类, 而不对面得标签, 不推荐在js中判断是否存在某个标签名称, 而应该判断是否存在某个指定的类名, 以实现代码复用与通用性
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post