Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:功能先做出来, 剩下的细节完善, 就没有什么标准了, 每个人的审美不一样
需要同时用到 html、css、js三个知识
<! DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>下拉菜单</title>
</head>
<body>
<ul id="nav">
<li><a href="">首页</a></li>
<li><a href="">视频教程</a></li>
<li>
<a href="">资源下载</a>
<ul>
<li><a href="">PHP工具</a></li>
<li><a href="">在线手册</a></li>
<li><a href="">学习课件</a></li>
<li><a href="">网站源码</a></li>
</ul>
</li>
<li><a href="">社区问答</a></li>
<li>
<a href="">技术文章</a>
<ul>
<li><a href="">头条</a></li>
<li><a href="">博客</a></li>
<li><a href="">php教程</a></li>
<li><a href="">PHP框架</a></li>
</ul>
</li>
<li><a href=""></a></li>
<li><a href=""></a></li>
<li><a href=""></a></li>
<li><a href=""></a></li>
</ul>
</body>
</html>
运行如图:
<style>
/* 元素样式初始化 */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
/* 设置通栏 的高 宽和背景颜色 */
.header {
height: 60px;
width: 1850px;
background-color: #000;
line-height: 60px;
}
/* 设置logo的宽和高 */
div .logo {
height: 60px;
width: 170px;
font-size: 0;
float: left;
}
/* 让图片高度和父盒子一致 */
div .logo img {
height: 100%;
}
/* 去除下划线和设置颜色 设置字体大小*/
a {
text-decoration: none;
color: #aaa;
font-size: 14px;
}
/* 给nav设置高度和行高以及外边距 */
#nav {
height: 60px;
line-height: 60px;
margin-left: 10px;
/* 左浮动 */
float: left;
}
/* 去除li的样式 和内外边距 以及左浮动 */
li {
list-style: none;
margin: 0 9px;
padding: 0 20px;
float: left;
}
/* 将nav里面的li里面的a转化为块元素 */
#nav > li > a {
display: block;
height: 60px;
}
/* 鼠标悬停更改颜色 */
#nav > li > a:hover {
color: white;
/* 鼠标悬停增加下边框颜色 */
border-bottom: 4px solid #5fb878;
}
/* 设置定位属性 */
#nav > li {
position: relative;
font-size: 14px;
}
/* 给nav里面的ul的li里面的a设置内边距 */
#nav > ul > li > a {
padding: 20px;
}
#nav > ul > li > a:hover {
border: 2px solid #5fb878;
}
/* 给ul定位、设置外边框并去除上外边框 */
#nav > li > ul {
position: absolute;
top: 60px;
width: 270px;
border: 1px solid #aaa;
border-top: none;
}
/* 转化为行内块元素、设置高度和颜色 */
#nav > li > ul > li a {
display: inline-block;
height: 60px;
color: #444;
}
/* 初始化时不要显示子菜单 */
#nav > li > ul {
display: none;
}
</style>
运行如图:
最后加上js 实现:
<! DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>php中文网</title>
<style>
/* 元素样式初始化 */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
/* 设置通栏 的高 宽和背景颜色 */
.header {
height: 60px;
width: 1850px;
background-color: #000;
line-height: 60px;
}
/* 设置logo的宽和高 */
div .logo {
height: 60px;
width: 170px;
font-size: 0;
float: left;
}
/* 让图片高度和父盒子一致 */
div .logo img {
height: 100%;
}
/* 去除下划线和设置颜色 设置字体大小*/
a {
text-decoration: none;
color: #aaa;
font-size: 14px;
}
/* 给nav设置高度和行高以及外边距 */
#nav {
/* background-color: pink; */
height: 60px;
line-height: 60px;
margin-left: 10px;
/* 左浮动 */
float: left;
}
/* 去除li的样式 和内外边距 以及左浮动 */
li {
list-style: none;
margin: 0 9px;
padding: 0 20px;
float: left;
}
/* 将nav里面的li里面的a转化为块元素 */
#nav > li > a {
display: block;
height: 60px;
}
/* 鼠标悬停更改颜色 */
#nav > li > a:hover {
color: white;
/* 鼠标悬停增加下边框颜色 */
border-bottom: 4px solid #5fb878;
}
/* 设置定位属性 */
#nav > li {
position: relative;
font-size: 14px;
}
/* 给nav里面的ul的li里面的a设置内边距 */
#nav > ul > li > a {
padding: 20px;
}
#nav > ul > li > a:hover {
border: 2px solid #5fb878;
}
/* 给ul定位 设置外边框并去除上外边框 */
#nav > li > ul {
position: absolute;
top: 60px;
width: 270px;
border: 1px solid #aaa;
border-top: none;
}
/* 转化为行内块元素 设置高度和颜色 */
#nav > li > ul > li a {
display: inline-block;
height: 60px;
color: #444;
}
/* 初始化时不要显示子菜单 */
#nav > li > ul {
display: none;
}
</style>
</head>
<body>
<div class="header">
<div class="logo"><img src="images/logo.png" alt="" />php中文网</div>
<ul id="nav">
<li><a href="">首页</a></li>
<li><a href="">视频教程</a></li>
<li><a href="">入门教程</a></li>
<li><a href="">社区问答</a></li>
<li>
<a href="">资源下载</a>
<ul>
<li><a href="">PHP工具</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="">mysql词典</a></li>
<li><a href="">Linux词典</a></li>
<li><a href="">Redis词典</a></li>
<li><a href="">html词典</a></li>
</ul>
</li>
<li><a href="">工具下载</a></li>
<li><a href="">php培训</a></li>
</ul>
</div>
</body>
<script>
// 获取所有的主导航
const navs = document.querySelectorAll("#nav > li");
navs.forEach(function (nav) {
// 鼠标移入是:显示子菜单
nav.addEventListener("mouseover", showSubMenu);
// 鼠标移出时:不显示子菜单
nav.addEventListener("mouseout", closeSubMenu);
});
// 显示子菜单
function showSubMenu(ev) {
console.log(ev.target);
// 确定这个导航是否有子菜单
if (ev.target.nextElementSibling !== null) {
ev.target.nextElementSibling.style.display = "block";
}
}
// 关闭子菜单
function closeSubMenu(ev) {
if (ev.target.nodeName === "A" && ev.target.nextElementSibling !== null) {
ev.target.nextElementSibling.style.display = "none";
}
}
</script>
</html>
运行如下:
总结思考:下拉框内容的排列 、各模块之间的间隔、鼠标悬停后的下边框长度等细节方面还需要继续加强学习!