html打造动画【系列3】- 小猫笑脸动画
猫咪容器
- 咱们每次画一个图片,肯定先要确定一个容器,几确定一下图形的位置和大小。
<div class="mao_box">
<div class="mao"></div>
</div>
body {margin: 0px;background: #F6F7A7;}
.mao_box {position: relative;top: 50px ;}
/*设置宽度并且居中显示*/
.mao {margin: 0 auto;width: 400px;}
画喵咪的头部和头部的花纹
- 按照绘画习惯,我们肯定是先画最大的头部,头部确定了,耳朵嘴巴的位置才能确定。
<!-- 猫咪的头部框架 -->
<div class="mao_head">
<div class="huawen">
<div><!--头部花纹——左边橙色--></div>
</div>
</div>
.mao_head {
width: 400px; /*设置高度和宽度*/
height: 340px;
background: #F6F7F2;
position: relative;
border-radius: 50% 50% 35% 35%; /*画出猫脸的形状*/
border: solid 2px #2e2e2e; /*给猫咪画一个偏黑色的边框*/
overflow: hidden;
z-index: 10;
}
.huawen {
position: absolute;
height: 160px; /*设置宽度和高度*/
width: 180px;
background: #8D8D8D;
left: 110px; /*距离猫脸左面110px的位置,正好在中间位置 (400-180)/2*/
border-radius: 0% 0% 50% 50%; /*画出花纹的形状,下面为圆角边框*/
overflow: hidden; /*花纹超出头部的部分隐藏*/
}
.huawen > div:first-child { /*花纹的左右两边颜色不一样,所以改变左边半边的颜色为橙色*/
height: 160px;
width: 90px; /*宽度和花纹总宽度的一半*/
background: #F0AC6B;
}猫咪头部.png
画猫咪的耳朵部分
- 猫咪的耳朵分布在头部的左右两边,所以肯定是由两个div画成,为了不显得那么僵硬,我们可以把两边的耳朵稍微画的不一样大。
- 大家肯定会想:耳朵的形状这么奇怪,到时是怎么画的呢?其实很简单,就是通过矩形然后设置各个角度的border-radius就会形成一种尖角的效果,再旋转相应的角度跟头部贴合就可以了。
- 最后将耳朵隐藏在脸部的后面,露出一点点耳尖就可以了。
<!--绘制耳朵的容器-->
<div class="erduo">
<div></div><!--绘制左耳-->
<div></div><!--绘制右耳-->
</div>
/*耳朵*/
.erduo {
width: 374px; /*设置耳朵容器的高度和宽度*/
height: 120px;
position: absolute;
top: -6px; /*将耳朵的位置放到对应的地方*/
left: 50%;
margin-left: -187px;
}
/*左耳*/
.erduo > div:first-child {
height: 200px; /*设置左耳的高度和宽度*/
width: 160px;
border: 2px solid #2e2e2e; /*给左耳设置一个边框*/
background: #f3f3f3;
border-radius: 4% 80% 0% 50%; /*设置左耳各个角度的圆角程度*/
transform: rotate(-15deg); /*设置左耳的旋转角度*/
-ms-transform: rotate(-15deg);
-moz-transform: rotate(-15deg);
-webkit-transform: rotate(-15deg);
-o-transform: rotate(-15deg);
position: absolute;
left: -20px;
top: 0px;
transition: transform 1s,left 1s; /*设置左耳的hover动效*/
}
/*右耳跟左耳的画法同理*/
.erduo > div:last-child {
height: 180px;
width: 160px;
border: 2px solid #2e2e2e;
background: #f3f3f3;
transform: rotate(15deg);
-ms-transform: rotate(15deg);
-moz-transform: rotate(15deg);
-webkit-transform: rotate(15deg);
-o-transform: rotate(15deg);
border-radius: 80% 4% 50% 0%;
position: absolute;
right: -20px;
top: 0px;
transition: transform 1s,right 1s;
}耳朵.jpg
画猫咪的眼睛部分
眼睛部分有点复杂哟,不经过仔细的一番研究和强大的想象力是很难画出来的:解剖一下就是上下两个椭圆重叠而成,多余的部分隐藏,中间的褐色眼珠是在上面圆形中的一个黑色矩形。
<div class="yanjing">
<div>
<div class="yanquan">
<div></div> <!--存放竖着的眼球的div-->
</div>
<div class="yanquan_hedding"> <!--存放眼睛下睫毛的div-->
</div>
<div class="hong"></div>
</div>
<div class="yan_right">
<div class="yanquan">
<div></div>
</div>
<div class="yanquan_hedding"> </div>
<div class="hong"></div>
</div>
<div style="clear:both"></div>
</div>
/*眼睛*/
.yanjing {
height: 60px; /*设置眼睛整体的高度和宽度,多余的部分隐藏*/
width: 300px;
position: absolute; /*设置眼睛的位置,使它定位在脸部中间*/
top: 200px;
z-index: 20;
left: 50%;
margin-left: -150px;
overflow: hidden;
}
/*左眼*/
.yanquan {
height: 100px; /*设置左眼的高度和宽度,多余的部分隐藏*/
width: 100px;
border: 2px solid #2e2e2e;
border-radius: 50% 50% 50% 50%;
overflow: hidden;
position: absolute;
}
/*黑色眼珠子 左*/
.yanquan > div {
height: 100px;
width: 30px;
background-color: #2e2e2e;
margin-left: 35px; /*将黑色眼珠子定义在眼睛的中间*/
transition:all 1s;
}
/*眼睛下睫毛部分*/
.yanquan_hedding {
height: 100px;
width: 180px;
border-top: 2px solid #2e2e2e;
border-radius: 50% 50% 50% 50%;
background: #F6F7F2; /*背景色脸部的背景色一样,这样就只能看见上边框了*/
margin-top: 50px; /*定义位置与眼睛融为一体*/
margin-left: -40px;
position: absolute;
transition: margin-top 1s; /*为后面的hover动态做准备*/
}
/*右边眼睛的整体定义,其它都跟左眼一样,就是位置不一样*/
.yan_right {
left: 196px;
top: 0px;
position: absolute;
}猫咪眼睛.jpg
画猫咪的脸部花纹
- 喵咪的胡须可是很重要的哟,如果不小心把它剪了可是很严重的,猫咪就再也无法测量自己可以钻进多大的洞里了,哈哈。
- 仔细观察花纹其实就是由左右各5条线条组成,画出线条再做相应的变换就可以了。
<div class="face_huawen">
<!-- 存放花纹的div -->
<div class="face_huawen_huawen huawen_left">
<!-- 存放每一个线条的div -->
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
<div class="face_huawen_huawen huawen_right">
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
<div style="clear:both"></div>
</div>
/*脸部花纹*/
/*左边花纹*/
.face_huawen {
height: 80px; /*设置花纹整体的高度和宽度*/
width: 380px;
position: absolute; /*设置花纹在脸部的位置*/
top: 190px;
z-index: 20;
left: 50%;
margin-left: -190px;
}
.face_huawen_huawen > div:first-child { /*设置第一条花纹的宽高和变化情况(圆角大小和旋转角度)*/
width: 30px;
height: 10px;
border-top: 6px #E53941 solid;
border-radius: 30% 80% 20% 50%;
transform: rotate(25deg);
-ms-transform: rotate(25deg);
-moz-transform: rotate(25deg);
-webkit-transform: rotate(25deg);
-o-transform: rotate(25deg);
margin-left: 20px;
}
.face_huawen_huawen > div:nth-child(2) { /*设置第二条花纹*/
width: 20px;
height: 6px;
background-color: #E53941;
border-radius: 50% 50% 50% 50%;
transform: rotate(25deg);
-ms-transform: rotate(25deg);
-moz-transform: rotate(25deg);
-webkit-transform: rotate(25deg);
-o-transform: rotate(25deg);
margin-left: 20px;
}
.face_huawen_huawen > div:nth-child(3) {/*设置第三条花纹*/
/*margin-top:10px;*/
width: 32px;
height: 10px;
border-bottom: 4px #E53941 solid;
border-radius: 30% 0% 90% 30%;
transform: rotate(25deg);
-ms-transform: rotate(25deg);
-moz-transform: rotate(25deg);
-webkit-transform: rotate(25deg);
-o-transform: rotate(25deg);
margin-left: 8px;
}
.face_huawen_huawen > div:nth-child(4) {/*设置第四条花纹*/
margin-top: 20px;
width: 26px;
height: 20px;
border-bottom: 4px #E53941 solid;
border-radius: 30% 0% 90% 30%;
transform: rotate(30deg);
-ms-transform: rotate(30deg);
-moz-transform: rotate(30deg);
-webkit-transform: rotate(30deg);
-o-transform: rotate(30deg);
margin-left: 28px;
}
.face_huawen_huawen > div:last-child {/*设置第二五条花纹*/
width: 22px;
height: 10px;
border-bottom: 3px #E53941 solid;
border-radius: 0% 0% 50% 50%;
transform: rotate(-15deg);
-ms-transform: rotate(-15deg);
-moz-transform: rotate(-15deg);
-webkit-transform: rotate(-15deg);
-o-transform: rotate(-15deg);
margin-left: 40px;
margin-top: -8px;
}
/*右边花纹,右边花纹的位置和旋转角度跟左边花纹不一样,其它变换都一样*/
.huawen_right {
float: right;
transform: rotateY(180deg);
-webkit-transform: rotateY(180deg); /* Safari 和 Chrome */
-moz-transform: rotateY(180deg); /* Firefox */
margin-top: -85px;
}猫咪脸部花纹.jpg
画猫咪的鼻子
- 感觉这是整个猫咪最好画的地方了,简单的一个半圆就可以解决问题啦~啦啦啦啦~
<div class="bizi">
<div></div>
</div>
/*鼻子,不多做解释了,方法都差不多:确定位置和形状即可*/
.bizi {
width: 30px;
height: 36px;
position: absolute;
left: 50%;
margin-left: -15px;
top: 260px;
z-index: 30;
}
.bizi > div {
width: 30px;
height: 10px;
border-bottom: 8px solid #2e2e2e;
border-radius: 0% 0% 50% 50%;
margin-top: -10px;
}猫咪的鼻子.png
画猫咪的嘴巴
- 咦?是不是感觉画着画着就到了最后一部分了,哈哈哈哈哈,好开心啊~又吃成长快乐了~
- 嘴巴就像两撇小胡子,用两个矩形边框就可以实现了。
<div class="zuiba_box">
<div class="zuiba">
<div></div>
<div></div>
</div>
</div>
.zuiba { /*设置嘴巴的位置*/
margin-left: 85px;
margin-top: 6px;
}
/*右半边嘴巴*/
.zuiba > div:first-child {
width: 50px;
height: 40px;
border-bottom: 4px solid #2e2e2e; /*设置底部和左边边框,形成直角矩形*/
border-left: 4px solid #2e2e2e;
border-radius:40% 0% 20% 50%; /*设置各边的圆角程度*/
margin-left: 13px;
margin-top: -26px;
position:absolute;
transition: border-radius 1s; /*为动效做过渡效果*/
}
/*左半边嘴巴*/
.zuiba > div:nth-child(2) {
width: 50px;
height: 40px;
border-bottom: 4px solid #2e2e2e;
border-right: 4px solid #2e2e2e;
border-radius:0% 40% 50% 20%;
margin-left: -38px;
margin-top: -26px;
position:absolute;
transition: border-radius 1s;
}猫咪嘴巴.jpg
各个部位拼接成一个完整的小猫
- 各个部位都画好之后,又到了像大白一样的拼图时间了,哈哈~大家一起拼出一个萌萌哒小猫吧~(主要是对transition属性的运用,设置:hover之后的属性,然后用transition设置属性完成变化的过渡时间)
拼图咯--哈哈.jpg
制作鼠标移动上去的动态效果
- 我们家毛球可是个动如脱兔的家伙哦,所以我们来给猫咪加点特效吧~(^__^)
- 鼠标移动上去之后两耳耳朵左右摆动
- 眼睛眯眯呈现笑脸的形状
- 嘴角上扬
/*鼠标浮动耳朵样式*/
.mao:hover .erduo > div:first-child {
left: -10px;
transform: rotate(0deg);
-ms-transform: rotate(0deg);
-moz-transform: rotate(0deg);
-webkit-transform: rotate(0deg);
-o-transform: rotate(0deg);
border-radius: 4% 80% 0% 60%;
}
.mao:hover .erduo > div:last-child {
right: -10px;
transform: rotate(0deg);
-ms-transform: rotate(0deg);
-moz-transform: rotate(0deg);
-webkit-transform: rotate(0deg);
-o-transform: rotate(0deg);
border-radius: 80% 4% 60% 0%;
/*transition: transform 1s,right 1s;*/
}
/*眯眼并且出现红晕的动态效果,眼珠的宽度变宽*/
.mao:hover .yanquan > div:first-child {
width:40px;
margin-left: 30px;
}
.hong {
position: absolute;
height: 28px;
width: 70px;
background: red;
top: 34px;
/*top: 64px;*/
left: 18px;
border-radius: 50% 50% 50% 50%;
background-image: -moz-radial-gradient( 50% 50%, rgba(253,214,240,0.8) 0%, rgba(253,224,244,0.8) 66%, rgba(253,234,247,0.8) 100%);
background-image: -webkit-radial-gradient( 50% 50%, rgba(253,214,240,0.8) 0%, rgba(253,224,244,0.8) 66%, rgba(253,234,247,0.8) 100%);
background-image: -ms-radial-gradient( 50% 50%, rgba(253,214,240,0.8) 0%, rgba(253,224,244,0.8) 66%, rgba(253,234,247,0.8) 100%);
opacity: 0.0;
/*transition: opacity 0.5s ease-in 0.2s;*/
}
/*眼睛浮动属性*/
.mao:hover .yanquan_hedding {
margin-top: 30px;
/*transition: margin-top 1s;*/
}
.mao:hover .hong {
/*top: 34px;*/
opacity: 0.8;
transition: opacity 0.5s ease-in 0.2s;
}
/*嘴巴上扬的效果*/
.mao:hover .zuiba > div:first-child {
border-radius: 50% 50% 50% 50%;
width: 40px;
}
.mao:hover .zuiba > div:nth-child(2) {
width: 40px;
margin-left: -30px;
border-radius: 50% 50% 50% 50%;
}PS:眼睛眯起来之后下面出现了一部分红晕,就是两个背景颜色半透明的小椭圆组成的,只要在鼠标移动上去只会把椭圆显示出来就可以了。
眼睛下面的红晕.png
学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入学习交流群
343599877,我们一起学前端!
html打造动画【系列3】- 小猫笑脸动画的更多相关文章
- 《Flutter 动画系列》组合动画
老孟导读:在前面的文章中介绍了 <Flutter 动画系列>25种动画组件超全总结 http://laomengit.com/flutter/module/animated_1/ < ...
- javascript动画系列第一篇——模拟拖拽
× 目录 [1]原理介绍 [2]代码实现 [3]代码优化[4]拖拽冲突[5]IE兼容 前面的话 从本文开始,介绍javascript动画系列.javascript本身是具有原生拖放功能的,但是由于兼容 ...
- 【原】iOSCoreAnimation动画系列教程(二):CAKeyFrameAnimation【包会】
在上一篇专题文章[原]iOSCoreAnimation动画系列教程(一):CABasicAnimation[包会]中我们学习了iOS核心动画CoreAnimation中CABasicAnimation ...
- Vue.js 系列教程 5:动画
原文:intro-to-vue-5-animations 译者:nzbin 译者的话:经过两周的努力,终于完成了这个系列的翻译,由于时间因素及个人水平有限,并没有详细的校对,其中仍然有很多不易理解的地 ...
- 【WPF学习笔记】之如何点登录按钮时判断用户名密码进行登录:动画系列之(二)
...... 承接动画系列之(一)的代码: 再添加登录按钮代码进行登录,验证用户名和密码在数据库是否正确. 直接上代码: using System; using System.Collections. ...
- 【iOS系列】-自定义Modar动画
[iOS系列]-自定义Modar动画.md 我们需要做的最终的modar动画的效果是这样的, 就是点击cell,cell发生位移,慢慢的到第二个界面上的.为了做出这样的动画效果,我们需要以下的知识. ...
- 《Flutter 动画系列一》25种动画组件超全总结
动画运行的原理 任何程序的动画原理都是一样的,即:视觉暂留,视觉暂留又叫视觉暂停,人眼在观察景物时,光信号传入大脑神经,需经过一段短暂的时间,光的作用结束后,视觉形象并不立即消失,这种残留的视觉称&q ...
- 【Flutter 实战】17篇动画系列文章带你走进自定义动画
老孟导读:Flutter 动画系列文章分为三部分:基础原理和核心概念.系统动画组件.8篇自定义动画案例,共17篇. 动画核心概念 在开发App的过程中,自定义动画必不可少,Flutter 中想要自定义 ...
- android动画系列
Android 属性动画(Property Animation) 完全解析 (上 动画系列 - 传统View动画与Property动画基础及比较 [Android 基础]Animation 动画介绍和 ...
随机推荐
- 3. Decision Tree
1. 算法流程 一般的,一颗决策树包含一个根结点.若干内部结点和若干叶结点:叶节点对应于决策结果,其他每个结点则对应于一个属性测试结果:每个结点包含的样本集合根据属性测试的结果被划分到子结点中:根结点 ...
- 【13】JMicro微服务-ID生成与Redis
如非授权,禁止用于商业用途,转载请注明出处作者:mynewworldyyl 往下看前,建议完成前面1到12小节 1. 微服务中ID地位 如果说前面小节的功能点是微服务的大脑,那么全局唯一ID则是微服务 ...
- 【NOIP2013】货车运输 最大生成树+倍增
题目大意:给你一张n个点m条边的图,有q次询问,每次让你找出一条从x至y的路径,使得路径上经过的边的最小值最大,输出这个最大的最小值. 显然,经过的路径必然在这张图的最大生成树上. 我们求出这个图的最 ...
- POJ 1032
#include<iostream> using namespace std; int main() { int n; int num; ; int i,j; cin>>num ...
- apache2.4脚本一键安装(linux环境)
1.下载apache安装包和相关组件 下载地址:https://pan.baidu.com/s/1o85i6Jw 其中包括 apache安装包:httpd-2.4.29.tar.gz apache安装 ...
- Docker学习--Linux基础准备篇
1.docker命令不需要附带敲sudo的解决办法 由于docker daemon需要绑定到主机的Unix socket而不是普通的TCP端口,而Unix socket的属主为root用户,所以其他用 ...
- org.apache.ibatis.executor.loader.javassist.JavassistProxyFactory$EnhancedResultObjectProxyImpl and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.
当我用Springboot和mybatis进行延迟加载时候报出如下的错误: org.apache.ibatis.executor.loader.javassist.JavassistProxyFact ...
- 【Java并发编程】:生产者—消费者模型
生产者消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一存储空间,生产者向空间里生产数据,而消费者取走数据. 这里实现如下情况的生产--消费模型: 生产者不断交替地生产两组数据“姓 ...
- Java跨语言调用,使用JNA访问Java外部接口
1. JNA简单介绍 先说JNI(Java Native Interface)吧,有过不同语言间通信经历的一般都知道,它允许Java代码和其他语言(尤其C/C++)写的代码进行交互,只要遵守调用约定即 ...
- 127.0.0.1和0.0.0.0和本机IP的区别
在一次网络课程的听课中,我突然察觉到自己有个疑惑就是在配置一些服务的时候我们会用到localhost(127.0.0.1)或者0.0.0.0 和当前主机IP这三个.那么具体该怎么使用这三个地址,这三个 ...