我一直在寻找一种为导航菜单创建良好的悬停下划线效果的方法。我发现最好的方法是在导航项上使用一些 :: after 选择器。在我的主导航中,这很好用,但是在我的子菜单中,某些项目的生成行比其他项目宽。
我发现子菜单的 padding-top 增加1个像素会使问题向上移动1个子菜单。
我在Chrome,Firefox,IE11和Edge中对此进行了测试,并且所有这些问题均出现了。
也欢迎提出其他方法来做这些边界,但是我不想弄乱我的html / css。
这是CodePen: https://codepen.io/Badass-Unicorn/pen/PXQooe?editors=1100
代码:
<header>
<nav>
<div><a href="index.html">Home</a></div>
<div class="submenuparent">
<a href="">Explore</a>
<div class="submenu">
<div><a href="">Exploration</a></div>
<div><a href="">Exploration</a></div>
<div><a href="">Exploration</a></div>
<div><a href="">Exploration</a></div>
<div><a href="">Exploration</a></div>
<div><a href="">Exploration</a></div>
<div><a href="">Exploration</a></div>
</div>
</div>
</nav>
</header>
/* GENERAL CSS */
* {
box-sizing: border-box;
}
body {
min-height: 100vh;
height: 100%;
width: 100%;
overflow: hidden;
font-family: 'roboto', Arial, Helvetica, sans-serif;
background-color: #eee;
display: grid;
grid-template-rows: 80px auto 80px;
grid-row-gap: 20px;
}
html, body, ul, li {
padding: 0;
margin: 0;
}
a {
text-decoration: none;
color: inherit;
}
/* HEADER */
header {
width: 100%;
height: 80px;
background-color: #333;
color: #fff;
font-size: 16px;
display: flex;
justify-content: center;
align-items: center;
}
nav,
nav > div {
display: inline-block;
}
nav div a {
display: block;
padding: 10px 15px;
background-color: #444;
}
nav > div::after {
content: " ";
z-index: 1;
display: block;
position: relative;
top: 4px;
left: 30%;
height: 1px !important;
width: 40%;
background-color: rgba(0,0,0,0);
transition: all 400ms ease-out 100ms;
}
nav > div:hover::after {
width: 80%;
left: 10%;
background-color: rgba(255, 255, 255, 0.4);
transition: all 400ms ease;
}
/* SUBMENU */
.submenu {
z-index: -1;
position: absolute;
top: 54.5px;
display: inline-block;
overflow: hidden;
padding-top: 20px;
max-height: 0px;
transition: max-height 300ms 250ms, z-index 0ms 550ms;
}
.submenuparent:hover .submenu {
z-index: 1;
max-height: 600px;
transition: max-height 300ms;
}
.submenu:hover {
z-index: 1;
max-height: 600px;
}
.submenu > div a::after {
content: " ";
z-index: 1;
display: block;
position: relative;
top: 5px;
left: 0%;
height: 1px !important;
width: 60%;
background-color: #444;
transition: all 400ms ease-out 150ms;
}
.submenu div a:hover::after {
width: 95%;
left: 2%;
background-color: rgba(255,255,255,0.4);
transition: all 500ms;
}
.submenu div a:hover {
color: #fff;
background-color: #555;
transition: all 300ms;
}
编辑:我在手机和iPad上运行了相同的文件,这在手机和iPad上的“悬停”尺寸正确的边框上都没有问题,但是子区域之间的空间存在一些不一致的地方菜单项。