Несовместимая визуализация элементов :: after, используемых в качестве анимированных границ - PullRequest
0 голосов
/ 03 января 2019

Я искал способ создать приятный эффект подчеркивания при наведении для меню навигации. Лучший способ, который я нашел, это использовать некоторые :: 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 не было проблем с границами, где правильный размер при наведении, но имелось некоторое несоответствие между пробелами меню-пунктов.

...