Pen Settings

HTML

CSS

CSS Base

Vendor Prefixing

Add External Stylesheets/Pens

Any URLs added here will be added as <link>s in order, and before the CSS in the editor. You can use the CSS from another Pen by using its URL and the proper URL extension.

+ add another resource

JavaScript

Babel includes JSX processing.

Add External Scripts/Pens

Any URL's added here will be added as <script>s in order, and run before the JavaScript in the editor. You can use the URL of any other Pen and it will include the JavaScript from that Pen.

+ add another resource

Packages

Add Packages

Search for and use JavaScript packages from npm here. By selecting a package, an import statement will be added to the top of the JavaScript editor for this package.

Behavior

Auto Save

If active, Pens will autosave every 30 seconds after being saved once.

Auto-Updating Preview

If enabled, the preview panel updates automatically as you code. If disabled, use the "Run" button to update.

Format on Save

If enabled, your code will be formatted when you actively save your Pen. Note: your code becomes un-folded during formatting.

Editor Settings

Code Indentation

Want to change your Syntax Highlighting theme, Fonts and more?

Visit your global Editor Settings.

HTML

              
                <p class="intro">Examples of text effects built with <a href="https://splitting.js.org" target="_blank">Splitting.js</a>. The following animations/transitions are all done with CSS after Splitting adds helper spans &amp; CSS Variables.</p>

staggering


<h1 class="plop-it" data-splitting>Plop Effect</h1>

<h1 class="blur-it" data-splitting>Blur Effect</h1>

<h1 class="stagger-it" data-splitting>Color Stagger Effect</h1>

<h1 class="stretch-it" data-splitting>Stretch Effect</h1>

from center

<!-- <h1 class="flip-it" data-splitting>Flip Effect</h1> -->

<h1 class="flip-3d" data-splitting>3D Flip Effect</h1>

movement

<h1 class="spread-out" data-splitting>Spread Effect</h1>

<h1 class="pull-in" data-splitting>Pull In Effect</h1>

<h1 class="shift-right" data-splitting>Shift Effect</h1>

pseudo elements

<h1 class="slide-horizontal" data-splitting>Horizontal Slide Effect</h1>

<h1 class="slide-vertical" data-splitting>Vertical Slide Effect</h1>

<h1 class="elevate-it" data-splitting>Elevate Effect</h1>

<h1 class="split-it" data-splitting>Split Effect</h1>

<h1 class="zip-it" data-splitting>Zipper Effect</h1>

expressive

<h1 class="inflate-it" data-splitting>Inflate Effect</h1>

<h1 class="pinch-it" data-splitting>Pinch Effect</h1>

<h1 class="plump-it" data-splitting>Plump Effect</h1>

<h1 class="smile-it" data-splitting>Smile Effect</h1>

<h1 class="frown-it" data-splitting>Frown Effect</h1>


cartoony

<h1 class="fall-out" data-splitting>Fall Effect</h1>


<h1 class="run-out" data-splitting>Make A Run For It</h1>

<h1 class="bounce-it" data-splitting>Bounce Effect</h1>

<h1 class="wiggle-it" data-splitting>Wiggle Effect</h1>

<h1 class="glitch-it" data-splitting>Glitch Effect</h1>

animations

<h1 class="color-cycle" data-splitting>Color Cycle Effect</h1>

<h1 class="rainbow-it" data-splitting>Rainbow Effect</h1>

<h1 class="pop-out" data-splitting>Pop-Out Effect</h1>

<h1 class="pop-out-color" data-splitting>Pop-Out Color</h1>

<!-- <h1 class="pop-up" data-splitting>Pop-up Effect</h1> -->

<!--
<p class="fade-slide" data-splitting>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent bibendum, lorem vel tincidunt imperdiet, nibh elit laoreet felis, a bibendum nisl tortor non orci. Donec pretium fermentum felis, quis aliquet est rutrum ut. Integer quis massa ut lacus viverra pharetra in eu lacus. Aliquam tempus odio adipiscing diam pellentesque rhoncus. Curabitur a bibendum est. Mauris vehicula cursus risus id luctus. Curabitur accumsan venenatis nibh, non egestas ipsum vulputate ac. Vivamus consectetur dolor sit amet enim aliquet eu scelerisque ipsum hendrerit. Donec lobortis suscipit vestibulum. Nullam luctus pellentesque risus in ullamcorper. Nam neque nunc, mattis vitae ornare ut, feugiat a erat. Ut tempus iaculis augue vel pellentesque.</p>

