css3中做3D導航欄


看別人做的一個3D導航欄,覺得很厲害,這里先保存下來,后面有時間好好分析一下:

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>制作3D旋轉導航</title>
    <style>
        @import url("http://www.w3cplus.com/demo/css3/base.css");
        /*任務一:引入本地字體文件*/
        @font-face{
            font-family:"fontt";
            src: url("http://www.imooc.com/Amaranth-BoldItalic.otf");
        }
        body {
            background-color:#edecec;
        }

        /* basic menu styles */
        .nav-menu {
            display: block;
            width:950px;
            margin: 50px auto 150px;
        }
        .nav-menu > li {
            display:inline;
            float:left;
            border-right:1px solid #edecec;
        }
        .nav-menu > li:last-child {
            border-right: none;
        }
        .nav-menu li a {
            color: #fff;
            display: block;
            text-decoration: none;
            /*調用本地字體*/
            font-family:fontt;
            -webkit-font-smoothing: antialiased;
            -moz-font-smoothing: antialiased;
            font-smoothing: antialiased;
            text-transform: capitalize;
            overflow: visible;
            line-height: 20px;
            font-size: 20px;
            padding: 15px 30px 15px 31px;
        }


        .three-d {
            /* 任務三、設置3D舞台布景 */
            perspective:200px;
            /*任務三  設置a元素.three-d為距離200px的3D舞台
            perspective理論是用戶通過屏幕看到3D元素的距離,以像素px為單位
            */

            /*任務四、設置3D舞台布景過渡效果*/
            transition:all 0.3s linear;
            /*這里沒有發現實際作用,望指出*/
            position: relative;
        }

        .three-d:not(.active):hover {
            cursor: pointer;
        }

        /*任務五、給不是當前狀態的3D舞台的懸浮與聚焦狀態設置變形效果*/
        .three-d:not(.active):hover .three-d-box,
        .three-d:not(.active):focus .three-d-box {
            transform:translateZ(-25px) rotateX(90deg);
            /*
            translateZ改變3D元素的Z軸高度,以用戶看屏幕為准
            X是左右,Y是上下,Z可以理解為自身的深度,對於用戶就是前后(屏幕距離)
            如果3D元素X軸旋轉90度后,Z軸以用戶看屏幕就變成了上下,
            X軸依舊是左右,Y軸變成了前后(屏幕距離)。
            這里沒圖說不清楚,看個人理解吧
            這里再次設置translateZ(-25px)是因為獲取焦點后
            不會保留原本的translateZ數值


            rotateX改變3D元素的X軸角度,比如把這個元素橫着插一根牙簽,然后旋轉
            (怎么轉自己想,難道還能左右轉)
            */
        }

        .three-d-box {
            /*任務六、給3D舞台中“.three-d-box”設置過渡與變形效果*/
            transition:all 0.3s linear;
            transform:translateZ(-25px);
            /*這里先設置translateZ(-25px)是為了子元素旋轉效果需求,
            不然會造成拉近屏幕(深度)25px
            */
            -webkit-transform-style: preserve-3d;
            -moz-transform-style: preserve-3d;
            -ms-transform-style: preserve-3d;
            -o-transform-style: preserve-3d;
            transform-style: preserve-3d;
            /*規定如何在3D空間呈現子元素,(是否3D視圖)*/
            -webkit-pointer-events: none;
            -moz-pointer-events: none;
            -ms-pointer-events: none;
            -o-pointer-events: none;

            pointer-events: none;
            /*pointer-events設置元素對於鼠標事件的限制*/
            position: absolute;
            top: 0;
            left: 0;
            display: block;
            width: 100%;
            height: 100%;
        }

        /*任務七、給導航設置3D前,與3D后變形效果*/
        .front {/*這個是未獲取焦點時顯示的那一面(正面)*/
            transform:rotateX(0deg) translateZ(25px);
            /*設置正面X軸不旋轉(默認不轉可以不設置)
            translateZ(25px)拉近正面深度距離,目的是不與背面重合
            */
        }

        .back {/*這個是獲取焦點旋轉后的那一面(底下貨值背面)*/
            transform:rotateX(-90deg) translateZ(25px);
            /*設置背面X軸旋轉-90度,
            translateZ(25px)因為已經旋轉了,所以Z軸變成了上下,
            因為旋轉的是-90 , 反向,所以Z軸25px是向下,
            設置Z軸是為了和正面的底邊接觸,而不是正面的中點(一橫)
            */
            color: #FFE7C4;
        }

        .front, .back {
            display: block;
            width: 100%;
            height: 100%;
            position: absolute;
            top: 0;
            left: 0;
            background: #74adaa;
            padding: 15px 30px 15px 31px;
            color: white;
            -webkit-pointer-events: none;
            -moz-pointer-events: none;
            -ms-pointer-events: none;
            -o-pointer-events: none;
            pointer-events: none;
            -webkit-box-sizing: border-box;
            box-sizing: border-box;
        }
        /*任務八、設置導航當前狀態與懸浮狀態下的背景效果*/
        .nav-menu li .active .front,
        .nav-menu li .active .back,
        .nav-menu li a:hover .front,
        .nav-menu li a:hover .back {
            background-color: #51938f;
            background-size: 5px 5px;
            background-size: 5px 5px;
            background-position: 0 0, 30px 30px;
            background-image:linear-gradient(45deg, #478480 25%, transparent 25%, transparent 75%, #478480 75%, #478480),linear-gradient(45deg, #478480 25%, transparent 25%, transparent 75%, #478480 75%, #478480);
            /*只是改變背景,不重要*/
        }
        .nav-menu ul {
            position: absolute;
            text-align: left;
            line-height: 40px;
            font-size: 14px;
            width: 200px;
            -webkit-transition: all 0.3s ease-in;
            -moz-transition: all 0.3s ease-in;
            -ms-transition: all 0.3s ease-in;
            -o-transition: all 0.3s ease-in;
            transition: all 0.3s ease-in;
            -webkit-transform-origin: 0px 0px;
            -moz-transform-origin: 0px 0px;
            -ms-transform-origin: 0px 0px;
            -o-transform-origin: 0px 0px;
            transform-origin: 0px 0px;
            -webkit-transform: rotateX(-90deg);
            -moz-transform: rotateX(-90deg);
            -ms-transform: rotateX(-90deg);
            -o-transform: rotateX(-90deg);
            transform: rotateX(-90deg);
            /*這里-90deg是先把下拉旋轉90度,形成隱藏的假象*/
            -webkit-backface-visibility: hidden;
            -moz-backface-visibility: hidden;
            -ms-backface-visibility: hidden;
            -o-backface-visibility: hidden;
            backface-visibility: hidden;
        }
        /*任務九、顯示下拉導航菜單,並其設置一個變形效果*/
        .nav-menu > li:hover ul {
            display: block;
            transform:rotateX(0deg);
            /*獲取焦點將下拉旋轉回正面*/
        }
    </style>
</head>
<body>
<div id="nav">
    <ul class="nav-menu clearfix unstyled">
        <li><a href="#" class="three-d active">
            Home
            <span class="three-d-box"><span class="front">Home</span><span class="back">Home</span></span>
        </a></li>
        <li><a href="#" class="three-d">
            Services
            <span class="three-d-box"><span class="front">Services</span><span class="back">Services</span></span></a>
            <ul class="clearfix unstyled drop-menu">
                <li><a href="#" class="three-d">
                    Html5
                    <span class="three-d-box"><span class="front">Html5</span><span class="back">Html5</span></span>
                </a></li>
                <li><a href="#" class="three-d">
                    Css3
                    <span class="three-d-box"><span class="front">Css3</span><span class="back">Css3</span></span>
                </a></li>
                <li><a href="#" class="three-d">
                    JavaScript
                    <span class="three-d-box"><span class="front">JavaScript</span><span class="back">JavaScript</span></span>
                </a></li>
                <li><a href="#" class="three-d">
                    Videogames
                    <span class="three-d-box"><span class="front">Videogames</span><span class="back">Videogames</span></span>
                </a></li>
            </ul>
        </li>
        <li><a href="#" class="three-d">
            Products
            <span class="three-d-box"><span class="front">Products</span><span class="back">Products</span></span>
        </a></li>
        <li><a href="#" class="three-d">
            About
            <span class="three-d-box"><span class="front">About</span><span class="back">About</span></span>
        </a></li>
        <li><a href="#" class="three-d">
            Contact
            <span class="three-d-box"><span class="front">Contact</span><span class="back">Contact</span></span></a>
            <ul class="clearfix unstyled drop-menu">
                <li><a href="#" class="three-d">
                    Html5
                    <span class="three-d-box"><span class="front">Html5</span><span class="back">Html5</span></span>
                </a></li>
                <li><a href="#" class="three-d">
                    Css3
                    <span class="three-d-box"><span class="front">Css3</span><span class="back">Css3</span></span>
                </a></li>
                <li><a href="#" class="three-d">
                    JavaScript
                    <span class="three-d-box"><span class="front">JavaScript</span><span class="back">JavaScript</span></span>
                </a></li>
                <li><a href="#" class="three-d">
                    Videogames
                    <span class="three-d-box"><span class="front">Videogames</span><span class="back">Videogames</span></span>
                </a></li>
            </ul>
        </li>
        <li><a href="#" class="three-d">
            Blog
            <span class="three-d-box"><span class="front">Blog</span><span class="back">Blog</span></span></a>
            <ul class="clearfix unstyled drop-menu">
                <li><a href="#" class="three-d">
                    Html5
                    <span class="three-d-box"><span class="front">Html5</span><span class="back">Html5</span></span>
                </a></li>
                <li><a href="#" class="three-d">
                    Css3
                    <span class="three-d-box"><span class="front">Css3</span><span class="back">Css3</span></span>
                </a></li>
                <li><a href="#" class="three-d">
                    JavaScript
                    <span class="three-d-box"><span class="front">JavaScript</span><span class="back">JavaScript</span></span>
                </a></li>
                <li><a href="#" class="three-d">
                    Videogames
                    <span class="three-d-box"><span class="front">Videogames</span><span class="back">Videogames</span></span>
                </a></li>
            </ul>
        </li>
        <li><a href="#" class="three-d">
            Shop On-line
            <span class="three-d-box"><span class="front">Shop On-line</span><span class="back">Shop On-line</span></span>
        </a></li>
    </ul>
</div>
</body>
</html>
View Code

效果如下:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2024 CODEPRJ.COM