What is a SVG?
Scalable Vector Graphics
(SVG
) are an XML
-based markup language for describing two-dimensional based vector graphics. Compared to classic bitmapped image formats such as JPEG
or PNG
, SVG
-format vector images can be rendered at any size without loss of quality and can be easily localized by updating the text within them, without the need of a graphical editor to do so.
SVG
s can be styled and animated with CSS
(slides). Basically, any transformation or transition animation that can be applied to an HTML
element can also be applied to an SVG
element.
Demo
Getting Started
Paste the SVG
directly in your HTML
code
<!--
Tick SVG
-->
<svg class="tick-svg" xmlns="http://www.w3.org/2000/svg" width="367.805" height="367.805" viewBox="0 0 367.805 367.805">
<g transform="translate(0 0)">
<path class="container" data-name="Path 1" d="M183.9,0A183.9,183.9,0,1,1,0,183.9H0A183.379,183.379,0,0,1,182.856,0Q183.38,0,183.9,0Z" />
<path class="tick" data-name="Path 2" d="M285.78,133.225,155.168,263.837l-73.143-72.62,29.78-29.257L155.168,204.8,256,103.968Z" />
</g>
</svg>
<!--
Particles SVG
-->
<svg class="particles-svg" xmlns="http://www.w3.org/2000/svg" width="758" height="758" viewBox="0 0 758 758">
<g transform="translate(195.501 195)">
<g transform="translate(716.499 -482.5) rotate(90)">
<rect data-name="particle 4" width="27" height="110" rx="13.5" transform="translate(388.961 274.552) rotate(-45)" class="particle" />
<rect data-name="particle 3" width="27" height="110" rx="13.5" transform="translate(847.166 732.758) rotate(-45)" class="particle" />
<rect data-name="particle 2" width="27" height="110" rx="13.5" transform="translate(408.052 810.539) rotate(-135)" class="particle" />
<rect data-name="particle 1" width="27" height="110" rx="13.5" transform="translate(866.258 352.334) rotate(-135)" class="particle" />
<rect data-name="particle 4" width="27" height="110" rx="13.5" transform="translate(653 154)" class="particle" />
<rect data-name="particle 3" width="27" height="110" rx="13.5" transform="translate(653 802)" class="particle" />
<rect data-name="particle 2" width="27" height="110" rx="13.5" transform="translate(287.5 546.5) rotate(-90)" class="particle" />
<rect data-name="particle 1" width="27" height="110" rx="13.5" transform="translate(935.5 546.5) rotate(-90)" class="particle" />
</g>
</g>
</svg>
Animating the SVG
You can animate the SVG
s using CSS
selectors and adding the required properties. One important thing to keep in mind is to reset the transform origin (to the center in most cases) as the default is 0 0
, which is the top left.
.svg-part-selector {
transform-origin: center; /* or any other value */
}
First lets add the keyframe animations
@keyframes zoom {
0%,
5% {
transform: scale(0);
}
20%,
80% {
transform: scale(1);
}
95%,
100% {
transform: scale(0);
}
}
@keyframes spin-zoom {
0%,
20% {
transform: scale(0) rotateZ(0deg);
}
40%,
60% {
transform: scale(1) rotateZ(360deg);
}
80%,
100% {
transform: scale(0) rotateZ(0deg);
}
}
@keyframes burst {
0%,
20% {
transform: scale(0);
opacity: 0;
}
40% {
opacity: 1;
}
60% {
transform: scale(1);
opacity: 0;
}
80%,
100% {
transform: scale(0);
opacity: 0;
}
}
Tick Animation & Styling
.tick-svg {
width: 100px;
height: 100px;
}
.container {
fill: #3bb54a;
transform-origin: center;
animation: zoom 2s ease-in-out 0s infinite forwards;
}
.tick {
fill: #ffffff;
transform-origin: center;
animation: spin-zoom 2s ease 0s infinite forwards;
}
Particle Animation & Styling
.particles-svg {
width: 180px;
height: 180px;
position: absolute;
z-index: -1;
animation: burst 2s ease 0s infinite forwards;
}
.particle {
fill: #fe0;
}
Reference
CSS Tricks
MDN Web Docs
Youtube
Thanks for reading
Need a Top Rated Software Development Freelancer to chop away your development woes? Contact me on Upwork
Want to see what I am working on? Check out my Personal Website and GitHub
Want to connect? Reach out to me on LinkedIn
Follow my blogs for bi-weekly new Tidbits on Medium
FAQ
These are a few commonly asked questions I get. So, I hope this FAQ section solves your issues.
-
I am a beginner, how should I learn Front-End Web Dev?
Look into the following articles: Would you mentor me?
Sorry, I am already under a lot of workload and would not have the time to mentor anyone.
Top comments (2)
This looks like a lot of CSS for an SVG thing. You can rely on SVG animations otherwise doing the whole thing with CSS would take less code.
I also advise that you merge both SVG together to deal with only one element and avoid issues in case you want to change your element position.
Yeah, I should have merged it into 1 element as it would make the animation better understandable (how to animate different parts of the same svg), I thought of the particle part later and forgot to merge it with the tick svg