点击上方 前端瓶子君,关注公众号

回复算法,加入前端编程面试算法每日一题群

介绍

本期我们通过vite+scss去完成一个橘猫心情变化的创意动画,这里的逻辑我们将不使用任何js代码,仅依靠css来完成,所以,通过本期的动画,你可以到一些css动画和绘制的一些技巧。废话不多说,先康康效果~

VID_20211030_184225.gif

还比较可爱吧。当鼠标(鱼)移入出,橘子闷闷不乐,无精打采的。但当鼠标(鱼)移入,橘子一看见最喜欢的鱼立马就开心了,连天气都变好了,对,这只橘子就是这么馋,变成胖橘是有原因的。

好了,我们马上就要进入正文了,我们会从基础搭建,太阳,云,猫的绘制和动画去了解制作这个动画的流程。

正文

1.搭建与结构

yarn add vite sass sass-loader
复制代码

我们是用vite和sass去完成项目的构建,和样式的书写,所以我们先安装下他们。

<div id="app"><div class="warrper"><div class="sun"></div><div class="cloud"></div><div class="cat"><div class="eye left"><div class="eye-hide"></div></div><div class="eye right"><div class="eye-hide"></div></div><div class="nose"></div><div class="mouth"></div></div></div>
</div>
复制代码

在html我们先写出结构来。div#app作为主界面去填满一屏,而div.warrper就作为主要内容的展示区域也就是那个圆圈。然后,在圆圈里面我们放太阳div.sun,云朵div.cloud,猫div.cat,当然猫里面还有眼睛鼻子嘴巴这些,至于猫的耳朵就用两个伪类做个三角形去实现。

2.变量与界面

$cat:rgb(252, 180, 125);:root{--bgColor:rgb(81, 136, 168);--eyeHideTop:0px;--cloudLeft:45%;--mouthRadius:10px 10px 0 0;
}
#app{width: 100%;height: 100vh;position: relative;display: flex;justify-content: center;align-items: center;background-image: repeating-linear-gradient(0deg, hsla(340,87%,75%,0.2) 0px, hsla(340,87%,75%,0.2) 30px,transparent 30px, transparent 60px),repeating-linear-gradient(90deg, hsla(340,87%,75%,0.2) 0px, hsla(340,87%,75%,0.2) 30px,transparent 30px, transparent 60px),linear-gradient(90deg, rgb(255,255,255),rgb(255,255,255));
}.warrper{width: 320px;height: 320px;border-radius: 50%;border: 10px solid white;position: relative;overflow: hidden;background-color: var(--bgColor);transition: background-color 1s linear;cursor:url("./assets/fish.png"),default;&:hover{--bgColor:rgb(178, 222, 247);--eyeHideTop:-20px;--cloudLeft:100%;--mouthRadius:0 0 10px 10px;}
}
复制代码

我们先定义猫的主色调,还有一些要变化的颜色和距离,因为我们移入将通过css3去改变这些属性,来达到某些动画的实现。

我们期望的是,当鼠标移入圆圈后,天空变晴,云朵退散,猫开心充满精神,所以,bgColor:天空颜色,eyeHideTop猫的眼皮y轴距离,cloudLeft云朵x轴偏移距离,mouthRadius猫嘴巴的圆角值。目前来说,当鼠标移入div.warrper后,这些值都会发生变化。另外,我自定义了鼠标图标移入圆圈变成了一条鱼(即cursor:url(图片地址))。这里的hover后的值是我事先算好的,如果大家重新开发别的动画可以一边做一边算。

微信截图_20211030200310.png

3.太阳与云朵

.sun{width: 50px;height: 50px;position: absolute;background-color: rgb(255, 229, 142);border:7px solid rgb(253, 215, 91);border-radius: 50%;left: 55%;top: 14%;box-shadow: 0 0 6px rgb(255, 241, 48);
}
复制代码

太阳我们就画个圆圈定好位置,然后用box-shadow投影去完成一点发光的效果。

微信截图_20211030200343.png

然后,我们再开始画云朵~

.cloud{width: 100px;height: 36px;background-color: white;position: absolute;transition: left .6s linear;left: var(--cloudLeft);top: 23%;border-radius: 36px;animation: bouncy 2s ease-in-out infinite;&::before{content: '';width: 50px;height: 50px;background-color: white;border-radius: 50%;position: absolute;top: -23px;left: 18px;}&::after{content: '';width: 26px;height: 26px;background-color: white;border-radius: 50%;position: absolute;top: -16px;left: 56px;}
}@keyframes bouncy {0% {transform: scale(1);}50% {transform: scale(1.05);}100% {transform: scale(1);}
}
复制代码

云朵很简单,我们就是画一个圆角矩形,然后用两个伪类画一个大圆和小圆叠在一起就非常像云了,另外,我们再加个animation动画,让他时大时小,有动的感觉。

