html打造動畫【系列1】- 萌萌的大白

来源:http://www.cnblogs.com/jiaoyu121/archive/2017/06/10/6979625.html
-Advertisement-
Play Games

哈哈哈 哈哈哈 每個人都是獨立的個體,大白也不例外,仔細觀察大白有一個圓圓的頭加一對黑溜溜的眼睛,沒有腹肌的軀幹和一顆裸露的心臟,圓滾滾的肚子兩邊一對寬厚的臂膀,仔細看還有兩個萌萌噠小手指呢,最後一對粗的像大象一樣的大腿才能支撐這軟軟的肚子嘛,哈哈~ 因為大白是白的,所以我們可以定義一個深顏色的背景 ...


每個人心中都有一個暖暖的大白,blingbling的大眼睛~軟軟的肚子~寬厚的肩膀~善良的心腸~如果可以,我願意淪陷在大白的肚子里永遠不出來,哈哈~毛球要失寵咯~

哈哈哈

每個人都是獨立的個體,大白也不例外,仔細觀察大白有一個圓圓的頭加一對黑溜溜的眼睛,沒有腹肌的軀幹和一顆裸露的心臟,圓滾滾的肚子兩邊一對寬厚的臂膀,仔細看還有兩個萌萌噠小手指呢,最後一對粗的像大象一樣的大腿才能支撐這軟軟的肚子嘛,哈哈~

定義背景
  • 因為大白是白的,所以我們可以定義一個深顏色的背景來突出一下大白,讓我們在茫茫屏幕中一眼就能看到它,歐耶~
    /*使用了一個漸變色,沒有做各個瀏覽器的相容性處理*/
    body {background: linear-gradient(to bottom, #f91818 0%,#ea8181 100%);}
定義畫大白的容器
  • 定義個div容器,控制大白在屏幕中的整體位置
    <!--定義大白的存放容器-->
    <div id="baymax"></div>
    #baymax {
      margin: 0 auto;/*設置為 居中*/
      height: 600px; /*設置高度*/
      overflow: hidden; /*隱藏溢出*/
    }
畫大白的頭部
  • 大白的頭部是一個橢圓形的,不用canvas自帶的畫橢圓的方法最先想到的就是先畫一個長方形然後用圓角矩形(border-radius,設置成50%會有圓形的效果)的方法繪製。
  • 頭部下巴那邊有一層灰色的陰影,我們在長方形的下麵加一個灰色的底邊框就可以了。
  • 眼睛也是圓形的可以用同樣的方法,將眼睛和嘴巴(那是嘴巴嗎?)相對定位在頭部相應位置即可。
    <!-- 定義頭部,包括兩個眼睛、嘴 -->
          <div id="head">
              <div id="eye">
              </div>
              <div id="eye2">
              </div>
              <div id="mouth">
              </div>
          </div>
    #head { height: 64px;width: 100px;
      border-radius: 50%; /*以百分比定義圓角的形狀*/
      background: #fff; /*定義背景顏色*/
      margin: 0 auto;/*頭部居中*/
      margin-bottom: -20px;/*這個是為了使頭部與身體融為一體*/
      border-bottom: 5px solid #e0e0e0; /*設置下邊框的樣式,製作陰影的效果*/
      z-index: 100;  /*屬性設置元素的堆疊順序;擁有更高堆疊順序的元素總是會
                               處於堆疊順序較低的元素的前面*/
      position: relative; /*生成相對定位的元素,方便眼睛和嘴巴的定位*/
    }
    #eye,#eye2 {width: 11px;height: 13px;background: #282828;border-radius: 50%;
      position: relative; /*生成相對定位的元素,相對於上層頭部容器的位置*/
      top: 30px;left: 27px;
      transform: rotate(8deg);/*旋轉該元素,讓眼睛有一定的角度*/
    }
    #eye2 {
      transform: rotate(-8deg); /*使左右兩隻眼睛旋轉對稱*/
      left: 69px; /*設置第二隻眼睛相對於頭部的位置*/
      top: 17px;
    }
    #mouth {width: 38px;height: 1.5px;background: #282828;
      position: relative;/*生成相對定位的元素,相對於上層頭部容器的位置*/
      left: 34px;top: 10px;
    }

    大白頭部效果.png
