效果预览

按下右侧的“点击预览”按钮可以在当前页面预览,点击链接可以全屏预览。

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 创作一台咖啡机的更多相关文章

  1. 前端每日实战:63# 视频演示如何用纯 CSS 创作一台烤面包机

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/OEBJRN 可交互视频 此视频是可 ...

  2. 前端每日实战:94# 视频演示如何用纯 CSS 创作一台拍立得照相机

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/YjYgey 可交互视频 此视频是可 ...

  3. 前端每日实战:74# 视频演示如何用纯 CSS 创作一台 MacBook Pro

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/MXNNyR 可交互视频 此视频是可 ...

  4. 前端每日实战:53# 视频演示如何用纯 CSS 创作一个文本淡入淡出的 loader 动画

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/ERwpeG 可交互视频 此视频是可 ...

  5. 前端每日实战:92# 视频演示如何用纯 CSS 创作一颗逼真的土星

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/EpbaQX 可交互视频 此视频是可 ...

  6. 前端每日实战:157# 视频演示如何用纯 CSS 创作一个棋盘错觉动画(实际上每一行都是平行的)

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/VEyoGj 可交互视频 此视频是可 ...

  7. 前端每日实战:158# 视频演示如何用纯 CSS 创作一个雨伞 toggle 控件

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/pxLbjv 可交互视频 此视频是可 ...

  8. 前端每日实战:140# 视频演示如何用纯 CSS 创作文本的淡入动画效果

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/ZMwgqK 可交互视频 此视频是可 ...

  9. 前端每日实战:161# 视频演示如何用纯 CSS 创作一张纪念卓别林的卡片(没有笑声的一天就是被荒废的一天)

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/WaaBNV 可交互视频 此视频是可 ...

随机推荐

  1. iview之——table中嵌套input、select等

    使用iview在table中嵌入button是比较常见的需求,但是在table中嵌入input或者select你是否考虑过呢?本文用实例介绍input和select在table中的嵌套. 理解tabl ...

  2. ckeditor如何能实现直接粘贴把图片上传到服务器中?

    在之前在工作中遇到在富文本编辑器中粘贴图片不能展示的问题,于是各种网上扒拉,终于找到解决方案,在这里感谢一下知乎中众大神以及TheViper. 通过知乎提供的思路找到粘贴的原理,通过TheViper找 ...

  3. PHPExcel 之常用功能

    PHPExcel基本操作: 定义EXCEL实体 即定义一个PHPEXCEL对象,并设置EXCEL对象内显示内容 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...

  4. 《数据结构与算法(C语言版)》严蔚敏 | 第四章课本案例

    //二叉树的顺序存储表示 #define MAXTSIZE 100 typedef TElemtype SqBiTree[MAXTSIZE]; SqBiTree bt; //二叉树的二叉链表存储表示 ...

  5. 学习如何使用Markdown

    Markdown 新手指南点击查看 一级标题 二级标题 三级标题 四级标题 五级标题 六级标题 ---段落 引用 这是一个无序列表 这是一个无序列表 这是一个父无序列表 这是一个子无序列表 这是一个有 ...

  6. p4899 [IOI2018] werewolf 狼人

    分析 我用的主席树维护qwq 代码 #include<iostream> #include<cstdio> #include<cstring> #include&l ...

  7. 架构-SOA:SOA(面向服务的架构)

    ylbtech-架构-SOA:SOA(面向服务的架构) 面向服务的架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和契约联系起来.接口是采 ...

  8. php远程抓取(下载)文件到本项目指定目录中

    function httpcopy($url, $file="", $timeout=60) { $file = empty($file) ? pathinfo($url,PATH ...

  9. LeetCode 112. Path Sum 动态演示

    给一个目标值,判断一棵树从根到叶子是否至少有一条路径加起来的和等于目标值 比较典型的深度优先算法. 引入一个全局变量bResult, 一旦找到一条,就不再搜索其他的了. class Solution ...

  10. 001---mysql分库分表

    mysql分库分表 一.整体的切分方式 1.分库分表:即数据的切分就是通过某种特定的条件,将我们存放在同一个数据库中的数据分散存放到多个数据库(主机)中,以达到分散单台设备负载的效果 2.数据的切分根 ...