微信截图_20211030200357.png

4.橘猫与动画

.cat{width: 180px;height: 160px;background-color: $cat;position: absolute;bottom: -20px;left: 50%;margin-left: -90px;animation: wait 2s ease-in-out infinite;&::after,&::before{content: '';display: block;border-style: solid;border-width: 20px 30px;position: absolute;top: -30px;    }&::after{right: 0;border-color: transparent $cat $cat transparent;}&::before{left: 0;border-color: transparent transparent $cat $cat;}.eye{width: 42px;height: 42px;border-radius: 50%;position: absolute;top: 30px;background:white;overflow: hidden;display: flex;justify-content: center;align-items: center;.eye-hide{height: 20px;position: absolute;top: var(--eyeHideTop);left: -2px;right:-2px;background-color: $cat;transition: top .5s ease-in-out;z-index: 2;}&::before{content: "";height: 36px;width: 36px;background-color:black;border-radius: 50%;}&::after{content: "";width: 24px;height: 24px;background-color: white;border-radius: 50%;position: absolute;right: 0px;top: 0px; }&.left{left: 24px;}&.right{right: 24px;}}.nose{width: 0;height: 0;border-top: 7px solid rgb(248, 226, 226);border-left: 7px solid transparent;border-right: 7px solid transparent;position: absolute;left: 50%;margin-left: -7px;top: 70px;}.mouth{width: 26px;height: 20px;background-color: rgb(255, 217, 217);position: absolute;top: 85px;left: 50%;margin-left: -13px;border-radius: var(--mouthRadius);transition: border-radius .2s linear;overflow: hidden;&::after,&::before{content: "";position: absolute;display: block;top: 0;border-top: 7px solid white;border-left: 2px solid transparent;border-right: 2px solid transparent;}&::after{right: 5px;}&::before{left: 5px;}}
}@keyframes wait{0% {bottom: -20px;}50% {bottom: -25px;}100% {bottom: -20px;}
}
复制代码

我们可以实现分解出,耳朵(伪类)+ 一双眼睛 + 鼻子 + 嘴(包含两颗尖牙) = 猫。

通过以上代码就不难看出主要都是在使用绝对定位来完成,面部器官的摆放。绝大部分都是css基础代码来实现的。唯一可以注意的点,就是耳朵这个三角形,我们是通过伪类实现,将它不设置宽高,而主是通过border-width+boder-color这个技巧去绘制出三角形的,算是个css小技巧吧,后面的鼻子和嘴巴里的尖牙都是这个小技巧来实现的。

另外,还要说的是那双眼睛,我们用先填充白底再分别用伪类去实现里面的黑底圆和白色小圆,肯定有同学问了为什么不用border是实现白色圆框,就不用浪费一个伪类去完成黑底圆了?因为我们用了overflow: hidden,他多余隐藏的内容是border以下的元素,而border边框可以无损,那么他的伪类能盖不住他的border,这样显得眼皮垂下的圆圈还是很大不自然,所以我们又造了一个伪类去实现他的黑底,让外圆不使用border了。

剩下的就是做一个等待的animation动画给猫,让他上下移动着,来实现不停的呼吸的效果。

微信截图_20211030200539.png

这样一直无精打采的橘猫就完成了。因为在第一部分,我们事先已经把移入后改变的变量算好了,现在把鼠标移入,效果就出现咯~

微信截图_20211030200546.png

结语

讲到这里我们就已经完成了这个动画了,不得不说,看见食物这么激动不愧都叫他胖橘!

这里有我这个动画【I Like Fish】[2]codepen地址:https://codepen.io/jsmask/full/ZEJJZRj,可以看到演示和代码,有兴趣的小伙伴可以康康。

本期还是比较侧重基础和动画创意的,主要是新手向,大佬勿喷,经常用css写写动画挺有意思的,不仅可以熟悉基本功,而且会迸发出很多创意来,也是一种锻炼自己的学习方式吧,多练习下,大家一起加油鸭~

关于本文

来源:jsmask

https://juejin.cn/post/7025456902322520101

最后

欢迎关注【前端瓶子君】✿✿ヽ(°▽°)ノ✿

回复「算法」,加入前端编程源码算法群,每日一道面试题(工作日),第二天瓶子君都会很认真的解答哟!

回复「交流」,吹吹水、聊聊技术、吐吐槽!

回复「阅读」,每日刷刷高质量好文!

如果这篇文章对你有帮助,「在看」是最大的支持

》》面试官也在看的算法资料《《

“在看和转发”就是最大的支持

