html打造動畫【連載4】- 哆啦a夢

weixin_33866037發表於2017-06-12
一隻神奇的喵

我相信每個人的童年都有一個哆啦a夢,一個小小的肚皮裡裝滿了不可思議的哆啦a夢,一個在你無助傷心的時候陪在你身邊的哆啦a夢,一個陪你胡思亂想陪你吃銅鑼燒的哆啦a夢今天我們就來畫一個我們心中的哆啦a夢吧

3810529-95ed42e30ea2130a.png
哆啦a夢.png

定義哆啦a夢的容器
  • 千篇一律先定義一個畫哆啦a夢的大容器,確定它的大小和位置。
<!-- 哆啦A夢大容器 -->
<div class="doa"></div>
/*哆啦A夢*/
    .doa{position: relative;top: 100px;}
畫哆啦a夢的頭部(包括臉,臉部包括眼睛和鼻子)
  • 頭部包含好幾塊部分:哆啦a夢的臉部和鼻子,臉部又包括兩隻眼睛,兩隻眼睛裡面還有眼珠和眼白部分,所以會有好幾層的dom巢狀,當然基本圖形都是由div+border-radius拼湊而成。
  • 將畫好的各個部位品拼湊到相應的位置上即可。
  • 看我前面畫的幾個圖畫就知道border-radius是一個非常常用的屬性,幾乎div的每一次變形都離不開它,其實border-radius的真面目應該是border-radius: 300px 300px 300px 300px/300px 300px 300px 300px;醬紫的,我們一般不寫斜槓後面的內容,斜槓切面是水平長度,斜槓後面是垂直高度,前槓後面預設不寫就是水平和垂直大小是一樣的。我知道我這樣說不夠詳細,可以參考我鑫神的部落格秋月何時了,CSS3 border-radius知多少?,保證你分分鐘在老司機的帶領下徹底弄懂border-radius,還不快上車?
<!-- 頭 -->  
    <div class="head">
    <!-- 存放臉部的容器 -->
        <div class="face">
        <!-- 左眼大圈兒 -->
            <div>
            <!-- 左眼眼珠(黑色部分) -->
                <div>
                <!-- 左眼眼白,黑色裡面的白色部分 -->
                    <div></div>
                </div>
            </div>
        <!-- 右眼大圈兒 -->
            <div>
            <!--右眼眼珠(黑色部分) -->
                <div>
                <!-- 右眼眼白,黑色裡面的白色部分 -->
                    <div></div>
                </div>
            </div>
        </div>
        <!-- 紅鼻子部分 -->
        <div class="nose">
        <!-- 紅鼻子裡面的白圈兒 -->
            <div></div>
        </div>
        <!-- 紅鼻子下面的那根黑線,也屬於鼻子部分  -->
        <div class="nose1"></div>
    </div>
.head{
        margin: 0 auto;   /*頭部定義大小並居中顯示*/
        width: 400px;
        height: 350px;
        background: #008ee3;  /*頭部定義背景顏色*/
        position: relative;
        border-radius: 50% 50% 25% 25% / 55% 55% 45% 45%;  /*頭部定義四個方向圓角大小*/
    }
    .face{
        width: 310px;   /*臉部定義大小*/
        height: 260px;
        background: snow;   /*臉部定義背景顏色*/
        border-radius: 50% 50% 25% 25% / 55% 55% 45% 45%;  /*臉部定義四個方向的圓角大小*/
        position: relative;    /*臉部定義位置,是相對於head的位置*/
        top: 90px; 
        left: 45px;
    }
    /*左眼眶*/
    .face>div:first-child{
        width: 80px;    /*左眼框定義大小*/
        height: 100px;
        border-radius: 50%;   /*左眼框定義與圓角大小*/
        border:2px #000 solid;     /*定義外邊框*/
        background: snow;
        float: left;   /*為了使左右兩個眼睛能在一排顯示*/
        position: relative;   /*位置是相對於face的位置*/
        top:-40px;
        left: 71px;
        z-index: 50;
    }
    /*右眼眶,畫法跟左眼一樣*/
    .face>div:last-child{
        width: 80px;
        height: 100px;
        border-radius: 50%;
        border:2px #000 solid;
        background: snow;
        float: left;
        position: relative;
        top:-40px;
        left: 71px;
        z-index: 50;
    }
    /*左眼珠1*/
    .face>div:first-child div{
        width: 20px;     /*定義眼珠的大小*/
        height: 25px;
        background: #000;
        border-radius: 50%;
        position: absolute;  /*定義眼珠的位置,相對於眼眶的位置*/
        top: 45px;
        left: 60px;
    }
    /*左瞳孔*/
    .face>div:first-child div div{
        width: 10px;     /*定義黑色瞳孔的大小*/
        height: 10px;
        background: #ffffff;
        border-radius: 50%;
        position: absolute;  /*定義黑色瞳孔的位置,相對於眼珠的位置*/
        top: 7px;
        left: 10px;
    }
    /*右眼珠和左眼珠畫法一樣*/
    .face>div:last-child div{
        width: 20px;
        height: 25px;
        background: #000;
        border-radius: 50%;
        position: absolute;
        top: 45px;
    }
    /*右瞳孔和左瞳孔的畫法一樣*/
    .face>div:last-child div div{
        width: 10px;
        height: 10px;
        background: #ffffff;
        border-radius: 50%;
        position: absolute;
        top: 7px;
    }
    .nose{
        width: 30px;      /*定義紅鼻子的大小*/
        height: 30px;
        border-radius: 50%;
        background: #c70000;
        position: absolute;
        top: 130px;
        left: 50%;
        margin-left: -15px;
        z-index: 10;
    }
    .nose div{
        width: 10px;     /*定義紅鼻子裡面白色圈圈的大小*/
        height: 10px;
        border-radius: 50%;
        position: absolute;
        background: #ffffff;
        top: 10px;
        margin-left: 20px;
        z-index: 10;
    }
    .nose1{  
        width: 2px;      /*定義紅鼻子下面的那一條黑線*/
        height: 130px;
        background: #000;
        position: absolute;
        top: 160px;
        left: 50%;
        margin-left: -1px;
        z-index: 10;
    }
