Create Interactive Dropdown Navigation Menu in Webflow with GSAP Animations

Published on
July 20, 2022

How to Build a Dropdown Navigation Menu in Webflow

In this tutorial, we'll walk through the process of creating a custom dropdown navigation menu similar to the one on the Stripe website using Webflow. We'll focus on building a dropdown box that dynamically adjusts its height, as well as adding directional-based animations to enhance the user experience.

Initial Structure in Webflow

Let's start by setting up the initial structure in Webflow. Inside our menu, we have a div that holds each of our dropdown links. Each dropdown link is also contained within the menu content.

When we switch the menu content to flex mode, it anchors everything to the center and top. Inside the menu content, there's a background div with overflow set to hidden, which crops off any content inside it.

The next step is to use a CSS class inside our page settings to set the background color of the menu content to transparent for the live site view, ensuring that only the menu background defines the color on the live site.

We also restrict clickable functionality to the active content div by setting the menu content to pointer-events: none and the individual panels inside to pointer-events: auto when they receive a class of active.

To ensure that only the active content div is clickable, a higher z-index is assigned to it. This is achieved by applying the active class to the content div, allowing it to jump up to a higher z-index, making it the only clickable content div at a time.

Integrating GSAP Library

To create the dropdown navigation animation, we import the GSAP library and link up a CodeSandbox file in which we plan to save elements and variables that will be animated.

The variables we plan to use in our animations include:

  • menuLinks: Holds each of our dropdown links
  • content: Holds each content panel corresponding to the links
  • menuBackground: Represents the menu background element
  • dropdownWrap: Holds the overarching menu content div
  • menuArrow: Contains the arrow element within the dropdown

Mouse Enter Function

We'll create a mouse enter function for when we hover over any of the menu links. This function will retrieve the elements and save them in variables.

When we hover over a menu link, we grab the link itself and assign a combo class called active to it. We then grab the current content div, matching it with the link we hovered over, and apply the active class to it.

Furthermore, we set up previous elements by filtering the previous link and content div based on the existing active class and subsequently removing the active class from them.

Reveal and Switch Dropdown Animations

The first time we hover over a menu link, if no other content panels are open, we want to play a reveal dropdown animation where the panel scales up.

If there's already an open content panel, we play a switch dropdown animation where the content slides over, revealing the next one.

We create separate functions for the switch dropdown and reveal dropdown animations to maintain a clean and organized structure.

The reveal dropdown animation involves playing a GSAP timeline to scale up the dropdown wrap and fade up the menu arrow when hovering into a link. The arrow width is set to match the width of the link, and the backdrop element's width and height are adjusted to match the active content.

To handle hover out events, we use the parent wrap that includes all the dropdown links and the content div. When there's a hover out event, we play the reverse animation to close the dropdown, and upon completion, we remove the active class from the links and reset the display of the dropdown wrap.

Making Content Switch Transitions

To switch tab content when changing between links, we animate the previous content out and the current content in using GSAP animations. We set the initial state of the previous content to fade out and slide over while animating the current content to fade in and slide over in the opposite direction.

We dynamically adjust the move distance and direction of the sliding animation based on the comparison between the current content and the previous content, ensuring an appropriately synced transition effect when switching between content panels.

Conclusion

In this tutorial, we've covered the process of building a custom dropdown navigation menu with dynamic height adjustment and directional-based animations in Webflow. By integrating the GSAP library and utilizing its animation capabilities, we've successfully created a visually appealing and user-friendly dropdown menu that enhances the overall user experience.

We hope this tutorial serves as a helpful guide for creating interactive and engaging navigation elements in Webflow. Stay tuned for more tutorials and tips on creating compelling web experiences.