摘要:規(guī)定動畫的時長。注意子菜單要用隱藏,在顯示的時候再設(shè)置。如果不加,實際上子菜單,以及子菜單下面的一直在頁面上,如果鼠標移上去子菜單,以及子菜單下面的。
1.前言
在自己的專欄上寫了十幾篇文章了,都是與js有關(guān)的。暫時還沒有寫過關(guān)于css3的文章。css3,給我的感覺就是,不難,但是很難玩轉(zhuǎn)自如。今天,就用css3來實現(xiàn)三個特效,希望這三個特殊能讓大家受到啟發(fā),利用css3做出更好,更炫的動畫效果,并且對比這三個特效和JS特效的對比,希望能幫助到是大家學到CSS3的一些知識。今天這三個案例可以說是一個預習或者熱身吧,以后也會寫關(guān)于CSS3更好的作品或者文章,最近我也是在編寫一個css3的動畫庫!
這幾個實例,摘自我自己的平常練習的項目,代碼已經(jīng)提到github上面了(css3-demos)。歡迎大家star。
2.過渡與動畫概念理解 css3過渡化用菜鳥教程的說法,CSS3過渡是元素從一種樣式逐漸改變?yōu)榱硪环N的效果。要實現(xiàn)這一點,必須規(guī)定兩項內(nèi)容:1.指定要添加效果的CSS屬性。2.指定效果的持續(xù)時間。
css3動畫化用菜鳥教程的說法,CSS3動畫是根據(jù)@keyframes規(guī)則內(nèi)指定一個CSS樣式和動畫將逐步從目前的樣式更改為新的樣式。指定至少這兩個CSS3的動畫屬性綁定向一個選擇器:1.規(guī)定動畫的名稱。2.規(guī)定動畫的時長。
3.過渡案例-炫酷下拉 3-1原理分析1.首先就是一個導航下拉,就是鼠標放上去出現(xiàn)一個下拉列表
2.然后發(fā)現(xiàn),下拉里面,每一個選項是從不同的兩個方向出現(xiàn)的
3.出現(xiàn)的方式是奇數(shù)項從左邊進,偶數(shù)項從右邊進,進入方式是滑動淡入。
1.首先頁面的布局,這個應該大家都知道,菜單無非就是一個ul-li列表,下拉列表就是li下面的一個ul-li。
reset.css(樣式重置表和個人常用樣式封裝)
*{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:400}ol,ul{list-style:none}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:400}fieldset,img{border:0}textarea{resize:none}a{color:#000;text-decoration:none}.fontsize24,h1{font-size:24px}.fontsize20,h2{font-size:20px}.fontsize18,h3{font-size:18px}.fontsize16,h4{font-size:16px}.fontsize14,h5{font-size:14px}.fontsize12,h6{font-size:12px}.bold{font-weight:700}.fllil li{float:left}.fllir li{float:right}.fl{float:left}.fr{float:right}.radius{border-radius:100%}.positionCenterLeft{left:0;right:0;margin:auto}.positionCenterTop{top:0;bottom:0;margin:auto}.positionCenter{top:0;bottom:0;left:0;right:0;margin:auto}.distable{display:table}.distablecell{display:table-cell;vertical-align:middle}.textels{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.marginCenter{margin:0 auto}.t_l{text-align:left}.t_c{text-align:center}.t_r{text-align:right}.unLine{text-decoration:underline}.fiexd{position:fixed}.absolute{position:absolute}.relative{position:relative}.wrapper{clear:both;overflow:hidden}.o-hidden{overflow:hidden}.hidden{display:none}.block{display:block}.lblock{display:inline-block}.clear{clear:both}.pointer{cursor:pointer}img{border:0;vertical-align:middle}
html代碼如下
css代碼如下
.demo-nav { width: 500px; margin: 0 auto; } .demo-nav li { line-height: 40px; padding: 0 10px; background: #09f; color: #fff; position: relative; } .demo-nav li ul { position: absolute; left: 0; top: 40px; height: 0; overflow: hidden; } .demo-nav li ul li { float: none; /*過渡代碼*/ transition: all .3s; background: #f90; opacity: 0; } /*奇數(shù)項初始往右邊偏移100%*/ .demo-nav li ul li:nth-of-type(1n) { transform: translate3d(100%, 0, 0); } /*偶數(shù)項初始往左邊偏移100%*/ .demo-nav li ul li:nth-of-type(2n) { transform: translate3d(-100%, 0, 0); } .demo-nav li:hover ul { overflow: visible; } /*透明度和互動同時進行*/ .demo-nav li:hover ul li { opacity: 1; transform: translate3d(0, 0, 0); }
注意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的動畫的。
注意2:子菜單ul要用.demo-nav li ul{height: 0;overflow:hidden;}隱藏,在顯示的時候再設(shè)置.demo-nav li:hover ul{overflow: visible;}。這一步不能省,否則會出問題。如果不加,實際上子菜單ul,以及子菜單ul下面的li一直在頁面上,如果鼠標移上去子菜單ul,以及子菜單ul下面的li。那么實際上也會觸發(fā)父級li的hover。3-3與JS實現(xiàn)對比
這個效果js也是能實現(xiàn),實現(xiàn)上也不難,無非就是調(diào)用定時器的問題。但是寫的肯定比css3多,邏輯也會比css3復雜。
1.首先,父級li必須要綁定一個鼠標移出和移入事件,也要定義一個屬性,記錄定時器(不同的父級li不能共用一個定時器,不然會受到干擾,必須每一個父級li下面都要有一個屬性記錄定時器)。obj.timer=setInterval(function(){},100)
2.用js實現(xiàn),實際上也是操作class或者css。所以性能上css3是比js好!
3.針對這個動畫,css3也比js好控制。
4.過渡案例-手風琴 4-1原理分析ec-css導航欄
這個看著就不難,也是一個ul-li,鼠標移入li,li下面的標題顏色,背景色,箭頭改變,li下面的div的高度改變!
4-2實現(xiàn)過程1.首先,排版ul-li,li下面又有一個標題(這個用h3),和內(nèi)容(div)
html如下
css代碼如下
由于這栗子,li里面的div在樣式上,設(shè)置了padding。所以建議我的做法是改變li設(shè)置overflow: hidden;height:40px;/*高度等于標題的高度,初始就是隱藏div*/。因為如果鼠標移入li,是操作div的話。
會有一個小問題!如下栗子!
部分代碼改成如下
.demo-slide-tab li { display: block; margin: 0; padding: 0; width: 100%; background: #f0f0f0; } .demo-slide-tab div { margin: 0; height: 0; overflow: hidden; transition: height 0.3s ease-in-out; } .demo-slide-tab li:hover div { padding: 10px; height: 220px; }
大家看可以看到,鼠標移出的那一瞬間,看到div里面的內(nèi)容也貼邊了!我就是為了避免這個,才通過操作li的高度來控制div的高度!
1.這個動畫,我感覺雖然性能上css3是比js要好一些。畢竟js也是控制css或者class來實現(xiàn)!
2.靈活性的話,這個就要比js差了,比如div的顯示與隱藏,我不想通過鼠標移入移出的方式控制,如果我想通過點擊的方式控制div的顯示與隱藏呢。對于js的方式來說,這個就是觸發(fā)的事件就可以了,對于插件來說,可能就改一個插件就行了!對于css3實現(xiàn)的話,這個就不但要改css樣式了,也要改html結(jié)構(gòu)了!
這里,我的建議就是,這個動畫最理想的還是用js和css3結(jié)果,結(jié)果是最好的。如果針對靈活性不高的需求,可以只用css3。
5.動畫案例-無縫滾動ec-css手風琴
如上圖,無縫滾動也稱跑馬燈,就是一些內(nèi)容,然后向左移動。鼠標放上去的時候,動畫停止!交互就這樣,下面來看實現(xiàn)過程!
5-1原理分析1.首先,初始狀態(tài)就是如下圖,然后向右慢慢移動(黑框部分為可視區(qū)域)
2.但是這樣,滾動到最后一張的時候,就會出現(xiàn)問題!如下圖
3.所以正確的姿勢應該是,這樣就需要對滾動內(nèi)容進行復制一次了!
4.但還是避免不了第二步的問題
5.這里就需要做一步了,就是在剛滾動到下輪第一張的時候。如下圖(用這個案例說,不包括復制出來的4個li,就總共有4個,每個200px,那么就是方ul滾動了800px的時候)
6.滾動到這里,就瞬間拉回來,回到原來的位置,再進行滾動操作(當ul滾動了800px的時候,瞬間拉回原來位置,相當于還沒有開始滾動)
1.首先布局,就是在一個黑框就是一個div,橙色裝著1234的就是ul-li布局!
看下面的代碼注釋,再結(jié)合上面的原理,大家就很好理解了!
html代碼如下
css代碼
5-3與JS實現(xiàn)對比
1.這個動畫,性能上當然是css3比較好,而靈活性上也肯定是。比如做到下面這個圖這樣效果。點擊左右箭頭切換方向!
還有一個就是,比如上面案例中,li的個數(shù)是變化的,那么ul的寬度也是要用js計算,以及ul的內(nèi)容要進行復制的話,以程序員的思維,理應也是用js,而不是手動復制!
2.所以,這個動畫,建議的還是用js和css3結(jié)合使用,這樣結(jié)果最好,性能上和靈活上都得到折中,性價比無疑是最好的!
5-4完整代碼5.總結(jié)ec-css無縫滾動
關(guān)于css3,我的開發(fā)小原則就是能用css3解決的,我不會寫js,但是如果要寫js的,我也不會吝嗇到不寫js,只用css3寫出退而求之的效果!css3跟js搭配,能做出很多意想不到的震撼效果,這個就得看大家腦洞有多大了!
好了,今天通過三個案例帶大家初步認識了css3的過渡和動畫。希望能給大家起一個熱身的作用,或者是大家看了這三個案例,知道怎么去開發(fā)其它的案例,發(fā)散思維!但是這個只是css3過渡和動畫的冰山一角而已,css3就算沒有其他的新特性,就說過渡和動畫,魅力就足夠大,大家也可以到網(wǎng)上搜下css3的案例!就知道css3的魅力了!關(guān)于css3的新特性,以后我會繼續(xù)寫文章。
最后還是那句老話,如果覺得我哪里寫得不好,寫錯了,歡迎指點!讓大家相互學習,相互幫助!
-------------------------華麗的分割線--------------------
想了解更多,關(guān)注關(guān)注我的微信公眾號:守候書閣
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/112334.html
摘要:層疊即表示允許以多種方式來描述樣式,一個元素可以被渲染呈現(xiàn)出多種樣式。可以讓屬性的變化過程持續(xù)一段時間,而不是立即生效。比如,將元素的顏色從白色改為黑色,通常這個改變是立即生效的,使用后,將按一個曲線速率變化。 showImg(https://segmentfault.com/img/bVZwyL?w=900&h=385); CSS 的全稱是 Cascading Style Sheet...
摘要:前端日報精選掌握開發(fā)工具新一代前端開發(fā)技術(shù)和到底是咋回事第期深入淺出高階組件基于的移動頁面緩存解決方案譯保護我們的,立刻停止狐步舞中文譯中和之間的區(qū)別個人文章譯什么是個人文章譯個人文章熱身實戰(zhàn)過渡與動畫實現(xiàn)炫酷下拉, 2017-08-01 前端日報 精選 掌握Chrome開發(fā)工具:新一代前端開發(fā)技術(shù)exports、module.exports和export、export default...
摘要:本周于上海閉幕,掘金和知乎上都有對應的實錄和問答,但會議的視頻目前都還沒放出來,有心的同學如果找到了歡迎分享。建議中英文對照閱讀。英文原文前端獨立技術(shù)博客推薦推薦一些現(xiàn)在還在堅持原創(chuàng)的博主,有業(yè)界大牛,也有小鮮肉,也有國外美女。 CSS 樣式書寫規(guī)范最佳實踐 本文的所列是實踐當中得出的一套比較不錯的 CSS 書寫規(guī)范,可以結(jié)合自身團隊發(fā)展出一套適合自己業(yè)務的規(guī)范。 CSS中的字體與排版...
摘要:本周于上海閉幕,掘金和知乎上都有對應的實錄和問答,但會議的視頻目前都還沒放出來,有心的同學如果找到了歡迎分享。建議中英文對照閱讀。英文原文前端獨立技術(shù)博客推薦推薦一些現(xiàn)在還在堅持原創(chuàng)的博主,有業(yè)界大牛,也有小鮮肉,也有國外美女。 CSS 樣式書寫規(guī)范最佳實踐 本文的所列是實踐當中得出的一套比較不錯的 CSS 書寫規(guī)范,可以結(jié)合自身團隊發(fā)展出一套適合自己業(yè)務的規(guī)范。 CSS中的字體與排版...
摘要:本周于上海閉幕,掘金和知乎上都有對應的實錄和問答,但會議的視頻目前都還沒放出來,有心的同學如果找到了歡迎分享。建議中英文對照閱讀。英文原文前端獨立技術(shù)博客推薦推薦一些現(xiàn)在還在堅持原創(chuàng)的博主,有業(yè)界大牛,也有小鮮肉,也有國外美女。 CSS 樣式書寫規(guī)范最佳實踐 本文的所列是實踐當中得出的一套比較不錯的 CSS 書寫規(guī)范,可以結(jié)合自身團隊發(fā)展出一套適合自己業(yè)務的規(guī)范。 CSS中的字體與排版...
閱讀 770·2021-09-30 09:46
閱讀 3776·2021-09-03 10:45
閱讀 3609·2019-08-30 14:11
閱讀 2543·2019-08-30 13:54
閱讀 2255·2019-08-30 11:00
閱讀 2347·2019-08-29 13:03
閱讀 1553·2019-08-29 11:16
閱讀 3581·2019-08-26 13:52