3810529-289cca82d4738725.png
哆啦a夢的頭部.png
畫哆啦a夢的嘴巴部分
  • 嘴巴應該是很簡單的了吧,看一眼就知道是是用邊框+border-radius實現的。
<div class="mouth"></div>
.mouth{
        width: 250px;   /*定義嘴巴的大小*/
        height: 200px;
        border-radius: 50%;
        background: snow;
        border-bottom: 2px #000 solid;
        margin: -230px auto;
        position: relative;  /*定義嘴巴的位置*/
    }
3810529-55cb7392a5207e9c.png
哆啦a夢的嘴巴.png
畫哆啦a夢的鬍鬚部分
<!-- 鬍鬚 -->
    <div class="beard">
    <!-- 左邊鬍鬚部分 -->
        <div class="left">
        <!-- 第一根鬍鬚 -->
            <div></div>
            <!-- 第二根鬍鬚 -->
            <div></div>
            <!-- 第三根鬍鬚 -->
            <div></div>
        </div>
        <div class="right">
            <div></div>
            <div></div>
            <div></div>
        </div>
        <!-- 脖子部分的小白條部分 -->
        <span></span>
    </div>
/*鬍鬚樣式*/
.beard .left div:first-child{
        width: 120px;
        height: 40px;
        border-top: 2px #000 solid;
        border-radius: 10% 90% 10% 90% / 10% 90% 10% 90%;
        position: absolute;
        left: 50%;
        top: 140px;
        margin-left: -170px;
        z-index: 100;
    }
    .beard .left div:nth-child(2){
        width: 120px;
        height: 40px;
        border-top: 2px #000 solid;
        border-radius: 10% 90% 10% 90% / 30% 70% 40% 60%;
        position: absolute;
        left: 50%;
        top: 170px;
        margin-left: -170px;
        z-index: 100;
    }
    .beard .left div:last-child{
        width: 120px;
        height: 40px;
        border-top: 2px #000 solid;
        border-radius: 10% 90% 10% 90% / 40% 60% 10% 90%;
        position: absolute;
        left: 50%;
        top: 200px;
        margin-left: -170px;
        z-index: 100;
    }

    .beard .right div:first-child{
        width: 120px;
        height: 40px;
        border-top: 2px #000 solid;
        border-radius: 90% 10% 90% 10% / 90% 10% 90% 10%;
        position: absolute;
        left: 50%;
        top: 140px;
        margin-left: 50px;
        z-index: 100;
    }
    .beard .right div:nth-child(2){
        width: 120px;
        height: 40px;
        border-top: 2px #000 solid;
        border-radius: 90% 10% 90% 10% / 70% 30% 60% 40%;
        position: absolute;
        left: 50%;
        top: 170px;
        margin-left: 50px;
        z-index: 100;
    }
    .beard .right div:last-child{
        width: 120px;
        height: 40px;
        border-top: 2px #000 solid;
        border-radius: 90% 10% 90% 10% / 60% 40% 90% 10%;
        position: absolute;
        left: 50%;
        top: 200px;
        margin-left: 50px;
        z-index: 100;
    }
    .beard span{
        display: block;
        width: 60px;
        height: 3.5px;
        background: #ffffff;
        border-radius: 4px;
        position: absolute;
        top: 352px;
        left: 50%;
        margin-left: -105px;
    }
