webpack圖標(biāo)的實(shí)現(xiàn)

webpack-icon

進(jìn)入webpack的官網(wǎng)劣砍,可以看到它的圖標(biāo),一開始我以為是webgl寫的吠各,其實(shí)只是css3實(shí)現(xiàn)的,這里教大家怎么使用css3實(shí)現(xiàn)這樣一個動畫

效果在這里,和官網(wǎng)的有點(diǎn)差異,因?yàn)槲野?code>backface-visibility設(shè)置成了hidden,把backface-visiblity注釋掉再修改下border的顏色就和官網(wǎng)的差不多了,看起來有點(diǎn)暈暈的..

強(qiáng)烈建議沒有css3 3d基礎(chǔ)的朋友看張鑫旭的教程

我們先創(chuàng)建一個盒子div(.container),盒子內(nèi)部由6個div組成,分別表示盒子的6個表面.

    <div class='container'>
        <div class='face front'>front</div>
        <div class='face back'>back</div>
        <div class='face left'>left</div>
        <div class='face right'>right</div>
        <div class='face top'>top</div>
        <div class='face bottom'>bottom</div>
    </div>

這里使用stylus來寫css代碼猴鲫,stylus很簡單易學(xué)累颂,一目了然滞详,可以去官網(wǎng)學(xué)習(xí),不過后面也有轉(zhuǎn)換后的css代碼

//先定義兩個變量紊馏,一個是盒子的大小料饥,一個背景顏色
$size = 240px
$backgroundColor = radial-gradient(transparent 30%,rgba(5,17,53,.2) 100%)

//定義容器的css
.container
    position relative //將元素設(shè)置成相對的
    margin 120px auto       //居中
    width $size       //設(shè)置寬高
    height $size      
    
    //定義每個表面的共性
    .face   
        position absolute //絕對定位
        width $size       //大小
        height $size
        background $backgroundColor //背景顏色
        text-align center
        font-size 24px 
        transform-origin 50%        //變換中心為幾何中心
        backface-visibility hidden  //旋轉(zhuǎn)到背面消失,可以不要

上面是容器和表面的css代碼,下面我們來定義front,back,left,right,top,bottom的移動,讓它們組合成一個盒子

.front
    transform translateZ($size/2)

.back
    transform rotateY(180deg) translateZ($size/2) 

.right
    transform rotateY(90deg) translateZ($size/2)

.left
    transform rotateY(-90deg) translateZ($size/2)

.top
    transform rotateX(-90deg) translateZ($size/2)

.bottom
    transform rotateX(90deg) translateZ($size/2)

需要注意的是朱监,每個元素都是向前移動size/2岸啡,因?yàn)樾D(zhuǎn)后每個面對應(yīng)的方向都發(fā)生了改變。移動也只是在旋轉(zhuǎn)后的那個方向上移動,如果不能理解這個過程赫编,自己去嘗試下就懂了巡蘸。。

我們將容器向下旋轉(zhuǎn)45deg擂送,向右旋轉(zhuǎn)45deg

后面我發(fā)現(xiàn)這里向下旋轉(zhuǎn)的角度是不正確的,記得修改成36deg,才能和webpack的圖標(biāo)一致.

.container
    position relative //將元素設(shè)置成相對的
    margin 20px auto       //居中
    width $size       //設(shè)置寬高
    height $size 
+  transform rotateX(-45deg) rotateY(45deg)    
+  transform-style preserve-3d

這里就是整體的stylus代碼,這里就是編譯后的css代碼,這里是整體的效果悦荒。

可以看到大致的模型(一個盒子)已經(jīng)出來了。

現(xiàn)在我們讓它動起來嘹吨,定義一個keyframes

@keyframes boxr 
    0%
        transform rotateX(-45deg) rotateY(45deg)
    70%
        transform rotateX(-45deg) rotateY(405deg)
    100%
        transform rotateX(-45deg) rotateY(405deg)

這個動畫會在旋轉(zhuǎn)一段時間后等待一段時間搬味。形成轉(zhuǎn)動延時的效果
下面添加 animation

.container 
    position: relative;
    margin: 120px auto;
    width: 240px;
    height: 240px;
    transform: rotateX(-45deg) rotateY(45deg);
+   animation: boxr 5s ease-in-out infinite 1s;
    transform-style: preserve-3d;

得到的整體效果在這里

前面的動畫我仔細(xì)看了下,上面的代碼容器向下旋轉(zhuǎn)的角度是不對的蟀拷,官網(wǎng)的角度大概是36deg左右碰纬,我寫的時候認(rèn)為是45deg需要注意问芬,下面的代碼是以36deg實(shí)現(xiàn)的悦析。

下面我們需要創(chuàng)建另外一個容器,可以使用@extend愈诚,但是為了清晰她按,我這里重新寫一下牛隅,我們整理html代碼,得到下面的代碼

    <div class='webpack-icon'>
        <div class='container'>
            <div class='face front'></div>
            <div class='face back'></div>
            <div class='face left'></div>
            <div class='face right'></div>
            <div class='face top'></div>
            <div class='face bottom'></div>
        </div>
        <div class='innerContainer'>
            <div class='face front'></div>
            <div class='face back'></div>
            <div class='face left'></div>
            <div class='face right'></div>
            <div class='face top'></div>
            <div class='face bottom'></div>
        </div>
    </div>

