Since you are using a css file, you will need to convert the scss to css.

Here's a demo:

.checkmark__circle {
  stroke-dasharray: 166;
  stroke-dashoffset: 166;
  stroke-width: 2;
  stroke-miterlimit: 10;
  stroke: #7ac142;
  fill: none;
  animation: stroke 0.6s cubic-bezier(0.65, 0, 0.45, 1) forwards;
}

.checkmark {
  width: 56px;
  height: 56px;
  border-radius: 50%;
  display: block;
  stroke-width: 2;
  stroke: #fff;
  stroke-miterlimit: 10;
  margin: 10% auto;
  box-shadow: inset 0px 0px 0px #7ac142;
  animation: fill .4s ease-in-out .4s forwards, scale .3s ease-in-out .9s both;
}

.checkmark__check {
  transform-origin: 50% 50%;
  stroke-dasharray: 48;
  stroke-dashoffset: 48;
  animation: stroke 0.3s cubic-bezier(0.65, 0, 0.45, 1) 0.8s forwards;
}

@keyframes stroke {
  100% {
    stroke-dashoffset: 0;
  }
}
@keyframes scale {
  0%, 100% {
    transform: none;
  }
  50% {
    transform: scale3d(1.1, 1.1, 1);
  }
}
@keyframes fill {
  100% {
    box-shadow: inset 0px 0px 0px 30px #7ac142;
  }
}
<svg class="checkmark" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 52 52">
  <circle class="checkmark__circle" cx="26" cy="26" r="25" fill="none"/>
  <path class="checkmark__check" fill="none" d="M14.1 27.2l7.1 7.2 16.7-16.8"/>
</svg>

SASS & SCSS Info:

Sass is an extension of CSS3, adding nested rules, variables, mixins, selector inheritance, and more. It’s translated to well-formatted, standard CSS using the command line tool or a web-framework plugin.

Sass has two syntaxes. The new main syntax (as of Sass 3) is known as “SCSS” (for “Sassy CSS”), and is a superset of CSS3’s syntax. This means that every valid CSS3 stylesheet is valid SCSS as well. SCSS files use the extension .scss.

The second, older syntax is known as the indented syntax (or just “Sass”). Inspired by Haml’s terseness, it’s intended for people who prefer conciseness over similarity to CSS. Instead of brackets and semicolons, it uses the indentation of lines to specify blocks. Although no longer the primary syntax, the indented syntax will continue to be supported. Files in the indented syntax use the extension .sass.

Answer from This Guy on Stack Overflow
Top answer
1 of 1
114

Since you are using a css file, you will need to convert the scss to css.

Here's a demo:

.checkmark__circle {
  stroke-dasharray: 166;
  stroke-dashoffset: 166;
  stroke-width: 2;
  stroke-miterlimit: 10;
  stroke: #7ac142;
  fill: none;
  animation: stroke 0.6s cubic-bezier(0.65, 0, 0.45, 1) forwards;
}

.checkmark {
  width: 56px;
  height: 56px;
  border-radius: 50%;
  display: block;
  stroke-width: 2;
  stroke: #fff;
  stroke-miterlimit: 10;
  margin: 10% auto;
  box-shadow: inset 0px 0px 0px #7ac142;
  animation: fill .4s ease-in-out .4s forwards, scale .3s ease-in-out .9s both;
}

.checkmark__check {
  transform-origin: 50% 50%;
  stroke-dasharray: 48;
  stroke-dashoffset: 48;
  animation: stroke 0.3s cubic-bezier(0.65, 0, 0.45, 1) 0.8s forwards;
}

@keyframes stroke {
  100% {
    stroke-dashoffset: 0;
  }
}
@keyframes scale {
  0%, 100% {
    transform: none;
  }
  50% {
    transform: scale3d(1.1, 1.1, 1);
  }
}
@keyframes fill {
  100% {
    box-shadow: inset 0px 0px 0px 30px #7ac142;
  }
}
<svg class="checkmark" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 52 52">
  <circle class="checkmark__circle" cx="26" cy="26" r="25" fill="none"/>
  <path class="checkmark__check" fill="none" d="M14.1 27.2l7.1 7.2 16.7-16.8"/>
</svg>

SASS & SCSS Info:

Sass is an extension of CSS3, adding nested rules, variables, mixins, selector inheritance, and more. It’s translated to well-formatted, standard CSS using the command line tool or a web-framework plugin.

Sass has two syntaxes. The new main syntax (as of Sass 3) is known as “SCSS” (for “Sassy CSS”), and is a superset of CSS3’s syntax. This means that every valid CSS3 stylesheet is valid SCSS as well. SCSS files use the extension .scss.

The second, older syntax is known as the indented syntax (or just “Sass”). Inspired by Haml’s terseness, it’s intended for people who prefer conciseness over similarity to CSS. Instead of brackets and semicolons, it uses the indentation of lines to specify blocks. Although no longer the primary syntax, the indented syntax will continue to be supported. Files in the indented syntax use the extension .sass.

