【问题标题】:How can I override transition delay?如何覆盖转换延迟?
【发布时间】:2016-07-24 18:23:30
【问题描述】:

工作解决方案:http://jsfiddle.net/tddfevhv/1/

我正在构建一个下拉式菜单,并且一些过渡被延迟,以便为我的列表项提供漂亮的动画效果。

但是,这种延迟会导致我在悬停时的背景颜色变化比预期的要慢。

jsFiddle 的链接在这里:https://jsfiddle.net/neuafy6j/1/

这里是代码:

.profile-list li {
        -webkit-transform-origin: 50% 0%;
        -o-transform-origin: 50% 0%;
        transform-origin: 50% 0%;
        -webkit-transform: perspective(60px) rotateX(-90deg);
        -o-transform: perspective(60px) rotateX(-90deg);
        transform: perspective(60px) rotateX(-90deg);
        -moz-box-shadow: 0px 2px 10px rgba(0,0,0,0.05);
    }

    .profile-container:hover .profile-list .fourth {
        transition-delay: 0.6s;
        -o-transition-delay: 0.6s;
        transition-delay: 0.6s;
    } 

    .profile-list li a{
        display: block;
    }


    .profile-list .first {
        -webkit-transition: 0.2s linear 0.8s;
        -o-transition: 0.2s linear 0.8s;
        transition: 0.2s linear 0.8s;
    }

    .profile-list .second {
        -webkit-transition: 0.2s linear 0.6s;
        -o-transition: 0.2s linear 0.6s;
        transition: 0.2s linear 0.6s;
    }

    .profile-list .third {
        -webkit-transition: 0.2s linear 0.4s;
        -o-transition: 0.2s linear 0.4s;
        transition: 0.2s linear 0.4s;
    }

    .profile-list .fourth {
        -webkit-transition: 0.2s linear 0.2s;
        -o-transition: 0.2s linear 0.2s;
        transition: 0.2s linear 0.2s;
    }

    .profile-container:hover .profile-list li {
        -webkit-transform: perspective(350px) rotateX(0deg);
        -o-transform: perspective(350px) rotateX(0deg);
        transform: perspective(350px) rotateX(0deg);
        -webkit-transition: 0.2s linear 0s;
        -o-transition: 0.2s linear 0s;
        transition: 0.2s linear 0s;
    }

    .profile-container:hover .profile-list .second {
        -webkit-transition-delay: 0.2s;
        -o-transition-delay: 0.2s;
        transition-delay: 0.2s;
    }

    .profile-container:hover .profile-list .third {
        -webkit-transition-delay: 0.4s;
        -o-transition-delay: 0.4s;
        transition-delay: 0.4s;
    }




        .profile-list li:hover{
        background-color: #e0e0e0;

    }

我尝试设置转换延迟:.2s !important;但这没有帮助。

*额外问题:目前在移动设备上点击会打开带有适当动画的菜单。但是,我发现关闭它的唯一方法是单击重新加载页面的链接。如果我使用 jquery 关闭默认行为以停止页面重新加载,它不会关闭菜单。如何在移动设备上关闭菜单?

【问题讨论】:

    标签: css menu transition dropdown


    【解决方案1】:

    编辑 - 改进答案

    这是改进的 JSFiddle https://jsfiddle.net/neuafy6j/4/

    这次的诀窍是让背景更改不是 li 而是锚标记。我从上一个 li 标签中取出填充,将它添加到锚点,它就像一个魅力:

    .profile-list ul li a{
        display: block;
        background-color: #fff;
        transition: background-color 0.5s ease;
        padding: 15px 10px;
        }
     .profile-list ul li a:hover {
        background-color: #E0E0E0;
      }
    

    上一个答案:

    https://jsfiddle.net/neuafy6j/2/ 这个 JSFiddle 可能会帮助你。

      .profile-list li {
            cursor: pointer;
            background: #ffffff;
            border-top: 1px solid #e5e6e6;
            padding: 15px 10px;
            transition: background-color 0.5s ease!important;
        }
      .profile-list li:hover{
            background-color: #e0e0e0; 
        }
    

    这是重要的部分。我添加了一个带有 !important 标记的过渡,该标记只专注于背景颜色。 !important 可能会被忽略,但在最新的 Mozzilla 上我发现它是必要的。

    希望对您有所帮助!

    【讨论】:

    • 关于额外的问题:将 :focus 伪添加到所有 :hover 事件是在较小设备上实现悬停单击更改的最常见方法。这能解决你的问题吗?
    • 这行得通,但它超越了其他转换/转换中的延迟,并且您失去了延迟的向下翻转效果。我想如果我想让背景颜色分开,我可能不得不使用 jquery 或其他东西?
    • 哦,我现在才明白你的问题。让我试着想出点什么来,我感觉不用jquery也能解决。
    • @AlexGray 我用一个新的、改进的 JSFiddle 来编辑我的答案,检查一下。希望对你有帮助
    • 我实际上已经对我自己的 a 标签做了这个,以使整个框成为一个可点击的链接,所以我所要做的就是在 :hover 之前添加'a'。谢谢你帮助我。你的答案获胜:P 现在我只是想找到我的移动解决方案。
    猜你喜欢
    • 2014-04-08
    • 2020-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-22
    相关资源
    最近更新 更多