导航菜单

CSS3超酷3D旋转导航菜单特效

阿里云


这是一款使用纯 CSS3 制作的 3D 旋转导航菜单特效。该 3D 旋转导航菜单特效中主要使用了 CSS 3D Transforms 技术。当鼠标 hover 菜单项时,菜单项会以 3D 立方体的方式旋转。该 3D 旋转导航菜单特效中主要使用了 CSS 3D Transforms 技术。该插件在 IE 内核的浏览器中看不到效果。

HTML 结构

要制作这种效果需要创建一个 3D 对象。我们使用无序列表来制作导航菜单,每一个列表项都带一个超链接标签,在它里面包含有 4 个 span 元素。每一个 span 代表立方体的一个面(不包括侧面)。我们需要做的是将每一个面都放置到正确的位置上。

也想出现在这里?联系我们
创客主机
  1. <ul class="menu">
  2.   <li class="home current">
  3.     <a href="http://www.inserthtml.com/">
  4.       <span>Home  <i class="ss-navigatedown"> </i></span>
  5.       <span>Home  <i class="ss-navigatedown"> </i></span>
  6.       <span>Home  <i class="ss-navigatedown"> </i></span>
  7.       <span>Home  <i class="ss-navigatedown"> </i></span>
  8.     </a>
  9.     <ul>
  10.       <li><a href="">Sub Menu</a></li>
  11.       <li><a href="">Sub Menu</a></li>
  12.     </ul>
  13.   </li>
  14.   <li class="about">
  15.     <a href="http://www.inserthtml.com/">
  16.       <span>About</span>
  17.       ...
  18.     </a>
  19.   </li>
  20.   <li class="contact">
  21.     <a href="http://www.inserthtml.com/">
  22.       <span>Contact  <i class="ss-navigatedown"> </i></span>
  23.       ...
  24.     </a>
  25.     <ul>
  26.       <li><a href="">Sub Menu</a></li>
  27.       <li><a href="">Sub Menu</a></li>
  28.     </ul>
  29.   </li>
  30.   <li class="twitter">
  31.     <a href="http://www.inserthtml.com/">
  32.       <span>Twitter</span>
  33.       ...
  34.     </a>
  35.   </li>
  36. </ul>

CSS 样式

目前只有 webkit 内核的浏览器完全支持 3D Transforms,Firefox 浏览器虽然也支持 3D Transforms,但是实现起来稍微有点困难。为了解决这些问题,我们使用了 4 个 span 元素。第一个 span 元素是默认状态,第二个是 hover 或当前状态,第三个是当前链接的 hover 状态,第四个用于不支持 3D Transforms 的浏览器。我们要移动 span 的位置使它们形成一个立方体,如右图:为导航菜单元素设置透视效果(perspective)和其它一些 CSS 属性:

  1. .menu {
  2.   -webkit-perspective: 100000;
  3.   -moz-perspective: 100000;
  4.   -o-perspective: 100000;
  5.   -ms-perspective: 100000;
  6.   perspective: 1200;
  7.   display: block;
  8.   width: 800px; 
  9.   height: 65px;
  10.   margin: 0 auto;
  11.   list-style: none;
  12.   padding: 0;
  13.   padding: 0 0 0 30px;
  14.   border-radius: 5px;
  15.   background-color: #546065;
  16. }

接下来设置 li 元素为 preserve 3D 模式,这样使它们可以被作为 3D 对象操纵。我们还要为它们设置 transitions 来使动画平滑过渡。

  1. .menu li {
  2.   -webkit-transform-style: preserve-3d;
  3.   -moz-transform-style: preserve-3d;
  4.   -o-transform-style: preserve-3d;
  5.   -ms-transform-style: preserve-3d;
  6.   transform-style: preserve-3d;
  7.   height: 21px;
  8.   width: 140px;
  9.   margin: 0 10px 0 0;
  10.   float: left;
  11.   position: relative;
  12.   -webkit-transition: all 0.2s linear;
  13.   -moz-transition: all 0.2s linear;
  14.   -o-transition: all 0.2s linear;
  15.   -ms-transition: all 0.2s linear;
  16.   transition: all 0.2s linear;
  17. }
  18. .menu li a {
  19.   display: block;
  20.   color: #fff;
  21.   font-weight: bold;
  22.   box-sizing: border-box;
  23.   height: inherit;
  24.   width: inherit;
  25.   font-size: 1.2em;
  26.   text-decoration: none;
  27.   text-transform: uppercase;
  28.   font-family: Arial, sans-serif;
  29. }
  30. .menu li a span {
  31.   height: inherit;
  32.   width: inherit;
  33.   padding: 22px 0;
  34.   text-align: center;
  35.   position: absolute;
  36.   left: 0;
  37.   display: block;
  38. }

