CSS實現動畫特效導航欄


0 寫在前面

  今天用純CSS編寫了一種帶有特效的導航欄,一方面鞏固熟悉了導航欄的一般寫法,另一方面練習了CSS3的一些新特性。

1 實現效果

  當鼠標划過時,實現了一種動態百葉窗效果。

2 實現細節

2-0 導航欄基本架構

  首先復習導航欄的基本架構,導航欄的實現,采用的是ul-li的結構,為了能夠實現導航效果,可以在li內部增加一個a標簽。

  實現導航欄結構的html代碼如下:

 1  <div class="container">
 2         <ul class="menu">
 3             <li><a href="#">HOME</a></li>
 4             <li><a href="#">FIRST</a>
 5                 <ul class="submenu">
 6                     <li><a href="#">one</a></li>
 7                     <li><a href="#">two</a></li>
 8                     <li><a href="#">three</a></li>
 9                     <li><a href="#">four</a></li>
10                     <li><a href="#">five</a></li>
11                     <li><a href="#">six</a></li>
12                 </ul>
13             </li>
14             <li><a href="#">SECOND</a>
15                 <ul class="submenu">
16                     <li><a href="#">one</a></li>
17                     <li><a href="#">two</a></li>
18                     <li><a href="#">three</a></li>
19                     <li><a href="#">four</a></li>
20                     <li><a href="#">five</a></li>
21                     <li><a href="#">six</a></li>
22                 </ul>
23             </li>
24             <li><a href="#">THIRD</a>
25                 <ul class="submenu">
26                     <li><a href="#">one</a></li>
27                     <li><a href="#">two</a></li>
28                     <li><a href="#">three</a></li>
29                     <li><a href="#">four</a></li>
30                     <li><a href="#">five</a></li>
31                     <li><a href="#">six</a></li>
32                 </ul>
33             </li>
34             <li><a href="#">FOURTH</a>
35                 <ul class="submenu">
36                     <li><a href="#">one</a></li>
37                     <li><a href="#">two</a></li>
38                     <li><a href="#">three</a></li>
39                     <li><a href="#">four</a></li>
40                     <li><a href="#">five</a></li>
41                     <li><a href="#">six</a></li>
42                 </ul>
43             </li>
44             <li><a href="#">OTHER</a></li>
45         </ul>
46     </div>

  頁面布局和導航欄需要進行樣式的初始化,包括去除body的8px,去除a標簽固有樣式,去除ul li的固有樣式,實現水平方向的導航等。

  需要進行模式化的調整,代碼如下:

 1 *{
 2     margin:0;
 3     padding:0;  /*初始化頁面*/
 4     list-style: none; /*清除原點*/
 5 }
 6 body{
 7     background: #ccc;
 8 }
 9 
10 .container{
11     margin: 30px auto;  /*導航欄位置的確定上下空30px左右自適應*/
12     width : 70%;
13 }
14 
15 .container .menu{
16     height:58px;
17 }
18 
19 .menu>li{ /*只將主菜單欄水平布局,需要用>來進行選擇*/
20     float:left;  /*導航欄水平布局*/
21     position: relative; /*為了消除重疊效果,需要讓其子元素脫離文檔流absolute*/
22 }

  a標簽的模式化調整如下:

 1 .menu a{
 2     display:block;   /*a標簽可以覆蓋整個容器范圍*/  
 3     text-decoration: none;   /*a標簽取消下划線*/
 4     text-align: center;  /*文字水平居中*/
 5     color:black;
 6     padding:0 25px;
 7     font-size: 18px;
 8     line-height:36px;  /*撐開行高*/
 9     border-left:3px solid rgb(0,0,0,0);  /*左邊豎線占位(透明度0)*/
10     text-transform:uppercase; /*全部轉成大寫字母*/
11 }

 

2-1 導航欄漸變背景色

  在這個練習中,我學習使用了一種可以實現漸變色的方案 linear-gradient(#from,#to)

1 .menu li{
2     min-width: 140px; /*設置最小寬度撐開寬度*/
3     background: linear-gradient(#3d3838,#999999); /*漸變色*/
4 }
5 
6 .menu li:hover{
7     background: linear-gradient(#111111,#424242);
8 }

 

2-2  3D動畫效果繪制

  為了實現動畫的3D效果,需要為元素設置一個景深(perspective),也就是元素將對於觀察者的距離。

  另外要用到CSS3中的一個3D旋轉效果transform:rotate3d(x,y,z,n deg);前三個參數表示繞x,y,z軸旋轉,具體繞某一軸旋轉,則將該參數置1反之置0,最后一個參數為旋轉角度,單位為deg。

  同時,我們還可以調整初始旋轉坐標軸的位置 transform-origin:x y; 這兩個參數分別表示x y軸初始的偏移位置。

  為了實現旋轉的動畫,我們需要通過transform:rotate3d給出一個初始狀態,一個結束狀態,並添加一個過渡transition。即可實現旋轉效果。

 1 .menu li:hover>a{  /*需要選擇其直屬子元素,而不是全部的a標簽子元素*/
 2     color:white;
 3     border-left:3px solid white;  /*顯示左邊小豎線*/
 4 }
 5 
 6 .submenu{
 7     position:absolute; /*脫離文檔流,定位相對於父級第一個有定位的元素*/
 8     left:0;
 9     top:100%;       /*相對於父級li最底部進行定位*/
10     perspective:1000px;  /*設置景深*/
11     max-height: 0;   /*默認情況下需要將其隱藏,行高縮小至0*/
12     z-index:0;
13 }
14 
15 .submenu li{
16     visibility:hidden;  /*這是為了避免仍有元素占位,鼠標划過下方空白區域時會觸發的bug*/
17     transform: rotate3d(1,0,0,90deg); /*3d旋轉效果,繞x軸旋轉,90°*/
18     transition: all 0.5s; /*過渡動畫,選擇all屬性,過渡時間為0.5s*/
19     
20 }
21 
22 .menu>li:hover .submenu{ 
23     max-height: 999px;
24     z-index:10;
25 }
26 
27 .menu>li:hover .submenu li{
28     visibility: visible; /*調成可見*/
29     transform: rotate3d(0,0,0,0deg); /*實現3d旋轉效果,繞x軸旋轉,從90°變化到0°*/  
30 }

2-3 子元素選擇器與動畫延遲的應用

  在這里我們為了實現百葉窗效果,可以通過子元素選擇器nth-child(n),來選擇導航欄中不同的項進行旋轉

  通過動畫延遲transition-delay,來為不同子元素設置旋轉間隔。

  另外為了美化效果,在導航欄左上角上加一個圓角效果,用first-child進行選擇。

  代碼如下:

 1 .container .menu>li:first-child{
 2     border-radius: 5px 0 0 0;
 3 }
 4 .submenu li:nth-child(1){
 5     transition-delay: 0;
 6 }
 7 .submenu li:nth-child(2){
 8     transition-delay: 100ms;
 9 }
10 .submenu li:nth-child(3){
11     transition-delay: 200ms;
12 }
13 .submenu li:nth-child(4){
14     transition-delay: 300ms;
15 }
16 .submenu li:nth-child(5){
17     transition-delay: 400ms;
18 }
19 .submenu li:nth-child(6){
20     transition-delay: 500ms;
21 }

 

3 總結  

  本次通過編寫導航欄特效,在復習導航欄基本寫法的同時,練習了一些CSS3的特性:

  • 景深:perspective

  • 3D旋轉動畫特效:

    • transform:rotate3d(0,1,0,45deg);
    • 參數分別為繞x,y,z軸旋轉,初始角度。
  • 漸變色效果:linear-gradient(#color1,#color2);

  • 動畫延遲:transition-delay

 


免責聲明!

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



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