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

              
                <section id="section-process" class="section_process">
  <div class="padding-global">
    <div class="container-large">
      <div class="padding-section-large">
        <div class="section_process_wrapper">
          <div class="section_process_blocks">
            <div class="section_process_sticky">
              <div class="section_process_sticky_cards">
                <div class="card_border-gradient section_process first">
                  <div class="section_process_sticky_card-dark pointer-events-off"></div>
                  <div class="section_process_sticky_card">
                    <h2 class="section_process_sticky_card-title">
                      Card I
                    </h2>
                    <div class="section_process_sticky_card-text">
                      Until recently, the prevailing view assumed lorem ipsum was born as a nonsense text. “It's not Latin, though it looks like it, and it actually says nothing,” Before & After magazine answered a curious reader, “Its ‘words’ loosely approximate the frequency with which letters occur in English, which is why at a glance it looks pretty real.”
                    </div>
                  </div>
                </div>
                <div class="card_border-gradient section_process _2">
                  <div class="section_process_sticky_card">
                    <div class="section_process_sticky_card-body">
                      <h2 class="section_process_sticky_card-title">
                        Card II
                      </h2>
                      <div class="section_process_sticky_card-text">
                        Until recently, the prevailing view assumed lorem ipsum was born as a nonsense text. “It's not Latin, though it looks like it, and it actually says nothing,” Before & After magazine answered a curious reader, “Its ‘words’ loosely approximate the frequency with which letters occur in English, which is why at a glance it looks pretty real.”
                      </div>
                    </div>
                  </div>
                  <div class="section_process_sticky_card-dark pointer-events-off"></div>
                </div>
                <div class="card_border-gradient section_process _3">
                  <div class="section_process_sticky_card">
                    <div class="section_process_sticky_card-body">
                      <h2 class="section_process_sticky_card-title">
                        Card III
                      </h2>
                      <div class="section_process_sticky_card-text">
                        Until recently, the prevailing view assumed lorem ipsum was born as a nonsense text. “It's not Latin, though it looks like it, and it actually says nothing,” Before & After magazine answered a curious reader, “Its ‘words’ loosely approximate the frequency with which letters occur in English, which is why at a glance it looks pretty real.”
                      </div>
                    </div>
                  </div>
                  <div class="section_process_sticky_card-dark pointer-events-off"></div>
                </div>
                <div class="card_border-gradient section_process _4">
                  <div class="section_process_sticky_card">
                    <div class="section_process_sticky_card-body">
                      <h2 class="section_process_sticky_card-title">
                        Card IV
                      </h2>
                      <div class="section_process_sticky_card-text">
                        Until recently, the prevailing view assumed lorem ipsum was born as a nonsense text. “It's not Latin, though it looks like it, and it actually says nothing,” Before & After magazine answered a curious reader, “Its ‘words’ loosely approximate the frequency with which letters occur in English, which is why at a glance it looks pretty real.”
                      </div>
                    </div>
                  </div>
                  <div class="section_process_sticky_card-dark pointer-events-off"></div>
                </div>
                <div class="card_border-gradient section_process _5">
                  <div class="section_process_sticky_card">
                    <div class="section_process_sticky_card-body">
                      <h2 class="section_process_sticky_card-title">
                        Card V (Bigger)
                      </h2>
                      <div class="section_process_sticky_card-text">
                        Until recently, the prevailing view assumed lorem ipsum was born as a nonsense text. “It's not Latin, though it looks like it, and it actually says nothing,” Before & After magazine answered a curious reader, “Its ‘words’ loosely approximate the frequency with which letters occur in English, which is why at a glance it looks pretty real.”
                      </div>
                    </div>
                  </div>
                  <div class="section_process_sticky_card-dark pointer-events-off"></div>
                </div>
              </div>
              <div class="section_process_sticky_shadow">
                <div class="section_process_sticky_shadow-radial pointer-events-off"></div>
              </div>
            </div>
            <div class="section_process_block _1"></div>
            <div class="section_process_block _2"></div>
            <div class="section_process_block _3"></div>
            <div class="section_process_block _4"></div>
            <div class="section_process_block _5"></div>
            <div class="section_process_block _5"></div>
          </div>
        </div>
      </div>
    </div>
  </div>
</section>
              
            
!

CSS

              
                body {
  color: #202d33;
  font-family: Inter, sans-serif;
  font-size: 1rem;
  line-height: 1.5;
}
h2 {
  margin-top: 0;
  margin-bottom: 0;
  font-family: Nohemi, sans-serif;
  font-size: 3rem;
  font-weight: 500;
  line-height: 1.1;
}

p {
  margin-bottom: 0;
}

.icon-1x1-medium {
  width: 2rem;
  height: 2rem;
}

