Building Notion-style dropdown components in React

I’m working on a React project and need to implement a dropdown menu that has the same visual style as Notion’s interface. The specific look I’m going for has that clean, modern appearance with rounded corners and smooth animations.

I’ve been searching for existing React libraries or components that can replicate this design pattern, but haven’t found exactly what I need yet. The color scheme isn’t important to me since I can customize that part myself with CSS.

Has anyone come across any npm packages or component libraries that offer this type of dropdown functionality? Or would I be better off building it from scratch using something like React with custom styling?

Any suggestions for libraries, tutorials, or code examples would be really helpful. I’m particularly interested in getting that polished, professional look that Notion has in their UI components.

Build from scratch - that’s what I’d do. Tried a bunch of component libraries for something similar and hit customization walls every time. Radix UI’s dropdown primitive came closest since it gives you the behavior without forcing their styles on you. The Notion look is all about those micro-interactions - the easing curves and subtle fade-ins when content appears. I used framer-motion for animations since it nails the enter/exit transitions. Just watch your z-index layering and make sure positioning works near viewport edges. Took me a day to nail it pixel-perfect, but having full control was worth every minute.

I built something similar for a client recently and went with Headless UI + custom CSS. You get all the accessibility stuff built-in but can still customize everything. For that Notion look, nail the CSS transitions and subtle shadows. I used translateY animations and tweaked box-shadow on hover. Rounded corners are easy with border-radius, but getting smooth open/close animations takes some timing function tweaking. Here’s a key detail: Notion uses a slight scale transform when dropdowns open - goes from scale(0.95) to scale(1). Really makes it feel polished.

This topic was automatically closed 24 hours after the last reply. New replies are no longer allowed.