在悬停菜单列表项目上取消对齐

时间:2016-10-10 04:56:34

标签: html css html5 css3 onhover

我使用简单的HTML和CSS来创建使用无序列表的水平菜单。

这是HTML& CSS代码:

.nav_bar{
    margin-left: 700px;
    margin-top: 40px;
    position: absolute;
}

.nav_bar ul{
    list-style-type: none;
}

.nav_bar ul li{
    display: inline-block;
    text-align: center;
    float: left;
}

.nav_bar ul li a{
    text-decoration: none;
    padding: 12px;
    margin: 8px;
    font-size: 20px;
    color: #fff;
}

.nav_bar ul li a::after{
    content: '';
    display: inline-block;
    width: 0px;
    height: 4px;
    background: #ff6600;
    transition: width .4s;
}

.nav_bar ul li a:hover::after{
    width: 100%;

}
<div class="nav_bar">
  <ul>
    <li><a href="#">Services</a></li>
    <li><a href="#">Solution</a></li>
    <li><a href="#">Support</a></li>
    <li><a href="#">Partners</a></li>
    <li><a href="#">Contacts</a></li>
  </ul>
</div>

我不知道问题出在哪里以及为什么会出现问题? 请有充分理由帮助我..

3 个答案:

答案 0 :(得分:2)

我修复了你的代码,我得到了类似的东西。

.nav_bar ul li a{
    text-decoration: none;
    padding: 12px;
    margin: 8px;
    font-size: 20px;
    color: orange;
    position: relative;
}

.nav_bar ul li a::after{
       content: '';
    position: absolute;
    bottom: 0;
    left: 0;
    right: 0;
    margin: auto;
    height: 4px;
    background: #ff6600;
    transition: width .4s;
    width: 0;
}

问题是您的after元素显示为inline-block,因此它会与您的achor标记一起呈现。并且由于您的achor标记没有足够的宽度来显示::after内嵌,因此您的::after元素会包含在您的锚标记之后。 看到这个:https://jsfiddle.net/pm68Lzmv/

答案 1 :(得分:1)

试试这个:

position:absolute;添加到:after选择器以添加标记

margin-left移除.nav_bar并添加right:0

.nav_bar{        
    margin-top: 40px;
    position: absolute;
    right:0;
}

.nav_bar ul{
    list-style-type: none;
}

.nav_bar ul li{
    display: inline-block;
    text-align: center;
    float: left;
}

.nav_bar ul li a{
    text-decoration: none;
    padding: 12px;
    margin: 0;
    font-size: 20px;
    color: #aaa;
    display:block;
    position:relative;
}

.nav_bar ul li a::after{
    content: '';
    display: inline-block;
    width: 0px;
    height: 4px;
    background: #ff6600;
    transition: width .4s;
    position:absolute;
    left:50%;
    bottom:0;
    transform: translateX(-50%);    
}

.nav_bar ul li a:hover::after{
    width: 100%;

}
<div class="nav_bar">
  <ul>
    <li><a href="#">Services</a></li>
    <li><a href="#">Solution</a></li>
    <li><a href="#">Support</a></li>
    <li><a href="#">Partners</a></li>
    <li><a href="#">Contacts</a></li>
  </ul>
</div>

答案 2 :(得分:0)

删除.nav_bar {margin-left:0px}

添加.nav_bar ul li位置:relative;

添加.nav_bar ul li a:在position:absolute;

之后

.nav_bar ul{
    list-style-type: none;
}

.nav_bar ul li{
    display: inline-block;
    text-align: center;
}

.nav_bar ul li a{
    text-decoration: none;
    padding: 12px;
    margin: 0;
    font-size: 20px;
    color: #aaa;
    display:block;
    position:relative;
}

.nav_bar ul li a::after{
    content: '';
    display: inline-block;
    width: 0px;
    height: 4px;
    background: #ff6600;
    transition: width .4s;
    position:absolute;
    left:50%;
    bottom:0;
    transform: translateX(-50%);    
}

.nav_bar ul li a:hover::after{
    width: 100%;

}
<div class="nav_bar">
            <ul>
                <li><a href="#">Services</a></li>
                <li><a href="#">Solution</a></li>
                <li><a href="#">Support</a></li>
                <li><a href="#">Partners</a></li>
                <li><a href="#">Contacts</a></li>
            </ul>
        </div>