效果图
思路:
1、首先考虑布局
10个圆环 以及圆环上除了内圈其他各有一个小球 所以布局为这样
<ul>
<li></li>
<li><span></span></li>
<li><span></span></li>
<li><span></span></li>
<li><span></span></li>
<li><span></span></li>
<li><span><span></span></span></li>
<li><span></span></li>
<li><span></span></li>
<li><span></span></li>
</ul>
给每个li设定高度宽度以及边框
width: 360px;
height: 360px;
border: 2px solid #394057;
效果是这样
给父元素ul设置rrelative相对布局,子元素li position:absolute绝对布局,就会有此种嵌套效果,另外再给设置border-radius即可变成圆圈,
再通过对每个li transform: translate(-50%,-50%);进行移动 达到这种效果
小星球的话非常简单 直接设置width height border-radius即可 然后再通过position:absolute定位置
2、然后考虑逻辑问题
小黄星转动的问题 其实就是给li加动画,让轨道旋转,而不是行星旋转,在这个过程当中,行星相对于轨道是没有旋转的,举个例子,你开车,你对于车的位置是没有改变的,是车在改变。更比如你在操场跑步,你在跑,但操场没动。但在这里的话 是操场的轨道在带着你移动,你没动。
@keyframes starAnimation {
from{
transform: translate(-50%,-50%) rotate(0deg);
}
to{
transform:translate(-50%,-50%) rotate(360deg);
}
}
ul > li{
animation: starAnimation linear infinite;
}
小蓝星绕着小黄星转动 跟上面同样的道理,只要让小蓝星定位在小黄星某个位置 然后让小黄星转动即可,另外为什么上面是translate(-50%,-50%) ,因为在一开始的时候,我们在调整li位置的时候,就用translate(-50%,-50%) 所以在动画开始与结束的地方都需要加这个地方,前后都加了,那么前后的位置是没变的
源码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
*{
padding: 0;
margin: 0;
}
body{
background: url("../4-代码/images/bg.jpg");
}
ul{
width: 600px;
height: 600px;
margin:100px auto;
position: relative;
}
ul > li{
list-style: none;
position: absolute;
left:50%;
top:50%;
transform: translate(-50%,-50%);
border-radius: 0;
box-sizing: border-box;
/*添加动画*/
}
ul > li >span{
width: 12px;
height: 12px;
border-radius: 0;
background-color: #fff741;
position: absolute;
left: 50%;
top: 0;
/*margin-left: -6px;
margin-top: -6px;*/
animation: starAnimation 2s linear infinite;
}
ul > li >span > span{
width: 6px;
height: 6px;
border-radius: 3px;
background-color: blue;
position: absolute;
left: 3px;
top: -10px;
}
ul > li:nth-child(1){
width: 60px;
height: 60px;
background-color: #fff741;
box-shadow: 0px 0px 50px #fff741;
}
ul > li:nth-child(2){
width: 120px;
height: 120px;
border: 2px solid #394057;
animation-duration: 2s;
}
ul > li:nth-child(3){
width: 180px;
height: 180px;
border: 2px solid #394057;
animation-duration: 4s;
}
ul > li:nth-child(4){
width: 240px;
height: 240px;
border: 2px solid #394057;
animation-duration: 7s;
/*添加背景*/
background: url("../4-代码/images/asteroids_meteorids.png") no-repeat;
background-size: 240px 240px;
}
ul > li:nth-child(5){
width: 300px;
height: 300px;
border: 2px solid #394057;
animation-duration: 13s;
}
ul > li:nth-child(6){
width: 360px;
height: 360px;
border: 2px solid #394057;
animation-duration: 18s;
}
ul > li:nth-child(7){
width: 420px;
height: 420px;
border: 2px solid #394057;
animation-duration: 28s;
}
ul > li:nth-child(8){
width: 480px;
height: 480px;
border: 2px solid #394057;
animation-duration: 43s;
}
ul > li:nth-child(9){
width: 540px;
height: 540px;
border: 2px solid #394057;
animation-duration: 66s;
}
ul > li:nth-child(10){
width: 600px;
height: 600px;
border: 2px solid #394057;
animation-duration: 88s;
}
@keyframes starAnimation {
from{
transform: translate(-50%,-50%) rotate(0deg);
}
to{
transform:translate(-50%,-50%) rotate(360deg);
}
}
</style>
</head>
<body>
<ul>
<li></li>
<li><span></span></li>
<li><span></span></li>
<li><span></span></li>
<li><span></span></li>
<li><span></span></li>
<li><span><span></span></span></li>
<li><span></span></li>
<li><span></span></li>
<li><span></span></li>
</ul>
</body>
</html>