<p>Vestibulum nunc massa, gravida quis porta nec, feugiat id metus. Nunc ac arcu dolor, quis vestibulum leo. Cras viverra mollis ipsum, non rhoncus lectus aliquam et. Morbi faucibus purus sit amet lacus aliquet elementum. Donec sit amet posuere enim. Cras in eros id tortor fringilla ultricies. Mauris faucibus ullamcorper velit, pulvinar varius odio eleifend eu. Quisque id odio metus. Morbi adipiscing ultricies posuere. Pellentesque elementum porttitor eros in molestie. Maecenas ut leo quis nisi tempor tincidunt.</p>

<p>Donec nunc ligula, vulputate quis mollis eu, interdum quis libero. Donec nulla ante, facilisis sit amet vulputate at, tincidunt a velit. Maecenas vestibulum, nulla sed tincidunt viverra, lorem turpis aliquam urna, ut pretium orci purus consequat augue. Etiam a enim orci, vitae pulvinar odio. In elit urna, tincidunt a pellentesque et, scelerisque at nibh. Sed nec est sapien. Aliquam ullamcorper eros eu quam ultrices vel faucibus eros interdum. Etiam mattis eleifend sapien, eu iaculis massa feugiat sed. Aliquam erat volutpat. Vivamus facilisis ultricies eros, a pretium purus mollis id. Sed dapibus elit ut neque rutrum dignissim. Nulla eros nisl, venenatis quis rhoncus sit amet, molestie nec nisl. Pellentesque vel neque sapien, et sagittis nulla.</p>

<p>Aliquam eu iaculis mauris. Etiam arcu lectus, imperdiet sit amet volutpat vitae, commodo sed nibh. Fusce faucibus tempor cursus. Donec ut ligula tortor. Maecenas malesuada, diam vitae pharetra dictum, erat ante iaculis risus, sed sollicitudin nisl nisl vel metus. Nulla libero augue, convallis nec luctus id, iaculis nec urna. Cras vitae mi ut augue ultricies tempus.</p>

<p>Vestibulum euismod vehicula sollicitudin. Duis nibh justo, rhoncus ac ullamcorper nec, rutrum sit amet leo. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum varius posuere nisi sed aliquet. Etiam dolor nisi, placerat vel congue tempus, posuere sed erat. Phasellus turpis eros, molestie sed consequat in, pretium at erat. In sed faucibus metus. Vestibulum fermentum libero nec eros fermentum dapibus. Duis nec libero eros. Pellentesque magna ligula, sagittis dictum fringilla at, posuere porttitor sem. Donec aliquam, ipsum quis pulvinar dapibus, augue sem viverra sapien, nec tempus odio nulla ac metus. Nunc ut augue mi, nec consequat urna.</p>

-->
              
            
!

