可爱猫咪,用 CSS 告诉你为何大橘为重!!
点击上方 前端瓶子君,关注公众号
回复算法,加入前端编程面试算法每日一题群
介绍
本期我们通过vite+scss去完成一个橘猫心情变化的创意动画,这里的逻辑我们将不使用任何js代码,仅依靠css来完成,所以,通过本期的动画,你可以到一些css动画和绘制的一些技巧。废话不多说,先康康效果~
还比较可爱吧。当鼠标(鱼)移入出,橘子闷闷不乐,无精打采的。但当鼠标(鱼)移入,橘子一看见最喜欢的鱼立马就开心了,连天气都变好了,对,这只橘子就是这么馋,变成胖橘是有原因的。
好了,我们马上就要进入正文了,我们会从基础搭建,太阳,云,猫的绘制和动画去了解制作这个动画的流程。
正文
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后的值是我事先算好的,如果大家重新开发别的动画可以一边做一边算。
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投影去完成一点发光的效果。
然后,我们再开始画云朵~
.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动画,让他时大时小,有动的感觉。
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动画给猫,让他上下移动着,来实现不停的呼吸的效果。
这样一直无精打采的橘猫就完成了。因为在第一部分,我们事先已经把移入后改变的变量算好了,现在把鼠标移入,效果就出现咯~
结语
讲到这里我们就已经完成了这个动画了,不得不说,看见食物这么激动不愧都叫他胖橘!
这里有我这个动画【I Like Fish】[2]codepen地址:https://codepen.io/jsmask/full/ZEJJZRj,可以看到演示和代码,有兴趣的小伙伴可以康康。
本期还是比较侧重基础和动画创意的,主要是新手向,大佬勿喷,经常用css写写动画挺有意思的,不仅可以熟悉基本功,而且会迸发出很多创意来,也是一种锻炼自己的学习方式吧,多练习下,大家一起加油鸭~
关于本文
来源:jsmask
https://juejin.cn/post/7025456902322520101
最后
欢迎关注【前端瓶子君】✿✿ヽ(°▽°)ノ✿
回复「算法」,加入前端编程源码算法群,每日一道面试题(工作日),第二天瓶子君都会很认真的解答哟!
回复「交流」,吹吹水、聊聊技术、吐吐槽!
回复「阅读」,每日刷刷高质量好文!
如果这篇文章对你有帮助,「在看」是最大的支持
》》面试官也在看的算法资料《《
“在看和转发”就是最大的支持
可爱猫咪,用 CSS 告诉你为何大橘为重!!相关推荐
- 【python】采集可爱猫咪数据并作可视化
前言 嗨喽~大家好呀,这里是魔王呐 ! 环境介绍: python 3.6 pycharm 爬虫部分使用模块: csv requests >>> pip install request ...
- canvas绘制可爱猫咪
其他的废话就不多说,效果和代码都在下面<img alt="微笑" src="http://static.blog.csdn.net/xheditor/xhedito ...
- 使用 Vue 从零开始手写一个猫咪瀑布流组件
点击上方 前端Q,关注公众号 回复加群,加入前端Q技术交流群 猫咪瀑布流 如下动态图,一张张不规则的可爱猫咪照片是否勾起了你的少女心呢? 瀑布流又称瀑布流式布局,是比较流行的一种网站页面布局方式.瀑布 ...
- 用Python制作一个可爱的猫咪小秒表
秒表是一项随处可见的神奇小物件,最常用到秒表的两大场景,一个是运动会,另一个是健身房,因此也总是让人联想到汗水和心跳,贲张的血管,粗重的呼吸,时间似乎变得缓慢,那一只聚拢万千目光的小小秒表,此刻却像一 ...
- 用python画猫咪老师怎么画_卡通简笔画:猫咪老师怎么画? 经验告诉你该这样...
猫咪老师是动画<夏目友人帐>中的主要角色之一,并且拥有极高的人气,猫咪老师虽然平时看起来不过是只可爱的小猫,但是它的真实身份其实是一只非常厉害的妖怪哦.接下来就和大家分享一下猫咪老师的简单 ...
- 可爱猫python_用Python制作一个可爱的猫咪小秒表
秒表是一项随处可见的神奇小物件,最常用到秒表的两大场景,一个是运动会,另一个是健身房,因此也总是让人联想到汗水和心跳,贲张的血管,粗重的呼吸,时间似乎变得缓慢,那一只聚拢万千目光的小小秒表,此刻却像一 ...
- 仅以此文纪念我可爱的猫咪
上天给了我一次靠近爱的机会,却又给了我一次失去爱的经历.对猫咪的偏爱应该是从小时候家里的那只花猫开始的.小时候的记忆是少而模糊的,有一个片断却很清楚,小学三年级,有一天放学回家,发现家里有一只漂亮的花 ...
- 【猫图识别】【HTML】一张猫图,告诉你猫咪在哪
来源地址:https://juejin.cn/post/7032670502858686495 一.前言 突发奇想,我能不能根据一张图片,就识别到图片是否有猫咪,并且这个地方是在哪里? 二.准备工作 ...
- 猫咪藏在哪个房间python_盘点:猫咪玩“躲猫猫”喜欢藏的几个地方,这下再也不愁找不到了...
一觉醒来,家里的猫不在身边,将被子掀起来自己找,还是没有,床底下?依旧没有,然后找遍整个房间--不知道诸位铲屎官有没有这样的经历,猫咪"人间蒸发",然后又神不知鬼不觉地出现在身边, ...
最新文章
- 跌宕起伏之windows 7安装
- python如何导入turtle_centos7里python导入turtle的问题
- IDEA创建自定义模板
- linux c之#include <unistd.h> 总结
- 123 Best time to buy and sell stock iii
- Linux CentOS 7 安装 Redis
- 开热点给电脑消耗大吗_你试过爬楼梯减肥吗?热量消耗大,选对姿势很重要!...
- 单身暴击!程序员用 Python 给女朋友写了个翻译软件
- C:\WINDOWS\system32\drivers\etc\hosts
- [安卓学习]AndroidManifest.xml文件内容详解
- Bootstrap相关优质项目推荐
- tar 打包压缩与解压缩
- jquery下载及怎么选择版本
- GOODWELL写的绿色兵团的战友录
- 解决阿里云域名解析失败的问题 - 总结篇
- 开源office办公套件
- 深入浅出DDR系列(一)--DDR原理篇
- 记一次阿里云k8s部署-测试存储
- Smartbi电子表格版功能概览
- html论文参考文献m,论文与排版
热门文章
- 关于字节跳动前端校招一二三面+HR面试过程
- DVWA靶场系列1-环境搭建
- 目标窗口检测算法-NMS非极大值抑制
- CopyOnWriteArrayList
- 计算机专业法语怎么读,法语实用资料计算机专业相关词汇(17页)-原创力文档...
- android 默认启动器,安卓启动器_安卓默认启动器如何替换?
- 请用python3编写一个计算器的控制台程序_二、软件工程慕课第一章作业题——编写一个计算器...
- 造个轮子,动手实现一个复杂场景的表格组件(UniApp)
- 高分辨率屏幕下vm安装xp的解决方案
- [论文解读]微信看一看实时Look-alike推荐算法