Javascript 使用CSS3设置:悬停事件的动画
这是我的网站: 如您所见,当您将鼠标悬停在导航链接上时,列表元素周围会出现一个“ribbon”样式的白色框。我希望它从顶部滑下(动画),而不是仅仅出现。如果可能的话,只需坚持使用CSS,但如果需要,我不介意使用Javascript/Jquery。CSS“transition”属性作为纯CSS解决方案应该适合您的需要,只要您不担心与旧浏览器的兼容性 这里有两个关于CSS转换的快速链接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解决方案的需要,只要您不担心与旧浏览器的兼容性 这里
来实现这一点,这可以用纯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中包含所有相关的代码/标记,而不是链接,因为您的链接可能最终会失效