Pentagon Men using CSS is a menu where five menu items are arranged in a pentagon shape. In the center, the open and close button lives. This menu is created by Kit Jenson on Codepen.

Also, Read- Sliding Tabs using CSS

How to create a Pentagon menu using CSS?

To create a pentagon menu we will follow the below steps

Step 1: HTML

First, we will create an index.html file and write the HTML code

<!DOCTYPE html>
<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" />
    <link rel="stylesheet" href="style.css" />
    <title>Pentagon Menu using CSS</title>
  </head>
  <body>
    <nav class="menu open_menu">
      <a class="nav-item" title="Home" href="#">🏠︎</a>
      <a class="nav-item" title="Search" href="#">🔎︎︎</a>
      <a class="nav-item" title="Notifications" href="#">🔔︎</a>
      <a class="nav-item" title="Favorites" href="#">❤︎</a>
      <a class="nav-item" title="Profile" href="#">👤︎</a>
    </nav>
    <script src="main.js"></script>
  </body>
</html>

Step 2: CSS

Now, we will create a style.css file and copy the below code to it

body {
  --btn-size: 150px;
  --accent-color: red;
  width: 100%;
  height: 100vh;
  display: grid;
  place-items: center;
  overflow: hidden;
  background: #efefef;
  font-size: calc(var(--btn-size) * 0.55);
}

.menu {
  position: relative;
  width: var(--btn-size);
  aspect-ratio: 1 / 1;
  border-radius: 50%;
  display: grid;
  place-items: center;
  text-align: center;
  color: white;
  cursor: pointer;
  user-select: none;
  transition: 0.75s;
  line-height: 100%;
}
.menu:after {
  content: "\2630";
  width: var(--btn-size);
  aspect-ratio: 1 / 1;
  position: absolute;
  left: 0;
  top: 0;
  display: grid;
  place-items: center;
  background: var(--accent-color);
  border-radius: inherit;
  font-size: calc(var(--btn-size) * 0.48);
  transition: 0.75s;
  box-shadow: 0 10px 15px rgba(0, 0, 0, 0.5);
}
.open_menu:after {
  content: "\00D7";
  background: gray;
}

.nav-item {
  width: var(--btn-size);
  aspect-ratio: 1 / 1;
  border-radius: 50%;
  background: var(--accent-color);
  position: absolute;
  transition: 0.75s;
  user-select: none;
  left: 0;
  top: 0;
  transform: scale(0.1);
  box-shadow: 0 5px 5px rgba(0, 0, 0, 0.25);
  text-decoration: none;
  font-family: sans-serif;
  color: white;
  box-sizing: border-box;
  display: grid;
  place-items: center;
}

.open_menu .nav-item {
  transform: scale(1) rotate(360deg);
}
.open_menu .nav-item:hover {
  transform: scale(1.25) rotate(360deg);
}

.open_menu .nav-item:nth-child(1) {
  top: calc(var(--btn-size) * -0.4);
  left: calc(var(--btn-size) * -1.2);
}
.open_menu .nav-item:nth-child(2) {
  top: calc(var(--btn-size) * -1.2);
  left: 0px;
}
.open_menu .nav-item:nth-child(3) {
  top: calc(var(--btn-size) * -0.4);
  left: calc(var(--btn-size) * 1.2);
}
.open_menu .nav-item:nth-child(4) {
  top: calc(var(--btn-size) * 1);
  left: calc(var(--btn-size) * -0.8);
}
.open_menu .nav-item:nth-child(5) {
  top: var(--btn-size);
  left: calc(var(--btn-size) * 0.8);
}

Step 3: Javascript

Finally, we will create a main.js file and write the below code

document.querySelector(".menu").addEventListener("click", function () {
  this.classList.toggle("open_menu");
});

That’s it.

The source code is available on Github.

If you find this post helpful then please share this with your friends.