<div class="apps">
  <div class="apps__container container">
    <div class="apps__inner">
      <div class="apps__bg"></div>
      <div class="apps__contant">Lorem ipsum, dolor sit amet consectetur adipisicing elit. Amet tempore culpa ex! Alias, possimus! Laboriosam tempora corrupti odit provident, ipsa illum tenetur voluptate accusamus mollitia deserunt officia et minima corporis.</div>
    </div>
  </div>
</div>
* {
  box-sizing: border-box;
}

body {
  display: flex;
  flex-direction: column;
  margin: 0;
  background-color: #ccc;
  overflow: auto scroll;
}

.container {
  max-width: 480px;
  margin: 0 auto;
}

.apps {
  margin-top: 70px;
}

.apps__inner {
  position: relative;
  padding: 50px 30px;
  z-index: 0;
}

.apps__inner::before {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  z-index: -1;
  background-color: #fff;
  box-shadow: 0 0 20px 0 #0007;
  border-radius: 20px;
}

.apps__bg {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  z-index: -1;
  transition: clip-path 750ms;
  clip-path: inset(
    -50px calc(50% - 50vw + var(--scroll-width, 0px) / 2)
    -50px calc(50% - 50vw + var(--scroll-width, 0px) / 2)
    round 0px);
}

.apps__bg--active {
  clip-path: inset(0 round 20px);
}

.apps__bg::before {
  content: '';
  position: absolute;
  top: -50px;
  right: calc(50% - 50vw + var(--scroll-width, 0px) / 2);
  bottom: -50px;
  left: calc(50% - 50vw + var(--scroll-width, 0px) / 2);
  background-color: #fff;
}
function setScrollWidth() {
  const sw = window.innerWidth - (document.documentElement || document.body).clientWidth;
  document.body.style.setProperty('--scroll-width', sw + 'px');
}

setScrollWidth();
window.addEventListener('resize', setScrollWidth);

setInterval(() => {
  document.querySelector('.apps__bg').classList.toggle('apps__bg--active');
}, 2000);

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.