DEV Community

Nilesh Raut
Nilesh Raut

Posted on

React Navbar on Scroll Change - Background Color ,Padding, More - React JS

Introduction

When it comes to creating a visually appealing user interface, the navigation bar plays a crucial role. In React applications, the navbar is often a focal point, guiding users seamlessly through different sections. But what if we could take it up a notch? Imagine a navbar that dynamically changes its background Color, height and padding as the user scrolls, adding a touch of elegance to your React app. In this blog post, we'll explore how to achieve this effect step by step.

Prerequisites

Before we dive into the implementation, let's ensure we have the necessary tools in our toolkit. This tutorial assumes you have a basic understanding of React and have a React application set up. If you haven't already, you can create a new React app using the following command:

npx create-react-app scrolling-navbar-speaklouder
cd scrolling-navbar-speaklouder
Enter fullscreen mode Exit fullscreen mode

Changing Background Color and Padding on Scroll

1. Installing Dependencies

To get started, we'll need the react-scroll library to detect scroll events easily. Install it using:

npm install react-scroll
Enter fullscreen mode Exit fullscreen mode

2. Importing and Setting Up

In your Navbar component, import the necessary dependencies:

import React, { useEffect, useState } from 'react';
import { Link, animateScroll as scroll } from 'react-scroll';
import './Navbar.css'; // Create a CSS file for styling
Enter fullscreen mode Exit fullscreen mode

Set up your initial state and useEffect hook:

const Navbar = () => {
  const [scrolling, setScrolling] = useState(false);

  useEffect(() => {
    window.addEventListener('scroll', handleScroll);
    return () => window.removeEventListener('scroll', handleScroll);
  }, []);

  const handleScroll = () => {
    if (window.scrollY > 20) {
      setScrolling(true);
    } else {
      setScrolling(false);
    }
  };
Enter fullscreen mode Exit fullscreen mode

3. Styling with CSS

Create a CSS file (Navbar.css) to style your navbar dynamically:

/* Add your initial styling here for navbar */

.navbar-scroll {
  background-color: #333; /* Set your desired background color */
  padding: 15px; /* Set your desired padding */
  /* Add additional styles for the scrolled state */
}
Enter fullscreen mode Exit fullscreen mode

4. Applying Styles Dynamically

Update your Navbar component to apply styles based on the scroll state:

const Navbar = () => {
  // ... (previous code)

  return (
    <nav className={scrolling ? 'navbar-scroll' : ''}>
      {/* Your navbar content here */}
    </nav>
  );
};


export default Navbar;
Enter fullscreen mode Exit fullscreen mode

5 Additionally, let's add react-spring for animations:

Add You Animation logic.

npm install react-spring

Enter fullscreen mode Exit fullscreen mode

In this example, as you scroll down the page, the navbar smoothly transitions its background color, height and padding, creating a sleek and engaging user experience.

Feel free to experiment with different styles, colors, and transition effects to tailor the dynamic navbar to your app's aesthetics.

For more tips and tricks, check out Nilesh's Blog ,Nilesh's Blog2. Happy coding!

Top comments (1)

Collapse
 
sufian profile image
Sufian mustafa

check it out as well:

Creating a Responsive Navbar in React/Next.js with Material-UI that hide on scroll

dev.to/sufian/creating-a-responsiv...

Creating a Responsive Navbar in React/Next.js with Material-UI that hide on scroll