Here's my attempt based on https://dribbble.com/shots/4722449-Astronaut with no SVG
A Pen by Saranya Mohan on CodePen.
<div class="container"> | |
<div class="space"> | |
<div class="moon"> | |
</div> | |
<div class="astronaut"> | |
<div class="head"> </div> | |
<div class="neck"> </div> | |
<div class="body"> | |
<div class="emblem"> </div> | |
</div> | |
<div class="backpack"> </div> | |
<div class="right-hand hand"> </div> | |
<div class="left-hand hand"> </div> | |
<div class="right-leg leg"> | |
<div class="upper-leg"></div> | |
<div class="lower-leg"></div> | |
</div> | |
<div class="left-leg leg"> | |
<div class="upper-leg"></div> | |
<div class="lower-leg"></div> | |
</div> | |
</div> | |
</div> | |
<div class="landing"><div> | |
</div> |
window.onload = function () { | |
let DEFAULT_TIMELINE = { | |
repeat: -1, | |
yoyo: true | |
} | |
let DEFAULT_ANIM_PARAMS = { | |
duration: 1, | |
ease: "power2.inOut" | |
} | |
let mainTimeline = gsap.timeline(DEFAULT_TIMELINE); | |
mainTimeline.to('.astronaut', { | |
duration: 0.5, | |
ease: "none", | |
rotate: -5 | |
}) | |
let duration = 1; | |
let ease = "power2.inOut"; | |
let rightHand = gsap.timeline(DEFAULT_TIMELINE); | |
rightHand.to('.right-hand', { | |
...DEFAULT_ANIM_PARAMS, | |
transformOrigin: "top left", | |
rotate: -60, | |
x: 16, | |
y: 18, | |
scaleY: 1.1 | |
}) | |
let leftHand = gsap.timeline(DEFAULT_TIMELINE); | |
leftHand.to('.left-hand', { | |
...DEFAULT_ANIM_PARAMS, | |
transformOrigin: "top left", | |
rotate: 35, | |
x: 4, | |
y: -20 | |
}); | |
let rightLeg = gsap.timeline(DEFAULT_TIMELINE); | |
rightLeg.to('.right-leg', { | |
...DEFAULT_ANIM_PARAMS, | |
transformOrigin: "top left", | |
rotate: 50, | |
y: -15 | |
}) | |
let leftLeg = gsap.timeline(DEFAULT_TIMELINE); | |
leftLeg.to('.left-leg', { | |
...DEFAULT_ANIM_PARAMS, | |
transformOrigin: "top left", | |
rotate: -50, | |
y: 25 | |
}) | |
let leftLegTurn = gsap.timeline(DEFAULT_TIMELINE); | |
leftLegTurn.to('.left-leg .lower-leg', { | |
...DEFAULT_ANIM_PARAMS, | |
rotate: 40, | |
x: 1, | |
y: 5 | |
}) | |
let rightLegTurn = gsap.timeline(DEFAULT_TIMELINE); | |
rightLegTurn.to('.right-leg .lower-leg', { | |
...DEFAULT_ANIM_PARAMS, | |
rotate: 10, | |
x: -5, | |
y: 0 | |
}) | |
let sheild = CSSRulePlugin.getRule(".head:before"); | |
let shieldAn = gsap.timeline(DEFAULT_TIMELINE); | |
shieldAn.to(sheild, { | |
...DEFAULT_ANIM_PARAMS, | |
cssRule: { | |
right: -5 | |
} | |
}) | |
let backpack = gsap.timeline(DEFAULT_TIMELINE); | |
backpack.set('.backpack', { | |
zIndex: 4 | |
}).to('.backpack', { | |
left: 30, | |
...DEFAULT_ANIM_PARAMS | |
}); | |
let emblem = gsap.timeline(DEFAULT_TIMELINE); | |
emblem.to('.emblem', { | |
left: 58, | |
...DEFAULT_ANIM_PARAMS | |
}); | |
let light = CSSRulePlugin.getRule(".backpack:before"); | |
let blink = gsap.timeline({ | |
repeat: -1 | |
}) | |
blink.to(light, { | |
duration: 0.4, | |
background: "#f36476" | |
}); | |
let lander = CSSRulePlugin.getRule(".landing:before"); | |
let expand = gsap.timeline(DEFAULT_TIMELINE); | |
expand.to(lander, { | |
duration: 0.5, | |
cssRule: { | |
width: 150, | |
left: 225, | |
background: "#cedfeb" | |
} | |
}) | |
} |
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.2.6/gsap.min.js"></script> | |
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.4.0/CSSRulePlugin.min.js"></script> |
Here's my attempt based on https://dribbble.com/shots/4722449-Astronaut with no SVG
A Pen by Saranya Mohan on CodePen.
:root { | |
--space-bg: #3e5380; | |
--moon-bg: #e0ebf1; | |
--moon-craters: #cedfeb; | |
--shoe: #cedfeb; | |
--suit-base: #e7eef1; | |
--suit-neck: #eff6f7; | |
--suit-sheild: #3d5989; | |
--backpack: #cedfeb; | |
--radar-light: #c96281; | |
} | |
*{ | |
margin: 0; | |
border: 0; | |
box-sizing: border-box; | |
} | |
.container { | |
display: flex; | |
flex-direction: column; | |
align-items: center; | |
justify-content: center; | |
min-height: 100vh; | |
} | |
.space { | |
height: 400px; | |
width: 400px; | |
border-radius: 50%; | |
position: relative; | |
background-color: var(--space-bg); | |
background-image: | |
radial-gradient(10px circle at 52px 130px, white 8px, transparent), | |
radial-gradient(6px circle at 92px 200px, white 4px, transparent), | |
radial-gradient(3px circle at 52px 295px, white 1px, transparent), | |
radial-gradient(3px circle at 220px 50px, white 1px, transparent), | |
radial-gradient(6px circle at 300px 140px, white 4px, transparent), | |
radial-gradient(5px circle at 350px 220px, white 3px, transparent), | |
radial-gradient(3px circle at 370px 257px, white 1px, transparent); | |
} | |
.moon { | |
position: absolute; | |
width: 100px; | |
height: 100px; | |
border-radius: 50%; | |
left: 5%; | |
background-color: var(--moon-bg); | |
background-image: radial-gradient(25px circle at 35px 35px, #cedfeb 23px, transparent), | |
radial-gradient(18px circle at 60px 80px, #cedfeb 15px, transparent), | |
radial-gradient(10px circle at 80px 30px, #cedfeb 9px, transparent); | |
} | |
.landing { | |
width: 600px; | |
height: 100px; | |
position: relative; | |
top: -20px; | |
background: white; | |
} | |
.landing::before { | |
content: ""; | |
position: absolute; | |
height: 20px; | |
width: 100px; | |
border-radius: 20%; | |
background: #e7eef1; | |
top: 20px; | |
left: 250px; | |
} | |
.astronaut { | |
width: 200px; | |
height: 300px; | |
position: relative; | |
top: 21%; | |
left: 23%; | |
z-index: 10; | |
filter: blur(0.25px); | |
perspective: 500px; | |
//transform: rotate(-5deg); | |
} | |
.head { | |
position: absolute; | |
left: 50px; | |
top: -8px; | |
height: 120px; | |
width: 120px; | |
border-radius: 50%; | |
background: var(--suit-base); | |
} | |
.head::before { | |
content: ''; | |
position: absolute; | |
right: 0; | |
top: 20px; | |
height: 80px; | |
width: 78px; | |
background-color: var(--suit-sheild); | |
border-radius: 50%; | |
} | |
.neck { | |
position: absolute; | |
top: 100px; | |
left: 70px; | |
height: 20px; | |
width: 80px; | |
border-radius: 10px; | |
background: var(--suit-neck); | |
z-index: 5 | |
} | |
.body { | |
position: absolute; | |
top: 115px; | |
left: 60px; | |
height: 110px; | |
width: 100px; | |
border-radius: 30px; | |
background-color: var(--suit-base); | |
z-index: 3; | |
} | |
.emblem { | |
position: absolute; | |
top: 12px; | |
left: 50px; | |
width: 45px; | |
height: 50px; | |
//border: 1px solid; | |
background: | |
linear-gradient(#e1566a, #e1566a) 15px 0px / 10px 6px no-repeat, | |
radial-gradient(10px circle at 22px 30px, var(--suit-base) 9px, transparent), | |
radial-gradient(20px 16px ellipse at 22px 30px, var(--backpack) 20px, transparent); | |
} | |
.backpack { | |
position: absolute; | |
left: 21px; | |
top: 130px; | |
height: 80px; | |
width: 40px; | |
background: var(--backpack); | |
border-radius: 15px; | |
z-index: -1 | |
} | |
.backpack::before { | |
content: ""; | |
position: relative; | |
display: block; | |
left: 11px; | |
top: -35px; | |
height: 18px; | |
width: 18px; | |
background: var(--radar-light); | |
border-radius: 50%; | |
} | |
.backpack::after { | |
content: ""; | |
position: relative; | |
display: block; | |
left: 18px; | |
top: -35px; | |
height: 18px; | |
width: 4px; | |
background: var(--backpack); | |
} | |
.leg { | |
position: absolute; | |
width: 70px; | |
height: 150px; | |
} | |
.upper-leg { | |
width: 40px; | |
height: 55%; | |
border-radius: 20px; | |
transform: rotate(-20deg); | |
transform-origin: top center; | |
} | |
.lower-leg { | |
position: absolute; | |
top: 45px; | |
left:30px; | |
width: 40px; | |
height: 55%; | |
border-radius: 20px; | |
transform: rotate(10deg) translateX(-5px); | |
transform-origin: top center; | |
background: linear-gradient(-10deg, transparent 30%, var(--shoe) 31%, var(--shoe) 84%, transparent 85%) 0px 20px / 40px 20px no-repeat, | |
radial-gradient(25px circle at 23px 70px, var(--shoe) 25px, transparent); | |
} | |
.lower-leg::before { | |
content: ''; | |
position: absolute; | |
top: 65px; | |
left: -5px; | |
width: 55px; | |
height: 23px; | |
border-radius: 20px; | |
transform: rotate(-5deg); | |
background: var(--shoe); | |
} | |
.right-leg { | |
top: 190px; | |
left: 75px; | |
z-index: 2; | |
transform-origin: top left; | |
//transform: rotate(50deg) translateY(-15px); | |
transform: rotate(-50deg) translateY(25px); | |
.upper-leg { | |
background: #e7edf0; | |
} | |
.lower-leg { | |
background-color: #e7edf0; | |
transform: rotate(40deg) translate(3px, 2px); | |
} | |
} | |
.left-leg { | |
top: 190px; | |
left: 80px; | |
z-index: 1; | |
transform-origin: top left; | |
//transform: rotate(-50deg) translateY(10px); | |
transform: rotate(50deg) translateY(-15px); | |
.upper-leg { | |
background: #dbe3ea; | |
} | |
.lower-leg { | |
background-color: #dbe3ea; | |
} | |
} | |
.hand { | |
position: relative; | |
//background: pink; | |
width: 60px; | |
height: 120px; | |
transform-origin: top left; | |
} | |
.left-hand { | |
top: 10px; | |
left: 100px; | |
transform: rotate(-70deg) translate(-10px, 25px); | |
z-index: -1; | |
} | |
.right-hand { | |
top: 130px; | |
left: 60px; | |
transform: rotate(35deg) translate(5px, -20px); | |
z-index: 5; | |
} | |
.hand::before { | |
content: ''; | |
position: absolute; | |
background-image: linear-gradient(0deg, transparent 60%, aliceblue 61%); | |
background-color: #fff; | |
top: 0; | |
left: 0px; | |
border-radius: 20px; | |
width: 40px; | |
height: 60%; | |
} | |
.hand::after { | |
content: ''; | |
position: absolute; | |
background-color: #fff; | |
background-image: linear-gradient(0deg,aliceblue 60%, transparent 61%); | |
top: 30%; | |
left: 0px; | |
border-radius: 20px; | |
width: 40px; | |
height: 60%; | |
transform: rotate(-25deg) translateX(-6px); | |
transform-origin: top center; | |
} | |
.left-hand::before, .left-hand::after { | |
background-color: #eff6f7; | |
} |