我试图围绕一个中心以圆周运动“环绕”两个独立的 div,但是我无法让这两个 div 在我的 CSS 动画中遵循相同的圆周路径。
.container {
width: 500px;
height: 500px;
display: flex;
align-items: center;
justify-content: center;
}
.box {
background-color: pink;
width: 100px;
height: 100px;
animation: battle 6s linear infinite;
position: absolute;
margin: 10px;
}
@keyframes battle {
from {
transform: rotate(0deg) translateX(150px) rotate(0deg);
}
to {
transform: rotate(360deg) translateX(150px) rotate(-360deg);
}
}
<div class="container">
<div class="box">
</div>
<div class="box">
</div>
</div>
最佳答案
让您的父元素成为向导;
当目标是围绕中心以一致的间距旋转时(而不是说更像是椭圆形图案的“椭圆轨道”),最简单的技术是提供父级设置一致的边界并附加它里面的 child 使用它的位置作为他们的动画路径。目标是仅提供单个元素同步旋转的幻觉,而实际上只有一个元素以其默认的 transform-origin
中心旋转,作为 children 在其中“旋转”的指南。
在我们的例子中,我们取了一个父级,其周长大致等于“所需轨道”的大小,我们给它一个 50% 的 border-radius
来创建一个圆。这使得元素之间的距离小于或大于另一个点没有任何意义。我们将它设为 position: relative
元素,这样我们就可以将 position: absolute
应用于它的任何子元素。在此示例中,我们使用伪元素,但它们可以很容易地成为其他 DOM 节点元素,例如 div。
通过将我们的子项固定到父项上的特定点,我们创建了与我们希望的父项的 transform-origin
中心的 X/Y 相等的距离,并应用了 rotate
transform
旋转父级。然而,如果我们只这样做,那么 children 也会沿着那条路走,而不是保持垂直(正如我们所期望的那样),所以我们简单地重复使用应用于父级的相同动画,但在 reverse
中抵消它的旋转。结果是父元素向一个方向旋转,子元素向另一个方向旋转,以创建示例中所见的效果。希望这对您有所帮助!
#rotator {
position: relative;
width: 7rem;
height: 7rem;
animation: rotations 6s linear infinite;
border: 1px orange dashed;
border-radius: 50%;
margin: 3rem;
}
#rotator:before, #rotator:after {
position: absolute;
content: '';
display: block;
height: 3rem;
width: 3rem;
animation: inherit;
animation-direction: reverse;
}
#rotator:before {
background-color: red;
top: -.25rem;
left: -.25rem;
}
#rotator:after {
background-color: green;
bottom: -.25rem;
right: -.25rem;
}
@keyframes rotations {
to { transform: rotate(360deg) }
}
<div id="rotator"></div>
关于html - 围绕中心 CSS 动画旋转的两个 div,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58382716/