Я искал способ создать приятный эффект подчеркивания при наведении для меню навигации. Лучший способ, который я нашел, это использовать некоторые :: after селекторы на элементах навигации. С моей основной навигацией это прекрасно работает, но в моем подменю сгенерированная строка для некоторых элементов шире, чем для других.
Я обнаружил, что при увеличении отступа подменю на 1 пиксель проблема смещается на 1 подменю.
Я проверил это в Chrome, Firefox, IE11 и Edge, и проблема возникает во всех из них.
Предложение других способов сделать эти границы также приветствуется, но я не хочу загромождать мой html / css.
Вот кодовая ручка:
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 не было проблем с границами, где правильный размер при наведении, но имелось некоторое несоответствие между пробелами меню-пунктов.