• 一款非常棒的纯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的动画特性让菜单项背景色渐变,形成凸起的效果。

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

  • 相关阅读:
    [MySQL] LIMIT 分页优化
    [Flutter] 因为不讲这个重点, 全网 flutter 实战视频沦为二流课程
    [Kafka] |FAIL|rdkafka#producer-1 : Receive failed: Disconnected
    [Flutter] lib/main.dart:1: Warning: Interpreting this as package URI, 'package:flutter_app/main.dart'.
    [Flutter] 写第一个 Flutter app,part1 要点
    [Go] 开始试探一门新语言的五点思考
    [转]Android进程间通信
    [转]android ANR产生原因和解决办法
    Android开发之旅(二)服务生命周期和广播接收者生命周期
    为什么要有handler机制?handler机制的原理
  • 原文地址:https://www.cnblogs.com/html5tricks/p/3756599.html
Copyright © 2020-2023  润新知