JSFiddle - React, Tailwind, and code Playground
by Victor
HTML
<div class="inbox inbox--visible">
<div class="inbox__shim"></div>
<div class="inbox__list">
<div class="inbox__list__item">
<div class="inbox__list__item__avatar">
IMG
</div>
<div class="inbox__list__item__text">
This is hwere the text goes <br>
this is another line
</div>
<div class="inbox__list__item__close">X</div>
</div>
<div class="inbox__list__item">
<div class="inbox__list__item__avatar">
IMG
</div>
<div class="inbox__list__item__text">
This is hwere the text goes <br>
this is another line
</div>
<div class="inbox__list__item__close">X</div>
</div>
<div class="inbox__list__item">
<div class="inbox__list__item__avatar">
IMG
</div>
<div class="inbox__list__item__text">
This is hwere the text goes <br>
this is another line
</div>
<div class="inbox__list__item__close">X</div>
</div>
</div>
</div>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Unde harum quam perferendis? At aliquam perspiciatis error quia, consectetur pariatur laudantium, maxime, saepe ipsam repellat nostrum inventore. Commodi hic nemo beatae.</p>
<button class="testbutton" type="button">Click me</button>
SCSS
.inbox {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
pointer-events: none;
&__shim{
background: rgba(0,0,0,0.5);
height: 100%;
position: absolute;
top: 0;
left: 0;
width: 100%;
display: block;
opacity: 0;
pointer-events: none;
transition: 0.5s ease all;
}
&__list {
padding: 0;
margin: 0;
background: #e3e3e3;
font-size: 16px;
border: 1px solid rgba(0,0,0,0.1);
/* border-radius: 4px; */
position: relative;
width: 600px;
max-width: 90%;
position: absolute;
top: 0;
right: 0;
height: 100%;
transition: 0.3s ease all;
transform: translateX(100%);
pointer-events: none;
&__item {
display: flex;
padding: 1rem;
border-bottom: 1px solid rgba(0,0,0,0.1);
margin-bottom: 5rem;
transition: 0.3s ease all;
&__avatar {
flex: 0 1 auto;
margin-right: 1rem;
align-self: center;
}
&__text {
flex: 1 1 auto;
margin-right: 1rem;
}
&__close {
flex: 0 1 auto;
align-self: center;
}
&:last-child {
border-bottom: 0;
}
}
}
&--visible {
/* background: orange; */
pointer-events: auto;
.inbox {
&__list {
transform: translateX(0);
pointer-events: auto;
&__item {
margin-bottom: 0rem;
}
}
&__shim {
opacity: 0.5;
pointer-events: auto;
cursor: pointer;
}
}
}
}
JavaScript
$('.inbox__shim, .testbutton').click(()=>{
document.querySelector('.inbox').classList.toggle('inbox--visible');
})