【问题标题】:Is that a way to skip css3 animation at shown? [duplicate]这是一种在显示时跳过css3动画的方法吗? [复制]
【发布时间】:2016-05-12 00:27:08
【问题描述】:

动画总是在元素从 display:none 到显示状态时播放。 如果我想设置自定义复选框的样式。我只需要它在用户选中或取消选中它时播放动画。

input[type=checkbox] { opacity: 0; } // native checkbox hidden
input[type=checkbox] ~ .mycheck {
    animation: uncheck 300ms ease-out forwards; // play uncheck animate
}
input[type=checkbox]:checked ~ .mycheck {
    animation: check 300ms ease-out forwards; // play checked animate
}

问题是checkuncheck 不仅在用户点击它时播放。它也在页面加载时播放。或者当父元素切换隐藏到显示时。例如在引导选项卡中。

我知道 javascript 可以轻松处理它。但实际上,这个问题来自一个感兴趣的github项目https://github.com/FezVrasta/bootstrap-material-design/issues/48。那个帅哥想用bootstrap3实现google material design。

目前我能想到一个方法(不完美)。当:not(:hover) 设置animation-duration: 1ms;。让动画快速结束。但是用户还是会看短视频。

input[type=checkbox]:not(:hover) ~ .mycheck {
    animation-duration: 1ms;
}

无法设置为 0 毫秒。否则动画在用户悬停之前不会播放。

有没有更好的办法?

【问题讨论】:

    标签: twitter-bootstrap css animation css-animations bootstrap-material-design


    【解决方案1】:

    您可以使用:not(:hover) 所考虑的解决方案,并简单地取消动画:

    input[type=checkbox]:not(:hover) ~ .mycheck {
        animation: none;
    }
    

    或者,我认为这是最好的解决方案,不要使用动画,而是使用过渡。这将导致类似的结果(假设您正在为不透明度设置动画):

    input[type=checkbox] ~ .mycheck {
        opacity: 0;
        transition: opacity .3s ease-out;
    }
    
    input[type=checkbox]:checked ~ .mycheck {
        opacity: 1;
    }
    

    另外,根据您想要实现的浏览器支持,请注意供应商前缀,因为 Chrome 只是最近才将它们放在过渡属性中

    编辑:经过一些测试,我开始认为只使用 :focus 伪类就足够了:

    input[type=checkbox]:focus ~ .mycheck {
        animation: uncheck 300ms ease-out forwards;
    }
    input[type=checkbox]:focus:checked ~ .mycheck {
        animation: check 300ms ease-out forwards;
    }
    

    我能看到的唯一缺点是当复选框失去焦点时,动画可能会被取消

    【讨论】:

    • 是的,你是对的。但这种效果很难过渡。这是谷歌官方(也许)回购。他们使用动画来做到这一点:github.com/cavico/Web-Starter-Kit-Checkbox>。您的代码animation: none; 是更好的选择。谢谢。
    • animation: none; 提出其他问题。悬停时播放的动画...
    • 你说得对,这只是转移了你的问题 :( 据我所知,CSS 没有办法直接处理点击,但你可以同时使用 :hover 和 @ 987654330@ 所以动画只有在您将复选框悬停并获得焦点后才处于活动状态。我将编辑我的答案,让您了解我在说什么。
    猜你喜欢
    • 2023-03-10
    • 2017-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多