<div class="frame">
  <div class="text">
    <span></span>
    <span></span>
    <span>E</span>
    <span>V</span>
    <span>O</span>
    <span>L</span>
    <span></span>
    <span>H</span>
    <span>T</span>
    <span>I</span>
    <span>W</span>
    <span></span>
    <span>E</span>
    <span>D</span>
    <span>A</span>
    <span>M</span>
    <span></span>
    <span></span>
    <span></span>
    <span>E</span>
    <span>V</span>
    <span>O</span>
    <span>L</span>
    <span></span>
    <span>H</span>
    <span>T</span>
    <span>I</span>
    <span>W</span>
    <span></span>
    <span>E</span>
    <span>D</span>
    <span>A</span>
    <span>M</span>
    <span></span>
    <span></span>
    <span></span>
    <span>E</span>
    <span>V</span>
    <span>O</span>
    <span>L</span>
    <span></span>
    <span>H</span>
    <span>T</span>
    <span>I</span>
    <span>W</span>
    <span></span>
    <span>E</span>
    <span>D</span>
    <span>A</span>
    <span>M</span>

  </div>
</div>
:root {
  --duration: 10s;
  --size: 80vw;
  --characters: 14;
  --font-size: 22px;
  --delay-character: 0.2s;
  --text-color-hover: #ff8489;
}

body {
  height: 100vh;
  display: flex;
  align-items: center;
  background: url(https://img.freepik.com/vector-gratis/fondo-abstracto-blanco_23-2148806276.jpg?size=626&ext=jpg)
    no-repeat center;
  background-size: cover;
}

.frame {
  width: var(--size);
  height: var(--size);
  max-width: 400px;
  max-height: 400px;
  margin: 0 auto;
  border: 2px #fbfbfb solid;
  position: relative;
  box-shadow: inset 0 0 0 20px white;
  background: url(https://images.unsplash.com/photo-1488161628813-04466f872be2?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=764&q=80)
    no-repeat center;
  background-size: cover;
  transition: ease all 0.3s;
  &:hover {
    box-shadow: inset 0 0 0 0 white;
    border: 2px #f9f9f9 solid;
    cursor: pointer;
    .text {
      mix-blend-mode: difference;
      span {
        color: var(--text-color-hover);
      }
    }
  }
  .text {
    transform: translate(
      calc(calc(var(--font-size) * -1) / 2),
      calc(calc(var(--font-size) * -1) / 2)
    );
    position: relative;
    height: 100%;
    transition: ease all 0.3s;
  }
  span {
    font-size: var(--font-size);
    display: inline-block;
    text-align: center;
    width: var(--font-size);
    animation: frameMove var(--duration) linear infinite;
    position: absolute;
    transition: ease all 0.3s;
    @for $i from 1 through 52 {
      &:nth-of-type(#{$i}) {
        animation-delay: calc(var(--delay-character) * #{$i});
      }
    }
  }
}
@keyframes frameMove {
  0% {
    top: 0;
    left: 0;
    transform: rotate(0deg);
  }
  24% {
    top: 0;
    left: 100%;
    transform: rotate(0deg);
  }
  25% {
    transform: rotate(90deg);
  }
  49% {
    top: 100%;
    left: 100%;
    transform: rotate(90deg);
  }
  50% {
    transform: rotate(180deg);
  }
  74% {
    top: 100%;
    left: 0%;
    transform: rotate(180deg);
  }
  75% {
    transform: rotate(270deg);
  }
  99% {
    top: 0%;
    left: 0%;
    transform: rotate(270deg);
  }
  100% {
    transform: rotate(360deg);
  }
}
View Compiled

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.