Created
May 19, 2020 16:05
-
-
Save vndee/615976c0a067d450281efa16b393c7c1 to your computer and use it in GitHub Desktop.
CSS Animations with SVGs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<div class="arrow arrow--top"> | |
<svg xmlns="http://www.w3.org/2000/svg" width="270.11" height="649.9" overflow="visible"> | |
<style> | |
.geo-arrow { | |
fill: none; | |
stroke: #fff; | |
stroke-width: 2; | |
stroke-miterlimit: 10 | |
} | |
</style> | |
<g class="item-to bounce-1"> | |
<path class="geo-arrow draw-in" d="M135.06 142.564L267.995 275.5 135.06 408.434 2.125 275.499z" /> | |
</g> | |
<circle class="geo-arrow item-to bounce-2" cx="194.65" cy="69.54" r="7.96" /> | |
<circle class="geo-arrow draw-in" cx="194.65" cy="39.5" r="7.96" /> | |
<circle class="geo-arrow item-to bounce-3" cx="194.65" cy="9.46" r="7.96" /> | |
<g class="geo-arrow item-to bounce-2"> | |
<path class="st0 draw-in" d="M181.21 619.5l13.27 27 13.27-27zM194.48 644.5v-552" /> | |
</g> | |
</svg> | |
</div> | |
<div class="arrow arrow--bottom"> | |
<svg xmlns="http://www.w3.org/2000/svg" width="31.35" height="649.9" overflow="visible"> | |
<style> | |
.geo-arrow { | |
fill: none; | |
stroke: #fff; | |
stroke-width: 2; | |
stroke-miterlimit: 10 | |
} | |
</style> | |
<g class="item-to bounce-1"> | |
<circle class="geo-arrow item-to bounce-3" cx="15.5" cy="580.36" r="7.96" /> | |
<circle class="geo-arrow draw-in" cx="15.5" cy="610.4" r="7.96" /> | |
<circle class="geo-arrow item-to bounce-2" cx="15.5" cy="640.44" r="7.96" /> | |
<g class="item-to bounce-2"> | |
<path class="geo-arrow draw-in" d="M28.94 30.4l-13.26-27-13.27 27zM15.68 5.4v552" /> | |
</g> | |
</g> | |
</svg> | |
</div> | |
<div class="main"> | |
<div class="main__text-wrapper"> | |
<h1 class="main__title">Deepa</h1> | |
<h3>Landing Page and Template Demo</h3> | |
<br> | |
<ul> | |
<li><a style="color: #ffffff" href="http://deepa.vn:15700/001/">Demo 001</a></li> | |
<li><a style="color: #ffffff" href="http://deepa.vn:15700/002/">Demo 002 </a></li> | |
</ul> | |
<svg xmlns="http://www.w3.org/2000/svg" class="dotted-circle" width="352" height="352" overflow="visible"> | |
<circle cx="176" cy="176" r="174" fill="none" stroke="#fff" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="12.921,11.9271"/> | |
</svg> | |
</div> | |
</div> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@import url("https://fonts.googleapis.com/css2?family=DM+Mono:ital,wght@0,300;1,500&display=swap"); | |
$purple: #8a15ff; | |
$blue: #3800e7; | |
$ltblue: #15e0ff; | |
$magenta: #d000c5; | |
// This is an example of animations & svgs... I completely understand that the amount of absolute positioning in this file is insane... ;) <3 | |
body { | |
background: linear-gradient($blue, $purple); | |
height: 100vh; | |
font-size: calc(14px + (26 - 14) * ((100vw - 300px) / (1600 - 300))); | |
font-family: "DM Mono", monospace; | |
font-weight: 300; | |
overflow: hidden; | |
color: white; | |
text-align: center; | |
} | |
h1 { | |
font-size: 3em; | |
margin-bottom: 0.2em; | |
} | |
h2 { | |
font-size: 2em; | |
} | |
.main { | |
height: 100vh; | |
display: flex; | |
flex-direction: column; | |
flex-wrap: wrap; | |
position: relative; | |
justify-content: center; | |
align-items: center; | |
&:before, | |
&:after { | |
content: ""; | |
display: block; | |
position: absolute; | |
z-index: -3; | |
} | |
&:before { | |
right: 0; | |
bottom: -19; | |
height: 30em; | |
width: 30em; | |
border-radius: 30em; | |
background: linear-gradient($blue, $purple); | |
align-self: flex-end; | |
animation: gradient-fade 8s ease-in-out 3s infinite alternate; | |
} | |
&:after { | |
$circle-unit: 10em; | |
top: 0; | |
left: 30; | |
height: $circle-unit; | |
width: $circle-unit; | |
border-radius: $circle-unit; | |
background: linear-gradient($blue, $purple); | |
animation: gradient-fade-alt 6s ease-in-out 3s infinite alternate; | |
} | |
&__text-wrapper { | |
position: relative; | |
padding: 2em; | |
&:before, | |
&:after { | |
content: ""; | |
display: block; | |
position: absolute; | |
} | |
&:before { | |
$circle-unit: 13em; | |
z-index: -1; | |
top: -3em; | |
right: -3em; | |
width: $circle-unit; | |
height: $circle-unit; | |
opacity: 0.7; | |
border-radius: $circle-unit; | |
background: linear-gradient($ltblue, $purple); | |
animation: rotation 7s linear infinite; | |
} | |
&:after { | |
$circle-unit: 20em; | |
z-index: -1; | |
bottom: -#{$circle-unit}; | |
width: $circle-unit; | |
height: $circle-unit; | |
border-radius: $circle-unit; | |
background: linear-gradient($magenta, $purple); | |
animation: rotation 7s linear infinite; | |
} | |
} | |
} | |
.arrow { | |
z-index: 1000; | |
opacity: 0.5; | |
position: absolute; | |
&--top { | |
top: 0; | |
left: -5em; | |
} | |
&--bottom { | |
bottom: 0; | |
right: 3em; | |
} | |
} | |
.circle { | |
transform: translate(50%, -50%) rotate(0deg); | |
transform-origin: center; | |
&--ltblue { | |
$circle-unit: 20em; | |
height: $circle-unit; | |
width: $circle-unit; | |
border-radius: $circle-unit; | |
background: linear-gradient($ltblue, $blue); | |
} | |
} | |
.backdrop { | |
position: absolute; | |
width: 100vw; | |
height: 100vh; | |
display: block; | |
background-color: pink; | |
} | |
.dotted-circle { | |
position: absolute; | |
top: 0; | |
right: 0; | |
opacity: 0.3; | |
animation: rotation 38s linear infinite; | |
} | |
// animations | |
.draw-in { | |
stroke-dasharray: 1000; | |
stroke-dashoffset: 1000; | |
animation: draw 15s ease-in-out alternate infinite; | |
} | |
@keyframes draw { | |
from { | |
stroke-dashoffset: 1000; | |
} | |
to { | |
stroke-dashoffset: 0; | |
} | |
} | |
.item-to { | |
animation-duration: 10s; | |
animation-iteration-count: infinite; | |
transform-origin: bottom; | |
} | |
.bounce-1 { | |
animation-name: bounce-1; | |
animation-timing-function: ease; | |
} | |
.bounce-2 { | |
animation-name: bounce-2; | |
animation-timing-function: ease; | |
} | |
.bounce-3 { | |
animation-name: bounce-3; | |
animation-timing-function: ease; | |
} | |
@keyframes bounce-1 { | |
0% { | |
transform: translateY(0); | |
} | |
50% { | |
transform: translateY(50px); | |
} | |
100% { | |
transform: translateY(0); | |
} | |
} | |
@keyframes bounce-2 { | |
0% { | |
transform: translateY(0); | |
} | |
50% { | |
transform: translateY(-30px); | |
} | |
100% { | |
transform: translateY(0); | |
} | |
} | |
@keyframes bounce-3 { | |
0% { | |
transform: translateY(0); | |
} | |
50% { | |
transform: translateY(30px); | |
} | |
100% { | |
transform: translateY(0); | |
} | |
} | |
// gradient fade | |
@keyframes rotation { | |
from { | |
transform: rotate(0deg); | |
} | |
to { | |
transform: rotate(360deg); | |
} | |
} | |
@keyframes gradient-fade { | |
from { | |
transform: translate(10%, -10%) rotate(0deg); | |
} | |
to { | |
transform: translate(50%, -50%) rotate(360deg); | |
} | |
} | |
@keyframes gradient-fade-alt { | |
from { | |
transform: translate(-20%, 20%) rotate(0deg); | |
} | |
to { | |
transform: translate(-60%, 60%) rotate(360deg); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment