文字菜單動畫暢想

本博之前曾經寫過兩篇博文《純css3文字效果推薦》、《css3立體文字最佳實踐》得到了大家的廣泛認可,今天我們更進一步,研究文字菜單上可以做哪些動畫,12種效果會不會有您喜歡的,來來來,開工。

本文案例演示代碼我放在了codepen,速度可能有點慢,不過相信真正的前端童鞋應該喜歡codepen的強大之處。

        --------------------------------------------------------------------------------------------------------------------------------------------------------------------------
                                             ==== 文字菜單暢想====    ==全屏預覽==   ==在線編輯==    ==下載收藏== 
        --------------------------------------------------------------------------------------------------------------------------------------------------------------------------

本文介紹了12種效果,爲了簡化操作html部分適用haml,css部分適用scss。

[html] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. #container  
  2.   -(1..12).each do  
  3.     %nav  
  4.       %ul  
  5.         %li  
  6.           %a{:href=>'#',:title=>'首頁'} 首頁  
  7.         %li  
  8.           %a{:href=>'#',:title=>'信息'} 信息  
  9.         %li  
  10.           %a{:href=>'#',:title=>'作品'} 作品  
  11.         %li  
  12.           %a{:href=>'#',:title=>'聯繫'} 聯繫  
  1. /* 參數設置 */  
  2. $color-accent: saturate(#008833,10%);  
  3. $duration: 500ms;   
  4. $timing: ease;  
  5. /* 重置*/  
  6. *, *:before, *:after { box-sizing: border-box; }   
  7. /*容器設置*/  
  8. #container{  
  9.   counter-reset: counterA;  
  10. }  
  11. /*佈局實現*/  
  12. nav {  
  13.   positionrelative;  
  14.   width100vw;  
  15.   padding10px 0;  
  16.   background: $color-accent;  
  17.   display: table;  
  18.   counter-increment: counterA;  
  19.    &:before{  
  20.     content:counter(counterA);  
  21.     color:rgba(255,255,255,.05);  
  22.     font-size:200px;  
  23.     positionabsolute;  
  24.   }  
  25.   ul {  
  26.     position: realtive;  
  27.     displaytable-cell;  
  28.     vertical-alignmiddle;  
  29.     text-aligncenter;  
  30.     li a {  
  31.       positionrelative;  
  32.       height40px;  
  33.       margin20px;  
  34.       display: inline-block;  
  35.       font-size35pt;  
  36.       color: rgba(#fff,0.5);  
  37.       font-weight900;  
  38.       line-height40px;  
  39.       text-decorationnone;  
  40.       &:before, &:after {  
  41.         contentattr(title);  
  42.         white-space:nowrap;  
  43.         positionabsolute;  
  44.         top: 0; left: 0; right: 0; bottom: 0;  
  45.         overflowhidden;  
  46.         transition:all $duration $timing;  
  47.         color#fff;  
  48.       }  
  49.     }  
  50.   }  
  51.   //若干多的效果的實現  
  52.   // &:nth-child(1){}  
  53.   // &:nth-child(2){}  
  54. }  

第一種效果


第一個效果靈感來自於《Trippeo》,昨天的博文《跟名站學前端之Trippeo》利用css clip實現過,被踩較多,繼續研究更加適用的方式,利用寬度和高度配合overflow:hiddden也可以實現,而且效果更好,代碼如下所示。

  1. // 1 高度變化  
  2.   &:nth-child(1) {  
  3.     background: adjust-hue($color-accent,30deg);  
  4.     a {  
  5.       &:before {  
  6.         height0;  
  7.         opacity: 0;  
  8.       }  
  9.       &:hover:before {   
  10.         height100%;   
  11.         opacity: 1;  
  12.       }  
  13.       &:after { displaynone; }  
  14.     }  
  15.   }  

第二種效果


第二種效果跟第一種效果原理一樣,就是實現寬度的變化。

  1. // 2 ,寬度變化  
  2.   &:nth-child(2) {   
  3.     background: adjust-hue($color-accent,60deg);  
  4.     a {  
  5.       &:before {  
  6.         width0;  
  7.       }  
  8.       &:hover:before {   
  9.          width100%;   
  10.       }  
  11.       &:after { displaynone; }  
  12.     }  
  13.   }  

第三種效果


第三種效果換藥不換湯,效果相同,我們使用不同的實現方式,使用clip,如下面代碼所示。

  1. // 3 ,clip變化  
  2.  &:nth-child(3) {   
  3.    background: adjust-hue($color-accent,90deg);  
  4.    a {  
  5.      &:before {  
  6.        clip: rect(0,0,50px,0);  
  7.      }  
  8.      &:hover:before {   
  9.        clip: rect(0,100px,50px,0);  
  10.      }  
  11.      &:after { displaynone; }  
  12.    }  
  13.  }  

第四種效果


第四種效果同樣使用clip,不過第三種效果使用clip:rect(),第四種方式使用clip:circle()這種方式目前支持webkit瀏覽器,瀏覽器不給力的同學請勿吐槽。

  1. // 4  clip path circle  
  2.    &:nth-child(4) {   
  3.     background: adjust-hue($color-accent,120deg);  
  4.     a {  
  5.       &:before {  
  6.         clip-path: circle(1px at 1px 1px);  
  7.       }  
  8.       &:hover:before {   
  9.         clip-path: circle(50px at 40px 30px);  
  10.       }  
  11.       &:after { displaynone; }  
  12.     }  
  13.   }  

第五種效果


第五種效果同樣使用clip實現,我們給文字加一個漸變下劃線,使用width的變化應該也可以,大家可以自行嘗試。

  1. // 5, 漸變下劃線    
  2.   &:nth-child(5) {   
  3.     background: adjust-hue($color-accent,150deg);  
  4.     a {  
  5.       &:before {  
  6.         top:50px;  
  7.         content:"";  
  8.         height:2px;  
  9.         clip: rect(0,0,50px,0);  
  10.         opacity: .2;  
  11.         background: linear-gradient(left , rgb(25520824311% , rgb(154214593%);  
  12.         background: -o-linear-gradient(left , rgb(25520824311% , rgb(154214593%);  
  13.         background: -ms-linear-gradient(left , rgb(25520824311% , rgb(154214593%);  
  14.         background: -moz-linear-gradient(left , rgb(25520824311% , rgb(154214593%);  
  15.         background: -webkit-linear-gradient(left , rgb(25520824311% , rgb(154214593%);  
  16.       }  
  17.       &:hover:before {   
  18.         opacity: 1;  
  19.         clip: rect(0,240px,50px,0);  
  20.       }  
  21.       &:after { displaynone; }  
  22.     }  
  23.   }  

第六種效果


第六種效果,我們來給:before實現的下劃線來點動畫。

  1. // 6 下劃線動畫  
  2.  &:nth-child(6) {   
  3.    background: adjust-hue($color-accent,180deg);  
  4.    a {  
  5.      &:before {  
  6.        top:48px;  
  7.        content:"";  
  8.        height:2px;  
  9.        background-color:rgba(#fff,0.2);  
  10.      }  
  11.      &:hover:before {  
  12.        top:22px;  
  13.        background-color:rgba(#fff,0.5);  
  14.      }  
  15.      &:after { displaynone; }  
  16.    }  
  17.  }  

第七種效果


又是一種修飾線條動畫,兩條線原來在兩側,hover之後移動文字下方。

  1. // 7,修飾線條動畫  
  2. &:nth-child(7) {   
  3.   background: adjust-hue($color-accent,360deg);  
  4.   a {  
  5.     &:before,&:after {  
  6.       width:2px;  
  7.       height:38px;  
  8.       content:"";  
  9.       background-color: rgba(255,255,255,.2);  
  10.       positionabsolute;  
  11.     }  
  12.     &:before {  
  13.       transform-origin:30px 20px;  
  14.     }  
  15.     &:after {   
  16.       transform-origin:30px 20px;  
  17.       transform:translateX(94px);  
  18.     }  
  19.     &:hover:before {  
  20.       height:80px;  
  21.       transform:rotate(-90deg);  
  22.       background-color: rgba(255,255,255,.4);  
  23.     }  
  24.     &:hover:after {  
  25.       height:80px;  
  26.       transform:translateX(40px) translateY(64px) rotate(90deg);  
  27.       background-color: rgba(255,255,255,.6);  
  28.     }  
  29.   }  
  30. }  

第八種效果


第八種效果爲提示文字變大動畫,:before僞對象實現提示文字,hover之後提示文字由小變大,透明度從0到1。

  1. // 8,提示文字變大  
  2. &:nth-child(8) {   
  3.   background: adjust-hue($color-accent,240deg);  
  4.   a {  
  5.     &:before {  
  6.       top: 0; left: 0; right: 0; bottom: 0;  
  7.       opacity: 0;  
  8.       visibilityhidden;  
  9.       transform: scale(0.5);  
  10.     }  
  11.     &:hover:before {  
  12.       opacity: 1;  
  13.       visibilityvisible;  
  14.       transform: scale(1);  
  15.     }  
  16.     &:after { displaynone; }  
  17.   }  
  18. }  

第九種效果


第九種效果爲第八種的一個變體,提示文字由大變小。

  1. // 9,提示文字由大變小  
  2. &:nth-child(9) {   
  3.   background: adjust-hue($color-accent,210deg);  
  4.   a {  
  5.     &:before {  
  6.       top: 0; left: 0; right: 0; bottom: 0;  
  7.       opacity: 0;  
  8.       visibilityhidden;  
  9.       transform: scale(1.5);  
  10.     }  
  11.     &:hover:before {  
  12.       opacity: 1;  
  13.       visibilityvisible;  
  14.       transform: scale(1);  
  15.     }  
  16.     &:after { displaynone; }  
  17.   }  
  18. }  

第十種效果


第十種效果使用了:before和:after兩個僞對象,分別從左右兩側向中間集中。

  1. // 10,兩側向中間  
  2. &:nth-child(10) {   
  3.   background: adjust-hue($color-accent,270deg);  
  4.   a {  
  5.     &:before, &:after {  
  6.       top: 0; left: 0; right: 0; bottom: 0;  
  7.       opacity: 0;  
  8.       visibilityhidden;  
  9.     }  
  10.     &:before { transform: translateX(-100%); }  
  11.     &:after { transform: translateX(100%); }  
  12.     &:hover:before, &:hover:after {  
  13.       opacity: 1;  
  14.       visibilityvisible;  
  15.       transform: none;  
  16.     }  
  17.   }  
  18. }  

第十一種效果


第十一種效果由第十種變種而來,:before和:after兩個僞對象形成的提示文字從上下到中間。

  1. // 11, 上下到中間  
  2. &:nth-child(11) {   
  3.   background: adjust-hue($color-accent,300deg);  
  4.   a {  
  5.     &:before, &:after {  
  6.       top: 0; left: 0; right: 0; bottom: 0;  
  7.       opacity: 0;  
  8.       visibilityhidden;  
  9.     }  
  10.     &:before { transform: translateY(-100%); }  
  11.     &:after { transform: translateY(100%); }  
  12.     &:hover:before, &:hover:after {  
  13.       opacity: 1;  
  14.       visibilityvisible;  
  15.       transform: none;  
  16.     }  
  17.   }  
  18. }  

第十二種效果


第十二種效果簡化了第十一種效果,僅僅使用:before僞對象實現動畫。

  1. // 12  
  2.   &:nth-child(12) {   
  3.     background: adjust-hue($color-accent,330deg);  
  4.     a {  
  5.       &:before {  
  6.         top: 0; left: 0; right: 0; bottom: 0;  
  7.         opacity: 0;  
  8.         visibilityhidden;  
  9.         transform: translateY(-100%);  
  10.       }  
  11.       &:hover:before {  
  12.         opacity: 1;  
  13.         visibilityvisible;  
  14.         transform: translateY(0);  
  15.       }  
  16.       &:after { displaynone; }  
  17.     }  
  18.   }  

感謝您閱讀本文,如果您能看到這裏,說明您有強烈的求知慾和超強的毅力,成功已經不遠了。

最後歡迎留言互動,如果您覺得好就點個贊,如果覺得不好請您踩了之後幫幫我,給我提點意見,萬分感謝。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章