Javascript 使用CSS3设置:悬停事件的动画

Javascript 使用CSS3设置:悬停事件的动画,javascript,css,css-transitions,css-animations,Javascript,Css,Css Transitions,Css Animations,这是我的网站: 如您所见,当您将鼠标悬停在导航链接上时,列表元素周围会出现一个“ribbon”样式的白色框。我希望它从顶部滑下(动画),而不是仅仅出现。如果可能的话,只需坚持使用CSS,但如果需要,我不介意使用Javascript/Jquery。CSS“transition”属性作为纯CSS解决方案应该适合您的需要,只要您不担心与旧浏览器的兼容性 这里有两个关于CSS转换的快速链接 CSS“transition”属性应该适合您作为纯CSS解决方案的需要,只要您不担心与旧浏览器的兼容性 这里

这是我的网站:

如您所见,当您将鼠标悬停在导航链接上时,列表元素周围会出现一个“ribbon”样式的白色框。我希望它从顶部滑下(动画),而不是仅仅出现。如果可能的话,只需坚持使用CSS,但如果需要,我不介意使用Javascript/Jquery。

CSS“transition”属性作为纯CSS解决方案应该适合您的需要,只要您不担心与旧浏览器的兼容性

这里有两个关于CSS转换的快速链接

CSS“transition”属性应该适合您作为纯CSS解决方案的需要,只要您不担心与旧浏览器的兼容性

这里有两个关于CSS转换的快速链接


这可以通过纯CSS实现。您不能用

来实现这一点,这可以用纯CSS来实现。如果我可以提出一个建议,您不能用
来做这件事:

在这个场景中,更好的做法是利用CSS3的translate3d,因为它是硬件加速的,而使用
left
属性制作动画不是硬件加速的

在比较两者时,有很多文章记录了性能的提高。举个例子:

以下是如何使用爆炸丸的示例实现动画:

#nav a {
    /* required to keep absolute background on top */
    z-index: 1;
    /* required to keep text on top of absolute bg */
    position: relative;
    /* not mandatory; makes it look better when animating out
    because during that time it will be white on white */
    transition: color 1s;
}

#nav li a:before {
    background-color: #FFF;
    border-bottom-left-radius: 15px;
    border-bottom-right-radius: 15px;
    display: block;
    width: 100%;
    height: 100%;
    /* element will not appear without this */
    content: " ";
    position: absolute;
    /* height of the <a> so bg is off screen */
    /* text will appear above bg */
    z-index: -1;

    -webkit-transform: translate3d(0, -225px, 0);
    -moz-transform: translate3d(0, -225px, 0);
    -ms-transform: translate3d(0, -225px, 0);
    -o-transform: translate3d(0, -225px, 0);
    transform: translate3d(0, -225px, 0);
    -webkit-transition: -webkit-transform 1s ease;
    -moz-transition: -moz-transform 1s ease;
    -o-transition: -o-transform 1s ease;
    transition: transform 1s ease;
    /* Prevents flickering */
    -webkit-backface-visibility: hidden;
    -moz-backface-visibility: hidden;
    -ms-backface-visibility: hidden;
    -o-backface-visibility: hidden;
    backface-visibility: hidden;
}
#nav li a:hover {
    color: red;
}
#nav li a:hover:before {
    -webkit-transform: translate3d(0, -50px, 0);
    -moz-transform: translate3d(0, -50px, 0);
    -ms-transform: translate3d(0, -50px, 0);
    -o-transform: translate3d(0, -50px, 0);
    transform: translate3d(0, -50px, 0);
}
#导航a{
/*需要将绝对背景保持在顶部*/
z指数:1;
/*需要将文本置于绝对背景之上*/
位置:相对位置;
/*非强制性;使其在设置动画时看起来更好
因为在这段时间里,它将是白色的*/
过渡:颜色1s;
}
#李娜:以前{
背景色:#FFF;
边框左下半径:15px;
边框右下半径:15px;
显示:块;
宽度:100%;
身高:100%;
/*元素在没有此选项的情况下不会出现*/
内容:“;
位置:绝对位置;
/*so bg的高度在屏幕外*/
/*文本将出现在背景上方*/
z指数:-1;
-webkit转换:translate3d(0,-225px,0);
-moz变换:translate3d(0,-225px,0);
-ms变换:translate3d(0,-225px,0);
-o变换:translate3d(0,-225px,0);
变换:translate3d(0,-225px,0);
-webkit转换:-webkit转换1s轻松;
-moz转换:-moz转换1秒容易;
-o-转换:-o-转换1s容易;
转型:转型1秒轻松;
/*防止闪烁*/
-webkit背面可见性:隐藏;
-moz背面可见性:隐藏;
-ms背面可见性:隐藏;
-o-背面-可见性:隐藏;
背面可见性:隐藏;
}
#导航李a:悬停{
颜色:红色;
}
#导航李a:悬停:之前{
-webkit转换:translate3d(0,-50px,0);
-moz变换:translate3d(0,-50px,0);
-ms变换:translate3d(0,-50px,0);
-o变换:translate3d(0,-50px,0);
变换:translate3d(0,-50px,0);
}

