<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);
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.