console
let duration = 0.8;
let delay = 0.3;
let contentText = document.querySelector(".content");
let letters = contentText.textContent.split("");
contentText.textContent = "";
let middle = letters.filter(e => e !== " ").length / 2;
letters.forEach((letter, i) => {
let span = document.createElement("span");
span.textContent = letter;
span.style.animationDelay = `${delay + Math.abs(i - middle) * 0.1}s`;
contentText.append(span);
});
<div class="content">Hello world!</div>
body {
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
text-align: center;
background: #222;
}
.content {
position: relative;
display: flex;
font-size: 2em;
color: #6ee1f5;
letter-spacing: 3px;
text-transform: uppercase;
white-space: pre;
}
.content::before,
.content::after {
position: absolute;
content: '';
top: 0;
bottom: 0;
width: 2px;
height: 100%;
background: white;
opacity: 0;
transform: scale(0);
}
.content::before {
left: 50%;
animation: slideLeft 1.5s cubic-bezier(0.7, -0.6, 0.3, 1.5) forwards;
}
.content::after {
right: 50%;
animation: slideRight 1.5s cubic-bezier(0.7, -0.6, 0.3, 1.5) forwards;
}
span {
opacity: 0;
transform: scale(0);
animation: fadeIn 2.4s forwards;
}
@keyframes fadeIn {
to {
opacity: 1;
transform: scale(1);
}
}
@keyframes slideLeft {
to {
left: -6%;
opacity: 1;
transform: scale(0.9);
}
}
@keyframes slideRight {
to {
right: -6%;
opacity: 1;
transform: scale(0.9);
}
}