可爱猫咪,用 CSS 告诉你为何大橘为重!!相关推荐

  1. 【python】采集可爱猫咪数据并作可视化

    前言 嗨喽~大家好呀,这里是魔王呐 ! 环境介绍: python 3.6 pycharm 爬虫部分使用模块: csv requests >>> pip install request ...

  2. canvas绘制可爱猫咪

    其他的废话就不多说,效果和代码都在下面<img alt="微笑" src="http://static.blog.csdn.net/xheditor/xhedito ...

  3. 使用 Vue 从零开始手写一个猫咪瀑布流组件

    点击上方 前端Q,关注公众号 回复加群,加入前端Q技术交流群 猫咪瀑布流 如下动态图,一张张不规则的可爱猫咪照片是否勾起了你的少女心呢? 瀑布流又称瀑布流式布局,是比较流行的一种网站页面布局方式.瀑布 ...

  4. 用Python制作一个可爱的猫咪小秒表

    秒表是一项随处可见的神奇小物件,最常用到秒表的两大场景,一个是运动会,另一个是健身房,因此也总是让人联想到汗水和心跳,贲张的血管,粗重的呼吸,时间似乎变得缓慢,那一只聚拢万千目光的小小秒表,此刻却像一 ...

  5. 用python画猫咪老师怎么画_卡通简笔画:猫咪老师怎么画? 经验告诉你该这样...

    猫咪老师是动画<夏目友人帐>中的主要角色之一,并且拥有极高的人气,猫咪老师虽然平时看起来不过是只可爱的小猫,但是它的真实身份其实是一只非常厉害的妖怪哦.接下来就和大家分享一下猫咪老师的简单 ...

  6. 可爱猫python_用Python制作一个可爱的猫咪小秒表

    秒表是一项随处可见的神奇小物件,最常用到秒表的两大场景,一个是运动会,另一个是健身房,因此也总是让人联想到汗水和心跳,贲张的血管,粗重的呼吸,时间似乎变得缓慢,那一只聚拢万千目光的小小秒表,此刻却像一 ...

  7. 仅以此文纪念我可爱的猫咪

    上天给了我一次靠近爱的机会,却又给了我一次失去爱的经历.对猫咪的偏爱应该是从小时候家里的那只花猫开始的.小时候的记忆是少而模糊的,有一个片断却很清楚,小学三年级,有一天放学回家,发现家里有一只漂亮的花 ...

  8. 【猫图识别】【HTML】一张猫图,告诉你猫咪在哪

    来源地址:https://juejin.cn/post/7032670502858686495 一.前言 突发奇想,我能不能根据一张图片,就识别到图片是否有猫咪,并且这个地方是在哪里? 二.准备工作 ...

  9. 猫咪藏在哪个房间python_盘点:猫咪玩“躲猫猫”喜欢藏的几个地方,这下再也不愁找不到了...

    一觉醒来,家里的猫不在身边,将被子掀起来自己找,还是没有,床底下?依旧没有,然后找遍整个房间--不知道诸位铲屎官有没有这样的经历,猫咪"人间蒸发",然后又神不知鬼不觉地出现在身边, ...

最新文章

  1. 跌宕起伏之windows 7安装
  2. python如何导入turtle_centos7里python导入turtle的问题
  3. IDEA创建自定义模板
  4. linux c之#include <unistd.h> 总结
  5. 123 Best time to buy and sell stock iii
  6. Linux CentOS 7 安装 Redis
  7. 开热点给电脑消耗大吗_你试过爬楼梯减肥吗?热量消耗大,选对姿势很重要!...
  8. 单身暴击!程序员用 Python 给女朋友写了个翻译软件
  9. C:\WINDOWS\system32\drivers\etc\hosts
  10. [安卓学习]AndroidManifest.xml文件内容详解
  11. Bootstrap相关优质项目推荐
  12. tar 打包压缩与解压缩
  13. jquery下载及怎么选择版本
  14. GOODWELL写的绿色兵团的战友录
  15. 解决阿里云域名解析失败的问题 - 总结篇
  16. 开源office办公套件
  17. 深入浅出DDR系列(一)--DDR原理篇
  18. 记一次阿里云k8s部署-测试存储
  19. Smartbi电子表格版功能概览
  20. html论文参考文献m,论文与排版

热门文章

  1. 关于字节跳动前端校招一二三面+HR面试过程
  2. DVWA靶场系列1-环境搭建
  3. 目标窗口检测算法-NMS非极大值抑制
  4. CopyOnWriteArrayList
  5. 计算机专业法语怎么读,法语实用资料计算机专业相关词汇(17页)-原创力文档...
  6. android 默认启动器,安卓启动器_安卓默认启动器如何替换?
  7. 请用python3编写一个计算器的控制台程序_二、软件工程慕课第一章作业题——编写一个计算器...
  8. 造个轮子,动手实现一个复杂场景的表格组件(UniApp)
  9. 高分辨率屏幕下vm安装xp的解决方案
  10. [论文解读]微信看一看实时Look-alike推荐算法