为何CSS动画中mercury的轨道呈椭圆形而非圆形?
解决CSS行星轨道动画变椭圆的问题
问题根源
- 元素定位未真正居中:
top:50%; left:50%仅将元素左上角放在视口中心,需配合transform: translate(-50%, -50%)让元素中心对齐视口中心,否则太阳和水星初始位置就会偏移。 - transform顺序错误:先旋转再平移会导致平移方向随旋转角度改变,自然形成椭圆轨道;正确顺序是先平移到轨道半径位置,再旋转,这样旋转时会以视口中心(太阳中心)为圆心做圆周运动。
- 水星多余的
left:48%会破坏中心对齐,需要删除。 - 边框样式漏写
px单位,浏览器无法正确识别,需补上。
修改后的完整代码
CSS代码
* { padding: 0; margin: 0; box-sizing: border-box; } body { width: 100vw; height: 100vh; background: black; } #sun { position: absolute; z-index: 99; top: 50%; left: 50%; width: 5rem; height: 5rem; border: 1px solid red; background: yellow; border-radius: 50%; transform: translate(-50%, -50%); } #mercury { position: absolute; z-index: 98; top: 50%; left: 50%; width: 1rem; height: 1rem; border: 1px solid black; background: gray; border-radius: 50%; animation: orbitmercury 2s linear infinite; } @keyframes orbitmercury { from { transform: translate(-50%, -50%) translate(10rem) rotate(0deg); } to { transform: translate(-50%, -50%) translate(10rem) rotate(360deg); } }
HTML代码
<div id="sun"></div> <div id="mercury"></div>
内容的提问来源于stack exchange,提问作者ImAWeebキズネです
相关产品推荐
相关产品推荐

