10 tips on using components in Figma

Jake Tsacudakis
Sep 5 · 9 min read

Using components in Figma will take your design workflow to the next level. In this article, I’m going to explain what components are, how they work, and give you a set of best practices you can use to incorporate them into your design workflow. Let’s start.


What are components?

Components are UI elements that can be reused across our design projects. A component can be a button, an icon or even something complex like a data table. The advantage of using components in designs is any time you make a change to a component it updates all the component’s instances automatically saving you time on otherwise repetitive and tedious work. This speeds up your design workflow, makes your design system more consistent, and makes it much easier to maintain and collaborate with other designers.

Understanding component behavior

Let’s review one important concept before we jump into components best practices and tips: master components and component instances.

  • The master component is created when you first turn a UI element into a component and defines the properties of the component.
  • The instance is a copy of the master component you can reuse across designs.

Instances are linked to master components. When you make changes to a master component it applies the changes to the instance. In the layers panel you can identify which elements are master components and which are instances by the icon. Master components use a 4 diamond icon and instances use a single diamond icon.

Shows a button’s background color updating and how this update cascades down to its linked instances.

The important thing to remember is an instance inherits all changes made to the master component excluding instance overrides. I’ll go into more detail on instance overrides later on.


Organizing and structuring components

Now that we understand how components work and why they’re important to use, let’s walk through best practices for organizing and structuring components.

1) Use clear naming conventions and frames to organize components

A good organization and naming system makes it easy to find components in the assets panel, swap related components, and increase the usability and adoption of the system by other team members. Two of the most useful conventions to use when thinking about how to organize your components are forward slash naming and frame containers. Using both of these conventions gives you a robust and flexible organization framework. Here’s how they work.

Forward slash naming

Forward slash naming is a component naming convention that uses forward slashes to create an organized hierarchy for your components. For example, if you had primary and secondary buttons with supported states, you could use the forward “/” naming convention like this:

  • button/primary/text — active
  • button/primary/text — default
  • button/primary/text — disabled
  • button/secondary/text — active
  • button/secondary/text — default
  • button/secondary/text — disabled
Button / Primary / Large shows how forward name slashing nicely organizes components in assets panel.

For access to a wider subcategory of “related components” in the instance menu you can combine the last two labels, ie. button type (text) and button status (default), by separating them with a dash instead of a slash. This is particularly useful for larger categories with many subcategories. You can see this in use in the assets panel above.

Frame containers

Group and organize your components into collections using frames. This makes your component names shorter and makes it easier to visualize component relationships.

When you combine both conventions you get the best of organizing your assets panel and instance menu with the self-documenting nature of using containers to organize your components.

Here’s another example using Frame containers and forward slash naming convention.

2) Choose easy to understand method for structuring component states and variations

As your components grow you’ll need to have a system in place to manage and structure component states and variations. If you don’t have a way to organize different states and variations of a component your system will start to become unruly and painful to use.

There are a few methods to help you manage these dependencies. Each has pros and cons and depending on how your team works one method may be more applicable to you than the other. I’ll breakdown each method and share the tradeoffs of using each method.

a) Separate master components for each variation

This method is simple and straight-forward. You use a separate master components for each variation or state you need to support. It’s self-documenting nature makes it easy to understand and use.

Pros:

  • Easiest way to maintain consistency.
  • Fastest way to change the state or variation of an instance.
  • Ability to change multiple instances at the same time.
  • Ability to save text overrides when updating the state or variation.

Cons:

  • More components in assets panel and instance menu.
Example of using separate master components for each button state.

b) Nest all variations into a single master component

This method uses a single master component with all variations nested inside it. While this seems like a great alternative to the shortcomings of (a) above, it does present its own unique challenges.

Pros:

  • Fewer components in assets panel and instance menu.

Cons:

  • Difficult to discover variations.
  • Not possible to change multiple instances at the same time.
  • Not possible to preserve text overrides when updating the state or variation.
Example of using single master component with nested variations for each button state.

c) Create overrides for all variations using single master component

This method uses a single master component and creates all variations using instance overrides.

Pros:

  • Fewer components in assets panel and instance menu.
  • Faster initial setup.

Cons

  • More difficult to maintain consistency.
  • Takes more time to update instance if multiple overrides are required.
Example of using instance overrides to create variations of each component state.

Keep in mind it’s not an either/or decision. You can use a hybrid approach to support different component states and variations. That said, I recommend using A (separate components for each state or variation) as your primary method. Use B and C if the component lends itself to nested variations or simple instance overrides like the profile avatar example above.

3) Use nested atomic components as global building blocks

A well structured component system is easy to maintain and reason about. One of the best ways to make components more maintainable is to use atomic components. The concept is inspired by Brad Frost’s atomic design methodology, where an atom represents the smallest incremental property of a UI element. You can think of these atomic components as building blocks. For example, the shape of a button or an icon.