.container-large {
  width: 100%;
  max-width: 80rem;
  margin-left: auto;
  margin-right: auto;
}

.hide {
  display: none;
}

.section_process {
  color: #eceadf;
  background-color: #202d33;
}

.section_process_sticky {
  z-index: 1;
  height: 100vh;
  justify-content: space-between;
  align-items: center;
  display: flex;
  position: -webkit-sticky;
  position: sticky;
  top: 0;
  overflow: hidden;
}

.card_border-gradient {
  background-color: rgba(255, 255, 255, 0.3);
  border-radius: 0.5rem;
  padding: 1px;
}

.card_border-gradient.section_process {
  width: 450px;
  height: 100%;
  flex: none;
  position: absolute;
  right: -420px;
  overflow: hidden;
}

.card_border-gradient.section_process.first {
  margin-left: 8rem;
  position: relative;
  right: auto;
  overflow: hidden;
}

.card_border-gradient.section_process._2 {
  z-index: 3;
  right: -430px;
  transform: translate(0);
}

.card_border-gradient.section_process._3 {
  z-index: 2;
  width: 480px;
  height: 90%;
  right: -440px;
}

.card_border-gradient.section_process._4 {
  z-index: 1;
  width: 480px;
  height: 80%;
  right: -420px;
}

.card_border-gradient.section_process._5 {
  z-index: 0;
  width: 583px;
  height: 70%;
  right: -503px;
}

.section_process_sticky_shadow {
  z-index: 1;
  flex: none;
  position: relative;
}

.section_process_sticky_cards {
  z-index: 0;
  flex: 1;
  grid-template-rows: auto auto;
  grid-template-columns: 1fr 1fr;
  grid-auto-columns: 1fr;
  align-items: center;
  display: flex;
  position: relative;
}

.section_process_sticky_shadow-radial {
  width: 42rem;
  height: 48rem;
  background-image: radial-gradient(
    circle closest-side,
    rgba(0, 0, 0, 0.6),
    rgba(0, 0, 0, 0)
  );
  position: absolute;
  top: 50%;
  bottom: 0%;
  left: -10rem;
  right: auto;
  transform: translate(0, -50%);
}

.section_process_sticky_card-title {
  margin-bottom: 0.5rem;
  font-size: 1.5rem;
  font-weight: 400;
}

.section_process_sticky_card {
  height: 100%;
  grid-row-gap: 1.125rem;
  background-color: #24333b;
  background-image: radial-gradient(
    circle farthest-side at 80% -30%,
    rgba(255, 255, 255, 0.05),
    rgba(255, 255, 255, 0)
  );
  border-radius: 0.5rem;
  flex-direction: column;
  padding: 3.75rem;
  display: flex;
}

.section_process_sticky_card-body {
  grid-row-gap: 1.125rem;
  opacity: 0;
  flex-direction: column;
  display: flex;
}

.section_process_block {
  height: 50vh;
}

.section_process_block._1 {
  position: absolute;
  top: 0%;
  bottom: 0%;
  left: 0%;
  right: 0%;
}

.section_process_blocks {
  position: relative;
}

.section_process_sticky_card-dark {
  opacity: 0.48;
  background-color: #283840;
  position: absolute;
  top: 0%;
  bottom: 0%;
  left: 0%;
  right: 0%;
}

.section_process_sticky_card-dark.pointer-events-off {
  opacity: 0;
  background-color: #202d33;
}

.section_process_title {
  max-width: 7ch;
  font-size: 4rem;
  font-weight: 400;
  line-height: 1.1;
}

.section_process_title.text-gradient-primary {
  font-weight: 700;
}

.section_process_desc {
  font-size: 2rem;
}

.card {
  background-color: #fff;
  border-radius: 8px;
  padding: 3rem 4rem;
  position: relative;
  overflow: hidden;
}

@media screen and (max-width: 767px) {
  h2 {
    font-size: 2rem;
  }

  .padding-global {
    padding-left: 1.25rem;
    padding-right: 1.25rem;
  }

  .section_process_sticky {
    height: auto;
    display: block;
    position: static;
  }

  .section_process_headline-sticky {
    height: auto;
    margin-bottom: 3rem;
  }

  .section_process_sticky_shadow {
    display: none;
  }

  .section_process_sticky_cards {
    grid-row-gap: 2rem;
    flex-direction: column;
    align-items: stretch;
  }

  .section_process_sticky_card {
    padding: 2rem;
  }

  .section_process_sticky_card-body {
    opacity: 1;
  }

  .section_process_block {
    display: none;
  }

  .section_process_title {
    max-width: 11ch;
    font-size: 3rem;
  }
}

