- let text = 'Good day!';
- let arr = text.split('');

h1(role='img' aria-label=text)
  - arr.forEach(letter => {
    span.letter(class=Math.random() > .5 ? 'rev' : null) #{letter}
  - });
View Compiled
@import 'compass/css3';

$h: .125em;
$a: 2deg;
$f: 1/cos($a);

body {
  display: grid;
  place-content: center;
  overflow: hidden;
  margin: 0;
  height: 100vh;
  background: url(https://images.unsplash.com/photo-1484313544071-4d67c88b99be?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb&ixid=eyJhcHBfaWQiOjE0NTg5fQ) 50%/ cover
}

h1 {
  display: flex;
  position: relative;
  padding: 0 .5*$h;
  transform-style: preserve-3d;
  font: 900 10vw chilanka, segoe script, purisa, comic sans ms, cursive;
  
  &::after {
    position: absolute;
    top: calc(50% - .5*#{$h}); right: 0;
    width: calc(50% + 50vw); height: $h;
    border-radius: 0 $h $h 0;
    background: crimson;
    animation: slide 2s ease-out;
    content: ''
  }
}

@keyframes slide { 0% { transform: translate(-100%) } }

.letter {
  overflow: visible;
  white-space: pre;
  transform: rotatey($a) scalex($f)
}

.rev { transform: rotatey(-$a) scalex($f) }
View Compiled

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.