如果我可以提出建议:

在这个场景中,更好的做法是利用CSS3的translate3d,因为它是硬件加速的,而使用
left
属性制作动画不是硬件加速的

在比较两者时,有很多文章记录了性能的提高。举个例子:

以下是如何使用爆炸丸的示例实现动画:

#nav a {
    /* required to keep absolute background on top */
    z-index: 1;
    /* required to keep text on top of absolute bg */
    position: relative;
    /* not mandatory; makes it look better when animating out
    because during that time it will be white on white */
    transition: color 1s;
}

#nav li a:before {
    background-color: #FFF;
    border-bottom-left-radius: 15px;
    border-bottom-right-radius: 15px;
    display: block;
    width: 100%;
    height: 100%;
    /* element will not appear without this */
    content: " ";
    position: absolute;
    /* height of the <a> so bg is off screen */
    /* text will appear above bg */
    z-index: -1;

    -webkit-transform: translate3d(0, -225px, 0);
    -moz-transform: translate3d(0, -225px, 0);
    -ms-transform: translate3d(0, -225px, 0);
    -o-transform: translate3d(0, -225px, 0);
    transform: translate3d(0, -225px, 0);
    -webkit-transition: -webkit-transform 1s ease;
    -moz-transition: -moz-transform 1s ease;
    -o-transition: -o-transform 1s ease;
    transition: transform 1s ease;
    /* Prevents flickering */
    -webkit-backface-visibility: hidden;
    -moz-backface-visibility: hidden;
    -ms-backface-visibility: hidden;
    -o-backface-visibility: hidden;
    backface-visibility: hidden;
}
#nav li a:hover {
    color: red;
}
#nav li a:hover:before {
    -webkit-transform: translate3d(0, -50px, 0);
    -moz-transform: translate3d(0, -50px, 0);
    -ms-transform: translate3d(0, -50px, 0);
    -o-transform: translate3d(0, -50px, 0);
    transform: translate3d(0, -50px, 0);
}
#导航a{
/*需要将绝对背景保持在顶部*/
z指数:1;
/*需要将文本置于绝对背景之上*/
位置:相对位置;
/*非强制性;使其在设置动画时看起来更好
因为在这段时间里,它将是白色的*/
过渡:颜色1s;
}
#李娜:以前{
背景色:#FFF;
边框左下半径:15px;
边框右下半径:15px;
显示:块;
宽度:100%;
身高:100%;
/*元素在没有此选项的情况下不会出现*/
内容:“;
位置:绝对位置;
/*so bg的高度在屏幕外*/
/*文本将出现在背景上方*/
z指数:-1;
-webkit转换:translate3d(0,-225px,0);
-moz变换:translate3d(0,-225px,0);
-ms变换:translate3d(0,-225px,0);
-o变换:translate3d(0,-225px,0);
变换:translate3d(0,-225px,0);
-webkit转换:-webkit转换1s轻松;
-moz转换:-moz转换1秒容易;
-o-转换:-o-转换1s容易;
转型:转型1秒轻松;
/*防止闪烁*/
-webkit背面可见性:隐藏;
-moz背面可见性:隐藏;
-ms背面可见性:隐藏;
-o-背面-可见性:隐藏;
背面可见性:隐藏;
}
#导航李a:悬停{
颜色:红色;
}
#导航李a:悬停:之前{
-webkit转换:translate3d(0,-50px,0);
-moz变换:translate3d(0,-50px,0);
-ms变换:translate3d(0,-50px,0);
-o变换:translate3d(0,-50px,0);
变换:translate3d(0,-50px,0);
}

您尝试过什么?发布到目前为止您尝试创建这种效果的CSS3或jQuery,最好是在JSFIDLE中。这也是帮助人们解决问题,而不是从头开始为他们编写代码。最好在帖子或JSFIDLE中包含所有相关的代码/标记,而不是一个链接,因为你的链接最终可能会失效,这会阻止其他人从答案中获益。我没有尝试过任何东西,因为我不知道从哪里开始。我已经查看了css动画属性,但无法正确应用它们。他是索引页面的HTML和CSS:你尝试过什么?发布到目前为止您尝试创建这种效果的CSS3或jQuery,最好是在JSFIDLE中。这也是帮助人们解决问题,而不是从头开始为他们编写代码。最好在post或JSFIDLE中包含所有相关的代码/标记,而不是链接,因为您的链接可能最终会失效