<div class="counter">
	<div class="nums">
		<span class="in">3</span>
		<span>2</span>
		<span>1</span>
		<span>0</span>
	</div>
	<h4>Get Ready</h4>
</div>
<div class="final">
	<h1>GO</h1>
	<button id="replay">replay</button>
</div>
<footer>
	<p>Created with <i class="fa fa-heart"></i> by <a target="_blank" href="https://florin-pop.com">Florin Pop</a></p>
</footer>
body {
    background-image: linear-gradient(to top, #e6e9f0 0%, #eef1f5 100%);
	font-family: 'Roboto', sans-serif;
    margin: 0;
	height: 100vh;
}

.counter {
    position: fixed;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    text-align: center;
}

.counter.hide {
    transform: translate(-50%, -50%) scale(0);
    animation: hide .2s ease-out;
}

@keyframes hide {
    0% {
        transform: translate(-50%, -50%) scale(1);
    }

    100% {
        transform: translate(-50%, -50%) scale(0);
    }
}

.final {
    position: fixed;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%) scale(0);
}

.final.show {
    transform: translate(-50%, -50%) scale(1);
    animation: show .3s ease-in;
}

@keyframes show {
    0% {
        transform: translate(-50%, -50%) scale(0);
    }

    80% {
        transform: translate(-50%, -50%) scale(1.4);
    }

    100% {
        transform: translate(-50%, -50%) scale(1);
    }
}

.nums {
	color: #3498db;
	position: relative;
	font-size: 50px;
	overflow: hidden;
	width: 250px;
	height: 50px;
}

.nums span {
	position: absolute;
	left: 50%;
	top: 50%;
	transform: translate(-50%, -50%) rotate(120deg);
	transform-origin: bottom center;
}

.nums span.in {
    transform: translate(-50%, -50%) rotate(0deg);
	animation: goIn .5s ease-in-out;
}

.nums span.out {
	animation: goOut .5s ease-in-out;
}

@keyframes goIn {
	0% {
		transform: translate(-50%, -50%) rotate(120deg);
	}
	30% {
		transform: translate(-50%, -50%) rotate(-20deg);
	}

	60% {
		transform: translate(-50%, -50%) rotate(10deg);
	}

	90%, 100% {
		transform: translate(-50%, -50%) rotate(0deg);
	}

}

@keyframes goOut {
	0%, 30% {
		transform: translate(-50%, -50%) rotate(0deg);
	}

	60% {
		transform: translate(-50%, -50%) rotate(20deg);
	}

	100% {
		transform: translate(-50%, -50%) rotate(-120deg);
	}
}

h4 {
	font-size: 20px;
	margin: 5px;
	text-transform: uppercase;
}



footer {
	position: fixed;
	bottom: 0;
	left: 0;
	right: 0;
	text-align: center;
	letter-spacing: 1px;
}

footer i {
	color: red;
}

footer a {
	color: #3C97BF;
	text-decoration: none;
}
const nums = document.querySelectorAll('.nums span');
const counter = document.querySelector('.counter');
const finalMessage = document.querySelector('.final');
const repl = document.getElementById('replay');

runAnimation();

function resetDOM() {
	counter.classList.remove('hide');
	finalMessage.classList.remove('show');
    
	nums.forEach(num => {
		num.classList.value = '';
	});

    nums[0].classList.add('in');
}

function runAnimation() {
	nums.forEach((num, idx) => {
		const penultimate = nums.length - 1;
		num.addEventListener('animationend', (e) => {
			if(e.animationName === 'goIn' && idx !== penultimate){
				num.classList.remove('in');
				num.classList.add('out');
			} else if (e.animationName === 'goOut' && num.nextElementSibling){
				num.nextElementSibling.classList.add('in');
			} else {
				counter.classList.add('hide');
				finalMessage.classList.add('show');
			}
		});
	});
}

repl.addEventListener('click', () => {
	resetDOM();
	runAnimation();
});
Run Pen

External CSS

  1. https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css

External JavaScript

This Pen doesn't use any external JavaScript resources.