CSS100Day(10)-SVG旋转动画
901 字
5 分钟
CSS100Day(10)-SVG旋转动画
设计简介
本次练习主要做个旋转的圈,使用SVG的圆stroke来实现,其中有两个关键点:
-
关键点1:
stroke-dasharray属性表示svg边实线和虚线数组,如果该属性值大于SVG整个长度,则全部实现,例如:周长100,该属性设置50,那么实线50,虚线50stroke-dashoffset属性表示有点类似“延迟”的概念,就是实现延迟(左移)长度,即如果svg线(圆)长度100,该属性设置50,stroke-dasharray设置100,那么实线延迟了50,长度为50 -
关键点2:做到spinner在翻转,使用rotate是做不到的,需要scaleY(-1),按Y轴旋转,看
@keyframe spin代码
效果展示
20150115,星期四
11:42
1248 大卡
实现代码和步骤
HTML部分
HTML就是绘制svg的一个圆
<div class="frame"> <div class="center"> <svg class="spinner" viewbox="0 0 202 202" xmlns="https://www.w3.org/2000/svg"> <circle cx="101" cy="101" r="99.5"></circle> </svg>
<div class="date">20150115,星期四</div> <div class="time">11:42</div> <img class="beat" src="./heart.svg" alt="心跳" /> <div class="energy">1248 大卡</div> </div></div>CSS部分
非关键部分如下,主要是其他内容
:root { --speed: 3s;}
.frame { width: 400px; height: 400px; box-shadow: 1px 2px 10px 0 rgba(0, 0, 0, 0.3); background: #4c4c4c; color: #fff; font-size: 12px; line-height: 100%; text-transform: uppercase; border-radius: 2px;}
.center { position: absolute; width: 212px; height: 212px; top: 87px; left: 87px; background: #242424; border: 7px solid #3a3a3a; border-radius: 50%; text-align: center;}
.date { position: absolute; top: 68px; width: 100%;}
.time { position: absolute; top: 80px; width: 100%; font-weight: 700; font-size: 40px; line-height: 100%; margin: 4px 0;}
.beat { position: absolute; left: 50%; top: 125px; width: 20px; height: 20px; transform: translateX(-220%); animation: beat 0.8s ease-in-out infinite alternate-reverse;}
.energy { position: absolute; top: 128px; left: 50%; transform: translateX(-30%);}
@keyframes beat { 0% { scale: 1; transform: translateX(-220%); } 100% { scale: 1.2; transform: translateX(-185%); }}关键部分就是svg的两个关键属性stroke-dasharray和stroke-dashoffset
其次就是最关键的scaleY(-1)
.spinner { position: absolute; width: 202px; height: 202px; border-radius: 50%; top: 5px; left: 5px;
circle { stroke: #f85b58; stroke-width: 3px; fill: none; /* 实线长度-一个也表示虚线长度-目前625就是周长 */ stroke-dasharray: 625; transform-origin: 50% 50%; /* 默认svg圆开始从右边开始,所以这里旋转到顶部开始 */ transform: rotate(-90deg); animation: spin var(--speed) ease-in-out infinite; }}
@keyframes spin { 0% { stroke-dashoffset: 625; transform: rotate(-90deg) scaleY(1); } 50% { /* 关键2:该属性是实现延迟多久出现,这里设置不延迟就充满整个圆 */ stroke-dashoffset: 0; // [!code highlight] /* 关键1:scaleY(-1)按照Y轴翻转,不要旋转哈 */ transform: rotate(-90deg) scaleY(1); // [!code highlight] } 50.001% { stroke-dashoffset: 0; transform: rotate(-90deg) scaleY(-1); } 100% { stroke-dashoffset: 625; transform: rotate(-90deg) scaleY(-1); }}分享给其他人
如果该文章对您有帮助,欢迎分享给其他人阅读!
复制链接
相关文章
推荐筛选
1
CSS100Day(21)-利用svg线段实现吃小球动画
设计灵感 利用svg线段实现吃小球动画
2
CSS100Day(2)-菜单按钮动画
设计灵感 菜单按钮都见过,但是三根条动画实现,关键利用no-animation初始化时候关闭回复动画
3
CSS100Day(17)-svg实现彭罗斯三角
设计灵感 三个svg实现彭罗斯三角
4
CSS100Day(20)-发送邮件惊艳动画无JS
设计灵感 纯css实现发送邮件,利用checkbox
5
CSS100Day(16)-利用before、after伪元素完成长方形散花动画
设计灵感 伪元素实现长方形散花动画
随机文章
随机推荐