🌐
Bbbootstrap
bbbootstrap.com › home › snippets › pure css animated check mark inside circle
Pure CSS animated check mark inside circle Example
This snippet is free and open source hence you can use it in your project.Pure CSS animated check mark inside circle snippet example is best for all kind of projects.A great starter for your new awesome project with 1000+ Font Awesome Icons, 4000+ Material Design Icons and Material Design Colors at BBBootstrap.com.
🌐
CSS-Tricks
css-tricks.com › almanac › pseudo-selectors › c › checkmark
::checkmark | CSS-Tricks
September 30, 2025 - That checkmark looks great and all, but we can customize it, thanks to ::checkmark! That’s where we can make our own checkmark with an emoji, image, or any string of text. Here it is with an animated GIF:
🌐
CodePen
codepen.io › scottloway › pen › zqoLyQ
CSS Animation: Circle loader with checkmark completed state
<h1>Circle loader with checkmark completed state <small>CSS Animation</small></h1> <div class="circle-loader"> <div class="checkmark draw"></div> </div> <p><button id="toggle" type="button" class="btn btn-success">Toggle Completed</button></p> ! CSS Options ·
🌐
CodePen
codepen.io › daniandl › pen › OgbXzK
CSS Checkmark Animation
Reference: https://dribbble.com/shots/3144676-Checkbox-Animation code is pretty dirty, use at own risk...
🌐
CodePen
codepen.io › jaiweb › pen › LXGJWg
Animated Check Mark & Cross
We offer two popular choices: Autoprefixer (which processes your CSS server-side) and -prefix-free (which applies prefixes via a script, client-side).
Top answer
1 of 2
36

Well, this is my approach using <canvas> and JavaScript.

Demo on Fiddle -----> Square Corners | Round Corners

(Note: To change the animation speed increment or decrement the variable animationSpeed. Lower number yeilds Higher speed)

var start = 100;
var mid = 145;
var end = 250;
var width = 20;
var leftX = start;
var leftY = start;
var rightX = mid - (width / 2.7);
var rightY = mid + (width / 2.7);
var animationSpeed = 20;

var ctx = document.getElementsByTagName('canvas')[0].getContext('2d');
ctx.lineWidth = width;
ctx.strokeStyle = 'rgba(0, 150, 0, 1)';

for (i = start; i < mid; i++) {
  var drawLeft = window.setTimeout(function() {
    ctx.beginPath();
    ctx.moveTo(start, start);
    ctx.lineTo(leftX, leftY);
    ctx.stroke();
    leftX++;
    leftY++;
  }, 1 + (i * animationSpeed) / 3);
}

for (i = mid; i < end; i++) {
  var drawRight = window.setTimeout(function() {
    ctx.beginPath();
    ctx.moveTo(leftX, leftY);
    ctx.lineTo(rightX, rightY);
    ctx.stroke();
    rightX++;
    rightY--;
  }, 1 + (i * animationSpeed) / 3);
}
<canvas height="160"></canvas>


You could also do this using svg and CSS animation.

1. Square Corners:

#check {
  fill: none;
  stroke: green;
  stroke-width: 20;
  stroke-dasharray: 180;
  stroke-dashoffset: 180;
  -webkit-animation: draw 2s infinite ease;
  animation: draw 2s infinite ease;
}
-webkit-@keyframes draw {
  to {
    stroke-dashoffset: 0;
  }
}
@keyframes draw {
  to {
    stroke-dashoffset: 0;
  }
}
<svg width="150" height="150">
  <path id="check" d="M10,30 l30,50 l95,-70" />
</svg>


2. Round Corners:

#check {
  fill: none;
  stroke: green;
  stroke-width: 20;
  stroke-linecap: round;
  stroke-dasharray: 180;
  stroke-dashoffset: 180;
  animation: draw 2s infinite ease;
}
@keyframes draw {
  to {
    stroke-dashoffset: 0;
  }
}
<svg width="150" height="150">
  <path id="check" d="M10,50 l25,40 l95,-70" />
</svg>

2 of 2
8

I wanted a checkmark that looked like the material done icon, so I adjusted the original answer a little. Posting it here in case it saves someone a bit of time.

.animated-check {
  height: 10em;
  width: 10em;
}

.animated-check path {
  fill: none;
  stroke: #7ac142;
  stroke-width: 4;
  stroke-dasharray: 23;
  stroke-dashoffset: 23;
  animation: draw 1s linear forwards;
  stroke-linecap: round;
  stroke-linejoin: round;
}

@keyframes draw {
  to {
    stroke-dashoffset: 0;
  }
}
<svg class="animated-check" viewBox="0 0 24 24">
  <path d="M4.1 12.7L9 17.6 20.3 6.3" fill="none"/>
</svg>