The best approach for this is to create a set of reusable atomic components with the sole intention of nesting atomic instances inside other related components. Take textfields as an example. We can turn a textfield’s shape into an atomic component and nest it’s instances inside every other textfield component we create. This means all textfields use the exact same building block (i.e., the atomic instance) and if the shape of textfields were to change, all we’d need to do is update the atomic component and all other textfield components would update too. Using an atomic approach allows you to seamlessly apply globalized changes to components which makes it much easier to maintain your system.

Here’s the atomic method in action.

Working with components

You have a clear system for structuring, organizing and maintaining your components. Now let’s review some best practices on creating components to improve your team’s workflow and productivity.

4) Set up constraints and layout grids for predictable behavior

Once you have the core design set for a component, take some time to set the constraints and layout grid (as needed). Setting these properties from the beginning makes it easier for other team members to understand the intended responsive behavior of a component as it’s resized. This will save you time as you work to support responsive behaviors across your product.

One note on layout grids. Using a layout grid in a component is only necessary if your component is more complex and requires granular control over distributing its elements as its resized.

Setting proper constraints from the onset makes it easy to maintain and predict responsive behavior.

5) Preserve text overrides on instance swaps

One of the great things about Figma is you can preserve text overrides when you need to swap instances. To do this make sure the text layer within each component share the same name (e.g., “Button Text”). If you don’t do this your text overrides will not persist and you’ll need to manually update the text after you swap instances.

Preserving text overrides switching between button instance states.

6) Use Clip content to reduce repetitive instances

Since components act like frames for all intents and purposes, we can utilize the clip content feature to toggle whether or not elements that extend beyond the bounds of the component are cropped or hidden. While you won’t use clip content for every component, it’s very useful for components with repeated elements like data tables and lists. For example, if you have a list component with a varying number of rows depending on the scenario. Using clip content allows you to resize the list and show more or less list rows using only one master component. Remember, you need to have proper constraints setup for this to work. If you don’t, expanding or reducing the bounds of the component will break it.

Clipping content in action.

7) Add component documentation

Master components come with a description field where you can add information about the component’s usage, behavior, and other relevant context. A component’s description appears when you hover over it in the assets panel.

The goal of documenting components is to provide relevant, necessary information to give team members enough context to understand how the component works and fits into the product. Don’t go overboard and document every single master component. The most common reasons to add documentation to a component are to provide clarity on a nested component or to provide accompanying context on a particular component’s state/variation. It’s much better to create a self-documenting system than to have to maintain hundreds of component descriptions.

When you add component documentation, hover over it in the assets panel and it reveals a tooltip.

8) Use instance overrides to adapt components across different user contexts

There will be times when it’s necessary to make updates to an instance’s inherited properties. You may need to make tweaks and adapt instances depending on use-cases and context. Remember, an instance inherits all default properties from its master component. This is where overrides come in. An override allows you to “override” properties of an instance without breaking the link with its master component.

Overrides give you the right balance between flexibility and consistency. They give you the flexibility to create distinct, localized instances to fit different contexts in and provide consistency by continuing to inherit updates from the master component.

Here’s all the properties you can override:

  • Text: Font, Weight, Size, Line Height, Letter Spacing, Paragraph Spacing, Indentation and Text Content.
  • Color: Fill, Stroke, Background Color, Opacity.
  • Effects: Drop Shadow, Inner Shadow, Blur.
  • Advanced: Size of entire component, Swap nested instances, toggle on/off layers

The following two examples show how to set overrides and how these overrides persist even when the master component updates.

Overrides in action.
Updates to master component do not revert overrides set in first gif sequence.

If you make overrides to an instance but later want to revert back to the originally inherited properties, you can reset an overridden instance. You have the option to reset all overrides or reset a specific override.

Resetting all overrides from first gif sequence.

9) Quickly swap related components

As your components grow in number, searching the assets panel and instance menu to find the right component can be tedious. Lucky for us, Figma has a shortcut. The quick way to swap related components is to use the context menu. Simply right click on the instance you want to switch and go to the Swap instance item. A submenu will appear with a list of related components.

Shortcut to quickly switch instances.

10) Detach an instance to remove relationship from master component

If you want to completely remove the relationship between an instance and its master component, you can detach it. When you do this the instance becomes an independent frame and will no longer inherit changes from the original master component. This is helpful when you want to create a new component altogether.


Closing

Building a high-quality component system is not easy. It takes time, patience, and a willingness to explore ways to work better and more effective as a designer. As you build out your component system just remember there’s no one right way to do it. Take the 10 tips from this guide, play around with them and modify them to suit your workflow best. Thanks for reading!

Design with Figma

The best collection of resources, tutorials, and tips on designing with Figma.

Thanks to Molly Hellmuth

Jake Tsacudakis

Written by

Founder @ Quanti Design — We help companies design and optimize awesome products.

Design with Figma

The best collection of resources, tutorials, and tips on designing with Figma.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade