CSS3熱身實戰——過渡與動畫(實現炫酷下拉,手風琴,無縫滾動)

發表於2017-08-04

1.前言

在自己的專欄上寫了十幾篇文章了,都是與js有關的。暫時還沒有寫過關於css3的文章。css3,給我的感覺就是,不難,但是很難玩轉自如。今天,就用css3來實現三個特效,希望這三個特殊能讓大家受到啟發,利用css3做出更好,更炫的動畫效果,並且對比這三個特效和JS特效的對比,希望能幫助到是大家學到CSS3的一些知識。今天這三個案例可以說是一個預習或者熱身吧,以後也會寫關於CSS3更好的作品或者文章,最近我也是在編寫一個css3的動畫庫!

2.過渡與動畫概念理解

css3過渡

化用菜鳥教程的說法,CSS3過渡是元素從一種樣式逐漸改變為另一種的效果。要實現這一點,必須規定兩項內容:1.指定要新增效果的CSS屬性。2.指定效果的持續時間。

css3動畫

化用菜鳥教程的說法,CSS3動畫是根據@keyframes規則內指定一個CSS樣式和動畫將逐步從目前的樣式更改為新的樣式。指定至少這兩個CSS3的動畫屬性繫結向一個選擇器:1.規定動畫的名稱。2.規定動畫的時長。

3.過渡案例-炫酷下拉

bVRzhq

3-1原理分析

1.首先就是一個導航下拉,就是滑鼠放上去出現一個下拉選單
2.然後發現,下拉里面,每一個選項是從不同的兩個方向出現的
3.出現的方式是奇數項從左邊進,偶數項從右邊進,進入方式是滑動淡入。

3-2實現過程

1.首先頁面的佈局,這個應該大家都知道,選單無非就是一個ul-li列表,下拉選單就是li下面的一個ul-li。

reset.css(樣式重置表和個人常用樣式封裝)

html程式碼如下

css程式碼如下

注意1:在顯示下拉選單的操作上,剛開始隱藏子選單ul的樣式,不能這樣寫.demo-nav li ul{display:none;}。要這樣寫.demo-nav li ul{height: 0;overflow:hidden;},滑鼠放上父級li的時候,顯示ul不能這樣寫.demo-nav li:hover ul{display:block;},要這樣寫,.demo-nav li:hover ul{overflow: visible;}因為一開始如果子選單ul是隱藏的,滑鼠放到父級li的時候,子選單ul就顯示出來,這樣是看到子選單ul下面li的動畫的。

bVRzuK

注意2:子選單ul要用.demo-nav li ul{height: 0;overflow:hidden;}隱藏,在顯示的時候再設定.demo-nav li:hover ul{overflow: visible;}。這一步不能省,否則會出問題。如果不加,實際上子選單ul,以及子選單ul下面的li一直在頁面上,如果滑鼠移上去子選單ul,以及子選單ul下面的li。那麼實際上也會觸發父級lihover

bVRzxh

bVRzxr

3-3與JS實現對比

這個效果js也是能實現,實現上也不難,無非就是呼叫定時器的問題。但是寫的肯定比css3多,邏輯也會比css3複雜。
1.首先,父級li必須要繫結一個滑鼠移出和移入事件,也要定義一個屬性,記錄定時器(不同的父級li不能共用一個定時器,不然會受到干擾,必須每一個父級li下面都要有一個屬性記錄定時器)。obj.timer=setInterval(function(){},100)
2.用js實現,實際上也是操作class或者css。所以效能上css3是比js好!
3.針對這個動畫,css3也比js好控制。

3-4完整程式碼

4.過渡案例-手風琴

bVRze0

4-1原理分析

這個看著就不難,也是一個ul-li,滑鼠移入li,li下面的標題顏色,背景色,箭頭改變,li下面的div的高度改變!

4-2實現過程

1.首先,排版ul-li,li下面又有一個標題(這個用h3),和內容(div)

html如下

css程式碼如下

由於這栗子,li裡面的div在樣式上,設定了padding。所以建議我的做法是改變li設定overflow: hidden;height:40px;/*高度等於標題的高度,初始就是隱藏div*/。因為如果滑鼠移入li,是操作div的話。
會有一個小問題!如下栗子!

部分程式碼改成如下

bVRzA9bVRzBe

大家看可以看到,滑鼠移出的那一瞬間,看到div裡面的內容也貼邊了!我就是為了避免這個,才通過操作li的高度來控制div的高度!

4-3與JS實現對比

1.這個動畫,我感覺雖然效能上css3是比js要好一些。畢竟js也是控制css或者class來實現!
2.靈活性的話,這個就要比js差了,比如div的顯示與隱藏,我不想通過滑鼠移入移出的方式控制,如果我想通過點選的方式控制div的顯示與隱藏呢。對於js的方式來說,這個就是觸發的事件就可以了,對於外掛來說,可能就改一個外掛就行了!對於css3實現的話,這個就不但要改css樣式了,也要改html結構了!
這裡,我的建議就是,這個動畫最理想的還是用js和css3結果,結果是最好的。如果針對靈活性不高的需求,可以只用css3。

4-4完整程式碼

5.動畫案例-無縫滾動

bVRzfe

如上圖,無縫滾動也稱跑馬燈,就是一些內容,然後向左移動。滑鼠放上去的時候,動畫停止!互動就這樣,下面來看實現過程!

5-1原理分析

1.首先,初始狀態就是如下圖,然後向右慢慢移動(黑框部分為可視區域)

bVREfy

2.但是這樣,滾動到最後一張的時候,就會出現問題!如下圖

bVREfX

3.所以正確的姿勢應該是,這樣就需要對滾動內容進行復制一次了!

bVREf4

4.但還是避免不了第二步的問題

bVREgf

5.這裡就需要做一步了,就是在剛滾動到下輪第一張的時候。如下圖(用這個案例說,不包括複製出來的4個li,就總共有4個,每個200px,那麼就是方ul滾動了800px的時候)bVRER1

6.滾動到這裡,就瞬間拉回來,回到原來的位置,再進行滾動操作(當ul滾動了800px的時候,瞬間拉回原來位置,相當於還沒有開始滾動)bVREkO

5-2實現過程

1.首先佈局,就是在一個黑框就是一個div,橙色裝著1234的就是ul-li佈局!
看下面的程式碼註釋,再結合上面的原理,大家就很好理解了!

html程式碼如下

css程式碼

5-3與JS實現對比

1.這個動畫,效能上當然是css3比較好,而靈活性上也肯定是。比如做到下面這個圖這樣效果。點選左右箭頭切換方向!

bVREn8

還有一個就是,比如上面案例中,li的個數是變化的,那麼ul的寬度也是要用js計算,以及ul的內容要進行復制的話,以程式設計師的思維,理應也是用js,而不是手動複製!

2.所以,這個動畫,建議的還是用js和css3結合使用,這樣結果最好,效能上和靈活上都得到折中,價效比無疑是最好的!

5-4完整程式碼

 

5.總結

關於css3,我的開發小原則就是能用css3解決的,我不會寫js,但是如果要寫js的,我也不會吝嗇到不寫js,只用css3寫出退而求之的效果!css3跟js搭配,能做出很多意想不到的震撼效果,這個就得看大家腦洞有多大了!
好了,今天通過三個案例帶大家初步認識了css3的過渡和動畫。希望能給大家起一個熱身的作用,或者是大家看了這三個案例,知道怎麼去開發其它的案例,發散思維!但是這個只是css3過渡和動畫的冰山一角而已,css3就算沒有其他的新特性,就說過渡和動畫,魅力就足夠大,大家也可以到網上搜下css3的案例!就知道css3的魅力了!關於css3的新特性,以後我會繼續寫文章。
最後還是那句老話,如果覺得我哪裡寫得不好,寫錯了,歡迎指點!讓大家相互學習,相互幫助!

相關文章