@media screen and (max-width: 479px) {
  .section_process_sticky {
    overflow: visible;
  }

  .section_process_sticky_cards {
    grid-row-gap: 1rem;
  }

  .section_process_sticky_card {
    padding: 1.5rem;
  }

  .card {
    padding: 2rem 1.5rem;
  }
}

              
            
!

JS

              
                gsap.registerPlugin(ScrollTrigger);

gsap.matchMedia().add("(min-width: 768px)", () => {
  // Disable for mobile
  const cardDarkClass = ".section_process_sticky_card-dark";
  const cardDark = "+=0.2";
  const cardPrev = { rotate: "-=3", left: "-=20" };
  const cardLeft = 140;
  const cardBody = { opacity: 1, duration: 0.2 };

  let card2 = document.querySelector(".section_process._2");
  let card3 = document.querySelector(".section_process._3");
  let card4 = document.querySelector(".section_process._4");
  let card5 = document.querySelector(".section_process._5");

  gsap
    .timeline({
      scrollTrigger: {
        trigger: ".section_process_block._2",
        toggleActions: "play none none reverse",
        start: "bottom bottom",
        preventOverlaps: true,
        onLeaveBack: () => {
          gsap.to(card3, { clearProps: "left" });
        }
      }
    })
    .to(card2, { left: cardLeft, right: "auto" })
    .to(".section_process._2 .section_process_sticky_card-body", cardBody, 0)
    .to(".section_process.first", { rotate: "-=3", left: "-=20" }, 0)
    .to(".section_process.first " + cardDarkClass, { opacity: cardDark }, 0)
    .to(card3, { height: "100%", right: "-=20" }, 0)
    .to(card4, { height: "90%", right: "-=20" }, 0)
    .to(card5, { height: "80%", right: "-=20" }, 0);

  gsap
    .timeline({
      scrollTrigger: {
        trigger: ".section_process_block._3",
        toggleActions: "play none none reverse",
        start: "bottom bottom",
        preventOverlaps: true,
        onLeaveBack: () => {
          gsap.to(card4, { clearProps: "left" });
        }
      }
    })
    .to(card3, { zIndex: 3, duration: 0 }, 0)
    .to(card3, { left: cardLeft + 10, right: "auto" })
    .to(".section_process._3 .section_process_sticky_card-body", cardBody, 0)
    .to(".section_process.first", cardPrev, 0)
    .to(card2, cardPrev, 0)
    .to(".section_process.first " + cardDarkClass, { opacity: cardDark }, 0)
    .to(".section_process._2 " + cardDarkClass, { opacity: cardDark }, 0)
    .to(card4, { height: "100%", right: "-=20" }, 0)
    .to(card5, { height: "90%", right: "-=20" }, 0);

  gsap
    .timeline({
      scrollTrigger: {
        trigger: ".section_process_block._4",
        toggleActions: "play none none reverse",
        start: "bottom bottom",
        preventOverlaps: true,
        onLeaveBack: () => {
          gsap.to(card5, { clearProps: "left" });
        }
      }
    })
    .to(card4, { zIndex: 4, duration: 0 }, 0)
    .to(card4, { left: cardLeft + 20, right: "auto" })
    .to(".section_process._4 .section_process_sticky_card-body", cardBody, 0)
    .to(".section_process.first", cardPrev, 0)
    .to(card2, cardPrev, 0)
    .to(card3, cardPrev, 0)
    .to(".section_process.first " + cardDarkClass, { opacity: cardDark }, 0)
    .to(".section_process._2 " + cardDarkClass, { opacity: cardDark }, 0)
    .to(".section_process._3 " + cardDarkClass, { opacity: cardDark }, 0)
    .to(card5, { height: "100%", right: "-=20" }, 0);

  gsap
    .timeline({
      scrollTrigger: {
        trigger: ".section_process_block._5",
        toggleActions: "play none none reverse",
        start: "bottom bottom",
        preventOverlaps: true
      }
    })
    .to(card5, { zIndex: 5, duration: 0 }, 0)
    .to(card5, { left: cardLeft + 30, right: "auto" })
    .to(".section_process._5 .section_process_sticky_card-body", cardBody, 0)
    .to(".section_process.first", cardPrev, 0)
    .to(card2, cardPrev, 0)
    .to(card3, cardPrev, 0)
    .to(card4, cardPrev, 0)
    .to(".section_process.first " + cardDarkClass, { opacity: cardDark }, 0)
    .to(".section_process._2 " + cardDarkClass, { opacity: cardDark }, 0)
    .to(".section_process._3 " + cardDarkClass, { opacity: cardDark }, 0)
    .to(".section_process._4 " + cardDarkClass, { opacity: cardDark }, 0);
});

              
            
!
999px

Console