如何用纯 CSS 创作一个冒着热气的咖啡杯

效果预览

在线演示

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


https://codepen.io/zhang-ou/pen/xjXxoz


可交互视频教程


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


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


https://scrimba.com/c/cBm4eU9


源代码下载


本地下载

请从 github 下载。


https://github.com/comehope/front-end-daily-challenges/tree/master/013-hot-coffee-cup


代码解读


定义 dom,一个名为 coffee 的容器,其中包含一个名为 cup 的元素:

<div class="coffee"><div class="cup"></div>
</div>

居中显示:

html, body {height: 100%;align-items: center;justify-content: center;background-color: brown;
}

画出杯子主体:

.coffee .cup {width: 10em;height: 9em;background-color: white;border-bottom-left-radius: 1.5em;border-bottom-right-radius: 1.5em;
}

用伪元素画出杯口:

.coffee .cup {position: relative;
}.coffee .cup::before {content: '';position: absolute;width: 100%;height: 2em;background-color: chocolate;border: 0.5em solid white;box-sizing: border-box;border-radius: 50%;top: -1em;box-shadow: inset 0 0 1em rgba(0, 0, 0, 0.5);
}

用伪元素画出杯子把手:

.coffee .cup::after {content: '';position: absolute;width: 3em;height: 3.5em;border: 0.8em solid white;border-radius: 50%;top: 20%;left: 80%;
}

dom 元素增加托盘:

<div class="coffee"><div class="cup"></div><div class="plate"></div>
</div>

画出托盘:

.coffee {display: flex;flex-direction: column;align-items: center;height: calc(9em   1em);position: relative;
}.coffee .plate {width: 16em;height: 1em;background-color: white;border-bottom-left-radius: 50%;border-bottom-right-radius: 50%;position: absolute;bottom: -1px;
}

dom 元素增加杯中冒出的热气:

<div class="coffee"><div class="vapor"><span></span><span></span><span></span><span></span><span></span></div><div class="cup"></div><div class="plate"></div>
</div>

画出杯中冒出的热气:

.coffee {height: calc(9em   1em   2em);
}.coffee .vapor {width: 7em;display: flex;justify-content: space-between;
}.coffee .vapor span {width: 0.1em;min-width: 1px;height: 2em;background-color: white;
}

定义热气冒出的动画:

.coffee .vapor span {animation: evaporation 2s linear infinite;filter: opacity(0);
}@keyframes evaporation {from {transform: translateY(0);filter: opacity(1) blur(0.2em);}to {transform: translateY(-4em);filter: opacity(0) blur(0.4em);}
}

最后,调整每条热气的延迟时间,使动感更强:

.coffee .vapor span:nth-child(1) {animation-delay: 0.5s;
}.coffee .vapor span:nth-child(2) {animation-delay: 0.1s;
}.coffee .vapor span:nth-child(3) {animation-delay: 0.3s;
}.coffee .vapor span:nth-child(4) {animation-delay: 0.4s;
}.coffee .vapor span:nth-child(5) {animation-delay: 0.2s;
}

大功告成!

知识点

  • border-bottom-left-radius https://developer.mozilla.org/en-US/docs/Web/CSS/border-bottom-left-radius
  • border-bottom-right-radius https://developer.mozilla.org/en-US/docs/Web/CSS/border-bottom-right-radius
  • box-shadow https://developer.mozilla.org/en-US/docs/Web/CSS/box-shadow
  • calc() https://developer.mozilla.org/en-US/docs/Web/CSS/calc
  • translateY() https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/translateY
  • filter https://developer.mozilla.org/en-US/docs/Web/CSS/filter
  • animation-delay https://developer.mozilla.org/en-US/docs/Web/CSS/animation-delay

原文地址:https://segmentfault.com/a/1190000014734039


更多专业前端知识,请上 【猿2048】www.mk2048.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/364699.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FC冒险岛java版_冒险岛单机版

游戏概述冒险岛单机版是一款非常好玩的横版动作RPG游戏,游戏难度很适中,冒险岛单机版采用了与其他Q版2D游戏不同的横向卷轴的移动方式,场景高低落差的设计,整个画面层次感设计算是一级,喜欢这类手柄闯关游戏的玩家快来…

通过小程序实现网站扫码登录!每年都可以省 300 块...代替微信开放平台和服务号的登陆模式!

我们知道,要接入微信登陆有两种方式 1、微信开放平台2、微信服务号 这两种方式均可生成带参数的二维码,然后扫码获取用户基本信息的,所以我们可以在网站上用这两种方式开发网站的扫码登录,也是现在很多网站的通用做法。 微信开…

WAR文件与具有嵌入式服务器的Java应用程序

大多数服务器端Java应用程序(例如,面向Web或面向服务的)都希望在容器中运行。 打包这些应用程序以进行分发的传统方法是将它们捆绑为WAR文件。 这无非是具有标准目录布局的ZIP归档文件,其中包含运行时所需的所有库和应用程序级依赖…

easypanel mysql错误_Easypanel v1.6(虚拟主机控制面板)图文使用教程

一、Easypanel软件简介:Easypanel是一款虚拟主机管理工具,它支持php(windows系统还支持asp、asp.net)、磁盘配额、在线文件管理、在线web软件安装,是一款集虚拟主机、ftp、mysql等功能为一体的管理系统,本身还集成了kangle web服务…

游戏、脑洞大开1(密码简单破译)

