一款非常棒的纯CSS3 3D菜单演示及制作教程

简介: 原文:一款非常棒的纯CSS3 3D菜单演示及制作教程这段时间比较忙,很久没在这里分享一些漂亮的HTML5和CSS3资源了,今天起的早,看到一款很不错的CSS3 3D菜单,觉得非常上眼,就将它分享给大家,顺便来分析一下实现的源码。
原文: 一款非常棒的纯CSS3 3D菜单演示及制作教程

这段时间比较忙,很久没在这里分享一些漂亮的HTML5和CSS3资源了,今天起的早,看到一款很不错的CSS3 3D菜单,觉得非常上眼,就将它分享给大家,顺便来分析一下实现的源码。下面是效果图:

看了效果图是不是觉得它是一副麻将,对,第一眼我也认为是用CSS3写的麻将特效,结果我错了,它只是长得比较像而已。

另外,你也可以在这里直接查看菜单的DEMO演示

接下来再分析一下实现这款3D菜单的源代码。

代码主要由HTML和CSS3组成,应该说还是比较简单的。

首先是HTML代码:

<ul>
  <li>
    <a class='list-item' href=''>
      <i class='icon-reorder'></i>
    </a>
  </li>
  <li>
    <a class='list-item' href=''>
      <i class='icon-th-large'></i>
    </a>
  </li>
  <li>
    <a class='list-item' href=''>
      <i class='icon-bar-chart'></i>
    </a>
  </li>
  <li>
    <a class='list-item' href=''>
      <i class='icon-tasks'></i>
    </a>
  </li>
  <li>
    <a class='list-item' href=''>
      <i class='icon-bell'></i>
    </a>
  </li>
  <li>
    <a class='list-item' href=''>
      <i class='icon-archive'></i>
    </a>
  </li>
  <li>
    <a class='list-item' href=''>
      <i class='icon-comment'></i>
    </a>
  </li>
  <li>
    <a class='list-item' href=''>
      <i class='icon-sitemap'></i>
    </a>
  </li>
  <li>
    <a class='list-item' href=''>
      <i class='icon-thumbs-up'></i>
    </a>
  </li>
  <li>
    <a class='list-item' href=''>
      <i class='icon-tumblr'></i>
    </a>
  </li>
</ul>

这里用了标准的ul li列表来构建菜单的HTML框架,层次非常清晰。

接下来重点是CSS代码,如何用CSS3的特性来实现菜单的侧躺和阴影效果,从来让其看起来呈3D的状态。

ul {
  position: relative;
  -webkit-transform: rotate(-35deg) skew(20deg, 5deg);
  -moz-transform: rotate(-35deg) skew(20deg, 5deg);
  -ms-transform: rotate(-35deg) skew(20deg, 5deg);
  -o-transform: rotate(-35deg) skew(20deg, 5deg);
  transform: rotate(-35deg) skew(20deg, 5deg);
}

上面的这几行代码很关键,我们也可以看出用了CSS3的transform属性的rotate()实现菜单整体旋转一定角度,然后用skew()让菜单倾斜一个角度,这样菜单就开始有3D立体的感觉了。

接下来是每一个菜单项的样式:

.list-item {
  background: #000000;
  color: #575757;
  text-align: center;
  height: 2.5em;
  width: 4em;
  vertical-align: middle;
  line-height: 2.5em;
  border-bottom: 1px solid #060606;
  position: relative;
  display: block;
  text-decoration: none;
  -webkit-box-shadow: -2em 1.5em 0 #e1e1e1;
  -moz-box-shadow: -2em 1.5em 0 #e1e1e1;
  box-shadow: -2em 1.5em 0 #e1e1e1;
  -webkit-transition: top 0.25s linear, left 0.25s linear, background 0.1s linear, color 0.1s linear;
  -moz-transition: top 0.25s linear, left 0.25s linear, background 0.1s linear, color 0.1s linear;
  -o-transition: top 0.25s linear, left 0.25s linear, background 0.1s linear, color 0.1s linear;
  transition: top 0.25s linear, left 0.25s linear, background 0.1s linear, color 0.1s linear;
}
.list-item:hover {
  background: #ff6e42;
  color: #fffcfb;
  top: -0.5em;
  left: 0.5em;
  -webkit-transition: top 0.25s linear, left 0.25s linear, background 0.1s linear, color 0.1s linear;
  -moz-transition: top 0.25s linear, left 0.25s linear, background 0.1s linear, color 0.1s linear;
  -o-transition: top 0.25s linear, left 0.25s linear, background 0.1s linear, color 0.1s linear;
  transition: top 0.25s linear, left 0.25s linear, background 0.1s linear, color 0.1s linear;
  -webkit-box-shadow: -2em 2em 0 #e1e1e1;
  -moz-box-shadow: -2em 2em 0 #e1e1e1;
  box-shadow: -2em 2em 0 #e1e1e1;
}
.list-item:hover:before, .list-item:hover:after {
  -webkit-transition: all 0.25s linear;
  -moz-transition: all 0.25s linear;
  -o-transition: all 0.25s linear;
  transition: all 0.25s linear;
}
.list-item:hover:before {
  background: #b65234;
  width: 1em;
  top: 0.5em;
  left: -1em;
}
.list-item:hover:after {
  background: #b65234;
  width: 1em;
  bottom: -2.5em;
  left: 1em;
  height: 4em;
}
.list-item:before, .list-item:after {
  -webkit-transition: all 0.25s linear;
  -moz-transition: all 0.25s linear;
  -o-transition: all 0.25s linear;
  transition: all 0.25s linear;
}
.list-item:after {
  content: "";
  position: absolute;
  height: 4em;
  background: #181818;
  width: 0.5em;
  bottom: -2.25em;
  left: 1.5em;
  -webkit-transform: rotate(90deg) skew(0deg, 45deg);
  -moz-transform: rotate(90deg) skew(0deg, 45deg);
  -ms-transform: rotate(90deg) skew(0deg, 45deg);
  -o-transform: rotate(90deg) skew(0deg, 45deg);
  transform: rotate(90deg) skew(0deg, 45deg);
}
.list-item:before {
  content: "";
  position: absolute;
  height: 2.5em;
  background: #121212;
  width: 0.5em;
  top: 0.215em;
  left: -0.45em;
  -webkit-transform: skewY(-45deg);
  -moz-transform: skewY(-45deg);
  -ms-transform: skewY(-45deg);
  -o-transform: skewY(-45deg);
  transform: skewY(-45deg);
}