Find elsewhere
🌐
DEV Community
dev.to › incoderweb › create-a-loader-with-check-mark-animation-using-html-and-css-1i33
Create a loader with check mark animation using HTML and CSS - DEV Community
July 2, 2022 - In this program (Circle Loader ... and there is shown a check-mark icon with smooth animation which indicates that the loading process has been completed....
🌐
Codeconvey
codeconvey.com › home › tick icon animation css checkmark inside circle
Tick Icon Animation CSS CheckMark Inside Circle | Codeconvey
August 28, 2023 - If you want to add a nice touch to your web pages then tick icon animation CSS is a very good way. Such animation is perfect to use when you want the user to perform some task. Like when a user adds to a cart, log in, or completes the registration, this tick animation shows the user the process is completed. Our tutorial shows a circle loader with a button and when the user clicks on that button, it shows an animated checkmark completed state.
🌐
GitHub
gist.github.com › amrtgaber › 43ba67b5344e6eca6014da57fab3e118
Animated CSS Checkbox (Checkmark in box) · GitHub
Animated CSS Checkbox (Checkmark in box). GitHub Gist: instantly share code, notes, and snippets.
🌐
JSFiddle
jsfiddle.net › fasy › Lu1mhe8p
animated svg check mark - JSFiddle - Code Playground
The Code Completion will now also have the context of all panels before suggesting code to you - so if for example you have some CSS or JS, the HTML panel will suggest code based on the other two panels.
🌐
LottieFiles
lottiefiles.com › home › categories › check mark & confirmation animations | lottiefiles
Check Mark & Confirmation Animations | LottieFiles
Checkmark Animation Pack · 8 Lotties · Checkmark Animation Pack · 14 Lotties · Checkmark Animation Pack · 25 Lotties · Checkmark Animation Pack · 18 Lotties · Checkmark Animation Pack · 28 Lotties · Checkmark Animation Pack · 5 Lotties · Checkmark Animation Pack ·
🌐
CodeMyUI
codemyui.com › home › check box › tick animation in css input checkbox
Tick Animation in CSS Input Checkbox – CodeMyUI
April 29, 2018 - A simple CSS only tick mark animation for checkbox input field designed by Rab Rennie.
🌐
CodeHim
codehim.com › home › animation & effects › success check animation css
Success Check Animation CSS — CodeHim
January 22, 2024 - Adding a success check animation ... you to create an animated success check animation. It utilizes SVG to animate a checkmark inside a circle with a gradient background....
🌐
CSSDeck
cssdeck.com › labs › 5n3uikqy
Saved Checkmark Animation | CSSDeck
January 2, 2024 - CSS · JavaScript · HTML · CSS · JavaScript ·
🌐
tutorialpedia
tutorialpedia.org › blog › check-mark-animation-html-css
Mastering Check Mark Animation with HTML and CSS — tutorialpedia.org
Keyframe animations in CSS allow us to define how an element should change over time. We can specify different states (keyframes) of an element at different percentages of the animation duration.
🌐
CodeMyUI
codemyui.com › home › check box › pure css check mark with slide-up animation
Pure CSS Check Mark with Slide-up Animation – CodeMyUI
May 17, 2018 - Looking for a simple slide up animation for you checkbox, you are in luck because this snippet does exactly that and it's in pure CSS!! When you click on the
🌐
Dribbble
dribbble.com › shots › 1399681-CSS-Animated-Checkmark-Button
CSS Animated Checkmark Button by Sascha Michael Trinkaus on Dribbble
CSS Animated Checkmark Button designed by Sascha Michael Trinkaus. Connect with them on Dribbble; the global community for designers and creative professionals.
🌐
CodePen
codepen.io › led8 › pen › yLLddyb
Checkmark Animated
September 18, 2019 - Minimize CSS Editor · Fold All · Unfold All · .checkmark__circle { stroke-dasharray: 166; stroke-dashoffset: 166; stroke-width: 2; stroke-miterlimit: 10; stroke: green; fill: none; animation: stroke 0.6s cubic-bezier(0.65, 0, 0.45, 1) forwards; } .checkmark { width: 56px; height: 56px; border-radius: 50%; display: block; stroke-width: 2; stroke: green; stroke-miterlimit: 10; margin: 10% auto; box-shadow: inset 0px 0px 0px #7ac142; animation: fill .4s ease-in-out .4s forwards, scale .3s ease-in-out .9s both; } .checkmark__check { transform-origin: 50% 50%; stroke-dasharray: 48; stroke-dashoffset: 48; animation: stroke 0.3s cubic-bezier(0.65, 0, 0.45, 1) 0.8s forwards; } @keyframes stroke { 100% { stroke-dashoffset: 0; } } @keyframes scale { 0%, 100% { transform: none; } 50% { transform: scale3d(1.1, 1.1, 1); } } @keyframes fill { 100% { box-shadow: inset 0px 0px 0px 30px #fff; } } !