纯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地图动态实例代码(圆圈向外扩散)
Jun 15 HTML / CSS
CSS3教程:新增加的结构伪类
Apr 02 HTML / CSS
css3新单位vw、vh的使用教程
Mar 23 HTML / CSS
HTML5 与 XHTML2
Oct 17 HTML / CSS
值得收藏的HTML5资源(学习html5的朋友可以收藏下)
Jul 20 HTML / CSS
IE10 Error.stack 让脚本调试更加方便快捷
Apr 22 HTML / CSS
HTML5 Canvas 绘图——使用 Canvas 绘制图形图文教程 使用html5 canvas 绘制精美的图
Aug 31 HTML / CSS
canvas环形倒计时组件的示例代码
Jun 14 HTML / CSS
canvas探照灯效果的示例代码
Nov 30 HTML / CSS
HTML5 Blob 实现文件下载功能的示例代码
Nov 29 HTML / CSS
使用canvas压缩图片上传的方法示例
Feb 07 HTML / CSS
CSS3实现指纹特效代码
Mar 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中的UNICODE 编码与解码
2013/06/29 PHP
PHP把JPEG图片转换成Progressive JPEG的方法
2014/06/30 PHP
php实现过滤表单提交中html标签的方法
2014/10/17 PHP
PHP实现通过Luhn算法校验信用卡卡号是否有效
2015/03/23 PHP
开发跨浏览器javascript常见注意事项
2009/01/01 Javascript
javascript Excel操作知识点
2009/04/24 Javascript
JavaScript修改css样式style动态改变元素样式
2013/12/16 Javascript
jQuery根据元素值删除数组元素的方法
2015/06/24 Javascript
javascript实现数组内值索引随机化及创建随机数组的方法
2015/08/10 Javascript
jQuery实现简单下拉导航效果
2015/09/07 Javascript
通过设置CSS中的position属性来固定层的位置
2015/12/14 Javascript
javascript每日必学之条件分支
2016/02/17 Javascript
Javascript中内建函数reduce的应用详解
2016/10/20 Javascript
浅谈Vue网络请求之interceptors实际应用
2018/02/28 Javascript
vue input输入框模糊查询的示例代码
2018/05/22 Javascript
JQuery扩展对象方法操作示例
2018/08/21 jQuery
vue3.0 CLI - 1 - npm 安装与初始化的入门教程
2018/09/14 Javascript
详解如何在vscode里面调试js和node.js的方法步骤
2018/12/24 Javascript
[01:09:40]Newbee vs Pain 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python3显示当前时间、计算时间差及时间加减法示例代码
2019/09/07 Python
使用Puppeteer爬取微信文章的实现
2020/02/11 Python
python简单实现最大似然估计&amp;scipy库的使用详解
2020/04/15 Python
IDLE下Python文件编辑和运行操作
2020/04/25 Python
python获取本周、上周、本月、上月及本季的时间代码实例
2020/09/08 Python
python接口自动化框架实战
2020/12/23 Python
Canvas 文本转粒子效果的实现代码
2019/02/14 HTML / CSS
美国Rue La La闪购网站:奢侈品、中高档品牌限时折扣
2016/10/19 全球购物
Smallable意大利家庭概念店:设计师童装及家居装饰
2018/01/08 全球购物
Brother加拿大官网:打印机、贴标机、缝纫机
2019/10/09 全球购物
linux面试相关问题
2013/04/28 面试题
Ruby如何实现动态方法调用
2012/11/18 面试题
浙大毕业生自荐信
2014/01/26 职场文书
医疗纠纷协议书
2014/04/16 职场文书
学校师德承诺书
2014/05/23 职场文书
2016党员干部廉政准则学习心得体会
2016/01/20 职场文书
一篇文章弄懂Python关键字、标识符和变量
2021/07/15 Python