纯CSS实现菜单、导航栏的3D翻转动画效果


Posted in HTML / CSS onApril 23, 2014

我曾经向大家展示过闪光的logo,燃烧的火狐狸,多重嵌套动画等例子,今天,我们将要制作一个简单但非常酷的3D翻转菜单。大家可以先看看实际效果,下面有效果截图。

效果图:

纯CSS实现菜单、导航栏的3D翻转动画效果

HTML代码

HTML内容是一些用作菜单的链接,我们在里面添加了一些额外的SPAN标记来帮助实现3D效果:

复制代码
代码如下:

<ul class="block-menu lazy ">
<li><a href="/" class="three-d lazy ">
Home
<span aria-hidden="true" class="three-d-box lazy ">
<span class="front lazy ">Home</span>
<span class="back lazy ">Home</span>
</span>
</a></li>
<li><a href="/demos" class="three-d lazy ">
Demos
<span aria-hidden="true" class="three-d-box lazy ">
<span class="front lazy ">Demos</span>
<span class="back lazy ">Demos</span>
</span>
</a></li>
<!-- more items here -->
</ul>

在A链接标记旁边是一系列的SPAN元素,动画演示过程中,它将用来表现3D立方体的“正面”和“背面”。这些SPAN里的文字和A链接里的文字是一致的。

CSS代码

这个动画的过程就是实现3D变换和元素位置变化。但实际上A链接是没有移动的,动的是SPAN标签,而且是最外层的SPAN标签,内部的SPAN标签被初始化在它的位置上,以后就不做任何变动。每个元素都可以向上翻,并要翻回来,我们使用的是CSS transforms。

复制代码
代码如下:

/* basic menu styles */
.block-menu {
display: block;
background: #000;
}</p> <p>.block-menu li {
display: inline-block;
}
.block-menu li a {
color: #fff;
display: block;
text-decoration: none;
font-family: 'Passion One', Arial, sans-serif;
font-smoothing: antialiased;
text-transform: uppercase;
overflow: visible;
line-height: 20px;
font-size: 24px;
padding: 15px 10px;
}
/* animation domination */
.three-d {
perspective: 200px;
transition: all .07s linear;
position: relative;
cursor: pointer;
}
/* complete the animation! */
.three-d:hover .three-d-box,
.three-d:focus .three-d-box {
transform: translateZ(-25px) rotateX(90deg);
}
.three-d-box {
transition: all .3s ease-out;
transform: translatez(-25px);
transform-style: preserve-3d;
pointer-events: none;
position: absolute;
top: 0;
left: 0;
display: block;
width: 100%;
height: 100%;
}
/*
put the "front" and "back" elements into place with CSS transforms,
specifically translation and translatez
*/
.front {
transform: rotatex(0deg) translatez(25px);
}
.back {
transform: rotatex(-90deg) translatez(25px);
color: #ffe7c4;
}
.front, .back {
display: block;
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
background: black;
padding: 15px 10px;
color: white;
pointer-events: none;
box-sizing: border-box;
}

如果你想看看正面和反面各自是如何旋转移动的,我强烈推荐你们试一下,将其中的一个设置为display: none,让鼠标悬停在它们上面,你将会看到它们各自将完成整个动画的哪一部分动作。

这种实现方式的唯一的缺点是有重复的菜单名称,虽然技术上是隐藏看不出来的,但从代码质量上说存在代码重复问题。然而,从视觉效果上看,它的动画非常顺滑,毫无瑕疵。没有JavaScript,Flash或canvas技术,只是一些简单的CSS标记,这技术CSS动画….一种我们web程序员都应该感谢的技术。

