:: after元素用作动画边框时呈现不一致

时间:2019-01-03 09:15:17

标签: html5 css3 animation rendering pseudo-element

我一直在寻找一种为导航菜单创建良好的悬停下划线效果的方法。我发现最好的方法是在导航项上使用一些 :: 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上的“悬停”尺寸正确的边框上都没有问题,但是子区域之间的空间存在一些不一致的地方菜单项。

0 个答案:

没有答案