<section class="section section--one">
<div class="section__bg"></div>
<div class="section__content">
<div class="section__text">1 Lorem ipsum dolor sit amet consectetur adipisicing elit. Necessitatibus voluptates at quas architecto quidem laborum repudiandae quis eveniet. Officiis nihil ipsum incidunt soluta molestias, inventore distinctio itaque perferendis qui saepe!</div>
<div class="section__text--copy" aria-hidden="true">1 Lorem ipsum dolor sit amet consectetur adipisicing elit. Necessitatibus voluptates at quas architecto quidem laborum repudiandae quis eveniet. Officiis nihil ipsum incidunt soluta molestias, inventore distinctio itaque perferendis qui saepe!</div>
</div>
</section>
<section class="section section--two">
<div class="section__bg"></div>
<div class="section__content">
<div class="section__text">2 Lorem ipsum dolor sit amet consectetur adipisicing elit. Necessitatibus voluptates at quas architecto quidem laborum repudiandae quis eveniet. Officiis nihil ipsum incidunt soluta molestias, inventore distinctio itaque perferendis qui saepe!</div>
<div class="section__text--copy" aria-hidden="true">2 Lorem ipsum dolor sit amet consectetur adipisicing elit. Necessitatibus voluptates at quas architecto quidem laborum repudiandae quis eveniet. Officiis nihil ipsum incidunt soluta molestias, inventore distinctio itaque perferendis qui saepe!</div>
</div>
</section>
* {
box-sizing: border-box;
}
body {
margin: 0;
height: 400vh;
font-family: sans-serif;
font-size: 1.5rem;
}
.section {
position: relative;
display: flex;
align-items: center;
text-align: center;
padding: 15px;
min-height: 70vh;
}
.section--two .section__bg {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: royalblue;
z-index: 2;
}
.section--one .section__bg {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: tomato;
z-index: 2;
}
.section__content {
position: relative;
}
.section__text {
position: relative;
z-index: 1;
}
.section__text--copy {
position: absolute;
top: 0;
left: 0;
z-index: 3;
color: #fff;
user-select: none;
}
gsap.registerPlugin(ScrollTrigger);
gsap
.timeline({
ease: "power1.in",
scrollTrigger: {
trigger: ".section--one",
start: "top center",
end: "bottom center",
// onEnter, onLeave, onEnterBack, and onLeaveBack
// "play", "pause", "resume", "reset", "restart", "complete", "reverse", and "none".
toggleActions: "play reverse play reverse",
markers: true, // debug only!
id: 'one', // debug only!
}
})
.to(".section--one .section__bg, .section--one .section__text--copy", {
clipPath: "inset(calc(50% - 100px) round 100px)",
duration: 0.5,
});
gsap
.timeline({
ease: "power1.in",
scrollTrigger: {
trigger: ".section--two",
start: "top center",
end: "bottom center",
toggleActions: "play reverse play reverse",
markers: true, // debug only!
id: 'two', // debug only!
}
})
.to(".section--two .section__bg, .section--two .section__text--copy", {
clipPath: "inset(calc(50% - 100px) round 100px)",
duration: 0.5,
});
This Pen doesn't use any external CSS resources.