DEV Community

Cover image for Modern Sidebar Menu
Cornea Florin
Cornea Florin

Posted on • Edited on

138 30

Modern Sidebar Menu

As a CSS enthusiast I'm always trying to replicate designs I see using CSS.

Today I wanted to create a sidebar menu.
I used codepen as always(God Bless Codepen).

At first I added the necessary HTML I knew I wanted on the page:


<aside>
  <p> Menu </p>
  <a href="javascript:void(0)">
    <i class="fa fa-user-o" aria-hidden="true"></i>
    My drive
  </a>
  <a href="javascript:void(0)">
    <i class="fa fa-laptop" aria-hidden="true"></i>
    Computers
  </a>
  <a href="javascript:void(0)">
    <i class="fa fa-clone" aria-hidden="true"></i>
    Shared with me
  </a>
  <a href="javascript:void(0)">
    <i class="fa fa-star-o" aria-hidden="true"></i>
    Starred
  </a>
  <a href="javascript:void(0)">
    <i class="fa fa-trash-o" aria-hidden="true"></i>
    Trash
  </a>
</aside>

Enter fullscreen mode Exit fullscreen mode

Now I want my sidebar to be 100vh and no margins:

body {
  font-family: 'Roboto';
  width: 100%;
  height: 100vh;
  margin: 0;
}
Enter fullscreen mode Exit fullscreen mode

For the nice visuals of the sidebar:

aside {
  color: #fff;
  width: 250px;
  padding-left: 20px;
  height: 100vh;
  background-image: linear-gradient(30deg , #0048bd, #44a7fd);
  border-top-right-radius: 80px;
}

aside a {
  font-size: 12px;
  color: #fff;
  display: block;
  padding: 12px;
  padding-left: 30px;
  text-decoration: none;
}

aside a:hover {
  color: #3f5efb;
  background: #fff;
  position: relative;
  background-color: #fff;
  border-top-left-radius: 20px;
  border-bottom-left-radius: 20px;
}

aside a i {
  margin-right: 5px;
}
Enter fullscreen mode Exit fullscreen mode

The most difficult effect to achieve was the hover over the menu item:

Alt Text

For the left top and bottom hover design i added 2 pseudo elements like this:


aside a:hover::after {
  content: "";
  position: absolute;
  background-color: transparent;
  bottom: 100%;
  right: 0;
  height: 35px;
  width: 35px;
  border-bottom-right-radius: 18px;
  box-shadow: 0 20px 0 0 #fff;
}

aside a:hover::before {
  content: "";
  position: absolute;
  background-color: transparent;
  top: 38px;
  right: 0;
  height: 35px;
  width: 35px;
  border-top-right-radius: 18px;
  box-shadow: 0 -20px 0 0 #fff;
}
Enter fullscreen mode Exit fullscreen mode

There are some hardcoded values but if it works, it works! :))

Thank you for reading this article and I'm curios if you have another method to achieve the hover result.

Hostinger image

Get n8n VPS hosting 3x cheaper than a cloud solution

Get fast, easy, secure n8n VPS hosting from $4.99/mo at Hostinger. Automate any workflow using a pre-installed n8n application and no-code customization.

Start now

Top comments (19)

Collapse
 
adithyarafk profile image
AdithyaR-afk

Awesome. Just want to highlight one thing because of my OCD , you may want to remove the rectangular div highlighting that happens when you clip an option

Collapse
 
dreitzner profile image
Domenik Reitzner

Looks really nice!
Guess I have the same ocd 😀.
Also the first element cuts into the top border radius and it looks a bit weird how it overlaps...

Collapse
 
florincornea profile image
Cornea Florin

thanks!, and solved, both things :D

Collapse
 
florincornea profile image
Cornea Florin

thanks!, and solved :D

Collapse
 
tinaeldvs profile image
Tinaël

Visually appealing! However, I'd like to point out two things about it:

1) Semantically considering the HTML, you should use title tags (hX) & list tags (ul/ol & li) for your menu list. It would give a better accessibility and understanding of your menu to people with less abilities & to bots or other softwares.

2) You should avoid using JavaScript href as it is firstly considered not clean & now obsolete.

Thank you for sharing, keep up the good work!

Collapse
 
jhelberg profile image
Joost Helberg

Nice!

Collapse
 
nove1398 profile image
nove1398

This is nice, i like it

Collapse
 
arnabsen1729 profile image
Arnab Sen

Nice work! Thanks for sharing with the community <3

Collapse
 
ronaldomiranda profile image
ronaldomiranda

Cool!!
thanks for sharing

Collapse
 
ikurosaki profile image
ikurosaki

Hermoso 😍 gracias

Collapse
 
florinfrasia profile image
Florin Ovidiu Frăsia

Faină treabă Florine!
Un an nou cu multe realizări în Web development şi sănatate! La mulți ani!

Collapse
 
florincornea profile image
Cornea Florin

Mersi fain Florin!, la fel iti doresc si eu, la multi ani!

Collapse
 
deaddoctor profile image
deaddoctor

what's modern about this? it's a cool CSS trick but looks kinda ugly.

Collapse
 
utkarshdhiman48 profile image
Utkarsh Dhiman

This is really really cool.

Collapse
 
florincornea profile image
Cornea Florin

Thanks!

Some comments may only be visible to logged-in visitors. Sign in to view all comments.

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

Instrument, monitor, fix: a hands-on debugging session

Join Lazar for a hands-on session where you’ll build it, break it, debug it, and fix it. You’ll set up Sentry, track errors, use Session Replay and Tracing, and leverage some good ol’ AI to find and fix issues fast.

Tune in to the full event

DEV is partnering to bring live events to the community. Join us or dismiss this billboard if you're not interested. ❤️