效果预览

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

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

可交互视频教程

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

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

https://scrimba.com/p/pEgDAM/cnpZEAZ

源代码下载

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

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

代码解读

定义 dom,容器中包含 2 个元素:

<div class="ice-lolly">
<div class="flavors"></div>
<div class="stick"></div>
</div>

居中显示:

body {
margin: 0;
height: 100vh;
display: flex;
align-items: center;
justify-content: center;
background-color: darkslategray;
}

绘制出冰棍的外形:

.flavors {
width: 19em;
height: 26em;
font-size: 10px;
border-radius: 8em 8em 1em 1em;
}

给冰棍上色:

.flavors {
position: relative;
overflow: hidden;
} .flavors::before {
content: '';
position: absolute;
width: 140%;
height: 120%;
background: linear-gradient(
hotpink 0%,
hotpink 25%,
deepskyblue 25%,
deepskyblue 50%,
gold 50%,
gold 75%,
lightgreen 75%,
lightgreen 100%);
z-index: -1;
left: -20%;
transform: rotate(-25deg);
}

来一点光照效果:

.flavors::after {
content: '';
position: absolute;
width: 2em;
height: 17em;
background-color: rgba(255, 255, 255, 0.5);
left: 2em;
bottom: 2em;
border-radius: 1em;
}

画出冰棍筷子:

.stick {
position: relative;
width: 6em;
height: 8em;
background-color: sandybrown;
left: calc(50% - 6em / 2);
border-radius: 0 0 3em 3em;
}

给冰棍筷子加一点阴影,增加立体感:

.stick::after {
content: '';
position: absolute;
width: inherit;
height: 2.5em;
background-color: sienna;
}

让冰棍的色彩滚动起来:

.flavors::before {
animation: moving 100s linear infinite;
} @keyframes moving {
to {
background-position: 0 1000vh;
}
}

最后,增加交互效果,当鼠标悬停时才播放动画:

.flavors::before {
animation-play-state: paused;
} .ice-lolly:hover .flavors::before {
animation-play-state: running;
}

大功告成!

最新文章

  1. mongodb安装启动遇到的问题
  2. word20161208
  3. python_way ,day25 wmi
  4. BZOJ 4408 神秘数
  5. 360 chrome不能登录Google账户
  6. Windows 下多线程编程技术
  7. 你好,C++(28)用空间换时间 5.2 内联函数 5.3 重载函数
  8. nginx的反向代理功能和缓存功能
  9. 面试之路(3)-详解MVC,MVP,MVVM
  10. Python四步实现决策树ID3算法,参考机器学习实战
  11. BZOJ2178 圆的面积并 计算几何 辛普森积分
  12. Centos7下安装Docker(详细的新手装逼教程)
  13. 同上篇 这篇是针对mesh的
  14. MYSQL常用函数(时间和日期函数)
  15. html-文件上传设置accept类型延时问题
  16. ES6标准入门之字符串的拓展讲解
  17. 1,EasyNetQ-链接到RabbitMQ
  18. Android访问网络,使用HttpURLConnection还是HttpClient?
  19. Dubbo2.7源码分析-如何发布服务
  20. java synchronized关键字浅析

热门文章

  1. iconfont的三种使用方式
  2. 用java实现文件的断点续传并发下载
  3. 特权第一讲--Lesson 1 课程概述与如何学好FPGA
  4. 【CF1257D】Yet Another Monster Killing Problem【贪心】
  5. 第一周训练 | STL和基本数据结构
  6. 170814关于Cookie的知识点
  7. python发送消息到ipmsg
  8. Elasticsearch6.5安装&amp;&amp;常见问题与答案解释
  9. 如何查看MySQL数据库的版本
  10. 相同name,取最小的id的值,mysql根据相同字段 更新其它字段