接下来是比较困难的部分:把每一个 span 放置到正确的位置上。这需要不断的实验才能得到正确的结果,这些这依赖于你的菜单设置的大小。

  1. .menu li a span:first-of-type {
  2.   -webkit-transform: translateZ(74px);
  3.   -moz-transform: translateZ(74px);
  4.   -o-transform: translateZ(74px);
  5.   -ms-transform: translateZ(74px);
  6.   transform: translateZ(74px);
  7.   background-color: #3e4649;
  8.   box-shadow: inset 0px 0px 15px rgba(0,0,0,0.1);
  9. }
  10. .menu li a span:nth-of-type(2) {
  11.   background: #fa623f;
  12.   box-shadow: inset 0px 35px 30px -30px rgba(255,255,255,0.1);
  13.   -webkit-transform: rotate3d(1,0,0,90deg) translateZ(32px) translateY(42px);
  14.   -moz-transform: rotate3d(1,0,0,90deg) translateZ(32px) translateY(42px);
  15.   -o-transform: rotate3d(1,0,0,90deg) translateZ(32px) translateY(42px);
  16.   -ms-transform: rotate3d(1,0,0,90deg) translateZ(32px) translateY(42px);
  17.   transform: rotate3d(1,0,0,90deg) translateZ(32px) translateY(42px);
  18. }
  19. .menu li a span:nth-of-type(3) {
  20.   background: #f8876d;
  21.   box-shadow: inset 0px 35px 30px -30px rgba(255,255,255,0.1);
  22.   -webkit-transform: rotate3d(1,0,0,180deg) translateZ(-9px);
  23.   -moz-transform: rotate3d(1,0,0,180deg) translateZ(-9px);
  24.   -o-transform: rotate3d(1,0,0,180deg) translateZ(-9px);
  25.   -ms-transform: rotate3d(1,0,0,180deg) translateZ(-9px);
  26.   transform: rotate3d(1,0,0,180deg) translateZ(-9px);
  27. }
  28. .menu li a span:nth-of-type(4) {
  29.   background: #3e4649;
  30.   -webkit-transform: rotate3d(1,0,0,270deg) translateZ(33px) translateY(-42px);
  31.   -moz-transform: rotate3d(1,0,0,270deg) translateZ(33px) translateY(-42px);
  32.   -o-transform: rotate3d(1,0,0,270deg) translateZ(33px) translateY(-42px);
  33.   -ms-transform: rotate3d(1,0,0,270deg) translateZ(33px) translateY(-42px);
  34.   transform: rotate3d(1,0,0,270deg) translateZ(33px) translateY(-42px);
  35. }
  36. .current {
  37.   -webkit-transform: rotate3d(1,0,0,-90deg) translateZ(-20px);  
  38.   -moz-transform: rotate3d(1,0,0,-90deg) translateZ(-20px);   
  39.   -o-transform: rotate3d(1,0,0,-90deg) translateZ(-20px);   
  40.   -ms-transform: rotate3d(1,0,0,-90deg) translateZ(-20px);  
  41.   transform: rotate3d(1,0,0,-90deg) translateZ(-20px);  
  42. }

接下来是 Hover 时候的样式。当用户鼠标滑过菜单项时,我们需要它旋转起来。我们需要重新修改一下位置来确保每个元素都在正确的位置上。我们还需要设置 hover 第四个 span 的情况(该情况下菜单和普通菜单一样)。

  1. .menu > li:hover {
  2.   -webkit-transform: rotate3d(1,0,0,-90deg) translateZ(-20px); 
  3.   -moz-transform: rotate3d(1,0,0,-90deg) translateZ(-20px); 
  4.   -o-transform: rotate3d(1,0,0,-90deg) translateZ(-20px); 
  5.   -ms-transform: rotate3d(1,0,0,-90deg) translateZ(-20px); 
  6.   transform: rotate3d(1,0,0,-90deg) translateZ(-20px); 
  7. }
  8. .menu > .current:hover {
  9.   -webkit-transform: rotate3d(1,0,0,-180deg) translateY(-44px);
  10.   -moz-transform: rotate3d(1,0,0,90deg) translateZ(-64px);
  11.   -o-transform: rotate3d(1,0,0,-180deg) translateY(-44px);
  12.   -ms-transform: rotate3d(1,0,0,-180deg) translateY(-44px);
  13.   transform: rotate3d(1,0,0,-180deg) translateY(-44px);
  14. }
  15. /* This is for browsers without 3D support. They will just see a normal menu */
  16. .menu > .current span:nth-of-type(4), .menu > li:hover span:nth-of-type(4) {
  17.   background: #fa623f;
  18. }
  19. .menu > .current:hover span:nth-of-type(4) {
  20.   background: #f8876d;
  21. }

最后还有一些下拉菜单的样式,这里就不一一列出了。通过以上的设置,该 3d 选择导航菜单插件在 webkit 内核浏览器和 Firefox 浏览器中都能正常工作。

CSS3 超酷 3D 旋转导航菜单特效

已有 366 人购买
查看演示升级 VIP立刻购买

演示地址 下载地址
收藏
(0)

发表回复

热销模板

Ashade - 作品展示摄影相册WordPress汉化主题
LensNews

本站承接 WordPress / PbootCMS / DedeCMS 等
系统建站、仿站、开发、定制等业务!