123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233 |
- :root {
- font-size: calc(16px + (20 - 16) * (100vw - 320px)/(980 - 320));
- --rotateTimes: 0;
- }
- nav,
- ul,
- li {
- transform-style: preserve-3d;
- }
- nav,
- li {
- position: absolute;
- top: 30%;
- left: 50%;
- }
- nav,
- li a {
- border-radius: 50%;
- }
- nav {
- width: 100em;
- height: 70em;
- transform: translate(-50%, -50%) rotateX(75deg);
- position: relative;
- }
- ul,
- li a {
- width: 100%;
- height: 100%;
- }
- ul {
- list-style: none;
- }
- li {
- animation: idle 4s ease-in-out infinite;
- text-align: center;
- width: 15em;
- height: 15em;
- transform: translate(-50%, -50%);
- }
- li a {
- box-shadow: 0 0 0 0.1em #0cf inset, 0 0 1em #0cf inset;
- color: currentColor;
- display: inline-block;
- text-decoration: none;
- transition: transform 0.4s linear, box-shadow 0.15s linear, margin 0.1s linear, width 0.1s linear, height 0.1s linear;
- }
- li a span {
- transition: color 0.15s linear;
- }
- li a:before {
- background-color: #fff;
- border-radius: 50%;
- content: "";
- display: block;
- opacity: 0.5;
- position: absolute;
- top: 2.75em;
- left: 3.75em;
- width: 1em;
- height: 0.5em;
- transform: rotate(-45deg);
- }
- li a:focus,
- li a.current {
- box-shadow: 0 0 0 0.1em #ff0 inset, 0 0 1em #ff0 inset;
- outline: 0;
- }
- li a:focus span,
- li a.current span {
- color: #ff0;
- }
- li a:hover {
- margin: -5% 0 0 -5%;
- width: 110%;
- height: 110%;
- box-shadow: 0 0 0 0.1em #ff0 inset, 0 0 1em #ff0 inset;
- }
- li a:hover svg {
- width: 3em;
- height: 3em;
- }
- @media (prefers-reduced-motion) {
- li {
- animation: none;
- }
- }
- svg {
- display: block;
- margin: 1.25em auto 1.5em auto;
- transition: width 0.1s linear, height 0.1s linear;
- width: 2.5em;
- height: 2.5em;
- }
- /* Position bubbles */
- li:nth-of-type(1) {
- animation-delay: 0s;
- }
- li:nth-of-type(1) a {
- transform: rotate(calc(0deg + var(--rotateTimes) * 51.4285714286deg)) translateY(9em) rotate(calc(0deg - var(--rotateTimes) * 51.4285714286deg)) rotateX(-75deg);
- }
- li:nth-of-type(2) {
- animation-delay: -0.5s;
- }
- li:nth-of-type(2) a {
- transform: rotate(calc(-51.4285714286deg + var(--rotateTimes) * 51.4285714286deg)) translateY(9em) rotate(calc(51.4285714286deg - var(--rotateTimes) * 51.4285714286deg)) rotateX(-75deg);
- }
- li:nth-of-type(3) {
- animation-delay: -1s;
- }
- li:nth-of-type(3) a {
- transform: rotate(calc(-102.8571428571deg + var(--rotateTimes) * 51.4285714286deg)) translateY(9em) rotate(calc(102.8571428571deg - var(--rotateTimes) * 51.4285714286deg)) rotateX(-75deg);
- }
- li:nth-of-type(4) {
- animation-delay: -1.5s;
- }
- li:nth-of-type(4) a {
- transform: rotate(calc(-154.2857142857deg + var(--rotateTimes) * 51.4285714286deg)) translateY(9em) rotate(calc(154.2857142857deg - var(--rotateTimes) * 51.4285714286deg)) rotateX(-75deg);
- }
- li:nth-of-type(5) {
- animation-delay: -2s;
- }
- li:nth-of-type(5) a {
- transform: rotate(calc(-205.7142857143deg + var(--rotateTimes) * 51.4285714286deg)) translateY(9em) rotate(calc(205.7142857143deg - var(--rotateTimes) * 51.4285714286deg)) rotateX(-75deg);
- }
- /* Animations */
- .rise {
- animation: rise 1s ease-out;
- }
- .rise a {
- animation: fadeOut 1s ease-out;
- }
- .rise a.pop {
- animation: pop 1s linear;
- }
- .rise a.pop svg,
- .rise a.pop span {
- visibility: hidden;
- }
- @keyframes rise {
- from {
- transform: translateZ(0);
- }
- 15% {
- transform: translateZ(-1em);
- }
- to {
- transform: translateZ(35em);
- }
- }
- @keyframes fadeOut {
- from,
- 15% {
- opacity: 1;
- }
- 50%,
- to {
- opacity: 0;
- }
- }
- @keyframes pop {
- from {
- margin: -5% 0 0 -5%;
- width: 110%;
- height: 110%;
- opacity: 1;
- }
- 10%,
- to {
- margin: -20% 0 0 -20%;
- width: 140%;
- height: 140%;
- opacity: 0;
- }
- }
- @keyframes idle {
- from,
- to {
- transform: translate(-50%, -48%);
- }
- 25% {
- transform: translate(-52%, -50%);
- }
- 50% {
- transform: translate(-50%, -52%);
- }
- 75% {
- transform: translate(-48%, -50%);
- }
- }
|