目錄
1.外观、定位
2.3D效果
3.注意
首頁 web前端 html教學 CSS3打造3D导航_html/css_WEB-ITnose

CSS3打造3D导航_html/css_WEB-ITnose

Jun 21, 2016 am 09:04 AM

效果预览


分析:可以看出hover的时候是有前后两个面的翻转,并且有一个凸出效果。

HTML分析

代码如下:

<ul class="block-menu">    <li>        <a href="#" class="three-d">            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">            Demo            <span class="three-d-box">                <span class="front">Demo</span>                <span class="back">Demo</span>            </span>        </a>    </li>    <li>        <a href="#" class="three-d">            Deal            <span class="three-d-box">                <span class="front">Deal</span>                <span class="back">Deal</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></ul>
登入後複製

标签里包裹一个盒子里包裹两个,为效果的前后面做准备。

CSS分析

1.外观、定位

代码如下:

        *{  box-sizing:border-box;}        .block-menu{background:black;}        .block-menu li{display:inline-block;}        .block-menu li a{          color:#fff;          text-decoration:none;          text-transform:uppercase;          font-size:24px;          line-height:20px;          font-weight:bold;          font-family: Arial, sans-serif;          display:block;          padding:15px 10px;        }        .three-d{          position:relative;        }        .three-d-box,.front,.back{          width:100%;          height:100%;          position:absolute;          top:0;          left:0;          padding:15px 10px;          background:black;        }
登入後複製

2.3D效果

首先创造3D环境,保留3D空间:

.three-d{perspective:200px;}.three-d-box{transform-style:preserve-3d;}
登入後複製

1.在three-d:hover的时候,我们让.three-d-box旋转,正面面对我们的元素向上翻转,下面有元素翻转上来,并且在翻转时有一个凸出来的效果。
2.关于这个凸出的效果,大家可以进行测试,如果一个元素是以自己的中心为中心点进行翻转时,是不会有凸出的效果。所以如果要制造一个凸出的效果,那么元素翻转的中心就一定不是自己的中心。
3.同时我们看到,在翻转的同时,元素贴回了ul所在的平面的,因此应该是在Z轴上有一定负的位移。

根据以上3点,我们可以设置3D变换:

.three-d:hover .three-d-box{    transform:translateZ(-50px) rotateX(90deg);}
登入後複製

在这里,我先设置translateZ而不是rotateX,是因为rotateX之后坐标轴会变换,如果先roatetX后translateZ的话,Z轴的位移就不是垂直于ul平面(面对我们)的位移了。

由于变换时,.three-d-box有Z轴上的负位移,如果不给.front,.back设置Z轴上的位移的话,这两个平面最后不会贴回ul的平面,而是在ul平面的后面。因此,我们给.front,.back设置Z轴正方向且等于变化时的位移的距离,如此,变化时,这两个元素就会完美贴合ul所在的平面了。

.front,.back{transform:translateZ(50px);}
登入後複製

变换时,.back是从下面上来的,理应有一个rotateX(-90deg)的旋转。如果先translateZ再rotateX的话,.back所在的Y轴上的高度是的一半,动画时并没有从下面上来的效果,因此,应该先rotateX变化坐标后再translateZ,这样.back就在ul的“下方”了。

.front{transform:rotateX(0deg) translateZ(50px);}.back{transform:rotateX(-90deg) translateZ(50px);}
登入後複製

在没有hover的情况下,由于给.front,.back设置了translateZ,.front,.back看起来比正常的大。为了在没有hover的情况下,.front能贴合,我给.three-d设置translateZ(-50px),这样.front虽然先跟随.three-d在Z轴上有-50px的负位移,但随后translateZ(50px)又让它在Z轴上有50px的正位移,如此,便贴合了.
.three-d-box{transform:translateZ(-50px);}

最后,我们为这个变化添加一个过渡的效果:
.three-d-box{transition:all .3s;}

3.注意

  • 为了让效果明显,Z轴上的位移设置的较大值50px;在了解原理后,大家可以设置小一点的位移值,这样下方的.back就不会如此明显的看到了。

  • hover的时候,.three-d-box旋转,它的子元素旋转的中心点是.three-d-box的中心点而不是子元素自己的中心点哦~这样你才能看到有凸出的效果。

  • hover的时候是会覆盖原来的样式,所以hover时,原始状态是.three-d-box在Z轴的位移是0,.front,.back在Z轴的位移是50px;hover的时候以此为起点进行变换。

  • 最终3D相关代码如下:

    .three-d{perspective:200px;}.three-d-box{    transform-style:preserve-3d;    transform:translateZ(-25px);    transition: all .3s ; }.front{transform:rotateX(0deg) translateZ(25px);}.back{transform:rotateX(-90deg) translateZ(25px);}.three-d:hover .three-d-box{    transform: translateZ(-25px) rotateX(90deg);}
    登入後複製
    总结
  • 这个例子很好的说明了,一定要注意变换的中心点

  • 父元素变换时,子元素是以父元素的中心点为中心点变换的,而不是自己。

  • 本網站聲明
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

    熱AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智慧驅動的應用程序,用於創建逼真的裸體照片

    AI Clothes Remover

    AI Clothes Remover

    用於從照片中去除衣服的線上人工智慧工具。

    Undress AI Tool

    Undress AI Tool

    免費脫衣圖片

    Clothoff.io

    Clothoff.io

    AI脫衣器

    AI Hentai Generator

    AI Hentai Generator

    免費產生 AI 無盡。

    熱門文章

    R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
    2 週前 By 尊渡假赌尊渡假赌尊渡假赌
    倉庫:如何復興隊友
    4 週前 By 尊渡假赌尊渡假赌尊渡假赌
    Hello Kitty Island冒險:如何獲得巨型種子
    3 週前 By 尊渡假赌尊渡假赌尊渡假赌

    熱工具

    記事本++7.3.1

    記事本++7.3.1

    好用且免費的程式碼編輯器

    SublimeText3漢化版

    SublimeText3漢化版

    中文版,非常好用

    禪工作室 13.0.1

    禪工作室 13.0.1

    強大的PHP整合開發環境

    Dreamweaver CS6

    Dreamweaver CS6

    視覺化網頁開發工具

    SublimeText3 Mac版

    SublimeText3 Mac版

    神級程式碼編輯軟體(SublimeText3)

    公眾號網頁更新緩存難題:如何避免版本更新後舊緩存影響用戶體驗? 公眾號網頁更新緩存難題:如何避免版本更新後舊緩存影響用戶體驗? Mar 04, 2025 pm 12:32 PM

    公眾號網頁更新緩存難題:如何避免版本更新後舊緩存影響用戶體驗?

    如何使用HTML5表單驗證屬性來驗證用戶輸入? 如何使用HTML5表單驗證屬性來驗證用戶輸入? Mar 17, 2025 pm 12:27 PM

    如何使用HTML5表單驗證屬性來驗證用戶輸入?

    如何高效地在網頁中為PNG圖片添加描邊效果? 如何高效地在網頁中為PNG圖片添加描邊效果? Mar 04, 2025 pm 02:39 PM

    如何高效地在網頁中為PNG圖片添加描邊效果?

    HTML5中跨瀏覽器兼容性的最佳實踐是什麼? HTML5中跨瀏覽器兼容性的最佳實踐是什麼? Mar 17, 2025 pm 12:20 PM

    HTML5中跨瀏覽器兼容性的最佳實踐是什麼?

    &lt; datalist&gt;的目的是什麼。 元素? &lt; datalist&gt;的目的是什麼。 元素? Mar 21, 2025 pm 12:33 PM

    &lt; datalist&gt;的目的是什麼。 元素?

    我如何使用html5&lt; time&gt; 元素以語義表示日期和時間? 我如何使用html5&lt; time&gt; 元素以語義表示日期和時間? Mar 12, 2025 pm 04:05 PM

    我如何使用html5&lt; time&gt; 元素以語義表示日期和時間?

    &gt; gt;的目的是什麼 元素? &gt; gt;的目的是什麼 元素? Mar 21, 2025 pm 12:34 PM

    &gt; gt;的目的是什麼 元素?

    &lt; meter&gt;的目的是什麼。 元素? &lt; meter&gt;的目的是什麼。 元素? Mar 21, 2025 pm 12:35 PM

    &lt; meter&gt;的目的是什麼。 元素?

    See all articles