<body>
<main>
<button id="showOffer" class="active">Show Offer</button>
<p id="offerAccepted">Offer accepted</p>
<div id="overlay">
<div class="modal">
<button id="close">x</button>
<h2>Click the button below to accept out amazing offer!</h2>
<button id="acceptOffer">Accept offer</button>
</div>
</div>
</main>
</body>
@import url('https://fonts.googleapis.com/css2?family=Red+Hat+Display:wght@500;700;900&display=swap');
body,*{
margin:0;
padding:0;
box-sizing:border-box;
font-family:"Red Hat Display", sans-serif;
background-color:#F1E3E4;
}
main{
min-height:100vh;
display:flex;
justify-content:center;
align-items:center;
}
#showOffer,#offerAccepted{
display:none;
}
#showOffer.active, #offerAccepted.active{
display:block;
}
#showOffer{
background-color:#1C1D21;
color:#fff;
}
#overlay{
visibility:hidden;
pointer-events:none;
position:fixed;
top:0;
right:0;
left:0;
bottom:0;
background-color:rgba(255,255,255,0.5);
display:flex;
justify-content:center;
align-items:center;
transition:0.2s ease;
opacity:0;
}
#overlay.active{
visibility:visible;
opacity:1;
pointer-events:auto;
}
.modal{
position:relative;
text-align:center;
width:30vw;
min-height:30vh;
border-radius:10px;
background-color:#A288A6;
padding:25px;
}
.modal>*{
background-color:inherit;
}
button{
padding:10px;
border:none;
border-radius:10px;
}
button:hover{
cursor:pointer;
}
#close{
position:absolute;
top:0;
left:0;
border:none;
background-color:transparent;
}
#acceptOffer{
margin-top:15px;
background-color:#F1E3E4;
}
/*
* https://frontendeval.com/questions/modal-overlay
*
* Build a modal control and overlay
*/
let modal = document.querySelector("#modal")
let closeButton = document.querySelector("#close")
let acceptOfferButton = document.querySelector("#acceptOffer")
let overlay = document.querySelector("#overlay")
let showOfferButton= document.querySelector("#showOffer")
let offerAcceptedText = document.querySelector("#offerAccepted")
const acceptOffer = () =>{
overlay.classList.remove("active")
showOfferButton.classList.remove("active")
offerAcceptedText.classList.add("active")
}
const closeFromClick = (e) =>{
if(e.target !== overlay && e.target !== closeButton) return
overlay.classList.remove("active")
}
const closeFromKey = (e)=>{
if(e.key !== "Escape") return
overlay.classList.remove("active")
}
const open = () =>{
overlay.classList.add("active")
}
overlay.addEventListener("click", closeFromClick)
closeButton.addEventListener("click", closeFromClick)
showOfferButton.addEventListener("click", open)
acceptOfferButton.addEventListener("click", acceptOffer)
document.addEventListener("keyup", closeFromKey)
View Compiled
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.