<!-- 
Photo credit: https://unsplash.com/photos/Nyvq2juw4_o 
-->

<main>
  <section class="hero">
    <figure class="hero__background">
      <img src="https://images.unsplash.com/photo-1477959858617-67f85cf4f1df?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1244&q=80" alt="city scape" />
    </figure>
    <div class="hero__content">
      <span class="scale-text">
        empowering people
      </span>
      <span>through technology</span>
    </div>
  </section>

  <section class="content container">
    <div class="card">
      <h2>Lorem Ipsum</h2>
      <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Reiciendis laborum velit alias excepturi aliquam. Aut, nihil illum! Quod aspernatur corrupti voluptate vero expedita dolorem provident! Ad mollitia excepturi iusto nesciunt.</p>
    </div>
    <div class="card">
      <h2>Lorem Ipsum</h2>
      <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Reiciendis laborum velit alias excepturi aliquam. Aut, nihil illum! Quod aspernatur corrupti voluptate vero expedita dolorem provident! Ad mollitia excepturi iusto nesciunt.</p>
    </div>
    <div class="card">
      <h2>Lorem Ipsum</h2>
      <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Reiciendis laborum velit alias excepturi aliquam. Aut, nihil illum! Quod aspernatur corrupti voluptate vero expedita dolorem provident! Ad mollitia excepturi iusto nesciunt.</p>
    </div>
    <div class="card">
      <h2>Lorem Ipsum</h2>
      <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Reiciendis laborum velit alias excepturi aliquam. Aut, nihil illum! Quod aspernatur corrupti voluptate vero expedita dolorem provident! Ad mollitia excepturi iusto nesciunt.</p>
    </div>
    <div class="card">
      <h2>Lorem Ipsum</h2>
      <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Reiciendis laborum velit alias excepturi aliquam. Aut, nihil illum! Quod aspernatur corrupti voluptate vero expedita dolorem provident! Ad mollitia excepturi iusto nesciunt.</p>
    </div>
    <div class="card">
      <h2>Lorem Ipsum</h2>
      <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Reiciendis laborum velit alias excepturi aliquam. Aut, nihil illum! Quod aspernatur corrupti voluptate vero expedita dolorem provident! Ad mollitia excepturi iusto nesciunt.</p>
    </div>
    <div class="card">
      <h2>Lorem Ipsum</h2>
      <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Reiciendis laborum velit alias excepturi aliquam. Aut, nihil illum! Quod aspernatur corrupti voluptate vero expedita dolorem provident! Ad mollitia excepturi iusto nesciunt.</p>
    </div>
    <div class="card">
      <h2>Lorem Ipsum</h2>
      <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Reiciendis laborum velit alias excepturi aliquam. Aut, nihil illum! Quod aspernatur corrupti voluptate vero expedita dolorem provident! Ad mollitia excepturi iusto nesciunt.</p>
    </div>
  </section>
</main>
* {
  box-sizing: border-box;
}

body {
  background: #efefef;
  overflow-x: hidden;
}

.hero {
  height: 500px;
  width: 100vw;
  position: relative;
  overflow: hidden;
  &__background {
    height: 100%;
    width: 100%;
    padding: 0;
    margin: 0;
    img {
      height: 100%;
      width: 100%;
      object-fit: cover;
      object-position: center;
    }
  }
  &__content {
    height: 100%;
    width: 100%;
    display: flex;
    flex-flow: column;
    align-items: center;
    justify-content: center;
    position: absolute;
    top: 0;
    left: 0;
    span {
      color: white;
      font-size: 4rem;
      text-shadow: 2px 2px 4px #333;
      animation: fade-in 0.75s ease-in-out forwards;
      opacity: 0;
    }
    span:last-child {
      animation-delay: 0.5s;
    }
    .scale-text {
      z-index: 10;
    }
  }
}

.content {
  padding: 1rem;
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(40ch, 1fr));
  gap: 1rem;
}

.container {
  --container-width: 120ch;

  width: min(var(--container-width), 100% - 3rem);
  margin-inline: auto;
}

.card {
  padding: 1rem;
  background: white;
  opacity: 0;
  transform:translateY(40px);
}

@keyframes fade-in {
  to {
    opacity: 1;
  }
}
View Compiled
const tl = new gsap.timeline({
  scrollTrigger: {
    trigger: ".hero",
    start: "top top",
    scrub: 2
  }
});

tl.to(".scale-text", {
  scale: 10
})
  .to(
    ".hero",
    {
      opacity: 0
    },
    "<25%"
  )
  .to(
    ".card",
    {
      opacity: 1,
      duration: 1,
      y: 0,
      stagger: 0.5,
      ease: "back.out(1.7)"
    },
    "<25%"
  );
View Compiled

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

  1. https://unpkg.co/[email protected]/dist/gsap.min.js
  2. https://unpkg.com/[email protected]/dist/ScrollTrigger.min.js