<!DOCTYPE html>
<html lang = 'en'>
<head>
<meta charset = 'UTF-8'>
<meta name = 'viewport' content = 'width=device-width, initial-scale=1.0'>
<title>JS Modal Overlay</title>
<link rel = 'stylesheet' href = 'index.css'>
<script src = 'index.js' defer></script>
</head>
<body>
<div class = 'box'>
<h3>Click the button below to show the modal</h3>
<button class = 'button show-modal-button'>Click</button>
</div>
</body>
</html>
:root {
--click-button: rgb(41, 160, 140);
--hover-click-button: rgb(17, 151, 129);
--button-okay: #218199;
--button-okay-hover: #10657a;
--button-cancel-hover: #eafcff;
--white: #ffffff;
--black: #000000;
--gray: #b4b4b4;
}
* {
box-sizing: border-box;
}
body {
font-family: sans-serif;
margin: 5rem;
}
.box {
background-color: var(--white);
border-radius: 8px;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
padding: 1rem;
width: 26rem;
}
.modal-header {
padding: 0.7rem 1.5rem;
display: flex;
align-items: center;
justify-content: space-between;
border-bottom: 1px solid var(--gray);
}
.modal-title {
font: inherit;
font-size: 1.2rem;
}
.button-close {
background-color: transparent;
border: none;
outline: none;
}
.close-icon {
opacity: 0.3;
cursor: pointer;
}
.close-icon:hover {
opacity: 1;
}
.close-icon:before,
.close-icon:after {
content: "";
position: absolute;
height: 20px;
width: 3px;
background-color: var(--black);
top: 13px;
}
.close-icon:before {
transform: rotate(45deg);
}
.close-icon::after {
transform: rotate(-45deg);
}
.modal-body {
padding: 0.7rem 1.5rem;
}
.modal-footer {
display: flex;
justify-content: flex-end;
border-top: 1px solid var(--gray);
padding: 0.7rem 1.5rem;
}
.button {
font: inherit;
padding: 0.6rem 1.2rem;
border-radius: 5px;
cursor: pointer;
font-weight: bold;
}
.show-modal-button {
background-color: var(--click-button);
border: 1px solid var(--click-button);
color: var(--white);
margin: 1rem 1rem 0 0;
}
.show-modal-button:hover {
background-color: var(--hover-click-button);
border-color: var(--hover-click-button);
}
.button-okay {
background-color: var(--button-okay);
color: var(--white);
}
.button-okay:hover {
background-color: var(--button-okay-hover);
}
.button-cancel {
color: var(--button-okay);
background-color: transparent;
border: 1px solid var(--button-okay);
margin-right: 0.6rem;
}
.button-cancel:hover {
background-color: var(--button-cancel-hover);
}
.modal {
position: fixed;
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.35);
border-radius: 8px;
background-color: var(--white);
width: 30rem;
z-index: 10;
top: 30vh;
left: calc(50% - 15rem);
}
.backdrop {
position: fixed;
z-index: 1;
background-color: rgba(0, 0, 0, 0.75);
width: 100%;
height: 100vh;
top: 0;
left: 0;
}
const button = document.querySelector("button");
button.addEventListener("click", showModalHandler);
let modal;
let backdrop;
function showModalHandler() {
if (modal) {
return;
}
modal = document.createElement("div");
modal.className = "modal";
const modalHeader = document.createElement("div");
modalHeader.className = "modal-header";
const modalBody = document.createElement("div");
modalBody.className = "modal-body";
const modalFooter = document.createElement("div");
modalFooter.className = "modal-footer";
const modalTitle = document.createElement("div");
modalTitle.textContent = "Modal Title";
modalTitle.className = "modal-title";
const modalContent = document.createElement("p");
modalContent.textContent = "Here is the simple modal overlay made with js!";
const modalActionYes = document.createElement("button");
const modalActionCancel = document.createElement("button");
const modalClose = document.createElement("button");
const closeIcon = document.createElement("div");
modalActionYes.textContent = "Okay";
modalActionCancel.textContent = "Cancel";
modalActionYes.addEventListener("click", modalCloseHandler);
modalActionCancel.addEventListener("click", modalCloseHandler);
modalClose.addEventListener("click", modalCloseHandler);
modalActionYes.className = "button button-okay";
modalActionCancel.className = "button button-cancel";
modalClose.className = "button-close";
closeIcon.className = "close-icon";
modalClose.append(closeIcon);
modalHeader.append(modalTitle);
modalHeader.append(modalClose);
modalBody.append(modalContent);
modalFooter.append(modalActionCancel);
modalFooter.append(modalActionYes);
modal.append(modalHeader);
modal.append(modalBody);
modal.append(modalFooter);
document.body.append(modal);
backdrop = document.createElement("div");
backdrop.className = "backdrop";
backdrop.addEventListener("click", modalCloseHandler);
document.body.append(backdrop);
}
function modalCloseHandler() {
modal.remove();
modal = null;
backdrop.remove();
backdrop = null;
}
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.