3810529-34737bcee0e333ac.png
哆啦a夢的鬍鬚.png
畫哆啦a夢的脖子部分(脖子部分包括鈴鐺)
  • 脖子就是基本div變形之後的圖形,多餘的部分隱藏到頭部下面就可以了。
  • 鈴鐺部分是各個很簡單的基本圖形組成。
<!-- 脖 -->
    <div class="neck">
    <!-- 鈴鐺的圓形 -->
        <div></div>
        <!-- 鈴鐺的小圓角矩形 -->
        <div></div>
        <!-- 鈴鐺的小圓形 -->
        <div></div>
        <!-- 鈴鐺的小豎線 -->
        <div></div>
    </div>
.neck{
        width: 330px;
        height: 200px;
        border-radius: 50% 50% 20% 20% / 50% 50% 50% 50%;
        background: #e30000;
        margin: 80px auto;
        z-index: 100;
    }
    .neck div:first-child{
        border: 2px #000 solid;
        border-radius: 50%;
        width: 40px;
        height: 40px;
        background: #ffdd2e;
        position: absolute;
        top: 350px;
        left: 50%;
        margin-left: -22px;
        transition: all 1s;
    }
    .neck div:nth-child(2){
        border: 2px #000 solid;
        width: 44px;
        height: 5px;
        background: #ffdd2e;
        position: absolute;
        left: 50%;
        margin-left: -24px;
        top: 363px;
        border-radius: 5px;
        transition: all 1s;
    }
    .neck div:nth-child(3){
        width: 8px;
        height: 8px;
        border: 2px #000 solid;
        position: absolute;
        background: #6c5844;
        border-radius: 50%;
        left: 50%;
        margin-left: -6px;
        top: 375px;
        transition: all 1s;
    }
    .neck div:nth-child(4){
        width: 2px;
        height: 8px;
        background: #000;
        position: absolute;
        left: 50%;
        margin-left: -1px;
        top: 385px;
        transition: all 1s;
    }
3810529-cece23d66ef888c6.png
哆啦a夢的脖子.png
完成哆啦a夢的動態效果
  • 動起來的哆啦a夢才比較萌對吧,那我們就讓它動起來吧(transition屬性)。
  • 滑鼠移動到眼睛部位左眼珠移動到左邊。
  • 滑鼠移動到嘴巴部位,臉部表情變化。
  • 滑鼠移動到鈴鐺部分,鈴鐺變大。
/*眼睛動效*/
.head:hover .face>div:first-child div{
        left: 0px;
        transition: all 1s;
    }
    .head:hover .face>div:first-child div div{
        left: 0px;
        transition: all 1s;
    }
/*嘴巴動效,嘴巴的dom容器下面要加了個空的div容器*/
.mouth div:first-child{
        width: 82px;
        height: 2px;
        background: #000;
        position: absolute;
        z-index: 1000;
        top: -25px;
        left: 6px;
        display: none;
    }
    .mouth div:nth-child(2){
        width: 82px;
        height: 2px;
        background: #000;
        position: absolute;
        z-index: 1000;
        top: -25px;
        left: 90px;
        display: none;
    }
    .mouth:hover{
        border-radius: 0;
        width: 180px;
        height: 200px;
    }
    .mouth:hover div:first-child,.mouth:hover div:nth-child(2){
        display: block;
    }
/*鈴鐺動效*/
.neck:hover div:first-child{
        width: 60px;
        height: 60px;
        left: 50%;
        margin-left: -30px;
    }
    .neck:hover div:nth-child(2){
        width: 66px;
        height: 7.5px;
        left: 50%;
        margin-left: -33px;
    }
    .neck:hover div:nth-child(3){
        width: 12px;
        height: 12px;
        left: 50%;
        margin-left: -6px;
        top: 385px;
    }
    .neck:hover div:nth-child(4){
        width: 2px;
        height: 12px;
        left: 50%;
        margin-left: 1px;
        top: 400px;
    }
3810529-7d04ef521a458a27.gif
哆啦a夢動圖.gif

附上原始碼下載地址:http://www.html5tricks.com/download/css3-pretty-doraemon.rar

相關文章