HTML / CSS 相关文章推荐
详解CSS3伸缩布局盒模型Flex布局
Aug 20 HTML / CSS
css3.0 图形构成实例练习一
Mar 19 HTML / CSS
CSS中垂直居中的简单实现方法
Jul 06 HTML / CSS
CSS3实现网站商品展示效果图
Jan 18 HTML / CSS
HTML5文档结构标签
Apr 21 HTML / CSS
浅谈利用缓存来优化HTML5 Canvas程序的性能
May 12 HTML / CSS
HTML5 新表单类型示例代码
Mar 20 HTML / CSS
html2 canvas生成清晰的图片实现打印功能
Sep 23 HTML / CSS
HTML5播放实现rtmp流直播
Jun 16 HTML / CSS
CSS变量实现主题切换的方法
Jun 23 HTML / CSS
纯html+css实现Element loading效果
Aug 02 HTML / CSS
HTML5 新增内容和 API详解
Nov 17 HTML / CSS
css3和jquery实现自定义checkbox和radiobox组件
Apr 22 #HTML / CSS
css3实现垂直下拉动画菜单示例
Apr 22 #HTML / CSS
纯CSS改变webkit内核浏览器的滚动条样式
Apr 17 #HTML / CSS
css3实现超立体3D图片侧翻倾斜效果
Apr 16 #HTML / CSS
纯CSS和jQuery实现的在页面顶部显示的进度条效果2例(仿手机浏览器进度条效果)
Apr 16 #HTML / CSS
纯CSS实现的大小渐变、渐远效果
Apr 15 #HTML / CSS
CSS中几个与换行有关的属性简明总结
Apr 15 #HTML / CSS
You might like
基于PHP array数组的教程详解
2013/06/05 PHP
ThinkPHP模型详解
2015/07/27 PHP
推荐30个新鲜出炉的精美 jQuery 效果
2012/03/26 Javascript
JS解析json数据并将json字符串转化为数组的实现方法
2012/12/25 Javascript
用IE重起计算机或者关机的示例代码
2014/03/10 Javascript
jQuery中prepend()方法用法实例
2014/12/25 Javascript
基于jquery编写分页插件
2016/03/07 Javascript
angularjs 源码解析之scope
2016/08/22 Javascript
jQuery.cookie.js使用方法及相关参数解释
2017/03/06 Javascript
Vue实例中生命周期created和mounted的区别详解
2017/08/25 Javascript
原生js实现简单的焦点图效果实例
2017/12/14 Javascript
vue3.0 CLI - 1 - npm 安装与初始化的入门教程
2018/09/14 Javascript
js实现删除li标签一行内容
2019/04/16 Javascript
Vue组件通信入门之Provide和Inject机制
2019/12/29 Javascript
AngularJs的$http发送POST请求,php无法接收Post的数据问题及解决方案
2020/08/13 Javascript
python获取本地计算机名字的方法
2015/04/29 Python
Python实现对一个函数应用多个装饰器的方法示例
2018/02/09 Python
使用python对文件中的数值进行累加的实例
2018/11/28 Python
在Python中关于使用os模块遍历目录的实现方法
2019/01/03 Python
Python实现微信自动好友验证,自动回复,发送群聊链接方法
2019/02/21 Python
Python叠加两幅栅格图像的实现方法
2019/07/05 Python
python数据预处理方式 :数据降维
2020/02/24 Python
使用Keras实现简单线性回归模型操作
2020/06/12 Python
8款精美的CSS3表单设计(登录表单/下拉选择/按钮附演示及源码)
2013/02/04 HTML / CSS
猎人靴英国官网:Hunter Boots
2017/02/02 全球购物
英国最大的高品质珠宝和手表专家:Goldsmiths
2017/03/11 全球购物
Footshop法国:购买运动鞋
2020/01/19 全球购物
Java中各种基本数据类型的默认值都是什么
2016/12/22 面试题
2013年员工自我评价范文
2013/12/27 职场文书
信息专业毕业生五年职业规划参考
2014/02/06 职场文书
知识改变命运演讲稿
2014/05/21 职场文书
施工安全生产承诺书
2014/05/23 职场文书
毕业生应聘求职信
2014/07/10 职场文书
承诺书范本
2015/01/21 职场文书
商场圣诞节活动总结
2015/05/06 职场文书
大学宣传委员竞选稿
2015/11/19 职场文书