Figma Prototyping: Interactions, Smart Animate, and Flows
By Atif Ullah · · 6 min read
On this page
Prototypes turn static designs into something people can experience. They help you test flows with users, communicate interactions to developers, and show stakeholders how a product will actually feel. Figma's prototyping tools are powerful enough for most product work — but it's easy to build prototypes that are either too shallow to be useful or so complex they become impossible to maintain.
This guide covers the essential techniques and how to use them well.
Start with the question#
Before building anything, decide what the prototype needs to answer:
- Can users complete this flow? You need realistic paths, including likely wrong turns.
- Does this interaction feel right? You need detailed animation on a few key moments.
- How does this work? For developer handoff, you need clear examples of behavior.
- What's the vision? For stakeholders, you need a polished happy path.
Each purpose leads to a different prototype. Trying to serve all of them at once usually produces something that serves none well.
Flows and starting points#
A flow is a connected set of frames with a defined starting point. Name flows clearly — "Checkout — Guest," "Onboarding — New User" — so testers and reviewers can choose the right one.
Keep separate flows for separate tasks rather than wiring every screen to every other screen. It makes prototypes easier to understand, share, and update.
Triggers and actions#
Every interaction has a trigger and an action.
Common triggers:
- On click or tap — the most common.
- On drag — for swipeable elements.
- While hovering and mouse enter or leave — for hover states on desktop.
- While pressing — for pressed states.
- After delay — for automatic transitions like splash screens or toasts.
- Key or gamepad — for keyboard shortcuts.
Common actions:
- Navigate to another frame.
- Open overlay for modals, menus, and tooltips.
- Swap overlay or close overlay.
- Back to return to the previous frame.
- Scroll to a specific position.
- Change to another variant of a component.
- Set variable and conditional logic.
Transitions and Smart Animate#
Transitions control how one frame changes into another: instant, dissolve, move, push, slide, or Smart Animate.
Smart Animate looks for layers with matching names in both frames and animates the differences in position, size, rotation, opacity, and color. It's the key to realistic micro-interactions:
- Expanding cards.
- Switching tabs with a moving indicator.
- Toggles and checkboxes.
- Elements sliding into place.
Tips for Smart Animate:
- Match layer names and hierarchy exactly between frames.
- Keep the structure simple; deeply nested differences animate unpredictably.
- Use appropriate easing — ease out for elements entering, ease in for elements leaving.
- Keep durations short, typically 150 to 400 milliseconds for UI transitions.
Interactive components#
Interactive components let you define interactions inside a component's variants. For example, a button can switch from default to hover to pressed, or a checkbox can toggle between checked and unchecked. Once defined, every instance works automatically across the prototype.
This is one of the biggest time-savers in Figma prototyping. Instead of creating separate frames for every state of every button, you define the behavior once in the component.
Good candidates include buttons, toggles, checkboxes, radio buttons, tabs, accordions, dropdowns, and input focus states.
Overlays#
Overlays display content on top of the current frame without navigating away: modals, bottom sheets, menus, tooltips, and toasts.
Overlay settings let you:
- Position the overlay — centered, at the top or bottom, or relative to the triggering element.
- Close it when clicking outside.
- Add a background dim.
Use overlays to keep prototypes realistic. A modal that navigates to a completely new frame often looks wrong in user testing.
Scrolling and fixed elements#
Real screens scroll. In Figma, frames taller than the device size scroll vertically in the prototype. You can also set horizontal scrolling for carousels and fix elements like headers and bottom navigation so they stay in place while content scrolls.
Set scroll behavior deliberately; a prototype where the navigation bar scrolls away when it shouldn't will confuse test participants.
Variables and conditional logic#
Figma variables can store values that change during a prototype — like the number of items in a cart, whether a user is logged in, or the text entered in a field. Combined with conditional actions, they let you build more realistic prototypes with fewer frames.
Examples:
- A cart counter that increases when items are added.
- A form that shows different content based on a selection.
- A toggle that changes settings across multiple screens.
Use this power carefully. Complex logic can make prototypes fragile and hard for others to understand. If you need extensive logic, a coded prototype may be more appropriate.
Prototyping for user testing#
When prototypes are used in usability tests:
- Use realistic content. Placeholder text confuses participants.
- Support likely paths, including some wrong turns, so participants can explore naturally.
- Make dead ends graceful. If an area isn't built, a simple "Not available in this prototype" message is better than nothing happening.
- Hide hotspot hints if they reveal where to click.
- Test the prototype on the target device before the session.
Prototyping for handoff#
For developers, prototypes are most useful when they clarify behavior:
- Show key interactions and transitions with exact timing and easing.
- Demonstrate component states and how they change.
- Include notes on behavior that's hard to prototype, such as validation rules.
- Keep the prototype focused on what's being built now.
Developers can inspect animation properties in prototype mode, which reduces back-and-forth about timing details.
Keep prototypes maintainable#
Prototypes become hard to maintain as they grow. A few habits help:
- Build with components and interactive components.
- Use clear frame names.
- Keep separate flows for separate tasks.
- Remove obsolete connections when designs change.
- Duplicate a prototype before major experiments rather than modifying the main one.
Prototype with purpose#
The best prototypes are focused: realistic enough to answer their question, and no more complex than necessary. Start with what you need to learn, choose the right level of detail, use interactive components and Smart Animate to work efficiently, and keep flows organized.
A well-built prototype can replace hours of explanation — and reveal problems long before they reach code.