畫大白的軀幹和中間的小心臟
  • 大白脖子到肚子之間的軀幹比頭部大比肚子小,可以想象成一個豎著的橢圓形跟其他部分拼接而成(要有想象力哦,不像畫畫,肯定是要各種圖形拼接的)。
  • 心臟就是一個圓形,裡面的月牙效果可以用內部陰影做出效果。
    <!-- 定義軀幹,包括心臟 -->
          <div id="torso">
              <div id="heart">
              </div>
          </div>
    #torso {margin: 0 auto;height: 200px; width: 180px;background: #fff;
      border-radius: 47%;/*設置圓角*/
      border: 5px solid #e0e0e0;/*設置邊框*/
      border-top: none;/*因為頂部要跟頭部做銜接,所以頂部不設置邊框*/
      z-index: 1;/*保證軀幹堆疊在頭部的裡面*/
    }
    #heart{
    width:25px;height:25px;border-radius:50%;
    box-shadow:2px 5px 2px #ccc inset;/*向邊框四周添加陰影效果*/
    position:relative;/*設置心臟相對於軀幹的位置*/  
    right:-115px;top:40px;
    z-index:111;/*保證心臟堆疊在軀幹的外面*/
    border:1px solid #ccc;
    }

    大白軀幹效果.png
畫大白的肚子腹部,包括 cover(和軀幹的連接處)
  • 大白的肚子腹部就是比軀幹大一圈的橢圓然後移到軀幹的中間位置。
  • 但是在銜接部分會有邊框的影響,我們可以用一個白色的橢圓將銜接部分的邊框遮蓋住就可以了。
    <!-- 定義肚子腹部,包括 cover(和軀幹的連接處) -->
          <div id="belly">
              <div id="cover">
              </div>
          </div>
    #belly {
      margin: 0 auto;height: 300px;width: 245px;
      margin-top: -140px;/*將腹部往上移動,差不多移到軀幹的中間位置*/
      background: #fff;border-radius: 47%;
      border: 5px solid #e0e0e0; /*設置邊框*/
      border-top: none;
      z-index: 5;/*保證腹部堆疊在軀幹的外面*/
    }
    #cover {
      width: 190px;background: #fff;height: 150px;margin: 0 auto;
      position: relative;/*將cover部分相對定位到要遮擋的位置*/
      top: -20px;border-radius: 50%;
    }

    大白的肚子效果.png
畫大白的左右臂,包括一大一小兩個手指
  • 手臂部分是用一個傾斜的橢圓做成,然後隱藏到軀幹後面對應的位置即可。
  • 兩個小手指也是兩個傾斜的小橢圓組合而成,定位到手臂對應的位置即可。
    <!-- 定義左臂,包括一大一小兩個手指 -->
          <div id="left-arm">
              <div id="l-bigfinger">
              </div>
              <div id="l-smallfinger">
              </div>
          </div>
          <!-- 定義右臂,同樣包括一大一小兩個手指 -->
          <div id="right-arm">
              <div id="r-bigfinger">
              </div>
              <div id="r-smallfinger">
              </div>
          </div>
    #left-arm,#right-arm {
      height: 270px;width: 120px;border-radius: 50%;background: #fff;
      margin: 0 auto;
      position: relative; /*將手臂相對定位到相應的位置*/
      top: -350px;left: -100px;
      transform: rotate(20deg); /*將手臂(橢圓)順時針旋轉20度,更加貼合軀幹*/
      z-index: -1;/*保證手臂堆疊在軀幹的裡面*/
    }
    #right-arm {
      transform: rotate(-20deg);/*右手臂(橢圓)相應的逆時針旋轉20度,與左手臂對稱*/
      left: 100px;top: -620px;
    }
    #l-bigfinger,#r-bigfinger {
      height: 50px;width: 20px;border-radius: 50%;background: #fff;
      position: relative;/*將大手指相對定位到相應的位置,並相應的旋轉*/
      top: 250px;left: 50px;transform: rotate(-50deg);
    }
    #r-bigfinger {
      left: 50px;transform: rotate(50deg);
    }
    #l-smallfinger,#r-smallfinger {
      height: 35px;width: 15px;border-radius: 50%;background: #fff;
      position: relative;;/*將小手指相對定位到相應的位置,並相應的旋轉*/
      top: 195px; left: 66px;transform: rotate(-40deg);
    }
    #r-smallfinger {
      transform: rotate(40deg);left: 37px;
    }

    大白手臂效果.png
