Css transitions 设置“显示:无”时的CSS转换

Css transitions 设置“显示:无”时的CSS转换,css-transitions,Css Transitions,如何使用CSS转换显示为none的元素的属性? 我当前的解决方案是使用JavaScript将display设置为block,等待10毫秒重新绘制,然后应用更改我想要设置动画的属性的类 注意:我使用jQuery是为了代码简洁 CSS-以不透明度动画为例。不关心$.show()。 JavaScript 我觉得应该有一个更好的方法,一个CSS唯一的方法。有吗?我刚找到解决办法。您只需使用动画,并在应用“显示:块”后稍微启动它。像这样: @keyframes submenu_animation {

如何使用CSS转换显示为none的元素的属性? 我当前的解决方案是使用JavaScript将display设置为block,等待10毫秒重新绘制,然后应用更改我想要设置动画的属性的类

注意:我使用jQuery是为了代码简洁

CSS-以不透明度动画为例。不关心$.show()。
JavaScript
我觉得应该有一个更好的方法,一个CSS唯一的方法。有吗?

我刚找到解决办法。您只需使用动画,并在应用“显示:块”后稍微启动它。像这样:

@keyframes submenu_animation {
    from {
        opacity: 0;
    }
    1% {
        opacity: 0;
    }
    99% {
        opacity: 1;
    }
    to {
        opacity: 1;
    }
}

li ul {
    opacity: 0;
    display: none;
    animation-name: submenu_animation;
    animation-duration: 300ms;
    animation-direction: reverse;

li ul.open {
    display: block;
}

li:hover ul {
    animation-direction: normal;
    opacity: 1;
}

Javascript也是一样的,只要您将鼠标悬停在所需的元素上,它就会应用类“open”。当您将鼠标悬停在外时,它将在稍后动画完成时删除“open”类。

而不是显示:无,您能将其设置为高度:0,然后添加高度:在它转换到的对象上吗?jQuery伙计们,不要再看
css transition
标记了!哈哈。另外,
不透明度
?这只是一个例子。德瑞克:是的,但这是一个有很多解决办法的办法。设置“显示无”将使图元不被绘制。另外,高度:0仍然意味着我必须删除边框、填充和边距,然后重新添加它们。我明白了。本页可能有用,也可能无用:
function show()
{
    var $element=$('.element');
    $element.css({display:'block'});
    
    //Add class a few moments later than chaning display to block, otherwise animations CSS Transitions won't fire
    setTimeout(function(){
        $element.addClass('shown');
    },10);
}
function hide()
{
    var $element=$('.element');
    $element.removeClass('shown');
    
    //Remove element from display after transition ends
    $element.on('webkitTransitionEnd otransitionend oTransitionEnd MSTransitionEnd transitionend',function()
    {
        $element.css({display:'none'});
    });
}
@keyframes submenu_animation {
    from {
        opacity: 0;
    }
    1% {
        opacity: 0;
    }
    99% {
        opacity: 1;
    }
    to {
        opacity: 1;
    }
}

li ul {
    opacity: 0;
    display: none;
    animation-name: submenu_animation;
    animation-duration: 300ms;
    animation-direction: reverse;

li ul.open {
    display: block;
}

li:hover ul {
    animation-direction: normal;
    opacity: 1;
}