前端每日实战:66# 视频演示如何用纯 CSS 创作一台咖啡机
效果预览
按下右侧的“点击预览”按钮可以在当前页面预览,点击链接可以全屏预览。
https://codepen.io/comehope/pen/rKPLMW
可交互视频
此视频是可以交互的,你可以随时暂停视频,编辑视频中的代码。
请用 chrome, safari, edge 打开观看。
https://scrimba.com/p/pEgDAM/c6NzPfK
源代码下载
每日前端实战系列的全部源代码请从 github 下载:
https://github.com/comehope/front-end-daily-challenges
代码解读
定义 dom,容器中包含机体、出水口、咖啡杯、按钮和咖啡:
<div class="coffee-machine">
<span class="body"></span>
<span class="spout"></span>
<span class="cup"></span>
<span class="button"></span>
<span class="coffee"></span>
</div>
居中显示:
body {
margin: 0;
height: 100vh;
display: flex;
align-items: center;
justify-content: center;
background: linear-gradient(to right bottom, sandybrown, darkred);
}
定义容器尺寸:
.coffee-machine {
width: 15em;
height: 15em;
background-color: white;
font-size: 20px;
border-radius: 50%;
border: 2em solid white;
}
画出机体的外框:
.coffee-machine {
position: relative;
display: flex;
justify-content: center;
}
.body {
position: absolute;
width: 8em;
height: 12em;
background-color: sandybrown;
border-radius: 1.2em;
top: 1.5em;
border-right: 0.6em solid peru;
}
用伪元素画出机体的中间部分:
.body::after {
content: '';
position: absolute;
width: 8em;
height: 8em;
background-color: darkslategray;
top: 2em;
border-right: 0.6em solid black;
}
画出出水口:
.spout {
position: absolute;
width: 3em;
height: 1em;
background-color: white;
top: 3.5em;
border-radius: 0.5em;
border-right: 0.5em solid silver;
}
画出咖啡杯的杯体:
.cup {
position: absolute;
width: 3em;
height: 2em;
background-color: white;
bottom: 3.5em;
border-radius: 0 0 1.4em 1.4em;
border-right: 0.5em solid silver;
}
用伪元素画出咖啡杯的把手:
.cup::after {
content: '';
position: absolute;
width: 0.6em;
height: 0.6em;
border: 0.3em solid silver;
border-radius: 50%;
right: -1.2em;
top: 0.2em;
}
画出按钮:
.button {
position: absolute;
width: 1.2em;
height: 1.2em;
background-color: tomato;
border-radius: 50%;
bottom: 2em;
right: 4.5em;
}
画出咖啡:
.coffee::before,
.coffee::after {
content: '';
position: absolute;
width: 0.7em;
height: 5em;
background-color: chocolate;
top: 4.5em;
left: calc((15em - 0.7em) / 2);
}
接下来润色一下。
为咖啡机增加光影:
.coffee-machine {
z-index: 1;
}
.coffee-machine::before,
.coffee-machine::after {
content: '';
position: absolute;
width: 2em;
height: 2em;
border: 0.3em solid transparent;
z-index: 2;
border-radius: 50%;
border-left-color: white;
left: 3.8em;
}
.coffee-machine::before {
top: 1.8em;
transform: rotate(40deg);
}
.coffee-machine::after {
bottom: 1.8em;
transform: rotate(-40deg);
}
定义咖啡流动的前半段动画,即咖啡从出水口流到杯中:
.coffee::before {
animation: 2s linear infinite;
animation-name: pouring-before;
transform-origin: top;
}
@keyframes pouring-before {
0%, 20% {
transform: scaleY(0);
}
30%, 100% {
transform: scaleY(1);
}
70%, 100% {
visibility: hidden;
}
}
定义咖啡流动的后半段动画,即出水口停止流出咖啡,剩余咖啡流到杯中:
.coffee::after {
animation: 2s linear infinite;
animation-name: pouring-after;
transform-origin: bottom;
}
@keyframes pouring-after {
0%, 70% {
visibility: hidden;
transform: scaleY(1);
}
80%, 100% {
transform: scaleY(0);
}
}
大功告成!
前端每日实战:66# 视频演示如何用纯 CSS 创作一台咖啡机的更多相关文章
- 前端每日实战:63# 视频演示如何用纯 CSS 创作一台烤面包机
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/OEBJRN 可交互视频 此视频是可 ...
- 前端每日实战:94# 视频演示如何用纯 CSS 创作一台拍立得照相机
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/YjYgey 可交互视频 此视频是可 ...
- 前端每日实战:74# 视频演示如何用纯 CSS 创作一台 MacBook Pro
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/MXNNyR 可交互视频 此视频是可 ...
- 前端每日实战:53# 视频演示如何用纯 CSS 创作一个文本淡入淡出的 loader 动画
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/ERwpeG 可交互视频 此视频是可 ...
- 前端每日实战:92# 视频演示如何用纯 CSS 创作一颗逼真的土星
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/EpbaQX 可交互视频 此视频是可 ...
- 前端每日实战:157# 视频演示如何用纯 CSS 创作一个棋盘错觉动画(实际上每一行都是平行的)
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/VEyoGj 可交互视频 此视频是可 ...
- 前端每日实战:158# 视频演示如何用纯 CSS 创作一个雨伞 toggle 控件
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/pxLbjv 可交互视频 此视频是可 ...
- 前端每日实战:140# 视频演示如何用纯 CSS 创作文本的淡入动画效果
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/ZMwgqK 可交互视频 此视频是可 ...
- 前端每日实战:161# 视频演示如何用纯 CSS 创作一张纪念卓别林的卡片(没有笑声的一天就是被荒废的一天)
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/WaaBNV 可交互视频 此视频是可 ...
随机推荐
- php md5()函数 语法
php md5()函数 语法 作用:字符串md5编码.dd马达价格 语法:md5(string,raw) 参数: 参数 描述 string 必需.规定要计算的字符串. raw 可选.规 ...
- Word文档粘贴到DEDECMS
Chrome+IE默认支持粘贴剪切板中的图片,但是我要发布的文章存在word里面,图片多达数十张,我总不能一张一张复制吧?Chrome高版本提供了可以将单张图片转换在BASE64字符串的功能.但是无法 ...
- BUUCTF | [CISCN2019 华北赛区 Day1 Web2]ikun
步骤: 找到lv6的购买出,修改折扣买lv6 :然后找到admin的登陆界面,JWT破解,登陆admin :点击一键成为大会员,利用python反序列化漏洞读取flag 解析: 这题师傅们的WP已经很 ...
- QT5 QTreeView添加右键菜单
C++ QT5学习--QTreeView控件创建右键菜单 QTreeView是QWidget的子类,我们再改写QTreeView类的时候,注意的是继承关系. 1.TreeView.h class Tr ...
- :nth-child 与 ;nth-of-child
//:nth-child:是选择父元素下的第几个元素,不分标签类别,计数从1开始 //:nth-of-type:是选择父元素下的同类型元素的第几个元素.区分标签类别,计数从1开始
- CycleGAN --- Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks
文章地址:http://openaccess.thecvf.com/content_ICCV_2017/papers/Zhu_Unpaired_Image-To-Image_Translation_I ...
- nacos 报错is not in serverlist
描述 nacos 没有在节点列表里面 查看日志 cd /opt/nacos/ tailf /logs/naming-raft.log <!--报错--> 2019-08-16 17:48: ...
- 浅谈JSONObject解析JSON数据
我们在做jmeter接口测试时能会用beanshell断言,一般都会将返回值转成JSONObject对象进行处理.本文选取较为复杂json格式数据,也将适用于java接口测试. JSON数据 { &q ...
- 【Unity渲染】Camera RenderToCubemap 渲染到立方体纹理
Unity圣典 传送门:http://www.ceeger.com/Script/Camera/Camera.RenderToCubemap.html Camera.RenderToCubemap 有 ...
- 编程语言-Ruby-问题整理
安装 https://github.com/oneclick/rubyinstaller2/releases/tag/RubyInstaller-2.6.0-1