如何解决CSS“过渡”悬停元素?

时间:2019-02-14 12:52:21

标签: css css3

我在页面的左上角有一个导航栏。导航栏已悬停在margin-left: -120px;上,它会转换为105px,所以我希望在将元素悬停时具有平滑的后退。

我尝试在ul,ul li,ul li a上使用transition,将它们放在不同的类中。没有什么真正与我合作...

/* ----- NAVBAR ----- */

ul {
    position: fixed;
    z-index: 99;
}

.li1{
    animation: move1 2s;
}
.li2{
    animation: move1 3s;
}
.li3{
    animation: move1 4s;
}
.li4{
    animation: move1 5s;
}
.li5{
    animation: move1 6s;
}

ul li {
    text-align: center;
    list-style: none;
    padding-top: 10px;
    margin-left: -120px;
}

ul li a {
    text-align: center;
    display: block;
    text-decoration: none;
    height: 30px;
    line-height: 30px;
    font-size: 12px;
    font-weight: 400;
    letter-spacing: 5px;
    background: #1a2738;
    width: 140px;
    color: #fff;
    text-transform: capitalize;
    border-radius: 15px;
}

ul li a:hover {
    background: #1a2738;
    color: #fff;
    animation: move2 1s forwards;
}

@keyframes move1 {
    0% {
        opacity: 0;
        transform: translate(-50px);
    }
    40% {
        opacity: 100;
        transform: translate(105px);
    }
}

@keyframes move2 {
    100% {
        transform: translate(105px);
    }
}

我希望知道实际的问题是什么,请帮忙,谢谢!

3 个答案:

答案 0 :(得分:1)

我认为您已经使使用关键帧的CSS复杂化了,您可以使用过渡而不是查看以下代码:

/* ----- NAVBAR ----- */

ul {
    position: fixed;
    z-index: 99;
}

ul li {
    text-align: center;
    list-style: none;
    padding-top: 10px;
    margin-left: -120px;
}

ul li a {
    text-align: center;
    display: block;
    text-decoration: none;
    height: 30px;
    line-height: 30px;
    font-size: 12px;
    font-weight: 400;
    letter-spacing: 5px;
    background: #1a2738;
    width: 140px;
    color: #fff;
    text-transform: capitalize;
    border-radius: 15px;
    transition: transform 1s ease-in-out;
    transform: translateX(-50px);
}

ul li a:hover {
    background: #1a2738;
    color: #fff;
    transform: translateX(105px);
}

答案 1 :(得分:0)

如果您要寻找一个简单的滑出和滑回的方法,一种解决方法是在transform: transitionX(-120px)元素上简单使用ul,然后将值从-120px重新调整为ul悬停时为0px,就像这样:

ul {
  list-style-type: none;
  padding: 1em;
  background-color: #ececec;
  color: #333;
  display: inline-block;
  transition: transform 600ms;
  transform: translateX(-120px);
}

ul:hover {
  transform: translateX(0px); //you can adjust this measurement unit to whatever value you wish, such as 105px
}

ul li {
    text-align: center;
    list-style: none;
    padding-top: 10px;
}

ul li a {
    text-align: center;
    display: block;
    text-decoration: none;
    height: 30px;
    line-height: 30px;
    font-size: 12px;
    font-weight: 400;
    letter-spacing: 5px;
    background: #1a2738;
    width: 140px;
    color: #fff;
    text-transform: capitalize;
    border-radius: 15px;
}
<ul>
  <li><a href="">Home</a></li>
  <li><a href="">About</a></li>
  <li><a href="">contact</a></li>
</ul>

答案 2 :(得分:-2)

首先,您的位置是固定的,我认为这已经是一个问题,然后负的左边距仍然确实会正确使用transformX和负值,最后您需要在悬停状态下设置一个关键帧,浏览器将通过播放您的光标来处理相反的情况从完成到开始的关键帧#欢呼声