悬停菜单列表项取消对齐

On Hover Menu List Items Disalign

我正在使用简单的 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>

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

试试这个:

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

.nav_bar 中删除 margin-left 并添加 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>

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

添加 .nav_bar ul li a position:relative;

添加 .nav_bar ul li a:after 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>

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

.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/