Hot summer for you :)
A Pen by Yusuke Nakaya on CodePen.
.summerdream | |
.sea | |
.surface | |
//- .inner | |
//- .fishes | |
//- .fish | |
//- .body | |
.ship | |
.rotate | |
.move | |
.body | |
.waves | |
.bodywaves | |
- for (i = 0; i < 50; i++) | |
.wave | |
.graphic | |
.oarwaves.-left | |
- for (i = 0; i < 20; i++) | |
.wave | |
.graphic | |
.oarwaves.-right | |
- for (i = 0; i < 20; i++) | |
.wave | |
.graphic | |
.base | |
.board.-front | |
.board.-back | |
.oars | |
.oar.-left | |
.row.-left | |
.depth.-left | |
.graphic.-left | |
.oar.-right | |
.row.-right | |
.depth.-right | |
.graphic.-right | |
.human | |
.foots | |
.foot.-left | |
.foot.-right | |
.hat |
Hot summer for you :)
A Pen by Yusuke Nakaya on CodePen.
$baseColor: #D9845D; | |
$subColor: #DEAD5E; | |
$hatColor: #def09e; | |
$footColor: #0849A3; | |
$waterColor: #2be2fa; | |
$fishColor: #0c4875; | |
$speed: 1; | |
body { | |
background: #fff; | |
height: 100vh; | |
overflow: hidden; | |
display: flex; | |
font-family: 'Anton', sans-serif; | |
justify-content: center; | |
align-items: center; | |
perspective: 500px; | |
} | |
div { | |
transform-style: preserve-3d; | |
} | |
.sea { | |
position: absolute; | |
left: -300px; | |
top: -300px; | |
.surface { | |
position: absolute; | |
height: 600px; | |
width: 600px; | |
background: $waterColor; | |
overflow: hidden; | |
animation: | |
surface 13000ms ease-in-out infinite alternate, | |
rotateZ 20000ms linear infinite; | |
.inner { | |
width: 600px; | |
height: 600px; | |
animation: rotateZ 20000ms linear infinite reverse; | |
} | |
} | |
} | |
.fish { | |
position: absolute; | |
top: 100px; | |
left: 200px; | |
.body { | |
position: absolute; | |
width: 20px; | |
height: 5px; | |
background: $fishColor; | |
border-radius: 100%; | |
&::before { | |
content: ''; | |
position: absolute; | |
top: -3px; | |
left: 12px; | |
width: 2px; | |
height: 5px; | |
background: $fishColor; | |
border-radius: 100% 100% 0 0; | |
transform: rotateZ(-30deg); | |
} | |
&::after { | |
content: ''; | |
position: absolute; | |
top: 3px; | |
left: 12px; | |
width: 2px; | |
height: 5px; | |
background: $fishColor; | |
border-radius: 100% 100% 0 0; | |
transform: rotateZ(30deg); | |
} | |
} | |
} | |
.ship { | |
position: absolute; | |
top: -15px; | |
left: -50px; | |
filter: drop-shadow(-30px 40px 0 rgba(#000, 0.1)); | |
.rotate { | |
transform: rotateZ(10deg); | |
animation: ship 30000ms linear infinite alternate; | |
} | |
.move { | |
// animation: move 1000ms / $speed ease-in-out infinite alternate; | |
} | |
.human { | |
position: absolute; | |
top: 0; | |
left: 40px; | |
.hat { | |
position: absolute; | |
width: 30px; | |
height: 30px; | |
background: $hatColor; | |
border-radius: 100%; | |
animation: hat 1000ms / $speed ease-in-out infinite alternate; | |
&::before { | |
content: ''; | |
position: absolute; | |
top: 7px; | |
left: 7px; | |
width: 16px; | |
height: 16px; | |
border: 1px solid $baseColor; | |
border-radius: 100%; | |
box-sizing: border-box; | |
transform: translateZ(5px); | |
transform-style: preserve-3d; | |
} | |
} | |
.foot { | |
position: absolute; | |
width: 20px; | |
height: 8px; | |
background: $footColor; | |
border-radius: 40%; | |
&::before { | |
content: ''; | |
position: absolute; | |
left: -4px; | |
width: 5px; | |
height: 7px; | |
background: #fff; | |
border-radius: 40%; | |
} | |
&.-left { | |
top: 16px; | |
left: -10px; | |
transform: rotateZ(-5deg); | |
&::before { | |
top: 1px; | |
} | |
} | |
&.-right { | |
top: 6px; | |
left: -10px; | |
transform: rotateZ(5deg); | |
&::before { | |
top: -1px; | |
} | |
} | |
} | |
} | |
.body { | |
position: relative; | |
.base { | |
width: 100px; | |
height: 30px; | |
background: $baseColor; | |
border-radius: 45% 45% 45% 45%; | |
&::before { | |
content: ''; | |
position: absolute; | |
top: 2px; | |
left: 2px; | |
width: 96px; | |
height: 26px; | |
background: $subColor; | |
border-radius: 100%; | |
border-radius: 45% 45% 45% 45%; | |
} | |
} | |
.board { | |
position: absolute; | |
top: 5px; | |
width: 10px; | |
height: 20px; | |
background: $baseColor; | |
border-radius: 2px; | |
&.-front { | |
right: 20px; | |
} | |
&.-back { | |
left: 20px; | |
} | |
} | |
.waves { | |
position: absolute; | |
.wave { | |
position: absolute; | |
animation: wave 2000ms / $speed linear infinite; | |
.graphic { | |
background: #fff; | |
animation: | |
surface 2000ms ease-in-out infinite alternate, | |
rotateZ 6000ms linear infinite; | |
} | |
} | |
.bodywaves { | |
.wave { | |
@for $i from 1 through 50 { | |
&:nth-child(#{$i}) { | |
top: random(20) * 1px - 3px; | |
left: random(50) * 1px + 10px; | |
animation-delay: (random(4000) * -1ms) / $speed; | |
.graphic { | |
width: random(10) + 8px; | |
height: random(10) + 8px; | |
} | |
} | |
} | |
} | |
} | |
.oarwaves { | |
&.-left { | |
.wave { | |
@for $i from 1 through 50 { | |
&:nth-child(#{$i}) { | |
top: random(20) * 1px - 30px; | |
left: random(10) * 1px + 40px; | |
animation-delay: (random(800) * -1ms - 1000ms) / $speed; | |
.graphic { | |
width: random(5) + 5px; | |
height: random(5) + 5px; | |
} | |
} | |
} | |
} | |
} | |
&.-right { | |
.wave { | |
@for $i from 1 through 50 { | |
&:nth-child(#{$i}) { | |
top: random(20) * 1px + 35px; | |
left: random(10) * 1px + 40px; | |
animation-delay: (random(800) * -1ms - 1000ms) / $speed; | |
.graphic { | |
width: random(5) + 5px; | |
height: random(5) + 5px; | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
.oars { | |
position: absolute; | |
top: -30px; | |
left: 50px; | |
transform: translateZ(10px); | |
.graphic { | |
position: relative; | |
width: 3px; | |
height: 40px; | |
background: $baseColor; | |
animation: oarGraphic 1000ms / $speed ease-in-out infinite alternate; | |
&::before { | |
content: ''; | |
position: absolute; | |
top: 0; | |
left: -3px; | |
width: 9px; | |
height: 15px; | |
background: $baseColor; | |
border-radius: 5px 5px 100% 100%; | |
} | |
} | |
.oar { | |
position: absolute; | |
top: 0; | |
left: 50%; | |
&.-right { | |
transform-origin: 50% 45px; | |
transform: scaleY(-1); | |
} | |
} | |
.row { | |
position: absolute; | |
animation: row 1000ms / $speed ease-in-out infinite alternate; | |
transform-origin: 50% 35px; | |
} | |
.depth { | |
animation: depth 1000ms / $speed ease-in-out infinite alternate; | |
transform-origin: 50% 35px; | |
animation-delay: -500ms / $speed; | |
} | |
} | |
} | |
@keyframes surface { | |
0% { | |
border-radius: 30% 70% 70% 30% / 30% 30% 70% 70%; | |
} | |
25% { | |
border-radius: 65% 35% 51% 49% / 49% 52% 48% 51%; | |
} | |
50% { | |
border-radius: 42% 58% 28% 72% / 65% 34% 66% 35%; | |
} | |
75% { | |
border-radius: 34% 66% 63% 37% / 77% 38% 62% 23%; | |
} | |
100% { | |
border-radius: 24% 76% 72% 28% / 53% 68% 32% 47%; | |
} | |
} | |
@keyframes rotateZ { | |
0% { | |
transform: rotateZ(0deg); | |
} | |
100% { | |
transform: rotateZ(360deg); | |
} | |
} | |
@keyframes ship { | |
0% { | |
transform: rotateZ(20deg); | |
} | |
100% { | |
transform: rotateZ(-20deg); | |
} | |
} | |
@keyframes move { | |
0% { | |
transform: translateX(0); | |
} | |
100% { | |
transform: translateX(5px); | |
} | |
} | |
@keyframes wave { | |
0% { | |
transform: translateX(0) scale(0); | |
} | |
10% { | |
transform: translateX(-10px) scale(1); | |
} | |
100% { | |
transform: translateX(-130px) scale(0); | |
} | |
} | |
@keyframes depth { | |
0% { | |
transform: rotateX(-20deg); | |
} | |
100% { | |
transform: rotateX(50deg); | |
} | |
} | |
@keyframes row { | |
0% { | |
transform: rotateZ(20deg); | |
} | |
100% { | |
transform: rotateZ(-50deg); | |
} | |
} | |
@keyframes oarGraphic { | |
0% { | |
transform: rotateY(-60deg); | |
} | |
100% { | |
transform: rotateY(-110deg); | |
} | |
} | |
@keyframes hat { | |
0% { | |
transform: translateZ(30px) translateX(-5px) rotateY(-20deg); | |
} | |
100% { | |
transform: translateZ(30px) translateX(0) rotateY(20deg); | |
} | |
} |
<link href="https://fonts.googleapis.com/css?family=Anton" rel="stylesheet" /> |