前端每日实战:49# 视频演示如何用纯 CSS 创作一支诱人的冰棍
2024-09-06 00:48:36
效果预览
按下右侧的“点击预览”按钮可以在当前页面预览,点击链接可以全屏预览。
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;
}
大功告成!
最新文章
- mongodb安装启动遇到的问题
- word20161208
- python_way ,day25 wmi
- BZOJ 4408 神秘数
- 360 chrome不能登录Google账户
- Windows 下多线程编程技术
- 你好,C++(28)用空间换时间 5.2 内联函数 5.3 重载函数
- nginx的反向代理功能和缓存功能
- 面试之路(3)-详解MVC,MVP,MVVM
- Python四步实现决策树ID3算法,参考机器学习实战
- BZOJ2178 圆的面积并 计算几何 辛普森积分
- Centos7下安装Docker(详细的新手装逼教程)
- 同上篇 这篇是针对mesh的
- MYSQL常用函数(时间和日期函数)
- html-文件上传设置accept类型延时问题
- ES6标准入门之字符串的拓展讲解
- 1,EasyNetQ-链接到RabbitMQ
- Android访问网络,使用HttpURLConnection还是HttpClient?
- Dubbo2.7源码分析-如何发布服务
- java synchronized关键字浅析