“二八”妙龄写密码,看谁聪明“爱死他”。 密文:766C7273626F76706A5E6F715F7271766C72706D626B71716C6C71666A62 注意:(1)此题由正心41上课的同学做 (2)第一个提交,答案&#xff1a…

thinkPHP利用ajax异步上传图片并显示、删除

近来学习tp5的过程中,项目中有个发帖功能,选择主题图片。如下: 利用原始的文件上传处理,虽然通过原始js语句能实时显示上传图片,但是这样的话会涉及很多兼容问题。使用ajax技术,实现选择性删除所选图片功能…

php redis.dll php5.6,在Windows 64位下为PHP5.6.14安装redis扩展

一.php安装redis扩展1.使用phpinfo()查看当前版本的信息2.根据PHP版本号,编译器版本号和CPU架构选择php_redis-2.2.5-5.6-nts-vc11-x64.zip和php_igbinary-1.2.1-5.5-nts-vc11-x64.zip下载地址:http://windows.php.net/downloads/pecl/snaps/redis/2.2.5…

matrix derivatives

来源:cs229 stanford Machine Learning Notes转载于:https://www.cnblogs.com/pertinencec/p/10082965.html

Project Student:维护Webapp(只读)

这是Project Student的一部分。 其他职位包括带有Jersey的 Web服务 客户端,带有Jersey的 Web服务服务器 , 业务层 , 具有Spring数据的持久性 ,分片集成测试数据 , Webservice集成和JPA标准查询 。 当我开始这个项目时…

教务管理及教材订购系统设计文档

教务管理及教材订购系统设计文档目录 一、概述 1.1 开发背景 1.2 使用技术 1.3运行环境 1.4 设计目标 1.4.1权限管理 1.4.2信息管理 1.4.3选课管理 1.4.4 成绩管理 1.4.5教材订购 二、功能分析划分 2.1信息管理 2.1.1班级信息管理 2.1.2专业信息管理 2.1.3课程信息管理 2.1.4学…

php 复制行,phpstorm怎么快速复制当前行?

qq_花开花谢_0PhpStorm 默认快捷键ctrlj 插入活动代码提示ctrlaltt 当前位置插入环绕代码altinsert 生成代码菜单Shift Enter 新一行ctrlq 查看代码注释ctrld 复制当前行ctrly 删除当前行ctrlalty 刷新项目缓…

Project Student:维护Webapp(可编辑)

这是Project Student的一部分。 其他帖子包括带有Jersey的 Web服务 客户端,带有Jersey的 Web服务服务器 , 业务层 , 具有Spring数据的持久性 ,分片集成测试数据 , Webservice集成 , JPA标准查询和维护Webap…

金蝶云php webapi,K/3 Cloud Web API销售出库单PHP完整示例【分享】

按照惯例,先上图【销售出库单】保存,如图:已经打印出 登陆请求及登陆成功,保存请求及保存成功的返回信息。如下代码,是完全可以直接进行运行的代码,具体详见代码中注释。[code]//K/3 Cloud 业务站点地址$cl…

JavaFX自定义控件– Nest Thermostat第2部分

自从我开始创建Nest恒温器FX自定义控件以来,已经有一段时间了! 因此,上次,如Gerrit Grunwald所建议,我花了一些时间用inkscape复制Nest恒温器设计,这是构建JavaFX版本的第一步。 今天,我想与大…

haproxy实现会话保持

HAProxy系列文章:http://www.cnblogs.com/f-ck-need-u/p/7576137.html 1.反向代理为什么需要设置cookie 任何一个七层的http负载均衡器,都应该具备一个功能:会话保持。会话保持是保证客户端对动态应用程序正确请求的基本要求。 还是那个被举烂…

python实现简单的百度翻译

这段时间,一直在学python,想找点东西实现一下,练手,所以我想通过python代码来实现翻译,话不多说,看吧! 以chrome为例 1 打开百度翻译 https://fanyi.baidu.com 2 找到请求的url地址 https://fanyi.baidu.…

php不会写 能看懂,人人都能看懂的全栈开发教程——PHP

既然我们是要实现从数据库里读取任务列表这个需求,那么首先我们就得知道如何通过编程的方式从数据库里把数据读出来。这里我们就选 PHP 作为我们的编程语言来实现我们的想法。为什么是 PHP 呢?主要有以下两个原因:PHP 比较简单,入…

与詹金斯一起连续交付Heroku

如果您安装了Jenkins Git插件,那么利用Jenkins并针对Heroku的连续交付管道的设置就非常简单。 通过此管道,对特定Git分支的更改将导致Heroku部署。 为了使此部署过程正常运行,您应该至少使用两个Git分支,因为您希望有一个针对自动…

安卓第三次作业

<?xml version"1.0" encoding"utf-8"?> <uses-sdkandroid:minSdkVersion"8"android:targetSdkVersion"18" /> <uses-permission android:name"android.permission.RECORD_AUDIO" /> <uses-permissio…

[vue插件]基于vue2.x的电商图片放大镜插件

最近在撸一个电商网站&#xff0c;有一个需求是要像淘宝商品详情页那样&#xff0c;鼠标放在主图上&#xff0c;显示图片放大镜效果&#xff0c;找了一下貌似没有什么合适的vue插件&#xff0c;于是自己撸了一个&#xff0c;分享一下。小白第一次分享&#xff0c;各位大神莫见笑…