How to build a sidebar menu in react with react-burger-menu ?

Published : 14th May 2020 | by @faisaljebali
#reactjs#css#html

In this tutorial, we’ll build a simple sidebar for a website. Our first step will be to build our boilerplate webpage. To setup the app, I’m using create-react-app, but you can use anything you’re comfortable with.

First before start let us know what is react-burger-menu.

react-burger-menu is a library that allows us to easily create a sidebar for our React applications. It also comes with a multitude of effects and styles to customize the look and feel of our menu.

You can find the full code for this post on CodeSandbox.

Getting Started

First let’s install react-burger-menu

npm install react-burger-menu

Here is our root App component:

import React from "react"; import ReactDOM from "react-dom"; import "./styles.css"; import SideBar from "./sidebar"; function App() { return ( <div id="App"> <SideBar pageWrapId={"page-wrap"} outerContainerId={"App"} /> <div id="page-wrap"> <h1>Click to show menu</h1> </div> </div> ); } const rootElement = document.getElementById("root"); ReactDOM.render(<App />, rootElement);

Now we need to start building our sidebar component. For this we’re going to create page sidebar.js

import React from "react"; import { slide as Menu } from "react-burger-menu"; export default props => { return ( <Menu {...props}> <a className="menu-item" href="/"> Home </a> <a className="menu-item" href="/about"> About </a> <a className="menu-item" href="/services"> Services </a> <a className="menu-item" href="/contact"> Contact us </a> </Menu> ); };

Now let’s add a little bit of styling…

html, body { margin: 0; } #App { font-family: sans-serif; height: 100vh; } #page-wrap { text-align: center; overflow: auto; top: 45%; position: relative; } .bm-item { display: inline-block; /* Our sidebar item styling */ text-decoration: none; margin-bottom: 10px; color: #d1d1d1; transition: color 0.2s; } .bm-item:hover { color: white; } .bm-burger-button { position: fixed; width: 36px; height: 30px; right: 36px; top: 36px; } /* Color/shape of burger icon bars */ .bm-burger-bars { background: #373a47; } /* Position and sizing of clickable cross button */ .bm-cross-button { height: 24px; width: 24px; } /* Color/shape of close button cross */ .bm-cross { background: #bdc3c7; } /* General sidebar styles */ .bm-menu { background: #000; padding: 2.5em 1.5em 0; font-size: 1.15em; } /* Morph shape necessary with bubble or elastic */ .bm-morph-shape { fill: #373a47; } /* Wrapper for item list */ .bm-item-list { color: #b8b7ad; } /* Styling of overlay */ .bm-overlay { background: rgba(0, 0, 0, 0.3); }

You can find the full code for this post on CodeSandbox.

Thanks for reading.

faisaljebali

Home page