效果预览

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

https://codepen.io/comehope/pen/rZeOQp

可交互视频

此视频是可以交互的,你可以随时暂停视频,编辑视频中的代码。

请用 chrome, safari, edge 打开观看。

第 1 部分:
https://scrimba.com/p/pEgDAM/c86mdUZ

第 2 部分:
https://scrimba.com/p/pEgDAM/cmVNbTW

源代码下载

每日前端实战系列的全部源代码请从 github 下载:

https://github.com/comehope/front-end-daily-challenges

代码解读

定义 dom,容器中包含一个表示酒桶的 .keg 元素和表示啤酒杯的 .glass 元素。酒桶有 2 个子元素,.handle 表示把手,.pipe 表示出水管,酒杯有 1 个表示啤酒的子元素 .beer

<div class="container"><div class="keg"><span class="handle"></span><span class="pipe"></span></div><div class="glass"><span class="beer"></span></div>
</div>

居中显示:

body {margin: 0;height: 100vh;display: flex;justify-content: center;background: linear-gradient(lightslategray 300px,#333 300px);
}

定义容器尺寸和伪元素的共有属性:

.container {width: 700px;height: 300px;position: relative;
}.container *::before,
.container *::after {content: '';position: absolute;
}

画出酒桶:

.keg {position: absolute;width: 90px;height: 200px;background: linear-gradient(to right,#777 70px,#555 70px);bottom: 0;left: 310px;
}

画出出水管和它的支架:

.keg .pipe {position: absolute;width: 10px;height: 40px;background-color: #ccc;top: 33px;left: 10px;
}.keg .pipe::before {width: 40px;height: 20px;background: radial-gradient(circle at 10px 10px,#eee 7px,#ccc 7px, #ccc 10px,transparent 10px),linear-gradient(#ccc 50%,#999 50%);border-radius: 10px;top: -2px;left: -5px;
}

画出把手:

.keg .handle {position: absolute;border-style: solid;border-width: 50px 10px 0 10px;border-color: black transparent transparent transparent;top: -10px;left: 5px;
}.keg .handle::before {width: 20px;height: 10px;background-color: #ccc;top: -60px;left: -10px;border-radius: 5px 5px 0 0;
}.keg .handle::after {width: 10px;height: 20px;background-color: #ccc;top: -20px;left: -5px;
}

画出酒杯:

.glass {position: absolute;width: 70px;height: 100px;color: rgba(255, 255, 255, 0.3);background-color: currentColor;bottom: 0;left: 300px;border-radius: 5px;
}.glass::before {width: 50px;height: 40px;border: 10px solid;top: 20px;right: -20px;border-radius: 0 40% 40% 0;clip-path: inset(0 0 0 72%);
}

画出杯中的啤酒和泡沫:

.beer {position: absolute;width: 60px;height: 80px;background-color: rgba(255, 206, 84, 0.8);bottom: 15px;left: 5px;border-radius: 0 0 5px 5px;border-top: solid rgba(255, 206, 84, 0.8);
}.beer::before {width: inherit;height: 15px;background-color: #eee;top: -15px;border-radius: 5px 5px 0 0;
}

接下来制作动画。

增加酒杯把手被压下的动画效果:

.keg .handle {transform-origin: center 50px;animation: handle 5s infinite;
}@keyframes handle {10%, 60% {transform: rotate(0deg);}20%, 50% {transform: rotate(-90deg);}
}

增加啤酒被斟满的动画效果:

.beer {animation: fillup 5s infinite;
}@keyframes fillup {0%, 20% {height: 0px;border-width: 0px;}40% {height: 40px;}80%, 100% {height: 80px;border-width: 5px;}
}

增加啤酒泡沫泛起的动画效果:

.beer::before {animation: wave 0.5s infinite alternate,fillup-foam 5s linear infinite;
}@keyframes fillup-foam {0%, 20% {top: 0;height: 0;}60%, 100% {top: -15px;height: 15px;}
}@keyframes wave {from {transform: skewY(-3deg);}to {transform: skewY(3deg);}
}

增加啤酒从出水口流出的效果:

.keg .pipe::after {width: 10px;background-color: rgba(255, 206, 84, 0.5);animation: flow 5s infinite;
}@keyframes flow {0%, 15% {top: 40px;height: 0;}20% {height: 115px;}40% {height: 75px;}55% {top: 40px;height: 50px;}60%, 100% {top: 80px;height: 0;}
}

最后,增加酒杯滑动的效果:

.glass {animation: slide 5s ease infinite;
}@keyframes slide {0% {left: 0;filter: opacity(0);}20%, 80% {left: 300px;filter: opacity(1);}100% {left: 600px;filter: opacity(0);}
}

大功告成!

前端每日实战:119# 视频演示如何用纯 CSS 创作一个接扎啤的动画(内含2个视频)...相关推荐

  1. 前端每日实战:45# 视频演示如何用纯 CSS 创作一个菱形 loader 动画

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

  2. 前端每日实战:164# 视频演示如何用原生 JS 创作一个数独训练小游戏(内含 4 个视频)...

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

  3. html鼠标拖尾效果,前端每日实战:25# 视频演示如何用纯 CSS 创作一个慧星拖尾效果的 loader 动画...

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. 可交互视频教程 此视频是可以交互的,你可以随时暂停视频,编辑视频中的代码. 请用 chrome, s ...

  4. 前端每日实战:102# 视频演示如何用纯 CSS 创作一个小和尚

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

  5. 前端每日实战:125# 视频演示如何用纯 CSS 创作一个失落的人独自行走的动画...

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

  6. 前端每日实战:160# 视频演示如何用纯 CSS 创作一个打开内容弹窗的交互动画...

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

  7. 前端每日实战:84# 视频演示如何用纯 CSS 创作一个极品飞车 loader

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

  8. python绘制图形沙漏_前端每日实战:118# 视频演示如何用纯 CSS 创作一个沙漏 loader...

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. 可交互视频 此视频是可以交互的,你可以随时暂停视频,编辑视频中的代码. 请用 chrome, saf ...

  9. 前端每日实战:156# 视频演示如何用纯 CSS 创作一个飞机舷窗风格的 toggle 控件...

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

最新文章

  1. 第1章列表处理——1.1 Lisp列表
  2. 自己平时会使用的一个自定义前端结构
  3. ng-template 和 TemplateRef.createEmbeddedView
  4. redis单线程原理___Redis为何那么快-----底层原理浅析
  5. 【第一章】MySQL数据概述
  6. 机器 – 程序 – 人 (2)
  7. 兔子mq框架_春天兔子MQ
  8. linux系统中find怎么用,Linux系统中查找命令find的使用方法(一)
  9. 美国数学家维纳智力早熟,11岁就上了大学,他曾在1935-1936年 应邀参加中国清华大学讲学,一次他参加某个重要会议,年轻的脸孔 引人注意,于是有人询问他的年龄,他回答说“我年龄的立方是个4位数
  10. vue 项目初始化、mock数据以及安装less
  11. dev c 编程语言,devc如何自定义头文件并使用
  12. **alon_MM DMA Interface for PCIe使用详解
  13. LT.852二分法查找指定数字,绝对值最小的数
  14. UE-战斗无止境的UI实现
  15. window.print()手动设置纸张的宽高
  16. Pytorch框架之one_hot编码函数
  17. C++: 情侣最美身高差(团体程序设计天梯赛)
  18. UCK商学院《当区块链遇见UCK》人物专访——张伟杰:区块链给90后带来新的机遇
  19. 读书笔记-人月神话12
  20. python绘图案例——递归绘制分形树

热门文章

  1. 使用select+非阻塞socket写的网络数据转发程序 « Xiaoxia[PG]
  2. 速达微信群发软件 v1.0 官方免费安装版
  3. 移动物联网卡构建智慧医疗体系,加强医院管理效率
  4. iOS开发 数据存储之NSUserDefaults
  5. linux 第1个参数时在不兼容的指针类型间转换,警告:从不兼容的指针类型传递参数[默认启用]...
  6. 树莓派 交叉编译 php,apm 树莓派的交叉编译方法 - 穿越机综合技术讨论区-5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年)...
  7. iPhone 5S及iWatch或将采用指纹验证技术
  8. linux多线程编程和linux 2.6下的nptl,Linux多线程编程和Linux 2.6下的NPTL
  9. 【读书笔记】地头力:从结果出发解决问题
  10. html 锚连接 2个页面,html锚链接的使用 跳转到本页某处