每个人心中都有一个暖暖的大白,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,我们一起学前端!

html打造动画【系列1】- 萌萌的大白的更多相关文章

  1. html打造动画【系列4】哆啦A梦

    我相信每个人的童年都有一个哆啦a梦,一个小小的肚皮里装满了不可思议的哆啦a梦,一个在你无助伤心的时候陪在你身边的哆啦a梦,一个陪你胡思乱想陪你吃铜锣烧的哆啦a梦~今天我们就来画一个我们心中的哆啦a梦吧 ...

  2. javascript动画系列第一篇——模拟拖拽

    × 目录 [1]原理介绍 [2]代码实现 [3]代码优化[4]拖拽冲突[5]IE兼容 前面的话 从本文开始,介绍javascript动画系列.javascript本身是具有原生拖放功能的,但是由于兼容 ...

  3. 【原】iOSCoreAnimation动画系列教程(二):CAKeyFrameAnimation【包会】

    在上一篇专题文章[原]iOSCoreAnimation动画系列教程(一):CABasicAnimation[包会]中我们学习了iOS核心动画CoreAnimation中CABasicAnimation ...

  4. 【WPF学习笔记】之如何点登录按钮时判断用户名密码进行登录:动画系列之(二)

    ...... 承接动画系列之(一)的代码: 再添加登录按钮代码进行登录,验证用户名和密码在数据库是否正确. 直接上代码: using System; using System.Collections. ...

  5. 《Flutter 动画系列一》25种动画组件超全总结

    动画运行的原理 任何程序的动画原理都是一样的,即:视觉暂留,视觉暂留又叫视觉暂停,人眼在观察景物时,光信号传入大脑神经,需经过一段短暂的时间,光的作用结束后,视觉形象并不立即消失,这种残留的视觉称&q ...

  6. 《Flutter 动画系列》组合动画

    老孟导读:在前面的文章中介绍了 <Flutter 动画系列>25种动画组件超全总结 http://laomengit.com/flutter/module/animated_1/ < ...

  7. 【Flutter 实战】17篇动画系列文章带你走进自定义动画

    老孟导读:Flutter 动画系列文章分为三部分:基础原理和核心概念.系统动画组件.8篇自定义动画案例,共17篇. 动画核心概念 在开发App的过程中,自定义动画必不可少,Flutter 中想要自定义 ...

  8. android动画系列

    Android 属性动画(Property Animation) 完全解析 (上 动画系列 - 传统View动画与Property动画基础及比较 [Android 基础]Animation 动画介绍和 ...

  9. html打造动画【系列3】- 小猫笑脸动画

    猫咪容器 咱们每次画一个图片,肯定先要确定一个容器,几确定一下图形的位置和大小. <div class="mao_box"> <div class="m ...

随机推荐

  1. Unity C#集合

    集合分为两种:非泛型集合,泛型集合. 非泛型集合需要引入:System.Collections命名空间,其命名空间下的类有: ArrayList表示大小根据需要动态增加的对象数组. Hashtable ...

  2. ajax的介绍

    $.ajax({ 11 url: "article.asmx/GetArticleByID", 12 type: "POST", 13 datatype: &q ...

  3. 利用Scrapy爬取所有知乎用户详细信息并存至MongoDB

    欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 作者 :崔庆才 本节分享一下爬取知乎用户所有用户信息的 Scrapy 爬虫实战. 本节目标 本节要实现的内容有 ...

  4. AngularJS入门教程:日期格式化

    AngularJS入门教程:日期格式化[转载] 本地化日期格式化: ({{ today | date:'medium' }})Nov 24, 2015 2:19:24 PM ({{ today | d ...

  5. VueJS 组件参数名命名方式和前台显示

    camelCase(驼峰式) 和. kebab-case(短横线式) HTML 特性是不区分大小写的.所以,当使用的不是字符串模版,camelCased (驼峰式) 命名的 prop 需要转换为相对应 ...

  6. 蓝桥杯-逆波兰表达式-java

    /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ...

  7. Spring Cloud 学习笔记(一)——入门、特征、配置

    [TOC] 0 放在前面 0.1 参考文档 http://cloud.spring.io/spring-cloud-static/Brixton.SR7/ https://springcloud.cc ...

  8. Spring+SpringMVC+MyBatis+easyUI整合优化篇(十四)谈谈写博客的原因和项目优化

    阶段总结 又到了优化篇的收尾阶段了,这其实是一篇阶段总结性的文章,今天是4月29号,距离第一次发布博客已经两个月零5天,这两个多月的时间,完成了第一个项目ssm-demo的更新,过程中也写了33篇博客 ...

  9. Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace 解决方法

    这个问题是在用到spring时,本地IDE里面跑的很正常,但是打包后在集群上运行时报错. 多方查找资料后确定了问题的根源,由于在依赖中调用了spring的许多包,会存在文件覆盖的情况. 具体是 这三个 ...

  10. Java学习笔记——设计模式之二.策略模式

    明确是王道 --Clean Code 先定义策略类 package cn.no2.strategy; public abstract class Strategy { //省略属性 //算法方法 pu ...