三级菜单制作,菜单焦点总是消失,等发现好的再写一篇
发现 父元素设置了display:flex时,子元素中的display:none或者display:block就会失效。这是因为display:flex的优先级高于display:none和display:block,使他们的作用失效了。解决办法是在子元素的外层,原来父元素的内层套一个盒子,比如div,display:none就能作用了。
完成效果
准备html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<header>
<div class="menu-bar">
<ul>
<li class="active"><a href="#">Home</a></li>
<li>
<a href="#">Language</a>
<div class="sub-menu-1">
<ul>
<li class="hover-2">
<a href="#">前端  ></a>
<div class="sub-menu-2">
<ul>
<li><a href="#">JS</a></li>
<li><a href="#">html</a></li>
<li><a href="#">css</a></li>
</ul>
</div>
</li>
<li class="hover-2">
<a href="#">后端</a>
<div class="sub-menu-2">
<ul>
<li><a href="#">Python</a></li>
<li><a href="#">Node</a></li>
<li><a href="#">Go</a></li>
<li><a href="#">C#</a></li>
<li><a href="#">Sql</a></li>
</ul>
</div>
</li>
</ul>
</div>
</li>
<li><a href="#">About</a></li>
<li><a href="#">More</a></li>
<li><a href="#">Contact</a></li>
</ul>
</div>
</header>
</body>
</html>
准备css
*{
margin: 0;
padding: 0;
box-sizing: border-box;
}
.menu-bar{
background: #000;
text-align: center;
}
.menu-bar ul{
display: inline-flex;
list-style: none;
color: #fff;
}
.menu-bar ul li{
width: 120px;
margin: 15px;
padding: 15px;
}
.menu-bar ul li a{
text-decoration: none;
color: #fff;
}
.active,.menu-bar ul li:hover{
background: green;
border-radius: 3px;
}
.sub-menu-1{
display: none;
}
.menu-bar ul li:hover .sub-menu-1{
display: block;
position: absolute;
background: green;
margin-top: 15px;
margin-left: -15px;
}
.menu-bar ul li:hover .sub-menu-1 ul{
display: block;
margin: 10px;
}
.menu-bar ul li:hover .sub-menu-1 ul li{
width: 75px;
padding: 10px;
border-bottom: 1px dotted #ff2;
background: transparent;
border-radius: 0;
text-align: left;
}
.menu-bar ul li:hover .sub-menu-1 ul li:last-child{
border-bottom:none;
}
.menu-bar ul li:hover .sub-menu-1 ul li a:hover{
color: rgba(255,255,100, .3);
}
.sub-menu-2{
display: none;
}
.hover-2:hover .sub-menu-2{
position: absolute;
display: block;
margin-top: -40px;
margin-left: 70px;
background: greenyellow;
}