CSS

              
                html { background: #00043C; }
@import url("https://fonts.googleapis.com/css?family=Raleway:400,700");

a { color: inherit; }

.intro {
  font-family: 'Raleway', sans-serif;
  font-weight: 400;
  max-width: 30em;
  text-align: center;
  margin: 2rem;
}

/* ---------------------------------- */
/* Basic stylistic choices */

body {
  color: #fff;
  padding: 1vw;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
}

h1 {
  text-align: center;
  font-family: 'Raleway', sans-serif;
  line-height: 1;
  font-size: 6vw;
  font-weight: 700;
  text-transform: uppercase;
  margin: 0.9em auto;
}

// h1.iChar {
//   font-size: calc( 5vw + ( 55vw / var(--char-total) ) );
// }

p { margin: 0 0 2em; }

.splitting {
  cursor: pointer;
}


/* ---------------------------------- */

.blur-it {
  .char {
    color: rgba(255,255,255,1);
    transition: opacity 0.2s linear;
    &:before,
    &:after {
      visibility: visible;
      opacity: 0;
    }
  }

  &:hover .char {
    color: rgba(255,255,255,0.5);
    &:before,
    &:after {
      opacity: 0.8;
      animation: blur 0.6s linear infinite alternate;
      animation-delay: calc( -0.2s * var(--distance-percent) );
    }

    &:after {
      animation-delay: calc( 0.3s + (-0.2s * var(--distance-percent)) );
    }
  }
}

@keyframes blur {
  0% { transform: translate(-0.1em, 0) scale(0.9) rotate(-2deg); }
  50% { transform: translate(0,0) scale(1.1) rotate(0deg); }
  100% { transform: translate(0.1em, 0) scale(0.9) rotate(2deg); }
}

.plop-it {
  perspective: 500px;
  transform-style: preserve-3d;

  &:hover .char {
    animation: plop 2s ease-out infinite both;
    animation-delay: calc( 0.05s * var(--char-index) );
  }

  @keyframes plop {
    0% { 
      opacity: 0; 
      transform: translate3d(0px, 10px, 400px) rotate(180deg);
      animation-timing-function: cubic-bezier(.5,0,.8,.25);
    }
    20% { 
      transform: translate3d(0px, -20px, 200px) rotate(90deg);
      animation-timing-function: cubic-bezier(0,.5,.5,1.1);
    }
    40%, 70% {
      opacity: 1; 
      transform: translate3d(0px, 0px, 0px) rotate(0deg);
    }
    90%, 100% {
      opacity: 0;
      transform: translate3d(0px, 10px, -200px) rotate(-90deg);
      animation-timing-function: cubic-bezier(.5,0,.8,.25);
    }
  }
}

/* ---------------------------------- */

.plump-it,
.pinch-it {
  perspective: 300px;
  transform-style: preserve-3d;
  .char {
    transition: transform 0.4s cubic-bezier(.8,0,0,.8);
    transition-delay: calc(0.06s * var(--distance-percent));
  }
}

.plump-it:hover .char { 
  transform: 
    translateX( calc( -0.5em * var(--distance-sine) ) )
    translateZ( calc( 100px * (1 - var(--distance-percent) ) ) )
    rotateY( calc( 40deg * var(--distance-sine) ) );
}

.pinch-it:hover .char {
  transform: 
    translateX( calc( -1em * var(--distance-sine) ) )
    translateZ( calc( -150px * (1 - var(--distance-percent) ) ) )
    rotateY( calc( -60deg * var(--distance-sine) ) )
}


/* ---------------------------------- */


.stagger-it {

  .char {
    transition: color 0.5s linear;
    transition-delay: calc( 0.04s * var(--char-index) );
  }
  &:hover { color: #00C9B1; } //#FF9F68; }

}


.stretch-it {

  .char {
    transition: transform 0.5s cubic-bezier(.8,0,0,.9);
    //transition-delay: calc( 0.03s * var(--char-index) );
  }

  &:hover .char { transform: scale(0.8, 0.8); }

  .char:hover  { transform: scale(0.9,1.5); transition-duration: 0.3s; }

}


/* ---------------------------------- */

.slide-vertical,
.slide-horizontal {

  .char {
    overflow: hidden;
    color: transparent;

    &:before,
    &:after {
      visibility: visible;
      color: #FFF;
      transition: transform 0.5s cubic-bezier(0.9,0,.2,1);
      transition-delay: calc( 0.2s + ( 0.02s * ( var(--char-index)) ) );
    }

    &:before {
      color: #00C9B1;
      transition-delay: calc( 0.02s * ( var(--char-index)) );
    }
  }

  &:hover .char:before { 
    transition-delay: calc( 0.2s + ( 0.02s * ( var(--char-index)) ) );
  }
  &:hover .char:after {
    transition-delay: calc( 0.02s * ( var(--char-index)) );
  }
}

.slide-vertical {
  .char:before { transform: translateY(-100%); }
  &:hover .char:before { transform: translateY(0%); }
  &:hover .char:after { transform: translateY(100%); }
}

.slide-horizontal {
  .char:before { transform: translateX(110%); }
  &:hover .char:before { transform: translateX(0%); }
  &:hover .char:after { transform: translateX(-110%); }
}


/* ---------------------------------- */


.fall-out {

  .char {
    transition: transform 0.5s cubic-bezier(.86,.01,.14,.98);
    color: transparent;

    &:before,
    &:after {
      visibility: visible;
      color: #FFF;
      animation-timing-function: cubic-bezier(.77,.02,.11,.97);
      animation-fill-mode: both;
      animation-delay: calc(0.75s + (0.05s * var(--char-index)) );
      animation-duration: 1s;
    }

    &:after { 
      animation-delay: calc(0.05s * var(--char-index) );

    }
  }

  &:hover .char:before { 
    animation-name: fall-in;
  }
  &:hover .char:after {
    animation-name: fall-out;
  }
}

@keyframes fall-in {
  0% { transform: translateY(-150%) rotate(-120deg); opacity: 0; }
  20% { opacity: 0; }
  100% { transform: translateY(0%) rotate(0deg); opacity: 1; }
}

@keyframes fall-out {
  50% { transform: translateY(10%) rotate(15deg); transform-origin: bottom left;  opacity: 1; }
  100% { transform: translateY(250%) rotate(120deg); transform-origin: center center;  opacity: 0; }
}



/* ---------------------------------- */


.run-out {
  width: 100%;
  overflow: hidden;
  pointer-events: none;

  .word { pointer-events: auto; }

  .char {

    color: transparent;

    &:before,
    &:after {
      visibility: visible;
      color: #FFF;
      transition: transform 1.2s cubic-bezier(.77,.02,.11,.97);
      transition-delay: calc( 0.04s * var(--char-total) + (0.08s * var(--char-index)) );
    }

    &:before {
      transform: translateX(-100vw) rotate(-35deg);
      transition-delay: calc(0.04s * var(--char-index) );
    }
  }

  &:hover .char {
    &:before { 
      transform: translateX(0) rotate(0deg);
      transition-delay: calc( 0.04s * var(--char-total) + (0.08s * (var(--char-total) - var(--char-index))) );
    }
    &:after { 
      transform: translateX(100vw) rotate(35deg);
      transition-delay: calc( (0.04s * (var(--char-total) - var(--char-index))) );
    }
  }
}



/* ---------------------------------- */


.shift-right {

  &:before { 
    content: '>';
    font: inherit;
    vertical-align: 0.1em;
    display: inline-block;
    transform: scaleY(0) translateX(-1em);
    margin-right: -0.25em;
  }

  &:before,
  .char {
    transition: transform 0.8s cubic-bezier(.75,0,.24,.98);
    transition-delay: calc( 0.015s * var(--char-index) );
  }

  .char {
    transform: translateX(-0.15em);
  }

  &:hover:before {
    transform: scaleY(1) translateX(0em); 
  }

  &:hover .char {
    transform: translateX(1em);
    transform: translateX(0.5em) translateX( calc(0.1em * var(--char-index)) );
  }

}


/* ---------------------------------- */

.spread-out .char {
  transition: transform 1s cubic-bezier(.8,0,.2,1);
  transition-delay: calc( 0.2s * var(--distance-percent) );
}

.spread-out:hover .char {
  transition-delay: calc( 0.2s * ( 1 - var(--distance-percent) ) );
  transform: scale(0.6) translateX( calc(1.25em * var(--distance-sine)) );
}


.pull-in .char {
  transition: transform 1s cubic-bezier(.8,0,.2,1);
  transition-delay: calc( 0.2s * ( 1 - var(--distance-percent) ) );
}
.pull-in:hover .char {
  transition-delay: calc( 0.2s * var(--distance-percent) );
  transform: scale(0.5) translateX( calc(-1.5em * var(--distance-sine)) );
}


/* ---------------------------------- */


.inflate-it {

  .char {
    transform: scale(1) translateX(0em);
    text-shadow: 0 0 5px rgba(0,0,0,0);
    transition: transform 0.8s cubic-bezier(.75,0,.24,.98), text-shadow 0.8s linear;
    transition-delay: calc( 0.18s * var(--distance-percent) );
  }

  &:hover .char {
    text-shadow: 0 0 5px rgba(0,0,0,0.3);
    transform: 
      scale( calc( 1 + ( 0.7 * ( 1 - var(--distance-percent) ) ) ) ) 
      translateX( calc(-0.12em * var(--distance-sine)) );
    transition-delay: calc( 0.08s * var(--distance-percent) );
  }
}

/* ---------------------------------- */


.bounce-it {

  .char {
    line-height: 1;
    transform-origin: center bottom;
    //animation-name: bounce-end;
    animation-timing-function: cubic-bezier(.77,.02,.11,.97);
    animation-iteration-count: infinite;
    animation-fill-mode: both;
    animation-delay: calc(0.05s * var(--char-index) );
    animation-duration: calc( 0.2s + ( 0.03s * var(--char-total)) );
  }

  &:hover .char {

    animation-name: bounce-char;
  }
}

@keyframes bounce-end {
  to { transform: translateY(0%) scale(1); }
}

@keyframes bounce-char {
  20% { transform: translateY(0%) scale(1.3, .8); }
  70% { transform: translateY(-40%) scale(.8, 1.2); }
}



/* ---------------------------------- */


.wiggle-it {
  &:hover .char {
    transform-origin: center 50%;
    animation: wiggle-char 0.25s linear infinite both;
    animation-delay: calc(-0.02s * var(--char-index) );
  }
}

@keyframes wiggle-char {
  0%, 50%, 100% { transform: rotate(0deg); }
  25% { transform: rotate(6deg); }
  75% { transform: rotate(-6deg); }
}


/* ---------------------------------- */

.zip-it,
.split-it {

  .char { color: #00C9B1; } //rgba(0,0,0,0.4); }

  .char,
  .char:before,
  .char:after {
    transition: transform 0.8s cubic-bezier(.75,0,.25,1);
    transition-delay: calc( 0.2s * var(--distance-percent) );
  }

  .char:before,
  .char:after {
      visibility: visible;
    color: #FFF;
  }

  .char:before {
    clip-path: polygon(0 0, 100% 0, 100% 54%, 0 54%);
  }

  .char:after {
    clip-path: polygon(0 46%, 100% 46%, 100% 100%, 0 100%);
  }

  &:hover .char:before { transform: translateY(-45%) scaleY(0); }
  &:hover .char:after { transform: translateY(45%) scaleY(0); }
}

.zip-it {
  .char,
  .char:before,
  .char:after {
    transition-delay: calc( 0.5s * ( 1 - var(--char-percent) ) );
  }
  &:hover {

    .char,
    .char:before,
    .char:after {
      transition-delay: calc( 0.5s * var(--char-percent) );
    }
  }
}



/* ---------------------------------- */

.glitch-it {

  .char,
  .char:before,
  .char:after {
    transition: color 0.2s linear;
    animation-duration: 0.6s, 0.4s;

    animation-iteration-count: infinite;
    animation-timing-function: steps(1);
    animation-delay: calc( -0.1s * var(--char-index) );
  }

  .char:before,
  .char:after {
       visibility: visible;
    opacity: 0;
    mix-blend-mode: overlay;
    transition-property: opacity;
    animation-name: glitch-anim, glitch-bounce;
    animation-play-state: paused;
  }

  .char:before {
    color: #F85959;
    animation-delay: calc( -0.02s * var(--char-index) );
  }

  .char:after {
    color: #B7F5DE; 
    animation-delay: calc( -.5s * var(--char-index) );
  }

  &:hover .char { color: rgba(255,255,255,0.3); animation-name: glitch-bounce; }
  &:hover .char:before,
  &:hover .char:after { opacity: 1; animation-play-state: running; }

}

@keyframes glitch-bounce {
  20% { transform: translate(-1%,0%); }
  40% { transform: translate(14%,-2%); }
  50% { transform: translate(-5%,5%); }
  65% { transform: translate(1%,-2%); }
  80% { transform: translate(-3%,2%); }
}

@keyframes glitch-anim {
  0% { clip-path: polygon(0 70%, 100% 70%, 100% 75%, 0 75%); }
  20% { clip-path: polygon(0 10%, 100% 10%, 100% 20%, 0 20%); }
  40% { clip-path: polygon(0 33%, 100% 33%, 100% 33%, 0 33%); }
  60% { clip-path: polygon(0 50%, 100% 50%, 100% 20%, 0 20%); }
  80% { clip-path: polygon(0 80%, 100% 80%, 100% 80%, 0 80%); }
  100% { clip-path: polygon(0 70%, 100% 70%, 100% 80%, 0 80%); }
}

/* ---------------------------------- */


.frown-it,
.smile-it {

  .char {
    transition: transform 1s cubic-bezier(.75,0,.25,1);
    transition-duration: calc( 0.3s + ( 0.03s * var(--distance-percent)) );
  }
}

.frown-it:hover .char {
  transform: translateY( calc( 1.2em * var(--distance-percent) ) ) 
    rotate( calc( 30deg * var(--distance-sine) ) );
}

.smile-it:hover .char {
  transform: translateY( calc( -1em * var(--distance-percent) ) ) 
    rotate( calc( -35deg * var(--distance-sine) ) );
}




/* ---------------------------------- */


.flip-it,
.flip-3d {

  .char {
    transition: transform 0.6s cubic-bezier(.6,0,0,.6);
    transition-delay: calc( 0.3s * ( 1 - var(--distance-percent)) );
    transition-delay: calc( 0.3s * var(--distance-percent) );
  }

  &:hover .char {
    transform: rotateX(-1turn);
    transition-duration: 1s;
    transition-delay: calc( 0.3s * var(--distance-percent) );
    transition-delay: calc( 0.3s * ( 1 - var(--distance-percent)) );
  }
}

.flip-3d {
  perspective: 200px;
  transform-style: preserve-3d;
}



/* ---------------------------------- */


.elevate-it {
  perspective: 400px;
  transform-style: preserve-3d;

  .char {
    transition: transform 0.8s cubic-bezier(.5,0,0,.9);
    //transition-duration: calc( 0.06s * calc( var(--char-total) ) );
    transition-delay: calc( 0.1s * (1 - var(--distance-percent)) );
    color: transparent;

    &:before,
    &:after {
      visibility: visible;
    }

    &:before { 
      color: #000; 
      opacity: 0.85;
      transform: translateY(0%) rotateX(45deg) scale(1,0);
      //transform: translateY(0%) rotateX(0deg) scale(1,1);
      transform-origin: center 80%;
    }
    &:after { color: #FFF; }
  }

  &:hover .char {

    &:before {
      transform: translateY(0%) rotateX(55deg) scale(0.8);
      transform: translateY(0%) rotateX(55deg) scale(0.8, calc( 0.4 + (0.4 * ( 1 - var(--distance-percent))) ) );
    }

    &:after {
      transform: translateY(-20%) rotateX(55deg);
      transform: translateY(-50%) 
        translateY( calc(30% * var(--distance-percent) ) )
        rotateX(55deg);
    }
  }
}


/* ---------------------------------- */


.color-cycle:hover .char {
  animation: color-cycle 1s cubic-bezier(.5,0,.5,1) infinite alternate;
  animation-delay: calc( 0.03s * var(--char-index) );
  animation-duration: calc( 0.04s * calc( var(--char-total) ) );
}

@keyframes color-cycle {
  25% { color: #FEFF89 }
  50% { color: #FF9F68 }
  75% { color: #F85959 }
  100% { color: #AC005D }
}


/* ---------------------------------- */


.rainbow-it {
  .char { 
    transition: color 0.6s linear; //cubic-bezier(.75,0,.25,1);
    transition-delay: calc( 0.2s * (1 - var(--distance-percent)) );
  }

  &:hover .char {
    color: hsl( calc(260 * ( var(--char-index) / var(--char-total) ) ), 90%, 70% );
  }
}


/* ---------------------------------- */


.pop-out {

  .char {
    color: #00C9B1; //rgba(255,255,255,0.5);

    &:after {
      visibility: visible;
      color: #FFF;
      z-index: 2;
      animation-timing-function: cubic-bezier(.5,0.5,1), linear;
      animation-iteration-count: infinite;
      animation-duration: calc( 0.08s * calc( var(--char-total) ) );
      animation-delay: calc( 0.08s * var(--char-index) );
    }
  }

  &:hover .char:after {
    animation-name: pop-char-out;
  }

}

@keyframes pop-char-out {
  0%, 70%, 100% { transform: translate(0em, 0em); }
  35% { transform: translate( 0.05em, -0.1em); } 
}

/* ---------------------------------- */


.pop-out-color {

  .char {
    color: #000;
    animation-timing-function: cubic-bezier(.5,0,.5,1), linear;
    animation-iteration-count: infinite;
    animation-duration: calc( 0.08s * calc( var(--char-total) ) );
    animation-delay: calc( 0.08s * var(--char-index) );

    &:before,
    &:after {
      visibility: visible;
      color: #FFF;
      z-index: 1;
      animation: inherit;
    }

    &:after {
      color: #FFF;
      z-index: 2;
    }
  }

  &:hover .char { animation-name: color-cycle; }
  &:hover .char:after { animation-name: pop-char-out }
  &:hover .char:before { animation-name: pop-char-out2, color-cycle; }

}
@keyframes pop-char-out2 {
  0%, 70%, 100% { transform: translate(0em, 0em); }
  35% { transform: translate( 0.025em, -0.05em); } 
}


              
            
!

JS

              
                console.clear();

var s = Splitting();
              
            
!
999px

Console