<!-- ----------------- Created By InCoder ----------------- -->
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Custom Right Click Menu - InCoder</title>
<link rel="stylesheet" href="main.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" />
</head>
<body>
<div class="inMenu">
<ul class="menuItems">
<li><i class="fa-solid fa-arrow-left"></i>Back</li>
<li><i class="fa-solid fa-arrow-rotate-left"></i>Reload</li>
<li><i class="fa-solid fa-copy"></i>Copy</li>
<li><i class="fa-solid fa-clipboard"></i>Paste</li>
<div class="dropdown">
<li><i class="fa-solid fa-folder-plus"></i>New <i class="fa-solid fa-angle-right"></i></li>
<div class="dropdownBox">
<li><i class="fa-solid fa-folder-plus"></i>New Folder</li>
<li><i class="fa-solid fa-file-arrow-up"></i>Upload File</li>
<li><i class="fa-solid fa-floppy-disk"></i>Save as File</li>
</div>
</div>
<li><i class="fa-solid fa-magnifying-glass"></i>Search</li>
</ul>
</div>
</body>
</html>
/* ----------------- Created By InCoder ----------------- */
@import url("https://fonts.googleapis.com/css2?family=Poppins&display=swap");
* {
margin: 0;
padding: 0;
font-family: "Poppins", sans-serif;
}
body {
height: 100vh;
background: #f5275f;
}
.inMenu {
display: none;
max-width: 13rem;
width: 13rem;
position: absolute;
border-radius: 0.5rem;
background-color: #fff;
box-shadow: 0px 0px 8px rgba(255, 255, 255, 0.3);
}
.inMenu .menuItems li {
margin: 6px 0;
display: flex;
font-size: 18px;
list-style: none;
cursor: pointer;
padding: 10px 12px;
align-items: center;
}
.inMenu .menuItems li:first-child {
margin-top: 0;
}
.inMenu .menuItems li:last-child {
margin-bottom: 0;
}
.dropdown {
position: relative;
}
.inMenu .fa-angle-right {
position: absolute;
right: 0.8rem;
}
.inMenu .menuItems li i {
font-size: 20px;
padding: 0px 10px;
}
.inMenu .menuItems li:hover {
background-color: rgba(0, 0, 0, 0.05);
}
.dropdownBox {
top: 0;
opacity: 0;
right: -8%;
max-width: 13rem;
position: absolute;
transition: all 0.4s;
border-radius: 0.5rem;
background-color: #fff;
transform: translateX(-10px);
}
.dropdown:hover .dropdownBox {
opacity: 1;
transform: translateX(0px);
}
let rightMenu = document.querySelector(".inMenu"),
newMenu = rightMenu.querySelector(".dropdownBox");
document.addEventListener("contextmenu", (e) => {
e.preventDefault();
let x = e.offsetX,
y = e.offsetY,
winWidth = window.innerWidth,
winHeight = window.innerHeight,
cmWidth = rightMenu.offsetWidth,
cmHeight = rightMenu.offsetHeight;
if (x > winWidth - cmWidth - newMenu.offsetWidth) {
newMenu.style.left = "-102%";
} else {
newMenu.style.left = "";
newMenu.style.right = "-83%";
}
x = x > winWidth - cmWidth ? winWidth - cmWidth - 5 : x;
y = y > winHeight - cmHeight ? winHeight - cmHeight - 5 : y;
rightMenu.style.left = `${x}px`;
rightMenu.style.top = `${y}px`;
rightMenu.style.display = "block";
});
document.body.addEventListener("click", function (e) {
if (!rightMenu.contains(e.target)) {
rightMenu.style.display = "none";
}
});
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.