如何修复 CSS“过渡”取消悬停元素?

Posted

技术标签:

【中文标题】如何修复 CSS“过渡”取消悬停元素?【英文标题】:How to fix CSS "transition" un-hover an element? 【发布时间】:2019-07-08 12:11:00 【问题描述】:

我在页面的左角有一个导航栏。导航栏在悬停时已经设置在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);
    

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

【问题讨论】:

使用过渡而不是关键帧动画 - ***.com/questions/20586143/… Motaz,请同时提供相关的html代码。看到 HTML 和 CSS 代码对这里的每个人都有很大帮助。 【参考方案1】:

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

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】:

我认为您使用关键帧使 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);

【讨论】:

以上是关于如何修复 CSS“过渡”取消悬停元素?的主要内容,如果未能解决你的问题,请参考以下文章

CSS 过渡 - 仅在悬停时淡入淡出元素

如何修复框阴影过渡不适用于悬停?

三个具有相对宽度的浮动元素上的 css 过渡

使用悬停过渡时,CSS 是不是可以通过第三种颜色进行过渡?

如何禁用过渡或动画时间的悬停效果,然后在过渡或动画在 css 中完成后启用它?

当父级处于悬停状态时CSS过渡子级