畫大白的左右腿
  • 腿的畫法就是在矩形的基礎上,用border-radius方法在矩形的四邊畫出不同程度的圓角形成腿的形狀就行,然後將腿相對定位到身體對應的位置即可。
    <!-- 定義左腿 -->
          <div id="left-leg">
          </div>
          <!-- 定義右腿 -->
          <div id="right-leg">
          </div>
    #left-leg,#right-leg {
      height: 170px;width: 90px;
      border-radius: 40% 30% 10px 45%;/*矩形的左上、右上、左下、右下各個角度畫不同程度的圓角*/
      background: #fff;
      position: relative;/*相對定位到對應的位置*/
      top: -640px;left: -45px;
      transform: rotate(-1deg);
      z-index: -2;/*保證腿部堆疊在最下麵*/
      margin: 0 auto;
    }
    #right-leg {
      border-radius:30% 40% 45% 10px;
      top: -810px;left: 50px;
      transform: rotate(1deg);
    }

    大白腿部效果.png
寫在最後的拼圖游戲
  • 看完整個教程,是不是覺得畫一個大白其實就很少的幾個知識點:border-radius、position: relative、 z-index、transform: rotate(*deg)、border、box-shadow,剩下的就是靠position和z-index各種定位拼接堆疊,只要想明白了要哪些基本元素,就可以很輕鬆的拼接成一個萌萌的大白哦~下麵我把所有的零部件列舉出來,怎麼拼接就看自己的想象力咯~哈哈

    大白分解和最終效果圖.png
完整代碼
<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible">
    <title>html+css實現大白的畫法</title>
    <meta content="" name="description">
    <meta content="" name="keywords">
  <style type="text/css">
      /*定義整體的背景色*/
      body {background: linear-gradient(to bottom, #f91818 0%,#ea8181 100%);}   
      #baymax {
    /*設置為 居中*/
    margin: 0 auto;
    /*高度*/
    height: 600px;
    /*隱藏溢出*/
    overflow: hidden;
}

#head {
    height: 64px;
    width: 100px;

    /*以百分比定義圓角的形狀*/
    border-radius: 50%;

    /*背景*/
    background: #fff;

    margin: 0 auto;
    margin-bottom: -20px;

    /*設置下邊框的樣式*/
    border-bottom: 5px solid #e0e0e0;

    /*屬性設置元素的堆疊順序;
    擁有更高堆疊順序的元素總是會處於堆疊順序較低的元素的前面*/
    z-index: 100;

    /*生成相對定位的元素*/
    position: relative;
}
#eye,
#eye2 {
    width: 11px;
    height: 13px;
    background: #282828;
    border-radius: 50%;
    position: relative;
    top: 30px;
    left: 27px;

    /*旋轉該元素*/
    transform: rotate(8deg);
}

#eye2 {

    /*使其旋轉對稱*/
    transform: rotate(-8deg);
    left: 69px;
    top: 17px;

}

#mouth {
    width: 38px;
    height: 1.5px;
    background: #282828;
    position: relative;
    left: 34px;
    top: 10px;
}
#torso,
#belly {
    margin: 0 auto;
    height: 200px;
    width: 180px;
    background: #fff;
    border-radius: 47%;

    /*設置邊框*/
    border: 5px solid #e0e0e0;
    border-top: none;
    z-index: 1;
}

#belly {
    height: 300px;
    width: 245px;
    margin-top: -140px;
    z-index: 5;
}

#cover {
    width: 190px;
    background: #fff;
    height: 150px;
    margin: 0 auto;
    position: relative;
    top: -20px;
    border-radius: 50%;
}

#heart{
  width:25px;
  height:25px;
  border-radius:50%;
  position:relative;

  /*向邊框四周添加陰影效果*/
  box-shadow:2px 5px 2px #ccc inset;

  right:-115px;
  top:40px;
  z-index:111;
  border:1px solid #ccc;
}

#left-arm,
#right-arm {
    height: 270px;
    width: 120px;
    border-radius: 50%;
    background: #fff;
    margin: 0 auto;
    position: relative;
    top: -350px;
    left: -100px;
    transform: rotate(20deg);
    z-index: -1;
}

#right-arm {
    transform: rotate(-20deg);
    left: 100px;
    top: -620px;
}

#l-bigfinger,
#r-bigfinger {
    height: 50px;
    width: 20px;
    border-radius: 50%;
    background: #fff;
    position: relative;
    top: 250px;
    left: 50px;
    transform: rotate(-50deg);
}

#r-bigfinger {
    left: 50px;
    transform: rotate(50deg);
}

