html - CSS动画延迟到子div
问题描述
我需要将动画延迟设置为单个圆圈(div.unit-1、unit-2、unit-3、unit-4)。我试图为每个单元设置动画延迟,但没有任何反应。另外,我尝试为每个单元设置动画,但实际上,它不起作用,因为我希望将 transform-origin 作为文档主体中心。
下面你可以看到我的代码。请支持。先感谢您。
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
#spin {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
width: 100%;
}
@keyframes spin {
0% { transform: rotate(0deg); }
25% { transform: rotate(90deg); }
50% { transform: rotate(180deg); }
75% { transform: rotate(270deg); }
100% { transform: rotate(360deg); }
}
.frta1, .frta2, .frta3, .frta4 {
margin: 0;
padding: 0;
box-sizing: border-box;
display: flex;
justify-content: center;
align-items: center;
position: relative;
}
.frta1 {
animation: spin 6s cubic-bezier(.8, 0, .2, 1) infinite;
transform-origin: center right;
}
.frta2 {
animation: spin 6s cubic-bezier(.8, 0, .2, 1) infinite;
transform-origin: center left;
}
.frta3 {
animation: spin 6s cubic-bezier(.8, 0, .2, 1) infinite;
transform-origin: center right;
}
.frta4 {
animation: spin 6s cubic-bezier(.8, 0, .2, 1) infinite;
transform-origin: center left;
}
.division-1 {
display: flex;
justify-content: center;
align-items: center;
position: absolute;
transform: rotateZ(90deg);
}
.division-2 {
display: flex;
justify-content: center;
align-items: center;
position: absolute;
}
.unit-1 {
width: 60px;
height: 60px;
margin: 5px;
border-radius: 50%;
}
.unit-2 {
width: 40px;
height: 40px;
border-radius: 50%;
margin: 4px;
}
.unit-3 {
width: 20px;
height: 20px;
border-radius: 50%;
margin: 3px;
}
.unit-4 {
width: 10px;
height: 10px;
border-radius: 50%;
margin: 15px;
}
<div id="spin">
<div class="division-1">
<div class="frta1">
<div class="unit-1" style="background-color: #333;"></div>
<div class="unit-2" style="background-color: #333;"></div>
<div class="unit-3" style="background-color: #333;"></div>
<div class="unit-4" style="background-color: #333;"></div>
</div>
<div class="frta2">
<div class="unit-4" style="background-color: rgb(231, 0, 77);"></div>
<div class="unit-3" style="background-color: rgb(231, 0, 77);"></div>
<div class="unit-2" style="background-color: rgb(231, 0, 77);"></div>
<div class="unit-1" style="background-color: rgb(231, 0, 77);"></div>
</div>
</div>
<div class="division-2">
<div class="frta3">
<div class="unit-1" style="background-color: rgb(58, 23, 255);"></div>
<div class="unit-2" style="background-color: rgb(58, 23, 255);"></div>
<div class="unit-3" style="background-color: rgb(58, 23, 255);"></div>
<div class="unit-4" style="background-color: rgb(58, 23, 255);"></div>
</div>
<div class="frta4">
<div class="unit-4" style="background-color: rgb(10, 163, 17);"></div>
<div class="unit-3" style="background-color: rgb(10, 163, 17);"></div>
<div class="unit-2" style="background-color: rgb(10, 163, 17);"></div>
<div class="unit-1" style="background-color: rgb(10, 163, 17);"></div>
</div>
</div>
</div>
解决方案
这是一个代码更少的优化版本:
#spin {
position:fixed;
top:0;
left:0;
right:0;
bottom:0;
margin:auto;
width: 300px;
height:300px;
display:flex;
background: /* we define the circles once here */
radial-gradient(farthest-side,rgb(10, 163, 17) 97%,transparent) top left,
radial-gradient(farthest-side,rgb(58, 23, 255) 97%,transparent) top right,
radial-gradient(farthest-side,rgb(231, 0, 77) 97%,transparent) bottom left,
radial-gradient(farthest-side,#333 97%,transparent) bottom right;
background-size: 60px 60px;
background-repeat:no-repeat;
animation: spin 5s cubic-bezier(.8, 0, .2, 1) infinite;
}
#spin div {
display:flex;
flex:1;
background:inherit;
margin:60px;
background-size: 40px 40px;
animation: delay 0.6s infinite alternate ease-out;
transform:rotate(30deg); /* this will control your delay */
}
#spin > div > div {
margin:40px;
background-size: 20px 20px;
}
#spin > div > div > div {
margin:30px;
background-size: 10px 10px;
}
@keyframes spin {
0% {transform: rotate(0deg);}
25% {transform: rotate(90deg);}
50% {transform: rotate(180deg);}
75% {transform: rotate(270deg);}
100% {transform: rotate(360deg);}
}
@keyframes delay {
from {
transform:translate(0);
}
}
<div id="spin">
<div>
<div>
<div>
</div>
</div>
</div>
</div>
如下所示,百分比值:
#spin {
position:fixed;
top:0;
left:0;
right:0;
bottom:0;
margin:auto;
width: 300px;
height:300px;
display:flex;
background: /* we define the circles once here */
radial-gradient(farthest-side,rgb(10, 163, 17) 97%,transparent) top left,
radial-gradient(farthest-side,rgb(58, 23, 255) 97%,transparent) top right,
radial-gradient(farthest-side,rgb(231, 0, 77) 97%,transparent) bottom left,
radial-gradient(farthest-side,#333 97%,transparent) bottom right;
background-size: 23% 23%;
background-repeat:no-repeat;
animation: spin 5s cubic-bezier(.8, 0, .2, 1) infinite;
}
#spin div {
display:flex;
flex:1;
background:inherit;
margin:25%;
transform:rotate(30deg); /* this will control your delay */
animation: delay 0.6s infinite alternate ease-out;
}
@keyframes spin {
0% {transform: rotate(0deg);}
25% {transform: rotate(90deg);}
50% {transform: rotate(180deg);}
75% {transform: rotate(270deg);}
100% {transform: rotate(360deg);}
}
@keyframes delay {
from {
transform:translate(0);
}
}
<div id="spin">
<div>
<div>
<div>
</div>
</div>
</div>
</div>
推荐阅读
- graphviz - GraphViz:使用 pos 属性的网格布局问题
- php - php pdo 属性数组
- c# - 对象或列名丢失或为空
- c# - 多行绘制导致“指定的视觉对象已经是另一个视觉对象的子对象”错误
- r - 如何在线与两点之间的基线交叉的地方插入一个点
- google-cloud-dataflow - 如何取消/取消设置 DoFn 定义的计时器?
- r - 如何在 R Shiny 中使用 downloadHandler 导出 HTML 输出?
- c# - 在我的基础存储库类的构造函数中配置 DBContext
- drupal - Drupal 8 中缓存重建后缺少路由
- angular - Angular 和 Docker:无法从主机访问应用程序