<div id="home"> 
  <main>
    <section class="cover web"> 
      <p>
        <span class="f" data-id="1">em</span>
        <span class="f skip" data-id="2">
          <span class="window">
            <img src="https://pbs.twimg.com/media/GHTYb0-bMAAUg-c?format=jpg&name=medium" alt="">
        </span>
          </span>
        </span>
        <span class="f" data-id="3">powering</span>
      </p>
      <p>
        <span class="f" data-id="4">FANDOM</span>
        <span class="f" data-id="5">&</span>
        <span class="f" data-id="6">brand</span>
        <span class="f skip" data-id="7" >
          <span class="window">
            <img src="https://pbs.twimg.com/media/GHTYb0-bMAAUg-c?format=jpg&name=medium" alt="">
          </video>
        </span>
          </span>
        </span>
      </p>
      <p>
        <span class="f" data-id="8">through</span>
        <span class="f skip" data-id="9">
          <span class="window">
            <img src="https://pbs.twimg.com/media/GHTYb0-bMAAUg-c?format=jpg&name=medium" alt="">
        </span>
        </span>
        <span class="f" data-id="10">data</span>
      </p>
    </section>
  </main>
</div>

#home {
  margin: 0 auto;
  width: 100%;

  .cover {
    display: flex;
    align-items: center;
    justify-content: center;
    flex-direction: column;
    height: 100vh;
    min-height: 100vh;
    background-color: white;

    &.web {
      p {
        display: flex;
        align-items: center;
        justify-content: center;
        margin: calc(20 / 1920 * 100vw) 0;
        font-family: 'Helvetica Neue';
        font-size: calc(160 / 1920 * 100vw);
        font-style: normal;
        font-weight: 700;
        line-height: 100%;
        text-align: center;
        text-transform: uppercase;
        letter-spacing: calc(-6.4 / 1920 * 100vw);

        span {
          -webkit-transition: -webkit-mask-position 1s cubic-bezier(0.6, 0, 0.2, 1);
          transition: -webkit-mask-position 1s cubic-bezier(0.6, 0, 0.2, 1);
          -o-transition: mask-position 1s cubic-bezier(0.6, 0, 0.2, 1);
          transition: mask-position 1s cubic-bezier(0.6, 0, 0.2, 1);
          transition: mask-position 1s cubic-bezier(0.6, 0, 0.2, 1),
            -webkit-mask-position 1s cubic-bezier(0.6, 0, 0.2, 1);
          -webkit-mask-image: -webkit-gradient(
            linear,
            left top,
            right top,
            color-stop(33.3%, #fff),
            color-stop(66.6%, rgba(255, 255, 255, 0.1))
          );
          -webkit-mask-image: linear-gradient(90deg, #fff 33.3%, rgba(255, 255, 255, 0.1) 66.6%);
          mask-image: -webkit-gradient(
            linear,
            left top,
            right top,
            color-stop(33.3%, #fff),
            color-stop(66.6%, rgba(255, 255, 255, 0.1))
          );
          mask-image: linear-gradient(90deg, #fff 33.3%, rgba(255, 255, 255, 0.1) 66.6%);
          -webkit-mask-position: 100% 100%;
          mask-position: 100% 100%;
          -webkit-mask-size: 300% 100%;
          mask-size: 300% 100%;

          &.on {
            -webkit-mask-position: 0 100%;
            mask-position: 0 100%;
          }

          &.skip,
          &.skip * {
            -webkit-mask-image: none;
            mask-image: none;
            mask-position: 0;
          }
        }

        span.f[data-id='10'] {
          padding-right: calc(7 / 1920 * 100vw);
        }

        span.f[data-id='2'],
        span.f[data-id='7'],
        span.f[data-id='9'] {
          display: flex;
          padding: calc(10 / 1920 * 100vw) 0;
          height: calc(160 / 1920 * 100vw);
          box-sizing: border-box;

          .window {
            display: inline-block;
            position: relative;
            z-index: 5;
            width: 0;
            -webkit-transition: width 0.8s cubic-bezier(0.6, 0, 0.2, 1), opacity 0.5s linear;
            -o-transition: width 0.8s cubic-bezier(0.6, 0, 0.2, 1), opacity 0.5s linear;
            transition: width 0.8s cubic-bezier(0.6, 0, 0.2, 1), opacity 0.5s linear;
            border-radius: calc(4 / 1920 * 100vw);
            will-change: width;
            opacity: 0;
            aspect-ratio: 240 / 140;

            video {
              width: 100%;
              height: 100%;
              pointer-events: none;
              border-radius: inherit;
              -o-object-fit: cover;
              object-fit: cover;
            }

            img {
              width: 100%;
              height: 100%;
              pointer-events: none;
              border-radius: inherit;
              -o-object-fit: cover;
              object-fit: cover;
            }
          }
        }

        span.f[data-id='9'] {
          margin: 0 calc(10 / 1920 * 100vw);

          .window {
            transform-origin: left center;
            will-change: transform;
          }
        }

        span.f[data-id='5'] {
          margin: 0 calc(20 / 1920 * 100vw);
        }

        span.f[data-id='2'].on,
        span.f[data-id='7'].on,
        span.f[data-id='9'].on {
          .window {
            width: calc(240 / 1920 * 100vw);
            opacity: 1;
          }
        }

        span.f[data-id='1'].on {
          transition-delay: 0ms;
        }
        span.f[data-id='3'].on {
          transition-delay: 150ms;
        }
        span.f[data-id='4'].on {
          transition-delay: 150ms;
        }
        span.f[data-id='5'].on {
          transition-delay: 300ms;
        }
        span.f[data-id='6'].on {
          transition-delay: 320ms;
        }
        span.f[data-id='8'].on {
          transition-delay: 470ms;
        }
        span.f[data-id='10'].on {
          transition-delay: 600ms;
        }

        span.f[data-id='2'].on {
          animation: expandWidthBounce 1s forwards;
          animation-delay: 750ms;
          .window {
            transition-delay: 750ms;
          }
        }

        span.f[data-id='7'].on {
          animation: expandWidthBounce 1s forwards;
          animation-delay: 900ms;
          .window {
            transition-delay: 900ms;
          }
        }

        span.f[data-id='9'].on {
          animation: expandWidthBounce 1s forwards;
          animation-delay: 1050ms;
          .window {
            transition-delay: 1050ms;
          }
        }
      }
    }
  }
}

@keyframes expandWidthBounce {
  0% {
  }
  50% {
    margin: 0 calc(40 / 1920 * 100vw);
  }
  100% {
    margin: 0 calc(20 / 1920 * 100vw);
  }
}
document.addEventListener('DOMContentLoaded', function () {
    setTimeout(function () {
        document.querySelectorAll('.f').forEach(function (element) {
            element.classList.add('on');
        });
    }, 1500); // 3000ms = 3초
});
Run Pen

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.