#l-smallfinger,
#r-smallfinger {
    height: 35px;
    width: 15px;
    border-radius: 50%;
    background: #fff;
    position: relative;
    top: 195px;
    left: 66px;
    transform: rotate(-40deg);
}

#r-smallfinger {
    background: #fff;
    transform: rotate(40deg);
    top: 195px;
    left: 37px;
}

#left-leg,
#right-leg {
    height: 170px;
    width: 90px;
    border-radius: 40% 30% 10px 45%;
    background: #fff;
    position: relative;
    top: -640px;
    left: -45px;
    transform: rotate(-1deg);
    z-index: -2;
    margin: 0 auto;
}

#right-leg {
    background: #fff;
    border-radius:30% 40% 45% 10px;
    margin: 0 auto;
    top: -810px;
    left: 50px;
    transform: rotate(1deg);
}
  </style>

</head>

<body>
    <div id="baymax">
        <!-- 定義頭部,包括兩個眼睛、嘴 -->
        <div id="head">
            <div id="eye">
            </div>
            <div id="eye2">
            </div>
            <div id="mouth">
            </div>
        </div>
        <!-- 定義軀幹,包括心臟 -->
        <div id="torso">
            <div id="heart">
            </div>
        </div>
        <!-- 定義肚子腹部,包括 cover(和軀幹的連接處) -->
        <div id="belly">
            <div id="cover">
            </div>
        </div>
        <!-- 定義左臂,包括一大一小兩個手指 -->
        <div id="left-arm">
            <div id="l-bigfinger">
            </div>
            <div id="l-smallfinger">
            </div>
        </div>
        <!-- 定義右臂,同樣包括一大一小兩個手指 -->
        <div id="right-arm">
            <div id="r-bigfinger">
            </div>
            <div id="r-smallfinger">
            </div>
        </div>
        <!-- 定義左腿 -->
        <div id="left-leg">
        </div>
        <!-- 定義右腿 -->
        <div id="right-leg">
        </div>
    </div>
</body>

</html>

PS:學習自其它文章,畫完是不是特別有成就感呢,哈哈哈哈哈哈~下次畫點啥呢~你說

學習過程中遇到什麼問題或者想獲取學習資源的話,歡迎加入學習交流群
343599877,我們一起學前端!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>放大鏡</title> <style> *{ margin:0px; padding:0px; } #box{ width:430px; height:430px; ...
  • <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width,initial-scale=1"> <title>Bootstrap</tit ...
  • 在a.less中導入base.lessa.less中的代碼 base.less中的代碼 @value的值為[ripple, .5s, linear]"@{value}"成為字元串"[ripple, .5s, linear]",避免js解析錯誤。~避免編譯,不加則輸出為"ripple"Tips: 少一 ...
  • 之前對事件模型還是比較清楚的,許多概念都清晰映射在腦海中。工作之後,一方面使用的 局限性,二是習慣於用框架中的各種事件監聽方式,簡單即方便,久而久之,事件的一些概念開 始淡出記憶中,就像我現在已經開始淡忘C語言的指針、麥克斯韋方程組、矩陣的變換、最小二乘 法等。知識就像五彩繽紛的鵝卵石鋪墊在你前行的 ...
  • 基礎框架 瞭解HTML的代碼註釋 什麼是代碼註釋?代碼註釋的作用是幫助程式員標註代碼的用途,過一段時間後再看你所編寫的代碼,就能很快想起這段代碼的用途。代碼註釋不僅方便程式員自己回憶起以前代碼的用途,還可以幫助其他程式員很快的讀懂你的程式的功能,方便多人合作開髮網頁代碼。 語法: <!--註釋文字 ...
  • 上手簡單,讓Atom能夠成為了一款優雅而低門檻的神器,深度可定製的特性,讓Atom在你的打磨之下,變得越來越符合你的心意 ...
  • 理解Node.js 為了理解Node.js是如何工作的,首先你需要理解一些使得Javascript適用於伺服器端開發的關鍵特性。Javascript是一門簡單而又靈活的語言,這種靈活性讓它能夠經受住時間的考驗。函數、閉包等特性使Javascript成為一門適合Web開發的理想語言。 有一種偏見認為J ...
  • 1 new Object() 先創建一個Object實例,然後為它添加屬性和方法 2 對象字面量法 對象字面量法是創建對象最快捷方便的方式,在很多場景下被使用。 對象字面量法的缺點是創建多個同類對象時,會產生大量重覆代碼,因此有了工廠模式。 3 工廠模式 工廠模式用函數封裝了創建對象的細節,調用函數 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...