codepens/morphing-circles-animationc.../dist/style.css

187 lines
4.4 KiB
CSS

* {
box-sizing: border-box;
}
:root {
--primary: #b3ffb9;
--secondary: #4d4d4d;
--size: 200;
--speed: 1;
}
h1 {
font-size: 1.5rem;
position: fixed;
bottom: 1rem;
right: 1rem;
opacity: 0.5;
font-weight: bold;
}
body {
-webkit-box-align: center;
align-items: center;
background: #666;
display: -webkit-box;
display: flex;
-webkit-box-pack: center;
justify-content: center;
min-height: 100vh;
overflow: hidden;
margin: 0;
}
body:before {
border-radius: 6px;
box-shadow: 4px 4px 0 0 #111;
content: '';
height: calc(var(--size) * 1px);
left: 50%;
position: absolute;
top: 50%;
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
width: calc(var(--size) * 1px);
}
[type='checkbox'] {
position: fixed;
left: 100%;
opacity: 0;
}
label {
position: fixed;
height: 100vh;
width: 100vw;
z-index: 2;
}
:checked ~ .container {
--speed: 5;
--primary: rgba(179,255,185,0.5);
--secondary: rgba(77,77,77,0.5);
border: 4px dashed #fff;
overflow: visible;
}
:checked ~ .container:before {
background: #fff;
}
:checked ~ .container .circle {
border: 4px dashed #fff;
}
.container {
--primary-switch: var(--secondary);
--secondary-switch: var(--primary);
border-radius: 6px;
height: calc(var(--size) * 1px);
width: calc(var(--size) * 1px);
background: var(--primary);
position: relative;
overflow: hidden;
-webkit-animation: flip calc(var(--speed) * 4s) steps(1) infinite, bg calc(var(--speed) * 4s) steps(1) infinite;
animation: flip calc(var(--speed) * 4s) steps(1) infinite, bg calc(var(--speed) * 4s) steps(1) infinite;
}
.container:before {
border-radius: 50%;
content: '';
height: 10px;
left: 50%;
position: absolute;
top: 50%;
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
width: 10px;
z-index: 5;
}
.circle {
-webkit-animation: rotate calc(var(--speed) * 1s) ease-in-out infinite alternate;
animation: rotate calc(var(--speed) * 1s) ease-in-out infinite alternate;
height: 100%;
left: 0%;
position: absolute;
top: 40%;
-webkit-transform-origin: 50% 0%;
transform-origin: 50% 0%;
width: 100%;
}
.circle:after {
--primary-switch: var(--primary);
--secondary-switch: var(--secondary);
-webkit-clip-path: inset(0% 45% 90% 45% round 50% 50%);
-webkit-animation: clip calc(var(--speed) * 1s) ease-in-out infinite alternate, bg calc(var(--speed) * 4s) steps(1) infinite;
animation: clip calc(var(--speed) * 1s) ease-in-out infinite alternate, bg calc(var(--speed) * 4s) steps(1) infinite;
background: var(--secondary);
clip-path: inset(0% 45% 90% 45% round 50% 50%);
content: '';
height: 200%;
left: 50%;
position: absolute;
top: 0%;
-webkit-transform: translate(-50%, 0);
transform: translate(-50%, 0);
-webkit-transform-origin: 50% 0;
transform-origin: 50% 0;
width: 200%;
}
@-webkit-keyframes flip {
25% {
-webkit-transform: rotateY(0deg) rotateX(180deg);
transform: rotateY(0deg) rotateX(180deg);
}
50% {
-webkit-transform: rotateY(180deg) rotateX(180deg);
transform: rotateY(180deg) rotateX(180deg);
}
75% {
-webkit-transform: rotateY(180deg) rotateX(0deg);
transform: rotateY(180deg) rotateX(0deg);
}
}
@keyframes flip {
25% {
-webkit-transform: rotateY(0deg) rotateX(180deg);
transform: rotateY(0deg) rotateX(180deg);
}
50% {
-webkit-transform: rotateY(180deg) rotateX(180deg);
transform: rotateY(180deg) rotateX(180deg);
}
75% {
-webkit-transform: rotateY(180deg) rotateX(0deg);
transform: rotateY(180deg) rotateX(0deg);
}
}
@-webkit-keyframes rotate {
to {
-webkit-transform: rotate(180deg) translate(0, -10%);
transform: rotate(180deg) translate(0, -10%);
}
}
@keyframes rotate {
to {
-webkit-transform: rotate(180deg) translate(0, -10%);
transform: rotate(180deg) translate(0, -10%);
}
}
@-webkit-keyframes clip {
to {
-webkit-clip-path: inset(0 0 0 0 round 0 0);
clip-path: inset(0 0 0 0 round 0 0);
}
}
@keyframes clip {
to {
-webkit-clip-path: inset(0 0 0 0 round 0 0);
clip-path: inset(0 0 0 0 round 0 0);
}
}
@-webkit-keyframes bg {
25% {
background: var(--primary-switch);
}
75% {
background: var(--secondary-switch);
}
}
@keyframes bg {
25% {
background: var(--primary-switch);
}
75% {
background: var(--secondary-switch);
}
}