我们可以看到用了shadow实现每一个菜单项都有投影,至此,整个菜单的3D效果就已经渲染完了。

另外就是鼠标滑过菜单项的效果,利用了CSS3的动画特性让菜单项背景色渐变,形成凸起的效果。

整个实现就是这样了,你可以下载源代码,下载地址>>

目录
相关文章
|
2月前
CSS3自动旋转正方体3D特效
CSS3自动旋转正方体3D特效
26 3
CSS3自动旋转正方体3D特效
|
1月前
|
前端开发
css教程-li的list-style-type属性
通过设置 `list-style-type`属性,你可以根据需求为列表项设置不同的标志样式,从而改变列表的外观。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
16 4
|
1月前
|
前端开发 JavaScript Java
《手把手教你》系列技巧篇(十九)-java+ selenium自动化测试-元素定位大法之By css下卷(详细教程)
【4月更文挑战第11天】按计划今天宏哥继续讲解css的定位元素的方法。但是今天最后一种宏哥介绍给大家,了解就可以了,因为实际中很少用。
50 2
|
1月前
|
前端开发 JavaScript Java
《手把手教你》系列技巧篇(十八)-java+ selenium自动化测试-元素定位大法之By css中卷(详细教程)
【4月更文挑战第10天】本文主要介绍了CSS定位元素的几种方法,包括ID属性值定位、其他属性值定位和使用属性值的一部分定位。作者提供了示例代码,展示了如何使用这些方法在Java+Selenium自动化测试中定位网页元素。通过CSS选择器,可以更精确地找到页面上的特定元素,如输入框、按钮等,并进行相应的操作,如输入文本、点击等。文章还提供了实际运行代码后的控制台输出和浏览器动作的示例。
62 0
|
1月前
|
前端开发 JavaScript Java
《手把手教你》系列技巧篇(十七)-java+ selenium自动化测试-元素定位大法之By css上卷(详细教程)
【4月更文挑战第9天】本文介绍了CSS定位方式的使用,包括它的优势和8种常用的定位方法。CSS定位相比XPath定位更快、更稳定。文章通过示例详细讲解了如何使用CSS定位元素,包括通过id、name、class name、tag name、link text、partial link text以及XPath进行定位。还提供了Java代码示例来演示如何在自动化测试中使用这些定位方法。
45 1
|
2月前
|
前端开发
纯css实现的3D立体鸡蛋动画视觉效果
纯css实现的3D立体鸡蛋动画视觉效果
32 6
纯css实现的3D立体鸡蛋动画视觉效果
|
3月前
|
UED
css3 2D与3D转换
css3 2D与3D转换
35 0
|
4月前
|
前端开发 JavaScript 容器
【详细教程】HTML、CSS 和 JS 实现一个任务管理工具-ToDoList
【详细教程】HTML、CSS 和 JS 实现一个任务管理工具-ToDoList
48 1
【详细教程】HTML、CSS 和 JS 实现一个任务管理工具-ToDoList
|
5月前
|
前端开发 JavaScript 容器
CSS保姆级别教程(持续更新)
CSS保姆级别教程(持续更新)
|
5月前
|
前端开发 程序员
【CSS教程】农村小伙写出CSS完全教程帮助十万农村程序员就业迎娶白富美,出任CEO,登上人生巅峰
【CSS教程】农村小伙写出CSS完全教程帮助十万农村程序员就业迎娶白富美,出任CEO,登上人生巅峰
69 0