除了webpack-icon代碼,還要將innerContainer的size的大小修改成為前者的2分之一酌泰,你也可以自定義內(nèi)部容器的大小媒佣。。

+   .webpack-icon  
+       position relative
+       width $size
+       height $size
+       margin 120px auto
       .container
        ...
+       innerContainer
+           position relative
+           width ($size/2)
+           height ($size/2)      
+           ... 

整體stylus代碼的在這里,css代碼在這里,效果在這里

可以看到陵刹,顯示的有兩個盒子默伍,但是一個再上,一個在下衰琐,我們需要設(shè)置下面盒子的top值,將top設(shè)置成為-(($size*3)/4)

上面的top值是怎么得到的也糊,數(shù)學(xué)問題,列個等式$size-top=($size-$size/2)/2羡宙,解方程狸剃,我就不詳細(xì)解釋這個問題了,自己看下就知道了

現(xiàn)在狗热,內(nèi)部的盒子的就在外部盒子的中間了钞馁。

我們定義另一個keyframes動畫,和之前的keyframes動畫方向相反匿刮,前面有類似的代碼僧凰,最后,我們再上色熟丸,更換background训措,這里不多說了,直接看代碼吧

最終的結(jié)果看這里光羞,stylus代碼看這里绩鸣,css代碼看這里

在webpack的實(shí)現(xiàn)上,還是有一些不同的,webpack官網(wǎng)的dom使用的是ul li;,而且將內(nèi)部的盒子放在了外部盒子的dom`內(nèi)部,便于css的重用,這個和我的實(shí)現(xiàn)思路不一樣;還使用了偽元素,作用好像是為了做背景的修飾;這里就不深入了,感興趣的朋友可以去看看去官網(wǎng)看看它是怎么實(shí)現(xiàn).希望對大家有幫助,謝謝大家;

大家要實(shí)現(xiàn)這樣一個動畫還是需要自己多動手,多思考哦,我寫了一些關(guān)于canvas,css3,webgl的入門教程,后面會添加svg的動畫,持續(xù)不斷更新,喜歡的朋友可以來這里看看哦,給個star什么的.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市狞山,隨后出現(xiàn)的幾起案子全闷,更是在濱河造成了極大的恐慌叉寂,老刑警劉巖萍启,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異屏鳍,居然都是意外死亡勘纯,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門钓瞭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來驳遵,“玉大人,你說我怎么就攤上這事山涡〉探幔” “怎么了唆迁?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長竞穷。 經(jīng)常有香客問我唐责,道長,這世上最難降的妖魔是什么瘾带? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任鼠哥,我火速辦了婚禮,結(jié)果婚禮上看政,老公的妹妹穿的比我還像新娘朴恳。我一直安慰自己,他們只是感情好允蚣,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布于颖。 她就那樣靜靜地躺著,像睡著了一般嚷兔。 火紅的嫁衣襯著肌膚如雪恍飘。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天谴垫,我揣著相機(jī)與錄音章母,去河邊找鬼。 笑死翩剪,一個胖子當(dāng)著我的面吹牛乳怎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播前弯,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼蚪缀,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了恕出?” 一聲冷哼從身側(cè)響起询枚,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎浙巫,沒想到半個月后金蜀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡的畴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年渊抄,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片丧裁。...
    茶點(diǎn)故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡护桦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出煎娇,到底是詐尸還是另有隱情二庵,我是刑警寧澤贪染,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站催享,受9級特大地震影響抑进,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜睡陪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一寺渗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧兰迫,春花似錦信殊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至据德,卻和暖如春鳄乏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背棘利。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工橱野, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人善玫。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓水援,卻偏偏與公主長得像,于是被迫代替她去往敵國和親茅郎。 傳聞我的和親對象是個殘疾皇子蜗元,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 在線閱讀 http://interview.poetries.top[http://interview.poetr...
    程序員poetry閱讀 114,269評論 24 450
  • 無意中看到zhangwnag大佬分享的webpack教程感覺受益匪淺,特此分享以備自己日后查看系冗,也希望更多的人看到...
    小小字符閱讀 8,140評論 7 35
  • 最近在學(xué)習(xí) Webpack,網(wǎng)上大多數(shù)入門教程都是基于 Webpack 1.x 版本的,我學(xué)習(xí) Webpack 的...
    My_Oh_My閱讀 8,166評論 40 247
  • 選擇qi:是表達(dá)式 標(biāo)簽選擇器 類選擇器 屬性選擇器 繼承屬性: color奕扣,font,text-align掌敬,li...
    love2013閱讀 2,303評論 0 11
  • 這幾天在老家惯豆,天氣異常晴朗,每天晚上坐在陽臺上涝开,一抬頭就是滿天閃閃的星星循帐,非常耀眼框仔。前幾次回來舀武,或許天氣不是很好,...
    云沐媽媽閱讀 444評論 0 0