JSFiddle - React, Tailwind, and code Playground
by Tan
HTML
<section>
<p class="text">Lorem ipsum dolor sit amet consectetur adipisicing elit. Quas obcaecati tempore necessitatibus inventore repudiandae. Repellendus quos voluptate, doloribus excepturi, molestias dignissimos distinctio quo rem consequuntur, veniam ipsam quis deserunt iste!</p>
</section>
CSS
*{
margin: 0;
padding: 0;
box-sizing: border-box;
}
section{
position: relative;
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
background-color: black;
overflow: hidden;
}
section .text{
position: relative;
color: rgba(255, 255, 255, 0.938);
margin: 40px;
user-select: none;
font-family: 'Gill Sans', 'Gill Sans MT', Calibri, 'Trebuchet MS', sans-serif;
font-size: 2.5rem;
}
section .text span{
position: relative;
display: inline-block;
cursor: pointer;
}
section .active{
animation: smoke 2s linear forwards;
}
@keyframes smoke{
0%{
opacity: 1;
filter: blur(0);
transform: translateX(0) translateY(0) rotate(0deg) scale(1);
}
50%{
opacity: 1;
pointer-events: none;
}
100%{
opacity: 0;
filter: blur(20px);
transform: translateX(300px) translateY(-300px) rotate(720deg) scale(4);
}
}
JavaScript
const text = document.querySelector('.text');
text.innerHTML = text.textContent.replace(/\S/g,"<span>$&</span>");
const letters = document.querySelectorAll('span');
for (let i = 0; i < letters.length; i++) {
letters[i].addEventListener('mouseover',function(){
letters[i].classList.add('active');
})
}