WEBLEB
Home
Editor
Login
Pro
English
English
Français
Español
Português
Deutsch
Italiano
हिंदी
Radial Menu
554
AmirAliAkrami
Open In Editor
Publish Your Code
Need a Website?
Recommended
21 July 2025
CSS Radio Button Navigation Menu
13 November 2024
navigation menu
19 May 2025
navıgatıon bar menu
HTML
Copy
Document
CSS
Copy
* { margin: 0; padding: 0; box-sizing: border-box; } .container { width: 100%; min-height: 100vh; display: flex; justify-content: center; align-items: center; background:wheat; } .menu { position: relative; width: 300px; height: 300px; display: flex; align-items: center; justify-content: center; } .menu .toggle { position: absolute; width: 75px; height: 75px; display: flex; align-items: center; justify-content: center; color: #222; background: #fff; font-size: 3em; cursor: pointer; border-radius: 50%; transition: 0.5s; } .menu .toggle.active { transform: rotate(315deg); box-shadow: 0 0 0 68px #fff; color: #fff; background: #222237; } .menu li { position: absolute; left: 10px; list-style: none; transform: rotate(calc(360deg / 8 * var(--i))) translateX(40px); transform-origin: 140px; visibility: hidden; opacity: 0; z-index: 10; transition: 0.5s; } .menu.active li { visibility: visible; opacity: 1; } .menu li a { display: flex; justify-content: center; align-items: center; width: 55px; height: 55px; font-size: 1.75em; color: #222237; transform: rotate(calc(360deg / -8 * var(--i))); border-radius: 50%; } .menu.active li.active { transform: rotate(calc(360deg / 8 * var(--i))) translateX(12px); } .indicator { position: absolute; left: calc(50% - 2.5px); transform-origin: right; width: 100px; height: 1px; background: transparent; pointer-events: none; transition: 0.5s; } .indicator::before { content: ""; position: absolute; top: -27px; left: 72px; width: 55px; height: 55px; background: #222237; border-radius: 50%; box-shadow: 0 0 0 6px #29fd53; opacity: 0; transition: 0.5s; } .menu.active .indicator::before { opacity: 1; top: -27.5px; left: -25px; background: #29fd53; box-shadow: 0 0 0 6px #222237; } .menu li:nth-child(2).active ~ .indicator { transform: translateX(-100px) rotate(0deg); } .menu li:nth-child(3).active ~ .indicator { transform: translateX(-100px) rotate(45deg); } .menu li:nth-child(4).active ~ .indicator { transform: translateX(-100px) rotate(90deg); } .menu li:nth-child(5).active ~ .indicator { transform: translateX(-100px) rotate(135deg); } .menu li:nth-child(6).active ~ .indicator { transform: translateX(-100px) rotate(180deg); } .menu li:nth-child(7).active ~ .indicator { transform: translateX(-100px) rotate(225deg); } .menu li:nth-child(8).active ~ .indicator { transform: translateX(-100px) rotate(270deg); } .menu li:nth-child(9).active ~ .indicator { transform: translateX(-100px) rotate(315deg); }
JS
Copy
let menuToggle = document.querySelector(".toggle"); let menu = document.querySelector(".menu"); menuToggle.onclick = function () { menu.classList.toggle("active"); menuToggle.classList.toggle("active"); }; let list = document.querySelectorAll(".menu li"); function activeLink() { list.forEach((item) => { item.classList.remove("active"); this.classList.add("active"); }); } list.forEach((item) => { item.addEventListener("click", activeLink); });