DEV Community

Cover image for Responsive Navigation Bar in React with a Hamburger menu
Niraj Narkhede
Niraj Narkhede

Posted on • Edited on

Responsive Navigation Bar in React with a Hamburger menu

In the web development world, the navigation bar is like the compass for your website. It guides your users through your web pages, creating a roadmap to your content. But as our screens get smaller, fitting all that important navigation into a sleek and user-friendly interface can be a puzzle. Enter the hamburger menu—the three little lines that have become synonymous with mobile web navigation. Today, we're diving into how to craft a navigation bar in React that gracefully collapses into a hamburger menu for smaller screens, ensuring your site is as accessible on a phone as it is on a desktop.

Understanding the Basics of React and Responsive Design

Before we roll up our sleeves and start coding, let's lay some groundwork. React is a popular JavaScript library for building user interfaces, especially for single-page applications. It's all about reusable components, which makes creating a navigation bar a perfect project to tackle with React.

Responsive design is another key concept here. It's the approach that suggests design and development should respond to the user's behavior and environment based on screen size, platform, and orientation. This adaptability is crucial for creating web applications that are friendly to both desktop and mobile users.

The Anatomy of a Responsive Navigation Bar

Let's break down what we're aiming to create. A responsive navigation bar needs to:

  • Display a full navigation menu on larger screens.
  • Collapse into a hamburger menu icon on smaller screens.
  • Expand the hamburger menu when clicked, showing the navigation options.

This behavior ensures that your site's navigation is accessible and easy to use, no matter the device.

Step 1: Setting Up Your React Project

If you're fresh to React or just need a refresher, creating a new project is straightforward. You can use Create React App, an officially supported way to create single-page React applications. It sets up your development environment so you can use the latest JavaScript features, provides a good developer experience, and optimizes your app for production.

Here's how you can set up a new project:

  1. Open your terminal or command prompt.
  2. Run npx create-react-app my-navigation-bar.
  3. Navigate into your new project folder with cd my-navigation-bar.
  4. Start the development server with npm start.

And just like that, you have a React application boilerplate ready to go!

Step 2: Creating the Navigation Bar Component

Within your React project, components are the building blocks. For our navigation bar, we'll create a new component. Here's a simple walkthrough:

  • Open your project in your favorite code editor.
  • Inside the src folder, create a new file called NavigationBar.js.
  • In NavigationBar.js, start by importing React and setting up a functional component:
import React from 'react';

function NavigationBar() {
  // We'll fill this in with our JSX code soon.
  return (
    <nav>
      {/* Navigation links will go here */}
    </nav>
  );
}

export default NavigationBar;
Enter fullscreen mode Exit fullscreen mode

Step 3: Implementing Basic Navigation Links

Within your NavigationBar component, it's time to add some links. For simplicity, let's add a few inline links. We'll use the <a> tag for this, but in a real-world application, you might use React Router's <Link> component for navigation within your app.

<nav>
  <a href="/">Home</a>
  <a href="/about">About</a>
  <a href="/contact">Contact</a>
</nav>
Enter fullscreen mode Exit fullscreen mode

Step 4: Styling Your Navigation Bar

Styling is what makes your navigation bar come alive. Let's add some basic CSS. You can either use a separate CSS file or styled components, depending on your preference. Here's a simple example of CSS that you can add to your App.css:

nav {
  background-color: #333;
  overflow: hidden;
}

nav a {
  float: left;
  display: block;
  color: white;
  text-align: center;
  padding: 14px 20px;
  text-decoration: none;
}
Enter fullscreen mode Exit fullscreen mode

This will give you a basic, horizontal navigation bar with a dark background and white text.

Step 5: Adding the Hamburger Menu

Now, the crux of our project—the hamburger menu. For this, we need to:

  • Add a button component that toggles the menu's visibility on smaller screens.
  • Use state in our NavigationBar component to track whether the menu is open or closed.
  • Implement CSS to hide the navigation links and display the hamburger icon on smaller screens.

First, let's add some state to our component to control the menu's visibility:

import React, { useState } from 'react';

function NavigationBar() {
  const [isOpen, setIsOpen] = useState(false);

  return (
    <nav>
      <button onClick={() => setIsOpen(!isOpen)}>
        {/* Here, you could add an SVG or icon for the hamburger menu */}
        Menu
      </button>

      {/* We'll conditionally render our links based on isOpen */}
      {isOpen && (
        <>
          <a href="/">Home</a>
          <a href="/about">About</a>
          <a href="/contact">Contact</a>
        </>
      )}
    </nav>
  );
}
Enter fullscreen mode Exit fullscreen mode

Next, we adapt our CSS to respond to screen size using media queries. For larger screens, we want our navigation links displayed inline, but for smaller screens, we'll hide these links unless our menu state is open.

/* Add this inside your App.css or a separate stylesheet */

/* Hamburger button styling */
nav button {
  display: none;
  /* Add more styling for your button here */
}

/* Style adjustments for smaller screens */
@media (max-width: 768px) {
  nav a {
    display: none;
  }

  nav button {
    display: block;
  }

  /* If the menu is open, we'll display the links */
  .isOpen a {
    display: block;
  }
}
Enter fullscreen mode Exit fullscreen mode

Finally, update your NavigationBar component to toggle a class based on the isOpen state:

<nav className={isOpen ? 'isOpen' : ''}>
Enter fullscreen mode Exit fullscreen mode

This will ensure your CSS rules apply based on the menu's state.

Conclusion: Bringing It All Together

Creating a responsive navigation bar in React isn't just about making your site look good on any device—it's about crafting a user experience that's intuitive and accessible for everyone. By following the steps outlined above, you can implement a sleek navigation bar with a hamburger menu in your React application. This not only enhances the aesthetics of your site but also its functionality and user-friendliness.

Happy coding!! Remember, the best way to learn is by doing. So, tweak, experiment, and make this navigation bar uniquely yours. Whether you're a seasoned developer or just starting out, there's always room to innovate and improve.

Top comments (1)