纯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 相关文章推荐
CSS伪类与CSS伪元素的区别及由来具体说明
Dec 07 HTML / CSS
Web页面中八种创建多列等高(等高列布局)的实现技术
Dec 24 HTML / CSS
CSS3 :default伪类选择器使用简介
Mar 15 HTML / CSS
利用css3径向渐变做一张优惠券的示例
Mar 22 HTML / CSS
利用html5的websocket实现websocket聊天室
Dec 12 HTML / CSS
html5将图片转换成base64的实例代码
Sep 21 HTML / CSS
详解HTML5之pushstate、popstate操作history,无刷新改变当前url
Mar 15 HTML / CSS
H5混合开发app如何升级的方法
Jan 10 HTML / CSS
canvas实现二维码和图片合成的示例代码
Aug 01 HTML / CSS
iframe与window.onload如何使用详解
May 07 HTML / CSS
浅析图片上传及canvas压缩的流程
Jun 10 HTML / CSS
AmazeUI 评论列表的实现示例
Aug 13 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
建立文件交换功能的脚本(三)
2006/10/09 PHP
PHP中的类-什么叫类
2006/11/20 PHP
用mysql触发器自动更新memcache的实现代码
2009/10/11 PHP
php警告Creating default object from empty value 问题的解决方法
2014/04/02 PHP
laravel如何开启跨域功能示例详解
2017/08/31 PHP
ext 列表页面关于多行查询的办法
2010/03/25 Javascript
代码触发js事件(click、change)示例应用
2013/12/13 Javascript
iframe里面的元素触发父窗口元素事件的jquery代码
2014/10/19 Javascript
JavaScript设计模式之代理模式介绍
2014/12/28 Javascript
JavaScript使用cookie实现记住账号密码功能
2015/04/27 Javascript
JavaScript中的函数嵌套使用
2015/06/04 Javascript
JavaScript lodash常见用法系列小结
2016/08/24 Javascript
jquery实现全选、不选、反选的两种方法
2016/09/06 Javascript
JQuery获取鼠标进入和离开容器的方向
2016/12/29 Javascript
jQuery移除或禁用html元素点击事件常用方法小结
2017/02/10 Javascript
用JS编写一个函数,返回数组中重复出现过的元素(实例)
2017/09/14 Javascript
Vue如何实现响应式系统
2018/07/11 Javascript
vue.js项目 el-input 组件 监听回车键实现搜索功能示例
2018/08/25 Javascript
原生js实现获取form表单数据代码实例
2019/03/27 Javascript
微信小程序之 catalog 切换实现解析
2019/09/12 Javascript
原生js实现ajax请求和JSONP跨域请求操作示例
2020/03/14 Javascript
微信小程序实现带放大效果的轮播图
2020/05/26 Javascript
在 Django/Flask 开发服务器上使用 HTTPS
2014/07/03 Python
深入Python解释器理解Python中的字节码
2015/04/01 Python
Python3中常用的处理时间和实现定时任务的方法的介绍
2015/04/07 Python
Python中类型关系和继承关系实例详解
2015/05/25 Python
Python产生Gnuplot绘图数据的方法
2018/11/09 Python
Python如何将模块打包并发布
2020/08/30 Python
HTML5中的Scoped属性使用实例
2014/04/23 HTML / CSS
加拿大票务网站:Ticketmaster加拿大
2017/07/17 全球购物
英国Lookfantastic中文网站:护肤品美妆美发购物(英国直邮)
2020/04/27 全球购物
应聘护士自荐信
2013/10/21 职场文书
2014年维稳工作总结
2014/11/18 职场文书
python 如何用map()函数创建多线程任务
2021/04/07 Python
大型强子对撞机再次重启探索“第五种自然力”
2022/04/29 数码科技
Windows Server 2012配置DNS服务器的方法
2022/04/29 Servers