flex实现元素居中,设置元素宽高。
使用nth-child选择器定义每一个圆圈的位移。
body {
background: #000;
display: flex;
align-items: center;
height: 100vh;
justify-content: center;
}
.watch-face {
height: 125px;
width: 125px;
}
.circle {
background: #fff;
height: 125px;
width: 125px;
border-radius: 50%;
position: absolute;
opacity: 0.75;
transform: translate(0, 0);
}
.circle:nth-child(1) {
transform: translate(-35px, -50px);
}
.circle:nth-child(2) {
transform: translate(35px, -50px);
}
.circle:nth-child(3) {
transform: translate(-60px, 0);
}
.circle:nth-child(4) {
transform: translate(60px, 0);
}
.circle:nth-child(5) {
transform: translate(-35px, 50px);
}
.circle:nth-child(6) {
transform: translate(35px, 50px);
}
使用nth-child选择器给每一个圆圈指定对应的动画并优化位移 。
animation-timing-function设置ease,可以使动画看起来更加顺滑。
animation-direction设置alternate,这样使动画来回运动。
animation-iteration-count设置inifinite,使动画一直循环播放。
body {
background: #000;
display: flex;
align-items: center;
height: 100vh;
justify-content: center;
}
.watch-face {
height: 125px;
width: 125px;
}
.circle {
background: #fff;
height: 125px;
width: 125px;
border-radius: 50%;
position: absolute;
opacity: .75;
transform: translate(0, 0);
}
.circle:nth-child(1) {
animation: circle-1 4s ease alternate infinite;
}
.circle:nth-child(2) {
animation: circle-2 4s ease alternate infinite;
}
.circle:nth-child(3) {
animation: circle-3 4s ease alternate infinite;
}
.circle:nth-child(4) {
animation: circle-4 4s ease alternate infinite;
}
.circle:nth-child(5) {
animation: circle-5 4s ease alternate infinite;
}
.circle:nth-child(6) {
animation: circle-6 4s ease alternate infinite;
}
@keyframes circle-1 {
0% {
transform: translate(0, 0);
}
100% {
transform: translate(-35px, -50px);
}
}
@keyframes circle-2 {
0% {
transform: translate(0, 0);
}
100% {
transform: translate(35px, 50px);
}
}
@keyframes circle-3 {
0% {
transform: translate(0, 0);
}
100% {
transform: translate(-60px, 0);
}
}
@keyframes circle-4 {
0% {
transform: translate(0, 0);
}
100% {
transform: translate(60px, 0);
}
}
@keyframes circle-5 {
0% {
transform: translate(0, 0);
}
100% {
transform: translate(-35px, 50px);
}
}
@keyframes circle-6 {
0% {
transform: translate(0, 0);
}
100% {
transform: translate(35px, -50px);
}
}
左边圆圈是浅浅绿色,右边是浅浅蓝色。
奇数odd圆圈赋浅浅绿色,偶数even圆圈赋浅浅蓝色,并删除类名circle白色背景。
使用mix-blend-mode设置screen代替opacity。
可以使圆圈颜色相互融合在一起。
body {
background: #000;
display: flex;
align-items: center;
height: 100vh;
justify-content: center;
}
.watch-face {
height: 125px;
width: 125px;
}
.circle {
height: 125px;
width: 125px;
border-radius: 50%;
position: absolute;
mix-blend-mode: screen;
transform: translate(0, 0);
}
.circle:nth-child(odd) {
background: #61bea2;
}
.circle:nth-child(even) {
background: #529ca0;
}
.circle:nth-child(1) {
animation: circle-1 4s ease alternate infinite;
}
.circle:nth-child(2) {
animation: circle-2 4s ease alternate infinite;
}
.circle:nth-child(3) {
animation: circle-3 4s ease alternate infinite;
}
.circle:nth-child(4) {
animation: circle-4 4s ease alternate infinite;
}
.circle:nth-child(5) {
animation: circle-5 4s ease alternate infinite;
}
.circle:nth-child(6) {
animation: circle-6 4s ease alternate infinite;
}
@keyframes circle-1 {
0% {
transform: translate(0, 0);
}
100% {
transform: translate(-35px, -50px);
}
}
@keyframes circle-2 {
0% {
transform: translate(0, 0);
}
100% {
transform: translate(35px, 50px);
}
}
@keyframes circle-3 {
0% {
transform: translate(0, 0);
}
100% {
transform: translate(-60px, 0);
}
}
@keyframes circle-4 {
0% {
transform: translate(0, 0);
}
100% {
transform: translate(60px, 0);
}
}
@keyframes circle-5 {
0% {
transform: translate(0, 0);
}
100% {
transform: translate(-35px, 50px);
}
}
@keyframes circle-6 {
0% {
transform: translate(0, 0);
}
100% {
transform: translate(35px, -50px);
}
}
类名watch-face创建缩放和旋转动画。
animation-timing-function设置cubic-bezier曲线,使动画运动起来更加的自然。
类名circle创建连续动画。
animation: center 6s infinite,使视觉效果更好协调自然。
body {
background: #000;
display: flex;
align-items: center;
height: 100vh;
justify-content: center;
}
.watch-face {
height: 125px;
width: 125px;
animation: pulse 4s cubic-bezier(0.5, 0, 0.5, 1) alternate infinite;
}
.circle {
height: 125px;
width: 125px;
border-radius: 50%;
position: absolute;
mix-blend-mode: screen;
transform: translate(0, 0);
animation: center 6s infinite;
}
.circle:nth-child(odd) {
background: #61bea2;
}
.circle:nth-child(even) {
background: #529ca0;
}
.circle:nth-child(1) {
animation: circle-1 4s ease alternate infinite;
}
.circle:nth-child(2) {
animation: circle-2 4s ease alternate infinite;
}
.circle:nth-child(3) {
animation: circle-3 4s ease alternate infinite;
}
.circle:nth-child(4) {
animation: circle-4 4s ease alternate infinite;
}
.circle:nth-child(5) {
animation: circle-5 4s ease alternate infinite;
}
.circle:nth-child(6) {
animation: circle-6 4s ease alternate infinite;
}
@keyframes pulse {
0% {
transform: scale(.15) rotate(180deg);
}
100% {
transform: scale(1);
}
}
@keyframes circle-1 {
0% {
transform: translate(0, 0);
}
100% {
transform: translate(-35px, -50px);
}
}
@keyframes circle-2 {
0% {
transform: translate(0, 0);
}
100% {
transform: translate(35px, 50px);
}
}
@keyframes circle-3 {
0% {
transform: translate(0, 0);
}
100% {
transform: translate(-60px, 0);
}
}
@keyframes circle-4 {
0% {
transform: translate(0, 0);
}
100% {
transform: translate(60px, 0);
}
}
@keyframes circle-5 {
0% {
transform: translate(0, 0);
}
100% {
transform: translate(-35px, 50px);
}
}
@keyframes circle-6 {
0% {
transform: translate(0, 0);
}
100% {
transform: translate(35px, -50px);
}
}