13

我正在尝试在鼠标移出事件开始 CSS 转换之前应用延迟。我的 CSS 代码如下,请让我知道如何在鼠标移出的 CSS 过渡开始之前应用时间延迟。

我想在用户将鼠标指针移出菜单后使菜单保持稳定一段时间(例如 3 秒)。

.timnav li .dropdown {
    width: auto;
    min-width: 0px;
    max-width: 230px;
    height: 0;
    position: absolute;
    overflow: hidden;
    z-index: 999;
    background:rgba(255, 255, 255, 0.8);
    }

.timnav li:hover .dropdown {
    min-height: 60px;
    max-height: 500px;
    height: auto;
    width: 100%;
    padding: 0;
            -webkit-transition: delay .5s ease-in-out;
        -moz-transition: delay .5s ease-in-out;
        -o-transition: delay .5s ease-in-out;
}

.timnav li .dropdown ul {
    margin: 0;
    margin-top:7px;


}

.timnav li .dropdown ul > li {
    display: block;
    width: 100%;
    float: left;
    text-align: left;
    height: auto;
    border-radius: none;
    padding-bottom:2px;
}


    .timnav li .dropdown  .dropdown2{
    display: none;
    width: 100%;
    float: left;
    text-align: left;
    height: auto;
    border-radius: none; 
}

    .timnav li .dropdown ul > li:hover .dropdown2{
    display: block;
    width: 100%;
    float: left;
    text-align: left;
    height: auto;
    border-radius: none;

}

    .timnav li .dropdown .dropdown2:hover {
    display: block;
    width: 100%;
    float: left;
    text-align: left;
    height: auto;
    border-radius: none;


}


    .timnav li .dropdown .dropdown2 li a {
    display: block;
    padding-left:7px !important;
    height:6 !important;
    padding-top:8px;
    background: url(../images/nav-bg.jpg) repeat; color:#fff;

}


.timnav li .dropdown ul > li a {
    display: block;
    line-height: 26px;
    height: 22px;
    padding: 10px;
    background: url(../images/nav-crrent.jpg) repeat; color:#FFFFFF;

}

.timnav ul .dropdown ul li:first-child a {
    border-radius: 0;
}

.timnav li .dropdown li a:hover {
    background: url(../images/nav-bg.jpg) repeat; color:#000;
}
4

4 回答 4

24

你可以给一个transition添加一个延迟,语法如下:

transition: all 0.5s ease-in-out 3s;

所以

transition: <property> <duration> <timing-function> <delay>;

所有前缀版本的语法也相同。

我为此创建了一个演示,因为您需要做一些棘手的事情才能使该项目没有延迟地出现,但在它消失之前有延迟。

http://jsfiddle.net/pgqM2/

诀窍是重新定义过渡以在没有悬停时添加 3s 延迟,但在有悬停时具有 0s 延迟:

li ul {
    opacity: 0;
    transition: all 0.5s ease 3s;
}

li:hover ul {
    opacity: 1;
    transition: all 0.5s ease 0s;
}
于 2013-04-24T22:26:40.327 回答
6

CSS中有一个transition-delay属性。只需将其添加到您的代码中,您将获得所需的效果。

transition-delay:3s;

出于简写过渡属性的目的,这里有一张总结的图

过渡:<属性> ||  <持续时间> ||  <定时功能> ||  <延迟> [, ...];

所以在你的情况下,它看起来像这样

div:hover {
  -webkit-transition: .5s ease-in-out 3s;
  -moz-transition: .5s ease-in-out 3s;
  -o-transition: .5s ease-in-out 3s;
  transition: .5s ease-in-out 3s;
  color: red;
  cursor: pointer;
}
<div>Hover me. There is a delay!</div>

这是一个演示

于 2013-04-24T22:24:45.043 回答
3

使用 display none 时不能使用 css 过渡,只有 display none 的解决方案是 js。

于 2014-10-23T14:31:23.957 回答
0

您可以使用 css3 属性transition-delay来延迟执行 css。单击“自己尝试”以查看示例。

于 2013-04-24T22:26:40.980 回答