纯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弹性盒模型实例介绍
May 27 HTML / CSS
多重CSS背景动画实现方法示例
Apr 04 HTML / CSS
css3中单位px,em,rem,vh,vw,vmin,vmax的区别及浏览器支持情况
Dec 06 HTML / CSS
详解CSS3中字体平滑处理和抗锯齿渲染
Mar 29 HTML / CSS
纯css3实现思维导图样式示例
Nov 01 HTML / CSS
HTML5 本地存储实现购物车功能
Sep 07 HTML / CSS
html5中svg canvas和图片之间相互转化思路代码
Jan 24 HTML / CSS
html5 canvas fillRect坐标和大小的问题解决方法
Mar 26 HTML / CSS
Application Cache未缓存文件无法访问无法加载问题
May 31 HTML / CSS
基于HTML5陀螺仪实现ofo首页眼睛移动效果的示例
Jul 31 HTML / CSS
html5利用canvas实现颜色容差抠图功能
Dec 23 HTML / CSS
html5视频常用API接口的实战示例
Mar 20 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分页示例代码
2007/03/19 PHP
php的list()的一步操作给一组变量进行赋值的使用
2011/05/18 PHP
PHP图片添加水印功能示例小结
2016/10/03 PHP
php 中self,this的区别和操作方法实例分析
2019/11/04 PHP
PHP7创建COOKIE和销毁COOKIE的实例方法
2020/02/03 PHP
基于jQuery的实现简单的分页控件
2010/10/10 Javascript
select标签模拟/美化方法采用JS外挂式插件
2013/04/01 Javascript
jQuery操作Select的Option上下移动及移除添加等等
2013/11/18 Javascript
Google Dart编程语法和基本类型学习教程
2013/11/27 Javascript
JS将数字转换成三位逗号分隔的样式(示例代码)
2014/02/19 Javascript
JavaScript事件委托用法分析
2015/01/24 Javascript
基于jQuery实现二级下拉菜单效果
2016/02/01 Javascript
一个字符串中出现次数最多的字符 统计这个次数【实现代码】
2016/04/29 Javascript
Bootstrap文件上传组件之bootstrap fileinput
2016/11/25 Javascript
knockoutjs模板实现树形结构列表
2017/07/31 Javascript
Vue 项目部署到服务器的问题解决方法
2017/12/05 Javascript
nodejs搭建本地服务器轻松解决跨域问题
2018/03/21 NodeJs
vue input输入框模糊查询的示例代码
2018/05/22 Javascript
详解python中index()、find()方法
2019/08/29 Python
Pytorch根据layers的name冻结训练方式
2020/01/06 Python
HTML5 预加载让页面得以快速呈现
2013/08/13 HTML / CSS
HTML5在canvas中绘制复杂形状附效果截图
2014/06/23 HTML / CSS
Html5移动端网页端适配(js+rem)
2021/02/03 HTML / CSS
社区党员先进事迹
2014/01/22 职场文书
大学校庆策划书
2014/01/31 职场文书
学生会个人自荐书范文
2014/02/12 职场文书
食品业务员岗位职责
2014/03/18 职场文书
城管执法人员个人对照检查材料思想汇报
2014/09/29 职场文书
2014年物业公司工作总结
2014/11/22 职场文书
写给纪委的违纪检讨书
2015/05/05 职场文书
给校长的建议书作文500字
2015/09/14 职场文书
2016年“12.3”国际残疾人日活动总结
2016/04/01 职场文书
2019年最新感恩节祝福语(28句)
2019/11/27 职场文书
详解redis分布式锁的这些坑
2021/05/19 Redis
只需要100行Python代码就可以实现的贪吃蛇小游戏
2021/05/27 Python
SpringBoot使用ip2region获取地理位置信息的方法
2022/06/21 Java/Android