<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Figma on Smashing Magazine — For Web Designers And Developers</title><link>https://www.smashingmagazine.com/category/figma/index.xml</link><description>Recent content in Figma on Smashing Magazine — For Web Designers And Developers</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Mon, 09 Feb 2026 03:03:08 +0000</lastBuildDate><item><author>Rebecca Hemstad &amp; Mark Malek</author><title>Integrating Localization Into Design Systems</title><link>https://www.smashingmagazine.com/2025/05/integrating-localization-into-design-systems/</link><pubDate>Mon, 12 May 2025 10:00:00 +0000</pubDate><guid>https://www.smashingmagazine.com/2025/05/integrating-localization-into-design-systems/</guid><description>Learn how two designers tackled the challenges of building a localization-ready design system for a global audience. This case study dives into how Rebecca and Mark combined Figma Variables and design tokens to address multilingual design issues, such as text overflow, RTL layouts, and font inconsistencies. They share key lessons learned and the hurdles they faced &amp;mdash; including Figma’s limitations &amp;mdash; along with the solutions they developed to create dynamic, scalable designs that adapt seamlessly across languages, themes, and densities. If you’re navigating the complexities of internationalization in design systems, this article is for you.</description><content:encoded><![CDATA[
          <html>
            <head>
              <meta charset="utf-8">
              <link rel="canonical" href="https://www.smashingmagazine.com/2025/05/integrating-localization-into-design-systems/" />
              <title>Integrating Localization Into Design Systems</title>
            </head>
            <body>
              <article>
                <header>
                  <h1>Integrating Localization Into Design Systems</h1>
                  
                    
                    <address>Rebecca Hemstad &amp; Mark Malek</address>
                  
                  <time datetime="2025-05-12T10:00:00&#43;00:00" class="op-published">2025-05-12T10:00:00+00:00</time>
                  <time datetime="2025-05-12T10:00:00&#43;00:00" class="op-modified">2026-02-09T03:03:08+00:00</time>
                </header>
                
                

<p>Mark and I work as product designers for SAS, a leader in analytics and artificial intelligence recognized globally for turning data into valuable insights. Our primary role is to support the token packages and component libraries for the SAS Filament Design System. SAS’ customer base is global, meaning people from diverse countries, cultures, and languages interact with products built with the Filament Design System.</p>

<p>SAS designers use Figma libraries developed by the Filament Design System team to create UX specifications. These high-fidelity designs are typically crafted in English, unknowingly overlooking multilingual principles, which can result in layout issues, text overflow, and challenges with right-to-left (RTL) languages. These issues cascade into the application, ultimately creating <strong>usability issues</strong> for SAS customers. This highlights the need to prioritize <strong>localization</strong> from the start of the design process.</p>

<blockquote class="pull-quote">
  <p>
    <a class="pull-quote__link" aria-label="Share on Twitter" href="https://twitter.com/share?text=%0aWith%20the%20introduction%20of%20Figma%20Variables,%20alongside%20the%20advancements%20in%20design%20tokens,%20we%20saw%20an%20opportunity%20for%20designers.%20We%20imagined%20a%20system%20where%20a%20Figma%20design%20could%20dynamically%20switch%20between%20themes,%20densities,%20and%20even%20languages.%0a&url=https://smashingmagazine.com%2f2025%2f05%2fintegrating-localization-into-design-systems%2f">
      
With the introduction of Figma Variables, alongside the advancements in design tokens, we saw an opportunity for designers. We imagined a system where a Figma design could dynamically switch between themes, densities, and even languages.

    </a>
  </p>
  <div class="pull-quote__quotation">
    <div class="pull-quote__bg">
      <span class="pull-quote__symbol">“</span></div>
  </div>
</blockquote>

<p>This would allow us to design and test multilingual capabilities more effectively, ensuring our design system was both <strong>flexible</strong> and <strong>adaptable</strong>.</p>

<p>While researching localization integration for design systems, we realized a significant gap in existing documentation on supporting localization and internationalization in design tokens and Figma Variables. Many of the challenges we faced, such as managing typography across locales or adapting layouts dynamically, were undocumented or only partially addressed in available resources.</p>

<p>Our story demonstrates how combining foundational principles of multilingual design with design tokens can help tackle the complexities of language switching in design systems. We are not arguing that our approach is the best, but given the lack of documentation available on the subject, we hope it will get the conversation started.</p>

<p>But before we start, it’s essential to understand the distinction between Localization (L10n) and Internationalization (I18n).</p>

<p><strong>Localization (L10n)</strong> refers to the process of adapting designs for specific languages, regions, or cultures and involves the following:</p>

<ul>
<li>Translating text;</li>
<li>Adjusting layouts to accommodate language-specific requirements, such as longer or shorter text strings or right-to-left (RTL) text for languages like Arabic;</li>
<li>Ensuring visual elements are culturally appropriate and resonate with the target audience.</li>
</ul>

<p><strong>Internationalization (I18n)</strong> is the preparation phase, ensuring designs are flexible and adaptable to different languages and regions. Key considerations in Figma include:</p>

<ul>
<li>Using placeholder text to represent dynamic content;</li>
<li>Setting up constraints for dynamic resizing to handle text expansion or contraction;</li>
<li>Supporting bi-directional text for languages that require RTL layouts.</li>
</ul>

<p>These concepts are not only foundational to multilingual design but also integral to delivering inclusive and accessible experiences to global users.</p>

<div data-audience="non-subscriber" data-remove="true" class="feature-panel-container">

<aside class="feature-panel" style="">
<div class="feature-panel-left-col">

<div class="feature-panel-description"><p>Meet <strong><a data-instant href="/printed-books/image-optimization/">Image Optimization</a></strong>, Addy Osmani’s new practical guide to optimizing and delivering <strong>high-quality images</strong> on the web. Everything in one single <strong>528-pages</strong> book.</p>
<a data-instant href="https://www.smashingmagazine.com/printed-books/image-optimization/" class="btn btn--green btn--large" style="">Jump to table of contents&nbsp;↬</a></div>
</div>
<div class="feature-panel-right-col"><a data-instant href="https://www.smashingmagazine.com/printed-books/image-optimization/" class="feature-panel-image-link">
<div class="feature-panel-image"><picture><source type="image/avif" srcSet="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2c669cf1-c6ef-4c87-9901-018b04f7871f/image-optimization-shop-cover-opt.avif" />
<img
    loading="lazy"
    decoding="async"
    class="feature-panel-image-img"
    src="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/87fd0cfa-692e-459c-b2f3-15209a1f6aa7/image-optimization-shop-cover-opt.png"
    alt="Feature Panel"
    width="480"
    height="697"
/>
</picture>
</div>
</a>
</div>
</aside>
</div>

<h2 id="pre-figma-setup-building-a-framework">Pre-Figma Setup: Building A Framework</h2>

<h3 id="understanding-our-design-token-system">Understanding Our Design Token System</h3>

<p>Before diving deeper, it’s crucial to understand that our design tokens are stored in JSON files. These JSON files are managed in an application we call “Token Depot,” hosted on our corporate GitHub.</p>

<p>We utilize the Tokens Studio plugin (pro plan) to transform these JSON files into Figma libraries. For us, design tokens are synonymous with variables &mdash; we don’t create additional variables that only exist in Figma. However, we do create styles in Figma that serve as “recipe cards” for specific HTML elements. For instance, an H2 might include a combination of font-family, font-size, and font-weight.</p>

<p><strong>It’s important to note</strong> that our design token values are directly tied to CSS-based values.</p>

<h3 id="initial-setup-theme-switching-and-localization">Initial Setup: Theme Switching And Localization</h3>

<p>In 2022, we took on the massive task of refactoring all our token names to be more <strong>semantic</strong>. At that time, we were only concerned with theme switching in our products.</p>

<p>Our tokens were re-categorized into the following groups:</p>

<ul>
<li>Color

<ul>
<li>Brand colors (SAS brand colors)</li>
<li>Base colors (references to Brand colors)</li>
</ul></li>
<li>Typography (e.g., fonts, spacing, styles)</li>
<li>Space (e.g., padding, margins)</li>
<li>Size (e.g., icons, borders)</li>
<li>Style (e.g., focus styles)</li>
<li>Motion (e.g., animations)</li>
<li>Shadow.</li>
</ul>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/integrating-localization-into-design-systems/token-categories.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="500"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/integrating-localization-into-design-systems/token-categories.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/integrating-localization-into-design-systems/token-categories.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/integrating-localization-into-design-systems/token-categories.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/integrating-localization-into-design-systems/token-categories.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/integrating-localization-into-design-systems/token-categories.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/integrating-localization-into-design-systems/token-categories.png"
			
			sizes="100vw"
			alt="Groupings of token type."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Our first iteration of token groupings by type. (<a href='https://files.smashing.media/articles/integrating-localization-into-design-systems/token-categories.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p><strong>In our early setup:</strong></p>

<ul>
<li>A core folder contained JSON files for values unaffected by theme or brand.</li>
<li>Brand folders included three JSON files (one for each theme). These were considered “English” by default.</li>
<li>A separate languages folder contained overrides for other locales, stacked on top of brand files to replace specific token values.</li>
</ul>

<p>Our JSON files were configured with English as the default. Other locales were managed with a set of JSON files that included overrides for English. These overrides were minimal, focusing mainly on font and typography adjustments. For example, bold typefaces often create issues because many languages like Chinese, Japanese, or Korean (CJK languages) fonts lack distinct bold versions. Thus, we replaced the font-weight token value from 700 to 400 in our CJK locales.</p>

<p>We also update the values for font-family, letter spacing, font-style, and font-variant tokens. In Figma, our application screens were originally designed in English, and in 2023, we only implemented theme-switching modes, not language options. Additionally, we created detailed lists to document which design tokens could be converted to Figma variables and which could not, as the initial release of variables supported only a limited set.</p>

<h3 id="introducing-density-switching">Introducing Density Switching</h3>

<p>The introduction of <strong>density switching</strong> in our products marked a significant turning point. This change allowed us to revisit and improve how we handled localization and token management. The first thing we had to figure out was the necessary token sorting. We ended up with the following list:</p>

<p><strong>Tokens Impact By Theme And Density</strong></p>

<p><strong><em>Unaffected by Theme or Density:</em></strong></p>

<ul>
<li>Color</li>
<li>Brand colors</li>
<li>Base colors</li>
<li>Motion</li>
<li>Shadow</li>
<li>Size</li>
<li>Border size</li>
<li>Outline size</li>
<li>Typography</li>
<li>Base font size</li>
<li>Letter spacing and word spacing</li>
<li>Overflow, text, and word style tokens.</li>
</ul>

<p><strong><em>Tokens Impacted by Density:</em></strong></p>

<ul>
<li>Typography</li>
<li>Font sizes</li>
<li>Line Height</li>
<li>Font spacing</li>
<li>Size</li>
<li>Border radius</li>
<li>Icon sizes</li>
<li>Space</li>
<li>Base spacing.</li>
</ul>

<p><strong><em>Tokens Impacted by Theme:</em></strong></p>

<ul>
<li>Colors</li>
<li>Action, body, container, dataviz, display, heading, highlight, icon, label, status, syntax, tag, text, thumbnail, and zero-stat</li>
<li>Size</li>
<li>Border size</li>
<li>Typography</li>
<li>Font-family</li>
<li>Style</li>
<li>Action (focus styles).</li>
</ul>

<p>With density, we expanded locale-specific value changes beyond font-family, letter spacing, font-style, and font-variant tokens to additionally include:</p>

<ul>
<li>Font sizes</li>
<li>Icon sizes</li>
<li>Line height</li>
<li>Spacing</li>
<li>Border radius.</li>
</ul>

<p>Revisiting our type scale and performing numerous calculations, we documented the required token value changes for all the locales across the density. This groundwork enabled us to tackle the <strong>restructuring of our JSON files</strong> effectively.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/integrating-localization-into-design-systems/tokens-impacted.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="500"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/integrating-localization-into-design-systems/tokens-impacted.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/integrating-localization-into-design-systems/tokens-impacted.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/integrating-localization-into-design-systems/tokens-impacted.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/integrating-localization-into-design-systems/tokens-impacted.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/integrating-localization-into-design-systems/tokens-impacted.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/integrating-localization-into-design-systems/tokens-impacted.png"
			
			sizes="100vw"
			alt="Groupings of token type by mode."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Our updated JSON files were grouped by core, theme, and density modes. (<a href='https://files.smashing.media/articles/integrating-localization-into-design-systems/tokens-impacted.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h3 id="json-file-restructuring">JSON File Restructuring</h3>

<p>In our token repository, we:</p>

<ol>
<li>Updated the tokens in the core folder.</li>
<li>Added a density folder and a language folder in each brand.</li>
</ol>

<p>After collaborating with our front-end development team, we decided to minimize the number of JSON files. Too many files introduce complexity and bugs and hinder performance. Instead of creating a JSON file for each language-density combination, we defined the following language categories:</p>

<p><strong>Language Categories</strong></p>

<ul>
<li>Western European and Slavic Languages

<ul>
<li>Polish, English, French, German, and Spanish</li>
</ul></li>
<li>Chinese Languages

<ul>
<li>Simplified and traditional scripts</li>
</ul></li>
<li>Middle Eastern and East Asian Languages

<ul>
<li>Arabic, Hebrew, Japanese, Korean, Thai, and Vietnamese</li>
</ul></li>
<li>Global Diverse

<ul>
<li>Africa, South Asia, Pacific, and Indigenous languages, Uralic, and Turkic groups.</li>
</ul></li>
</ul>

<p>These categories became our JSON files, with one file per density level. Each file contained tokens for font size, icon size, line height, spacing, and border-radius values. For example, all Chinese locales shared consistent values regardless of font-family.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/integrating-localization-into-design-systems/language-groups.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/integrating-localization-into-design-systems/language-groups.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/integrating-localization-into-design-systems/language-groups.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/integrating-localization-into-design-systems/language-groups.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/integrating-localization-into-design-systems/language-groups.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/integrating-localization-into-design-systems/language-groups.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/integrating-localization-into-design-systems/language-groups.png"
			
			sizes="100vw"
			alt="Regional groupings of languages."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      To minimize performance burden, we divided languages into regions. (<a href='https://files.smashing.media/articles/integrating-localization-into-design-systems/language-groups.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>In addition, we added a folder containing JSON files per locale, overriding core values and theme folders, such as font-family.</p>

<div class="partners__lead-place"></div>

<h2 id="figma-setup-bridging-tokens-and-design">Figma Setup: Bridging Tokens And Design</h2>

<h3 id="token-studio-challenges">Token Studio Challenges</h3>

<p>After restructuring our JSON files, we anticipated gaining support for typography variables in the Tokens Studio plugin. Instead, Tokens Studio released version 2.0, introducing a major shift in workflow. Previously, we imported JSON files directly into Figma and avoided pushing changes back through the plugin. Adjusting to the new version required us to relearn how to use the plugin effectively.</p>

<p>Our first challenge was navigating the <strong>complexity of the import process</strong>. The <code>$metadata.json</code> and <code>$themes.json</code> files failed to overwrite correctly during imports, resulting in duplicate collections in Figma when exporting variables. Despite recreating the required theme structure within the plugin, the issue persisted. To resolve this, we deleted the existing <code>$metadata.json</code> and <code>$themes.json</code> files from the repository before pulling the updated GitHub repo into the plugin. However, even with this solution, we had to manually remove redundant collections that appeared during the export process.</p>

<p>Once we successfully migrated our tokens from JSON files into Figma using the Tokens Studio plugin, we encountered our next challenge.</p>

<p>Initially, we used only “English” and theme modes in Figma, relying primarily on styles since Figma’s early variable releases lacked support for typography variables. Now, with the goal of implementing theme, density, and language switching, we needed to leverage variables &mdash; including typography variables. While the token migration successfully brought in the token names as variable names and the necessary modes, some values were missing.</p>

<p><strong>Typography variables, though promising in concept, were underwhelming in practice.</strong> For example, Figma’s default line-height multiplier for “auto” was 1.2, below the WCAG minimum of 1.5. Additionally, our token values used line-height multipliers, which weren’t valid as Figma variable values. While a percentage-based line-height value is valid in CSS, Figma variables don’t support percentages.</p>

<p>Our solution involved manually calculating pixel values for line heights across all typography sizes, locale categories, and densities. These values were entered as local variables in Figma, independent of the design token system. This allowed us to implement correct line-height changes for density and locale switches. The process, however, was labor-intensive, requiring the manual creation of hundreds of local variables. Furthermore, grouping font sizes and line heights into Figma styles required additional manual effort due to the lack of support for line-height multipliers or percentage-based variables.</p>

<p><strong>Examples:</strong></p>

<ul>
<li>For CJK locales, medium and low density use a base font size of 16px, while high density uses 18px.</li>
<li>Western European and Slavic languages use 14px for medium density, 16px for high, and 12px for low density.</li>
</ul>

<h3 id="additional-challenges">Additional Challenges</h3>

<ul>
<li><strong>Figma vs. Web Rendering</strong><br />
In Figma, line height centers text visually within the text box. In CSS, it affects spacing differently depending on the box model. This mismatch required manual adjustments, especially in light of upcoming CSS properties like <code>leading-trim</code>.</li>
<li><strong>Letter-Spacing Issues</strong><br />
While CSS defaults to “normal” for letter-spacing, Figma requires numeric values. Locale-specific resets to “normal” couldn’t utilize variables, complicating implementation.</li>
<li><strong>Font-Family Stacks</strong>

<ul>
<li>Example stack for Chinese:<br />
<code>font-family-primary: 'AnovaUI'</code>, <code>'微软雅黑体'</code>, <code>'Microsoft YaHei New'</code>, <code>'微软雅黑'</code>, <code>'Microsoft Yahei'</code>, <code>'宋体'</code>, <code>'SimSun'</code>, <code>'Helvetica Neue'</code>, <code>'Helvetica'</code>, <code>'Arial'</code>, <code>sans-serif</code>.</li>
</ul></li>
</ul>

<p>Starting with a Western font ensured proper rendering of Latin characters and symbols while maintaining brand consistency. However, Figma’s designs using only AnovaUI (SAS Brand Custom font) couldn’t preview locale-based substitutions via system fonts, complicating evaluations of mixed-content designs.</p>

<p>Finally, as we prepared to publish our new library, we encountered yet another challenge: Figma Ghosts.</p>

<h3 id="what-are-figma-ghost-variables">What Are Figma Ghost Variables?</h3>

<blockquote>Figma “ghost variables” refer to variables that remain in a Figma project even after they are no longer linked to any design tokens, themes, or components.</blockquote>

<p>These variables often arise due to incomplete deletions, improper imports, or outdated metadata files. Ghost variables may appear in Figma’s variable management panel but are effectively “orphaned,” as they are disconnected from any meaningful use or reference.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/integrating-localization-into-design-systems/ghost-variables.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="500"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/integrating-localization-into-design-systems/ghost-variables.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/integrating-localization-into-design-systems/ghost-variables.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/integrating-localization-into-design-systems/ghost-variables.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/integrating-localization-into-design-systems/ghost-variables.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/integrating-localization-into-design-systems/ghost-variables.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/integrating-localization-into-design-systems/ghost-variables.png"
			
			sizes="100vw"
			alt="Ghost variables demonstrated in Figma UI."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Ghost variables found in Figma when importing json files. (<a href='https://files.smashing.media/articles/integrating-localization-into-design-systems/ghost-variables.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Why They Cause Issues for Designers:</p>

<ul>
<li><strong>Clutter and Confusion</strong><br />
Ghost variables make the variable list longer and harder to navigate. Designers might struggle to identify which variables are actively in use and which are obsolete.</li>
<li><strong>Redundant Work</strong><br />
Designers might accidentally try to use these variables, leading to inefficiencies or design inconsistencies when the ghost variables don’t function as expected.</li>
<li><strong>Export and Sync Problems</strong><br />
When exporting or syncing variables with a design system or repository, ghost variables can introduce errors, duplicates, or conflicts. This complicates maintaining alignment between the design system and Figma.</li>
<li><strong>Increased Maintenance Overhead</strong><br />
Detecting and manually deleting ghost variables can be time-consuming, particularly in large-scale projects with extensive variable sets.</li>
<li><strong>Thematic Inconsistencies</strong><br />
Ghost variables can create inconsistencies across themes, as they might reference outdated or irrelevant styles, making it harder to ensure a unified look and feel.</li>
</ul>

<p>Addressing ghost variables requires careful management of design tokens and variables, often involving clean-up processes to ensure only relevant variables remain in the system.</p>

<h3 id="cleaning-up-ghost-variables">Cleaning Up Ghost Variables</h3>

<p>To avoid the issues in our Figma libraries, we first had to isolate ghost variables component by component. By selecting a symbol in Figma and navigating the applied variable modes, we had a good sense of which older versions of variables the symbol was still connected to. We found disconnected variables in the component library and our icon library, which resulted in compounded ghost variables across the system. We found that by traversing the layer panel, along with a fantastic plug-in called “Swap Variables,” we were able to remap all the ghost variables in our symbols.</p>

<p>If we had not completed the clean-up step, designers would not be able to access the overrides for theme, density, and locale.</p>

<h3 id="designing-symbols-for-localization">Designing Symbols For Localization</h3>

<p>To ensure Figma symbols support language swapping, we linked all text layers to our new variables, including font-family, font-size, and line height.</p>

<p>We do not use Figma’s variable feature to define text strings for each locale (e.g., English, Spanish, French) because, given the sheer breadth and depth of our Products and solutions, it would simply be too daunting a task to undertake. For us, using an existing plug-in, such as “Translator,” gives us what we need.</p>

<p>After ensuring all text layers were remapped to variables, along with the “Translator” plug-in, we were able to swap entire screens to a new language. This allowed us to start <strong>testing</strong> our symbols for unforeseen layout issues.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/integrating-localization-into-design-systems/translator-plugin.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="500"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/integrating-localization-into-design-systems/translator-plugin.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/integrating-localization-into-design-systems/translator-plugin.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/integrating-localization-into-design-systems/translator-plugin.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/integrating-localization-into-design-systems/translator-plugin.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/integrating-localization-into-design-systems/translator-plugin.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/integrating-localization-into-design-systems/translator-plugin.png"
			
			sizes="100vw"
			alt="Figma plug in Translator. "
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      We use the Translator plugin to test out translating our product mockups. (<a href='https://files.smashing.media/articles/integrating-localization-into-design-systems/translator-plugin.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>We discovered that some symbols were not supporting text wrapping when needed (e.g., accommodating longer words in German or shorter ones in Japanese). We isolated those issues and updated them to auto-layout for flexible resizing. This approach ensured all our Figma symbols were scalable and adaptable for multilingual support.</p>

<h3 id="delivering-the-system">Delivering The System</h3>

<p>With our component libraries set up to support localization, we were ready to deliver our component libraries to product designers. As a part of this step, we crafted a “Multilingual Design Cheat Sheet” to help designers understand how to set up their application mockups with Localization and Internationalization in mind.</p>

<p><strong>Multilingual Design Cheat Sheet:</strong></p>

<ol>
<li><strong>General Principles</strong>

<ul>
<li>Design flexible layouts that can handle text wrapping and language-specific requirements such as right-to-left orientations.</li>
<li>Use real content during design and development to identify localization issues such as spacing and wrapping.</li>
<li>Research the cultural expectations of your target audience to avoid faux pas.</li>
</ul></li>
<li><strong>Text &amp; Typography</strong>

<ul>
<li>Use Filament Design Systems fonts to ensure support of all languages.</li>
<li>Avoid custom fonts that lack bold or italic styles for non-Latin scripts like CJK languages.</li>
<li>Reserve additional space for languages like German or Finnish.</li>
<li>Avoid hardcoded widths for text containers and use auto-layout to ensure long text strings are readable.</li>
<li>The Filament Design System tokens adjust line height per language; make sure you are using variables for line-height.</li>
<li>Use bold sparingly, as Filament tokens override bold styling in some languages. Instead, opt for alternative emphasis methods (e.g., color or size).</li>
</ul></li>
<li><strong>Layout &amp; Design</strong>

<ul>
<li>Mirror layouts for RTL languages (e.g., Arabic, Hebrew). Align text, icons, and navigation appropriately for the flow of the language.</li>
<li>Use auto-layout to accommodate varying text lengths.</li>
<li>Avoid embedding text in images to simplify localization.</li>
<li>Allow ample spacing around text elements to prevent crowding.</li>
</ul></li>
<li><strong>Language-Specific Adjustments</strong><br />

<ul>
<li>Adapt formats based on locale (e.g., YYYY/MM/DD vs. MM/DD/YYYY).</li>
<li>Use metric or imperial units based on the region.</li>
<li>Test alignments and flows for LTR and RTL languages.</li>
</ul></li>
<li><strong>Localization Readiness</strong><br />

<ul>
<li>Avoid idioms, cultural references, or metaphors that may not translate well.</li>
<li>Provide space for localized images, if necessary.</li>
<li>Use Figma translation plug-ins to test designs for localization readiness and use real translations rather than Lorem Ipsum.</li>
<li>Test with native speakers for language-specific usability issues.</li>
<li>Check mirrored layouts and interactions for usability in RTL languages.</li>
</ul></li>
</ol>

<div class="partners__lead-place"></div>

<h2 id="lessons-learned-and-future-directions">Lessons Learned And Future Directions</h2>

<p><strong>Lessons Learned</strong></p>

<p>In summary, building a localization-ready design system was a complex yet rewarding process that taught Mark and me several critical lessons:</p>

<ul>
<li><strong>Localization and internationalization must be prioritized early.</strong><br />
Ignoring multilingual principles in the early stages of design creates cascading issues that are costly to fix later.</li>
<li><strong>Semantic tokens are key.</strong><br />
Refactoring our tokens to be more semantic streamlined the localization process, reducing complexity and improving maintainability.</li>
<li><strong>Figma variables are promising but limited.</strong><br />
While Figma Variables introduced new possibilities, their current limitations &mdash; such as lack of percentage-based line-height values and manual setup requirements &mdash; highlight areas for improvement.</li>
<li><strong>Automation is essential.</strong><br />
Manual efforts, such as recalculating and inputting values for typography and density-specific tokens, are time-intensive and prone to error. Plugins like “Translator” and “Swap Variables” proved invaluable in streamlining this work.</li>
<li><strong>Collaboration is crucial.</strong><br />
Close coordination with front-end developers ensured that our JSON restructuring efforts aligned with performance and usability goals.</li>
<li><strong>Testing with real content is non-negotiable.</strong><br />
Design issues like text wrapping, RTL mirroring, and font compatibility only became apparent when testing with real translations and flexible layouts.</li>
</ul>

<p><strong>Future Directions</strong></p>

<p>As we look ahead, our focus is on enhancing the Filament Design System to better support global audiences and simplify the localization process for designers:</p>

<ul>
<li><strong>Automatic mirrored layouts for RTL languages.</strong><br />
We plan to develop tools and workflows that enable seamless mirroring of layouts for right-to-left languages, ensuring usability for languages like Arabic and Hebrew.</li>
<li><strong>Improved figma integration.</strong><br />
Advocacy for Figma enhancements, such as percentage-based line-height support and better handling of variable imports, will remain a priority.</li>
<li><strong>Advanced automation tools.</strong><br />
Investing in more robust plugins and custom tools to automate the calculation and management of tokens across themes, densities, and locales will reduce manual overhead.</li>
<li><strong>Scalable localization testing framework.</strong><br />
Establishing a framework for native speaker testing and real-world content validation will help us identify localization issues earlier in the design process.</li>
<li><strong>Expanding the multilingual design cheat sheet.</strong><br />
We will continue to refine and expand the cheat sheet, incorporating feedback from designers to ensure it remains a valuable resource.</li>
<li><strong>Community engagement.</strong><br />
By sharing our findings and lessons, we aim to contribute to the broader design community, fostering discussions around integrating localization and internationalization in design systems.</li>
</ul>

<p>Through these efforts, Mark and I hope to create a more inclusive, scalable, and efficient design system that meets the diverse needs of our global audience while empowering SAS designers to think beyond English-first designs.</p>

<h3 id="further-reading-on-smashingmag">Further Reading On SmashingMag</h3>

<ul>
<li>“<a href="https://www.smashingmagazine.com/2020/11/internationalization-localization-static-sites/">Internationalization And Localization For Static Sites</a>,” Sam Richard</li>
<li>“<a href="https://www.smashingmagazine.com/2014/06/css-driven-internationalization-in-javascript/">CSS-Driven Internationalization In JavaScript</a>,” Maksim Chemerisuk</li>
<li>“<a href="https://www.smashingmagazine.com/2014/12/how-to-conduct-website-localization/">How To Conduct Website Localization: Don’t Get Lost In Translation</a>,” Julia Rozwens</li>
<li>“<a href="https://www.smashingmagazine.com/2012/07/12-commandments-software-localization/">12 Commandments Of Software Localization</a>,” Zack Grossbart</li>
</ul>

<div class="signature">
  <img src="https://www.smashingmagazine.com/images/logo/logo--red.png" alt="Smashing Editorial" width="35" height="46" loading="lazy" decoding="async" />
  <span>(yk)</span>
</div>


              </article>
            </body>
          </html>
        ]]></content:encoded></item><item><author>Anima Team</author><title>How To Turn Your Figma Designs Into Live Apps With Anima Playground</title><link>https://www.smashingmagazine.com/2025/04/anima-playground-figma-designs-live-apps/</link><pubDate>Tue, 29 Apr 2025 10:00:00 +0000</pubDate><guid>https://www.smashingmagazine.com/2025/04/anima-playground-figma-designs-live-apps/</guid><description>As designers, it’s important to be able to transform visual ideas into concepts within minutes and into fully functional products within hours. Well, today we’re bringing you closer to AnimaApp, an app designed to make your life easier &amp;mdash; whether you’re a designer, developer, product team member or entrepreneur.</description><content:encoded><![CDATA[
          <html>
            <head>
              <meta charset="utf-8">
              <link rel="canonical" href="https://www.smashingmagazine.com/2025/04/anima-playground-figma-designs-live-apps/" />
              <title>How To Turn Your Figma Designs Into Live Apps With Anima Playground</title>
            </head>
            <body>
              <article>
                <header>
                  <h1>How To Turn Your Figma Designs Into Live Apps With Anima Playground</h1>
                  
                    
                    <address>Anima Team</address>
                  
                  <time datetime="2025-04-29T10:00:00&#43;00:00" class="op-published">2025-04-29T10:00:00+00:00</time>
                  <time datetime="2025-04-29T10:00:00&#43;00:00" class="op-modified">2026-02-09T03:03:08+00:00</time>
                </header>
                <p>This article is sponsored by <b>Anima App</b></p>
                

<p>For years, designers and developers have been stuck in a frustrating loop. Designers create stunning UIs in Figma, only for developers to spend hours &mdash; or days &mdash; coding them from scratch. Along the way, details get lost, tweaks pile up, and before you know it, the whole process turns into a never-ending back-and-forth.</p>

<p>It’s a tale as old as modern product teams: pixel-perfect designs turned into imperfect realities, timelines stretched by repetitive tasks, and collaboration slowed by tool mismatches. Designers work in one world, developers in another &mdash; and the bridge between them has always been shaky at best.</p>

<p>But what if you could just… skip the painful part?</p>

<p>That’s where <a href="https://dev.animaapp.com/">Anima Playground</a> comes in. It’s a tool that transforms your Figma designs into fully functional web apps automatically. No more pixel-matching marathons, no more manual UI rebuilding. Just a smoother, faster way to go from a design to a live product &mdash; with AI doing the heavy lifting.</p>

<h2 id="what-is-anima-playground">What Is Anima Playground?</h2>

<p>Anima Playground is an AI-powered development environment that makes the jump from design to code seamless. It turns your Figma designs into clean, editable, and production-ready React components &mdash; instantly. And unlike static design-to-code tools of the past, this one goes further: it lets you add business logic, connect to APIs, and preview real-time changes right inside the playground.</p>

<p>In short: it&rsquo;s not just a handoff tool. It&rsquo;s where design becomes a working app.</p>

<p><strong>Here’s what you can do with Anima Playground:</strong></p>

<ul>
<li>Import Figma designs exactly as they were created &mdash; layouts, styles, responsiveness, and all.</li>
<li>Generate React components instantly, with support for libraries like MUI and shadcn/ui.</li>
<li>Use AI prompts to add logic &mdash; from button clicks to dynamic lists and form validation.</li>
<li>Customize everything, with full code access and live previews.</li>
</ul>

<h2 id="how-it-works">How It Works</h2>

<p>Easily sync your Figma designs with Anima Playground. All it takes is four quick steps.</p>

<h3 id="1-import-your-figma-designs">1. Import Your Figma Designs</h3>

<p>No clunky exports, no third-party converters. Just paste your Figma link, and Anima syncs it directly. It preserves layout, typography, responsiveness, and component structure, exactly as designed.</p>

<p>This step sets the foundation: Anima translates your Figma layers into React code, respecting design fidelity down to the pixel. Designers can rest easy knowing their UI won’t get “lost in translation.”</p>

<h3 id="2-convert-designs-into-react-components">2. Convert Designs Into React Components</h3>

<p>Once imported, your Figma designs are instantly transformed into React components. This includes:</p>

<ul>
<li>Clean JSX structure</li>
<li>Tailwind, MUI, or shadcn/ui styling (you choose!)</li>
<li>Nested component trees</li>
<li>Auto-handling of responsive layouts</li>
</ul>

<p>You can switch between UI libraries with a simple prompt or setting change &mdash; no need to rewrite everything manually. Whether you&rsquo;re building a startup landing page or a complex dashboard, the output is dev-ready and easy to extend.</p>

<h3 id="3-add-logic-with-ai-powered-prompts">3. Add Logic With AI-Powered Prompts</h3>

<p>Want a button to open a modal? Or a form that sends data to an API? You don’t need to write all that boilerplate yourself.</p>

<p>Just describe what you want using natural language &mdash; for example:</p>

<blockquote><p>“Make this button open a signup modal.”</p></blockquote>

<p>Anima’s AI will generate the underlying code for you &mdash; complete with state management, handlers, and reusable logic. You can always dive in and tweak the output to fit your specific app structure.</p>

<p>This turns design into functional UI with a level of speed that traditional front-end workflows just can’t match.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://www.animaapp.com/">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="600"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/anima-playground-figma-designs-live-apps/use-ai-promts.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/anima-playground-figma-designs-live-apps/use-ai-promts.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/anima-playground-figma-designs-live-apps/use-ai-promts.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/anima-playground-figma-designs-live-apps/use-ai-promts.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/anima-playground-figma-designs-live-apps/use-ai-promts.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/anima-playground-figma-designs-live-apps/use-ai-promts.png"
			
			sizes="100vw"
			alt="Use AI prompts to add interactivity and logic effortlessly. "
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Use AI prompts to add interactivity and logic effortlessly. (<a href='https://files.smashing.media/articles/anima-playground-figma-designs-live-apps/use-ai-promts.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h3 id="4-see-live-changes-instantly">4. See Live Changes Instantly</h3>

<p>As you make changes &mdash; whether through prompts or direct code edits &mdash; you see them reflected in real-time. Anima Playground acts as a visual IDE, combining the flexibility of code with the immediacy of design tools.</p>

<p>This live feedback loop means less context-switching and faster iterations. Whether you’re testing animations, layout tweaks, or new features, you get to <em>see it</em> before you commit to anything.</p>

<h2 id="more-than-just-design-to-code">More Than Just Design-to-Code</h2>

<p>While many tools promise “Figma to code,” <strong>Anima Playground goes beyond static conversion</strong>. It’s a fully interactive environment where real apps are born &mdash; with logic, data, and interactivity.</p>

<p><strong>Some powerful features include:</strong></p>

<ul>
<li><strong>One-click AI suggestions</strong> to enhance your UI with logic.</li>
<li><strong>Custom component support</strong>, allowing teams to inject their own building blocks.</li>
<li><strong>Component reuse</strong>, letting you structure apps in a scalable way.</li>
<li><strong>Flexible framework support</strong>, starting with React and planning to support more in the future.</li>
</ul>

<p>It’s not just for prototyping &mdash; it’s for building.</p>

<h2 id="why-it-matters">Why It Matters</h2>

<p>The design-to-code handoff has been broken for too long. Anima Playground isn’t just another tool. It’s a game-changer. Here’s why:</p>

<ul>
<li>🚀 Speed<br />
What used to take days now takes minutes. You skip the repetitive coding, layout guesswork, and context switching.</li>
<li>🎯 Accuracy<br />
Your designs stay true to the original. No more pixel-matching or guessing which font size the designer used.</li>
<li>🧩 Flexibility<br />
Developers get full access to the code. It&rsquo;s not a black box &mdash; it&rsquo;s fully transparent and editable.</li>
<li>🤝 Collaboration<br />
Designers and developers finally share the same playground &mdash; literally. This tightens feedback loops and shortens build cycles.</li>
</ul>

<p>By making the workflow smarter, <strong>Anima Playground helps teams build better products, faster</strong>, and with fewer headaches.</p>

<h2 id="who-is-it-for">Who Is It For?</h2>

<p>Whether you’re a <strong>designer</strong>, <strong>developer</strong>, <strong>startup founder</strong>, or <strong>PM</strong>, Anima Playground removes the barriers between your ideas and real products.</p>

<ul>
<li><strong>Designers</strong> can see their visions come to life, exactly as imagined.</li>
<li><strong>Developers</strong> can skip the grunt work and focus on logic, architecture, and business needs.</li>
<li><strong>Teams</strong> can work together in a unified environment &mdash; no more waiting for the “handoff.”</li>
</ul>

<p>It’s perfect for building landing pages, dashboards, internal tools, MVPs, and more.</p>

<h3 id="are-you-ready-to-try-it">Are You Ready To Try It?</h3>

<p>Anima Playground and the Anima API are redefining the connection between design and development in the era of AI-powered coding. Whether you&rsquo;re a designer, developer, product team member, marketer, or entrepreneur, Anima empowers you to transform visual ideas into concepts within minutes—and into fully functional products within hours.</p>

<p>If you’re tired of the endless design-to-development grind, <a href="https://projects.animaapp.com/signup">it’s time to give Anima Playground a spin</a>. Whether you’re a designer who wants to bring your vision to life or a developer looking to speed up the build process, this tool has your back.</p>

<p>Let your designs do more than look good &mdash; let them <em>work</em>!</p>

<div class="signature">
  <img src="https://www.smashingmagazine.com/images/logo/logo--red.png" alt="Smashing Editorial" width="35" height="46" loading="lazy" decoding="async" />
  <span>(il)</span>
</div>


              </article>
            </body>
          </html>
        ]]></content:encoded></item><item><author>Cosima Mielke</author><title>Best Practices For Naming Design Tokens, Components And Variables</title><link>https://www.smashingmagazine.com/2024/05/naming-best-practices/</link><pubDate>Thu, 23 May 2024 09:00:00 +0000</pubDate><guid>https://www.smashingmagazine.com/2024/05/naming-best-practices/</guid><description>How can we get better at naming? This post is dedicated to naming conventions, tips, and real-world examples that help you name things in a robust and flexible way.</description><content:encoded><![CDATA[
          <html>
            <head>
              <meta charset="utf-8">
              <link rel="canonical" href="https://www.smashingmagazine.com/2024/05/naming-best-practices/" />
              <title>Best Practices For Naming Design Tokens, Components And Variables</title>
            </head>
            <body>
              <article>
                <header>
                  <h1>Best Practices For Naming Design Tokens, Components And Variables</h1>
                  
                    
                    <address>Cosima Mielke</address>
                  
                  <time datetime="2024-05-23T09:00:00&#43;00:00" class="op-published">2024-05-23T09:00:00+00:00</time>
                  <time datetime="2024-05-23T09:00:00&#43;00:00" class="op-modified">2026-02-09T03:03:08+00:00</time>
                </header>
                
                

<p><strong>Naming is hard</strong>. As designers and developers, we often struggle finding the right name — for a design token, colors, UI components, HTML classes, and variables. Sometimes, the names we choose are <strong>too generic</strong>, so it’s difficult to understand what exactly is meant. And sometimes they are <strong>too specific</strong>, leaving little room for flexibility and re-use.</p>

<p>In this post, we want to <strong>get to the bottom of this</strong> and explore how we can make naming more straightforward. How do we choose the right names? And which naming conventions work best? Let’s take a closer look.</p>

<h2 id="inspiration-for-naming">Inspiration For Naming</h2>

<p>If you’re looking for some inspiration for naming HTML classes, CSS properties, or JavaScript functions, <a href="https://classnames.paulrobertlloyd.com/">Classnames</a> is a wonderful resource jam-packed with ideas that get you <strong>thinking outside the box</strong>.</p>














<figure class="
  
  
  ">
  
    <a href="https://classnames.paulrobertlloyd.com/">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="572"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/naming-best-practices/classnames-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/naming-best-practices/classnames-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/naming-best-practices/classnames-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/naming-best-practices/classnames-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/naming-best-practices/classnames-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/naming-best-practices/classnames-opt.png"
			
			sizes="100vw"
			alt="Classnames"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      <a href='https://classnames.paulrobertlloyd.com/'>Classnames</a> provides thematically grouped lists of words you can use for naming. (<a href='https://files.smashing.media/articles/naming-best-practices/classnames-opt.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>The site provides thematically grouped lists of words perfect for naming. You’ll find terms to describe different kinds of behavior, likeness between things, order, grouping, and association, but also <strong>themed collections of words</strong> that wouldn’t instantly come to one’s mind when it comes to code, among them words from nature, art, theater, music, architecture, fashion, and publishing.</p>

<h2 id="naming-conventions">Naming Conventions</h2>

<p>What makes a good name? Javier Cuello summarized a set of <a href="https://goodpractices.design/guidelines/naming">naming best practices</a> that help you name your <strong>layers, groups and components</strong> in a consistent and scalable way.</p>














<figure class="
  
  
  ">
  
    <a href="https://goodpractices.design/guidelines/naming">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="555"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/naming-best-practices/naming-good-practices-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/naming-best-practices/naming-good-practices-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/naming-best-practices/naming-good-practices-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/naming-best-practices/naming-good-practices-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/naming-best-practices/naming-good-practices-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/naming-best-practices/naming-good-practices-opt.png"
			
			sizes="100vw"
			alt="Naming Good Practices"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Javier Cuello explores <a href='https://goodpractices.design/guidelines/naming'>what makes an effective name</a>. (<a href='https://files.smashing.media/articles/naming-best-practices/naming-good-practices-opt.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>As Javier points out, a good name has a logical structure, is short, meaningful, and known by everyone, and not related to visual properties. He shares <strong>do’s and don’ts</strong> to illustrate how to achieve that and also takes a closer look at all the fine little details you need to consider when naming sizes, colors, groups, layers, and components.</p>

<h2 id="design-tokens-naming-playbook">Design Tokens Naming Playbook</h2>

<p>How do you name and manage design tokens? To enhance your design tokens naming skills, Romina Kavcic created an interactive <a href="https://thedesignsystem.guide/design-tokens-naming-playbook">Design Tokens Naming Playbook</a>. It covers everything from <strong>different approaches to naming structure</strong> to creating searchable databases, running naming workshops, and automation.</p>














<figure class="
  
  
  ">
  
    <a href="https://thedesignsystem.guide/design-tokens-naming-playbook">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="483"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/naming-best-practices/naming-playbook-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/naming-best-practices/naming-playbook-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/naming-best-practices/naming-playbook-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/naming-best-practices/naming-playbook-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/naming-best-practices/naming-playbook-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/naming-best-practices/naming-playbook-opt.png"
			
			sizes="100vw"
			alt="Design Tokens Naming Playbook"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      The <a href='https://thedesignsystem.guide/design-tokens-naming-playbook'>Design Tokens Naming Playbook</a> is a wonderful resource for experimenting with names. (<a href='https://files.smashing.media/articles/naming-best-practices/naming-playbook-opt.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>The playbook also features a <strong>naming playground</strong> where you can play with names simply by dragging and dropping. For more visual examples, also be sure to check out the <a href="https://www.figma.com/community/file/1372570473193150221/design-tokens-naming-playbook">Figma template</a>. It includes components for all categories, allowing you to experiment with different naming structures.</p>

<h2 id="flexible-design-token-taxonomy">Flexible Design Token Taxonomy</h2>

<p>How to build a flexible design token taxonomy that works across different products? That was the challenge that the team at Intuit faced. The parent company of products such as Mailchimp, Quickbooks, TurboTax, and Mint developed a <strong>flexible token system</strong> that goes beyond the brand theme to serve as the foundational system for a wide array of products.</p>














<figure class="
  
  
  ">
  
    <a href="https://medium.com/@NateBaldwin/creating-a-flexible-design-token-taxonomy-for-intuits-design-system-81c8ff55c59b">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="306"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/naming-best-practices/token-taxonomy-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/naming-best-practices/token-taxonomy-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/naming-best-practices/token-taxonomy-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/naming-best-practices/token-taxonomy-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/naming-best-practices/token-taxonomy-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/naming-best-practices/token-taxonomy-opt.png"
			
			sizes="100vw"
			alt="Creating a flexible design token taxonomy for Intuit’s Design System"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Nate Baldwin shares insights into <a href='https://medium.com/@NateBaldwin/creating-a-flexible-design-token-taxonomy-for-intuits-design-system-81c8ff55c59b'>Intuit’s flexible design token taxonomy</a>. (<a href='https://files.smashing.media/articles/naming-best-practices/token-taxonomy-opt.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Nate Baldwin wrote a <a href="https://medium.com/@NateBaldwin/creating-a-flexible-design-token-taxonomy-for-intuits-design-system-81c8ff55c59b">case study</a> in which he shares valuable insights into the making of <strong>Intuit’s design token taxonomy</strong>. It dives deeper into the pain points of the old taxonomy system, the criteria they defined for the new system, and how it was created. Lots of takeaways for building your own robust and flexible token taxonomy are guaranteed.</p>

<h2 id="naming-colors">Naming Colors</h2>

<p>When you’re creating a color system, you need names for all its facets and uses. Names that everyone on the team can make sense of. But how to achieve that? How do you <strong>bring logic to a subjective topic</strong> like color? Jess Satell, Staff Content Designer for Adobe’s Spectrum Design System, shares <a href="https://adobe.design/stories/design-for-scale/naming-colors-in-design-systems">how they master the challenge</a>.</p>














<figure class="
  
  
  ">
  
    <a href="https://adobe.design/stories/design-for-scale/naming-colors-in-design-systems">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="597"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/naming-best-practices/naming-colors-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/naming-best-practices/naming-colors-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/naming-best-practices/naming-colors-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/naming-best-practices/naming-colors-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/naming-best-practices/naming-colors-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/naming-best-practices/naming-colors-opt.png"
			
			sizes="100vw"
			alt="Naming Colors In Design Systems"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Jess Sattell explains <a href='https://adobe.design/stories/design-for-scale/naming-colors-in-design-systems'>how language brings logic to a subjective topic like color</a>. (<a href='https://files.smashing.media/articles/naming-best-practices/naming-colors-opt.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>As Jess explains, the Spectrum color nomenclature uses a combination of color family classifier (e.g., blue or gray) paired with an incremental brightness value scale (50–900) to name colors in a way that is not only logical for everyone involved but also <strong>scalable and flexible</strong> as the system grows.</p>

<p>Another handy little helper when it comes to naming colors is <a href="https://parrot.color.pizza/">Color Parrot</a>. The Twitter bot is capable of naming and identifying the colors in any given image. Just mention the bot in a reply, and it will respond with a color palette.</p>

<div class="partners__lead-place"></div>

<h2 id="common-names-for-ui-components">Common Names For UI Components</h2>

<p>Looking at what other people call similar things is a great way to start when you’re <strong>struggling with naming</strong>. And what better source could there be than other design systems? Before you end up in the design system rabbit hole, Iain Bean did the research for you and created the <a href="https://component.gallery/components/">Component Gallery</a>.</p>














<figure class="
  
  
  ">
  
    <a href="https://component.gallery/components/">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="468"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/naming-best-practices/component-gallery-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/naming-best-practices/component-gallery-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/naming-best-practices/component-gallery-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/naming-best-practices/component-gallery-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/naming-best-practices/component-gallery-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/naming-best-practices/component-gallery-opt.png"
			
			sizes="100vw"
			alt="The Component Gallery"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      <a href='https://component.gallery/components/'>The Component Gallery</a> collects interface components from real-world design systems. (<a href='https://files.smashing.media/articles/naming-best-practices/component-gallery-opt.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>The Component Gallery is a collection of interface components from real-world design systems. It <strong>includes plenty of examples</strong> for more than 50 UI components — from accordion to visually hidden — and also lists other names that the UI components go by. A fantastic resource — not only with regards to naming.</p>

<h2 id="variables-taxonomy-map">Variables Taxonomy Map</h2>

<p>A wonderful example of naming guidelines for a complex multi-brand, multi-themed design system comes from the Vodafone UK Design System team. Their <a href="https://www.figma.com/community/file/1339950482183709250/vodafone-uk-variables-taxonomy-map">Variables Taxonomy Map</a> breaks down the <strong>anatomy and categorization of a design token</strong> into a well-orchestrated system of collections.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/file/1339950482183709250/vodafone-uk-variables-taxonomy-map">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="450"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/naming-best-practices/variables-taxonomy-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/naming-best-practices/variables-taxonomy-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/naming-best-practices/variables-taxonomy-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/naming-best-practices/variables-taxonomy-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/naming-best-practices/variables-taxonomy-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/naming-best-practices/variables-taxonomy-opt.png"
			
			sizes="100vw"
			alt="Variables Taxonomy Map"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      <a href='https://www.figma.com/community/file/1339950482183709250/vodafone-uk-variables-taxonomy-map'>Vodafone’s Variables Taxonomy Map</a> accommodates a complex multi-brand, multi-themed design system. (<a href='https://files.smashing.media/articles/naming-best-practices/variables-taxonomy-opt.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>The map illustrates four collections required to support the system and connections between tokens — <strong>from brand and primitives to semantics and pages</strong>. It builds on top of <a href="https://medium.com/eightshapes-llc/naming-tokens-in-design-systems-9e86c7444676">Nathan Curtis’ work on naming design tokens</a> and enables everyone to gather insight about where a token is used and what it represents, just from its name.</p>

<p>If you want to explore more approaches to naming design tokens, Vitaly compiled a <a href="https://www.linkedin.com/posts/vitalyfriedman_ux-design-activity-7173228980534243328-fHeA?utm_source=share&amp;utm_medium=member_desktop">list of useful Figma kits and resources</a> that are worth checking out.</p>

<h2 id="design-token-names-inventory">Design Token Names Inventory</h2>

<p>Romina Kavcic created a handy little resource that is bound to give your design token naming workflow a power boost. The <a href="https://www.linkedin.com/posts/rominakavcic_figma-designsystem-designtokens-activity-7114585552716185601-bBoR/">Design Token Names Inventory spreadsheet</a> not only makes it easy to <strong>ensure consistent naming</strong> but also syncs directly to Figma.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.linkedin.com/posts/rominakavcic_figma-designsystem-designtokens-activity-7114585552716185601-bBoR/">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="581"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/naming-best-practices/token-names-inventory-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/naming-best-practices/token-names-inventory-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/naming-best-practices/token-names-inventory-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/naming-best-practices/token-names-inventory-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/naming-best-practices/token-names-inventory-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/naming-best-practices/token-names-inventory-opt.png"
			
			sizes="100vw"
			alt="Design Token Names Inventory Spreadsheet"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      The <a href='https://www.linkedin.com/posts/rominakavcic_figma-designsystem-designtokens-activity-7114585552716185601-bBoR/'>Design Token Names Inventory spreadsheet</a> automatically syncs to Figma. (<a href='https://files.smashing.media/articles/naming-best-practices/token-names-inventory-opt.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>The spreadsheet has a simple structure with four levels to give you a bird’s-eye view of all your design tokens. You can easily add rows, themes, and modes without losing track and <strong>filter your tokens</strong>. And while the spreadsheet itself is already a great solution to keep everyone involved on the same page, it plays out its real strength in combination with the <a href="https://docs.sheetssync.app/">Google Spreadsheets plugin</a> or the <a href="https://data.to.design/?trk=public_post-text">Kernel plugin</a>. Once installed, the changes you make in the spreadsheet are reflected in Figma. A real timesaver!</p>

<h2 id="want-to-dive-deeper">Want To Dive Deeper?</h2>

<p>We hope these resources will come in handy as you tackle naming. If you’d like to dive deeper into design tokens, components, and design systems, we have a few friendly <strong>online workshops</strong> and <strong>SmashingConfs</strong> coming up:</p>

<ul>
<li><a href="https://smashingconf.com/online-workshops/workshops/design-systems-token-component-nathan-curtis/">Design Token and UI Component Architecture</a> with Nathan Curtis, <strong>June 6–14</strong></li>
<li><a href="https://smashingconf.com/online-workshops/workshops/design-systems-brad-frost/">Creating and Maintaining Successful Design Systems</a> with Brad Frost, <strong>Aug 27 — Sept 10</strong></li>
<li><a href="https://smashingconf.com/online-workshops/workshops/figma-workflow-christine-vallaure/">Figma Workflow Masterclass
</a> with Christina Vallaure, <strong>Nov 14–22</strong></li>
<li><a href="https://smashingconf.com/freiburg-2024">SmashingConf Freiburg 2024</a> 🇩🇪 — The Web, <strong>Sep 9–11</strong></li>
<li><a href="https://smashingconf.com/ny-2024">SmashingConf New York 2024</a> 🇺🇸 — Front-End &amp; UX, <strong>Oct 7–10</strong></li>
<li><a href="https://smashingconf.com/antwerp-2024">SmashingConf Antwerp 2024</a> 🇧🇪 — Design &amp; UX, <strong>Oct 28–31</strong></li>
</ul>

<p>We’d be absolutely delighted to welcome you to one of our special Smashing experiences — be it online or in person!</p>

              </article>
            </body>
          </html>
        ]]></content:encoded></item><item><author>Luis Ouriach</author><title>Building Components For Consumption, Not Complexity (Part 2)</title><link>https://www.smashingmagazine.com/2023/12/building-components-consumption-not-complexity-part2/</link><pubDate>Mon, 18 Dec 2023 15:00:00 +0000</pubDate><guid>https://www.smashingmagazine.com/2023/12/building-components-consumption-not-complexity-part2/</guid><description>In this two-part series of articles, Luis shares his experience with design systems and how you can overcome the potential pitfalls, starting from how to make designers on your team adopt the complex and well-built system that you created to what are the best naming conventions and how to handle the auto-layout of components, indexing/search, and more. Part 2 concentrates on the key points from Luis’ framework and practical tips about managing a design system that should be both robust and easy to adopt.</description><content:encoded><![CDATA[
          <html>
            <head>
              <meta charset="utf-8">
              <link rel="canonical" href="https://www.smashingmagazine.com/2023/12/building-components-consumption-not-complexity-part2/" />
              <title>Building Components For Consumption, Not Complexity (Part 2)</title>
            </head>
            <body>
              <article>
                <header>
                  <h1>Building Components For Consumption, Not Complexity (Part 2)</h1>
                  
                    
                    <address>Luis Ouriach</address>
                  
                  <time datetime="2023-12-18T15:00:00&#43;00:00" class="op-published">2023-12-18T15:00:00+00:00</time>
                  <time datetime="2023-12-18T15:00:00&#43;00:00" class="op-modified">2026-02-09T03:03:08+00:00</time>
                </header>
                
                

<p>Welcome back to my long read about building better components &mdash; components that are more likely to be found, understood, modified, and updated in ways that promote adoption rather than abandonment.</p>

<p>In the previous installment in the series, we took a good look through the process of building <strong>flexible</strong> and <strong>repeatable</strong> components, aligning with the <strong>FRAILS</strong> framework. In this second part, we will be jumping head first into building <strong>adoptable</strong>, <strong>indexable</strong>, <strong>logical</strong>, and <strong>specific</strong> components. We have many more words ahead of us.</p>

<h2 id="adoptable">Adoptable</h2>

<p>According to Sparkbox’s 2022 <a href="https://designsystemssurvey.sparkbox.com/2022/#section-4">design systems survey</a>, the top three biggest challenges faced by teams were recently:</p>

<ol>
<li>Overcoming technical/creative debt,</li>
<li>Parity between design &amp; code,</li>
<li>Adoption.</li>
</ol>

<p>It’s safe to assume that points <strong>1.</strong> and <strong>2.</strong> are mostly due to tool limitations, siloed working arrangements, or poor organizational communication. There is no enterprise-ready design tool on the market that currently provides a robust enough code export for teams to automate the handover process. Neither have I ever met an engineering team that would adopt such a feature! Likewise, a tool won’t fix communication barriers or decades worth of forced silos between departments. This will likely change in the coming years, but I think that these points are an understandable constraint.</p>

<p>Point <strong>3.</strong> is a concern, though. Is your brilliant design system <strong>adoptable</strong>? If we’re spending all this time working on design systems, why are people not using them effectively? Thinking through adoption challenges, I believe we can focus on three main points to make this process a lot smoother:</p>

<ol>
<li>Naming conventions,</li>
<li>Community-building,</li>
<li>(Over)communication.</li>
</ol>

<h3 id="naming-conventions">Naming Conventions</h3>

<p>There are too many ways to name components in our design tool, from <a href="https://en.wikipedia.org/wiki/Camel_case">camelCasing</a> to <a href="https://www.theserverside.com/definition/Kebab-case">kebab-casing</a>, Slash/Naming/Conventions to the more descriptive, e.g., “Product Card &mdash; Cart”. Each approach has its pros and cons, but what we need to consider with our selection is how easy it is to find the component you need. Obvious, but this is central to <em>any</em> good name.</p>

<p>It’s tempting to map component naming 1:1 between design and code, but I personally don’t know whether this is what our goal should be. Designers and developers work in different ways and with different methods of searching for and implementing components, so we should cater to the audience. This would aid solutions based on intention, not blindly aiming for parity.</p>

<p>Figma can help bridge this gap with the “<a href="https://help.figma.com/hc/en-us/articles/7938814091287-Add-style-and-component-descriptions">component description field</a>” providing us a useful space to add additional, searchable names (or aliases, even) to every <strong>component</strong>. This means that if we call it a <code>headerNavItemActive</code> in code but a “Header link” in design with a toggled component property, the developer-friendly name can be added to the description field for searchable parity.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/1-component-description.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="450"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/1-component-description.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/1-component-description.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/1-component-description.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/1-component-description.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/1-component-description.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/1-component-description.png"
			
			sizes="100vw"
			alt="An illustration that explains how the component description field within Figma can be used in order to list out the possible name aliases of a component."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      We can use the <a href='https://help.figma.com/hc/en-us/articles/7938814091287-Add-style-and-component-descriptions'>component description field</a> within Figma to list out possible name aliases of a component. (<a href='https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/1-component-description.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>The same approach can be applied to <strong>styles</strong> as well.</p>

<blockquote class="pull-quote">
  <p>
    <a class="pull-quote__link" aria-label="Share on Twitter" href="https://twitter.com/share?text=%0aThere%20is%20a%20likelihood%20that%20your%20developers%20are%20working%20from%20a%20more%20tokenized%20set%20of%20semantic%20styles%20in%20code,%20whereas%20the%20design%20team%20may%20need%20less%20abstract%20styles%20for%20the%20ideation%20process.%20This%20delta%20can%20be%20tricky%20to%20navigate%20from%20a%20Figma%20perspective%20because%20we%20may%20end%20up%20in%20a%20world%20where%20we%e2%80%99re%20maintaining%20two%20or%20more%20sources%20of%20truth.%20%0a&url=https://smashingmagazine.com%2f2023%2f12%2fbuilding-components-consumption-not-complexity-part2%2f">
      
There is a likelihood that your developers are working from a more tokenized set of semantic styles in code, whereas the design team may need less abstract styles for the ideation process. This delta can be tricky to navigate from a Figma perspective because we may end up in a world where we’re maintaining two or more sources of truth. 

    </a>
  </p>
  <div class="pull-quote__quotation">
    <div class="pull-quote__bg">
      <span class="pull-quote__symbol">“</span></div>
  </div>
</blockquote>

<p>The advice here is to split the quick styles for ideation and semantic variables into <strong>different sets</strong>. The semantic styles can be applied at the component level, whereas the raw styles can be used for developing new ideas.</p>

<p>As an example, <em>Brand/Primary</em> may be used as the border color of an active menu item in your design files because searching “brand” and “primary” may be muscle memory and more familiar than a semantic token name. Within the component, though, we want to be aliasing that token to something more semantic. For example, <code>border-active</code>.</p>

<p><strong>Note</strong>: <em>Some teams go to a further component level with their naming conventions. For example, this may become <code>header-nav-item-active</code>. It’s hyper-specific, meaning that any use outside of this “Header link” example may not make sense for collaborators looking through the design file.  Component-level tokens are an</em> <strong><em>optional</em></strong> <em>step in design systems. Be cautious, as introducing another layer to your token schema increases the amount of tokens you need to maintain.</em></p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/2-component-tokens.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="450"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/2-component-tokens.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/2-component-tokens.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/2-component-tokens.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/2-component-tokens.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/2-component-tokens.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/2-component-tokens.png"
			
			sizes="100vw"
			alt="An illustration that explains how the bottom border for a header link should be named. On the left, you see a component ‘Header link,’ the bottom border is highlighted, and there are three arrows going to the right into three separate boxes: ‘Style: quick reference,’ ‘Variable: production,’ and ‘Variable: component (optional).’"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      How should we name the bottom border for a header link? A quick reference style, a production variable, or a component variable? (<a href='https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/2-component-tokens.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>This means if we’re working on a new idea &mdash; for example, we have a set of tabs in a settings page, and the border color for the active tab at the ideation stage might be using <em>Brand/Primary</em> as the fill &mdash; when this component is contributed back to the system, we will apply the correct semantic token for its usage, our <code>border-active</code>.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/3-style-vs-variables.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="450"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/3-style-vs-variables.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/3-style-vs-variables.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/3-style-vs-variables.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/3-style-vs-variables.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/3-style-vs-variables.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/3-style-vs-variables.png"
			
			sizes="100vw"
			alt="An illustration that explains if we should support styles for ideation and variables for production components within the design systems. The two design stages are the ideation stage (using a style) and the production stage (using a variable)."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Can we support styles for ideation, and variables for production components within our systems? (<a href='https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/3-style-vs-variables.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Do note that this advice is probably best suited to large design teams where your contribution process is lengthier and requires the distinct separation of ideation and production or where you work on a more fixed versioning release cycle for your system. For most teams, a single set of semantic variables will be all you need. Variables make this process a lot easier because we can manage the properties of these separate tokens in a central location. But! This isn’t an article about tokens, so let’s move on.</p>

<div data-audience="non-subscriber" data-remove="true" class="feature-panel-container">

<aside class="feature-panel" style="">
<div class="feature-panel-left-col">

<div class="feature-panel-description"><p>Meet <strong><a data-instant href="/printed-books/typescript-in-50-lessons/">“TypeScript in 50 Lessons”</a></strong>, our shiny new guide to TypeScript. With detailed <strong>code walkthroughs</strong>, hands-on examples and common gotchas. For developers who know enough <strong>JavaScript</strong> to be dangerous.</p>
<a data-instant href="/printed-books/typescript-in-50-lessons/" class="btn btn--green btn--large" style="">Jump to table of contents&nbsp;↬</a></div>
</div>
<div class="feature-panel-right-col"><a data-instant href="/printed-books/typescript-in-50-lessons/" class="feature-panel-image-link">
<div class="feature-panel-image"><picture><source type="image/avif" srcSet="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2732dfe9-e1ee-41c3-871a-6252aeda741c/typescript-panel.avif" />
<img
    loading="lazy"
    decoding="async"
    class="feature-panel-image-img"
    src="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c2f2c6d6-4e85-449a-99f5-58bd053bc846/typescript-shop-cover-opt.png"
    alt="Feature Panel"
    width="481"
    height="698"
/>
</picture>
</div>
</a>
</div>
</aside>
</div>

<h3 id="community-building">Community-building</h3>

<p>A key pillar of a successful design system is advocacy across the PDE (product, design, and engineering) departments. We want people to be <em>excited</em>, not <em>burdened</em> by its rules. In order to get there, we need to build a community of internal design system advocates who champion the work being done and act as extensions of the central team. This may sound like unpaid support work, but I promise you it’s more than that.</p>

<p>Communicating constantly with designers taught me that with the popularity of design systems booming over the past few years, more and more of us are desperate to contribute to them. Have you ever seen a local component in a file that is remarkably similar to one that already exists? Maybe that designer wanted to scratch the itch of building something from the ground up. This is fine! We just need to encourage that more widely through a more open contribution model back to the central system.</p>

<p>How can the (central) systems team empower designers within the wider organization to build on top of the system foundations we create? What does that world look like for your team? This is commonly referred to as the “<a href="https://shinytoyrobots.substack.com/p/the-hub-and-spoke-design-system-model">hub and spoke</a>” model within design systems and can really help to accelerate interest in your system usage goals.</p>

<blockquote>“There are numerous inflection points during the evolution of a design system. Many of those occur for the same fundamental reason &mdash; it is impossible to scale a design system team enough to directly support every demand from an enterprise-scale business. The design system team will always be a bottleneck unless a structure can be built that empowers business units and product teams to support themselves. The hub and spoke (sometimes also called ‘core + federated’) model is the solution.”<br /><br />&mdash; Robin Cannon, “<a href="https://shinytoyrobots.substack.com/p/the-hub-and-spoke-design-system-model">The hub and spoke design system model</a>” (IBM)</blockquote>

<p>In simple terms, a community can be anything as small as a shared Slack/Teams channel for the design system all the way up to fortnightly hangouts or learning sessions. What we do here is help to foster an environment where discussion and shared knowledge are at the center of the system rather than being tacked on <em>after</em> the components have been released.</p>

<p>The team at <a href="https://www.youtube.com/watch?v=fx9AiDjdeYs">Zalando has developed a brilliant community</a> within the design team for their system. This is in the form of a sophisticated web portal, frequent learning and educational meetings, and encouraging an “open house” mindset. Apart from the custom-built portal, I believe this approach is an easy-to-reach target for most teams, regardless of size. A starting point for this would be something as simple as an open monthly meeting or office hours, run by those managing your system, with invites sent out to all designers and cross-functional partners involved in production: product managers, developers, copywriters, product marketers, and the list goes on.</p>

<p>For those looking for inspiration on how to run semi-regular design systems events, take a look at what the <a href="https://design-system.service.gov.uk/design-system-team/">Gov UK team</a> have started over on <a href="https://www.eventbrite.co.uk/o/govuk-design-system-team-33732303733">Eventbrite</a>. They have run a series of events ranging from accessibility deep dives all the way up to full “design system days.”</p>

<p>Leading with transparency is a solid technique for placing the design system as close as possible to those who use it. It can help to shift the mindset from being a siloed part of the design process to feeding all parts of the production pipeline for all key partners, regardless of whether you build it or use it.</p>

<p><p class="c-pre-sidenote--left">Back to advocacy! As we roll out this transparent and communicative approach to the system, we are well-placed to identify key allies across the product, design, and engineering team/teams that can help steward excellence within their own reach. Is there a product manager who loves picking apart the documentation on the system? Let’s help to position them as a trusted resource for documentation best practices! Or a developer that always manages to catch incorrect spacing token usage? How can we enable them to help others develop this critical eye during the <a href="https://uxdesign.cc/how-to-set-up-custom-design-linting-in-figma-using-the-design-lint-plugin-c435e2f8851b">linting process</a>?</p>
<p class="c-sidenote c-sidenote--right">This is the right place to mention <a href="https://uxdesign.cc/how-to-set-up-custom-design-linting-in-figma-using-the-design-lint-plugin-c435e2f8851b"><strong>Design Lint</strong></a>, a Figma plugin that I can only highly recommend. Design Lint will loop through layers you’ve selected to help you find possibly missing styles. When you write custom lint rules, you can check for errors like color styles being used in the wrong way, flag components that aren’t published to your library, mark components that don’t have a description, and more.</p> ￼</p>

<p>Each of these advocates for the system, spread across departments within the business, will help to ensure consistency and quality in the work being produced.</p>

<h3 id="over-communication">(Over)communication</h3>

<p>Closely linked to advocacy is the importance of regular, informative, and actionable communication. Examples of the various types of communication we might send are:</p>

<ul>
<li>Changelog/release notes.</li>
<li>Upcoming work.</li>
<li>System survey results. <em>(Example: “<a href="https://design.education.gov.uk/inside-design/maturity/results/september-2023">Design Maturity Results, Sep-2023</a>,” UK Department for Education.)</em></li>
<li>Resource sharing. Found something cool? Share it!</li>
<li>Hiring updates.</li>
<li>Small wins.</li>
</ul>

<p>That’s a lot! This is a good thing, as it means there is always something to share among the team to keep people close, engaged, and excited about the system. If your partners are struggling to see how important and central a design system is to the success of a product, this list should help push that conversation in the right direction.</p>

<p>I recommend trying to build a <em>pattern of regularity</em> with your communication to firstly build the habit of sharing and, secondly, to introduce formality and weight to the updates. You might also want to decide whether you look forward or backward with the updates, meaning at the start or end of a sprint if you work that way.</p>

<p>Or perhaps you can follow a pattern as the following one:</p>

<ul>
<li>Changelog/release notes are sent on the final day of every sprint.</li>
<li>“What’s next?” is shared at the start of a sprint.</li>
<li>Cool resources are shared mid-sprint to help inspire the team (and to provide a break between focus work sessions).</li>
<li>Small wins are shared quarterly.</li>
<li>Survey results are shared at the start of every second quarter.</li>
<li>Hiring updates are shared as they come up.</li>
</ul>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/4-community.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="450"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/4-community.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/4-community.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/4-community.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/4-community.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/4-community.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/4-community.png"
			
			sizes="100vw"
			alt="An illustration that shows what a sprint-long plan would look like for a design systems team’s community. Sprint days 1-10 are displayed on a timeline. At 1) there is ‘What’s next?’, at 5) there is ‘Resource sharing’, and at 10) there is ‘Changelog’."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      What would a sprint-long plan look like for a design systems team’s community? (<a href='https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/4-community.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Outside of the system, communication really does make or break the success of a project, so leading from the front ensures we’re doing everything we can.</p>

<div class="partners__lead-place"></div>

<h2 id="indexable">Indexable</h2>

<p>The biggest issue when building or maintaining a system is knowing how your components will be used (or not used). Of course, we will never know until we try it out (btw, this is also the best piece of design advice I’ve ever been given!), but we need to start somewhere.</p>

<p>Design systems should prioritize quality over speed. But product teams often work in “ship at all costs” mode, prioritizing speed over quality.</p>

<blockquote>“What do you do when a product team needs a UI component, pattern, or feature that the design system team cannot provide in time or is not part of their scope?”<br /><br />&mdash; Josh Clark, “<a href="https://bigmedium.com/ideas/design-system-pace-layers-slow-fast.html">Ship Faster by Building Design Systems Slower</a>”</blockquote>

<p>What this means is starting with real-world needs and problems. The likelihood when starting a system is that you will create all the form fields, then some navigational components, and maybe a few notification/alerts/callouts/notification components <em>(more on naming conventions later)</em> and then publish your library, hoping the team will use those components.</p>

<p>The harsh reality is, though, the following:</p>

<ul>
<li>Your team members aren’t aware of which components exist.</li>
<li>They don’t know what components are called yet.</li>
<li>There is no immediate understanding of how components are translated into code.</li>
<li>You’re building components without needing them yet.</li>
</ul>

<p>As you continue to sprint on your system, you will realize over time that more and more design work (user flows, feature work) is being pushed over to your product managers or developers without adhering to the wonderful design system you’ve been crafting. Why is that? It’s because people can’t <strong>discover</strong> your components! (Are they easily <strong>indexable</strong>?)</p>

<p>This is where the importance of education and communication comes into play. Whether it’s from design to development, design to copywriting, product to design, or brand to product, there is always a little bit more communication that can happen to ease these tensions within teams. Design Ops as a profession is growing in popularity amongst larger organizations for this very purpose &mdash; to better foster and facilitate communication channels not only amongst disparate design teams but also cross-functionally.</p>

<p><strong>Note</strong>: <em><a href="https://www.productplan.com/glossary/design-ops/">Design Ops</a> refers to the practice of integrating the design team’s workflow into the company’s broader development context. In practical terms, this means the design ops role is responsible for planning and managing the design team’s work and making sure that designers are collaborating effectively with product and engineering teams throughout the development process.</em></p>

<p>Back to discoverability! That communication layer could be introduced in a few ways, depending on how your team is structured. Using the channel within Slack or Teams (or whichever messaging tool you use) example from before, we can have a centralized communication channel about this very specific job &mdash; components.</p>

<p>Here’s an example message:</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/8-slack.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="450"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/8-slack.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/8-slack.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/8-slack.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/8-slack.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/8-slack.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/8-slack.png"
			
			sizes="100vw"
			alt="Screenshot of release notes, white box on a blue background, black font. The text in it says at the top: 17 September / v2.3, and then the notes follow: Added hover and pressed interactions to all atomic form components; The Growl component has been renamed to Toast; Moved styles from the main component file into a dedicated ‘Styles’ file; For everyone working on v2, don’t forget to accept these changes into your design files."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      What could release notes look like as a message within your chat software? (<a href='https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/8-slack.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Within this channel, the person/s responsible for the system is encouraged to frequently post updates with as much context as is humanly possible.</p>

<p>For example:</p>

<ul>
<li>What are you working on now?</li>
<li>What updates should we expect within the next day/week/month?</li>
<li>Who is working on what components?</li>
<li>How can the wider team support or contribute to this work?</li>
<li>Are there any blockers?</li>
</ul>

<p>Starting with these questions and answers in a public forum will encourage wider communication and understanding <em>around</em> the system to ultimately force a wider adoption of what’s being worked on and when.</p>

<p>Secondly, within the tools themselves, we can be over-the-top communicative whilst we create. Making heavy use of the version history feature within Figma, we can add very intentional timestamps on activity, spelling out exactly what is happening, when, and by whom. Going into the weeds here to effectively use that section of the file as mini-documentation can allow your collaborators (even those without a paid license!) to get as close to the work as possible.</p>

<p>Additionally, if you are using a branch-based workflow for component management, we encourage you to use the branch descriptions as a way to achieve a similar result.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/9-version.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="450"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/9-version.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/9-version.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/9-version.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/9-version.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/9-version.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/9-version.png"
			
			sizes="100vw"
			alt="A screenshot that shows branches for component updates. The example shows ‘Version history’ at the top, and below, details about ‘Current version’ are shown."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Branches for component updates promote a much richer timestamp on work that has been completed. (<a href='https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/9-version.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p><strong>Note</strong>: <em>If you are investigating a branch workflow within a large design organization, I recommend using them for smaller fixes or updates and for larger “major” releases to create new files. This will allow for a future world where one set of designers needs to work on v1, whereas others use v2.</em></p>

<h3 id="naming-conventions-1">Naming Conventions</h3>

<p>Undoubtedly, the hardest part of design system work is naming things. What I call a <em>dropdown</em>, you may call a <em>select</em>, and someone else may call an <em>option list</em>. This makes it extremely difficult to align an entire team and encourage one way of naming anything.</p>

<p>However, there are techniques we can employ to ensure that we’re serving the largest number of users of our system as possible. Whether it’s using Figma features or working closer with our development team, there is a world in which people can find the components they need and when they need them.</p>

<p>I’m personally a big fan of prioritizing discoverability over complexity at every stage of design, from how we name our components to frames to entire files. What this means is that, more often than not, we’re better off introducing <em>verbosity</em>, rather than trying to make everything as concise as possible.</p>

<p>This is probably best served with an example!</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/10-dropdown.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="450"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/10-dropdown.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/10-dropdown.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/10-dropdown.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/10-dropdown.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/10-dropdown.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/10-dropdown.png"
			
			sizes="100vw"
			alt="A screenshot of a dropdown menu design, with the menu items in it being: ‘Import’, ‘Export’, and ‘Share’."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Is it a dropdown? (<a href='https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/10-dropdown.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>What would you call this component?</p>

<ul>
<li>Dropdown.</li>
<li>Popover.</li>
<li>Actions.</li>
<li>Modal.</li>
<li>Something else?</li>
</ul>

<p>Of course, context is very important when naming anything, which is why the task is so hard. We are currently unaware of how this component will be used, so let’s introduce a little bit of context to the situation.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/11-dropdown-context.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="450"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/11-dropdown-context.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/11-dropdown-context.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/11-dropdown-context.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/11-dropdown-context.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/11-dropdown-context.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/11-dropdown-context.png"
			
			sizes="100vw"
			alt="A screenshot of the same dropdown menu, with the menu items in it being: ‘Import’, ‘Export’, and ‘Share’, but now the dropdown menu is connected to a three-dots icon (similar to the popular ‘hamburger menu icon’ interaction), and to the left of it there is a search field with the words ‘Website variables’ displayed in it as the value."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Is it still a dropdown? (<a href='https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/11-dropdown-context.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Has your answer changed? The way I look at this component is that, although the structure is quite generic &mdash; rounded card, inner list with icons &mdash; the usage is very specific. This is to be used on a search filter to provide the user with a set of actions that they can carry out on the results. You may:</p>

<ol>
<li>Import a predefined search query.</li>
<li>Export your existing search query.</li>
<li>Share your search query.</li>
</ol>

<p>For this reason, why would we not call this something like <em>search actions</em>? This is a simplistic example (and doesn’t account for the many other areas of the product that this component could be used), but maybe that’s okay. As we build and mature our system, we will always hit walls where one component needs to &mdash; or can be &mdash; used in many other places. It’s at <em>this time</em> that we make decisions about scalability, not before we have usage.</p>

<p>Other options for this specific component could be:</p>

<ul>
<li>Action list.</li>
<li>Search dropdown.</li>
<li>Search / Popover.</li>
<li>Filter menu.</li>
</ul>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/12-docs.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="450"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/12-docs.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/12-docs.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/12-docs.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/12-docs.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/12-docs.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/12-docs.png"
			
			sizes="100vw"
			alt="The component description field again is somewhere we can add alias names for discoverability for the previously shown dropdown component, now named “search actions”."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      The component description field again is the place where we can add alias names for discoverability. (<a href='https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/12-docs.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h2 id="logical">Logical</h2>

<p>Have you ever been in a situation where you searched for a component in the Figma Assets panel and not been sure of its purpose? Or have you been unsure of the customization possible within its settings? We all have!</p>

<p>I tend to find that this is the result of us (as design systems maintainers) <em>optimizing for creation</em> and <em>not usage</em>. This is so important, so I’ll say it again:</p>

<p>We tend to optimize for <em>the people building the system</em>, not for the people <em>using</em> it.</p>

<p>The consumers/users of a system will always far outweigh the people managing it. They will also be further away from the decisions that went into making the component and the reasons behind why it is built the way it is.</p>

<p>Here are a few hypothetical questions worth thinking through:</p>

<ul>
<li>Why is this component called a <em>navbar</em>, and not a <em>tab-bar</em>?</li>
<li>Why does it have four tabs by default and not three, like the production app?</li>
<li>There’s only one <em>navbar</em> in the assets list, but we support many products. Where are the others?</li>
<li>How do I use the dark mode version of this component?</li>
<li>I need a tablet version of the table component. Should I modify this one, or do we have an alternative version ready to be used?</li>
</ul>

<p>These may seem like familiar questions to you. And if not, congratulations, you’re doing a great job!</p>

<p>Figma makes it <a href="https://help.figma.com/hc/en-us/articles/8883756012823-Create-and-manage-component-properties">easy to build complexity into components</a>, arguably <em>too</em> easy. I’m sure you’ve found yourself in a situation where you create a component set with too many permutations or ended up in a world where the properties applied to a component turn the component properties panel into what I like to call “prop soup.”</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/5-prop-soup.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="450"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/5-prop-soup.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/5-prop-soup.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/5-prop-soup.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/5-prop-soup.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/5-prop-soup.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/5-prop-soup.png"
			
			sizes="100vw"
			alt="An illustration that shows a component that has too many properties available in the component properties panel."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Too many properties = prop soup! (<a href='https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/5-prop-soup.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>A good design system should be <strong>logical</strong> (<strong>usable</strong>). To me, usability means:</p>

<ol>
<li>Speed of discovery, and</li>
<li>Efficient implementation of components.</li>
</ol>

<p>The speed of discovery and the efficient implementation of components can &mdash; brace yourself! &mdash; sometimes mean <em>repetition</em>. That very much goes against our goals of a <em>don’t repeat yourself</em> system and will horrify those of you who yearn for a world in which consolidation is a core design system principle but bear with me for a bit more.</p>

<p>The canvas is a place for ideation and flexibility and a place where we need to encourage the fostering of new ideas fast. What <em>isn’t</em> fast is a confused designer. As design system builders, we then need to work in a world where components are customizable but only after being understood. And what is not easily understandable is a component with an infinite number of customization options and a generic name. What <em>is</em> understandable is a compact, descriptive, and lightweight component.</p>

<p>Let’s take an example. Who doesn’t love… buttons? (I don’t, but this atomic example is the simplest way to communicate our problem.)</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/6-states.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="450"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/6-states.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/6-states.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/6-states.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/6-states.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/6-states.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/6-states.png"
			
			sizes="100vw"
			alt="A complex table that shows one component variant button which has four intentions (primary, secondary, error, warning), two types (fill/stroke), three sizes (large, medium, small, and four states (default, hover, focus, inactive)."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      One component variant button with four intentions, two types, three sizes, and four states. With so many customization options, is there trouble ahead? (<a href='https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/6-states.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Here, we have one component variant button with:</p>

<ul>
<li>Four <strong>intentions</strong> (primary, secondary, error, warning);</li>
<li>Two <strong>types</strong> (fill, stroke);</li>
<li>Three different <strong>sizes</strong> (large, medium, small);</li>
<li>And four <strong>states</strong> (default, hover, focus, inactive).</li>
</ul>

<p>Even while listing those out, we can see a problem. The easy way to think this through is by asking yourself, “Is a designer likely to need all of these options when it comes to usage?”</p>

<p>With this example, it might look like the following question: “Will a designer ever need to switch between a primary button and a warning one?” Or are they actually two separate use cases and, therefore <strong>two</strong> separate components?</p>

<p>To probably no one’s surprise, my preference is to split that component right down into its intended usage. That would then mean we have one variant for each component type:</p>

<ol>
<li>Primary,</li>
<li>Secondary,</li>
<li>Error (Destructive),</li>
<li>Warning.</li>
</ol>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/7-split.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="450"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/7-split.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/7-split.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/7-split.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/7-split.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/7-split.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/7-split.png"
			
			sizes="100vw"
			alt="An illustration that shows a series of separate button variant components, split by type: primary, secondary, error, warning. Here, we no longer need one component that would encompass all the button variants (sub-divided into intentions, types, sizes, and states), like it was shown in the previous illustration."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      A series of four separate button variant components, split by each type: primary, secondary, error, warning. (<a href='https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/7-split.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Four components for one button! Yes, that’s right, and there are two huge benefits if you decide to go this way:</p>

<ol>
<li>The Assets panel becomes easier to navigate, with each primary variant within each set being visually surfaced.</li>
<li>The designer removes one decision from component usage: what type to use.</li>
</ol>

<p>Let’s help set our (design) teams up for success by removing decisions! The design was intentionally placed within brackets there because, as you’re probably rightly thinking, we lose parity with our coded components here. You know what? I think that’s totally fine. Documentation and component handover happen once with every component, and it doesn’t mean we need to sacrifice usability within the design to satisfy the front-end framework <a href="https://en.wikipedia.org/wiki/Composability">composability</a>. Documentation is still a vital part of a design system, and we can communicate component permutations in a method that meets design and development in the middle.</p>

<h3 id="auto-layout">Auto Layout</h3>

<p>Component usability is also heavily informed by the decision to use <a href="https://help.figma.com/hc/en-us/articles/5731482952599-Using-auto-layout">auto layout</a> or not. It can be hard to grapple with, but my advice here is to go <em>all in</em> on using auto layout. Not only does it help to remove the need for eyeballing measurements within production designs, but it also helps remove the burden of spacing for non-design partners. If your copywriter needs to edit a line of text within a component, they can feel comfortable doing so with the knowledge that the surrounding content will flow and not “break” the design.</p>

<p><strong>Note</strong>: <em>Using padding and gap variables within main components can remove the “Is the spacing correct?” question from component composition.</em></p>

<p>Auto layout also provides us with some guardrails with regard to spacing and margins. We strive for consistency within systems, and using auto layout everywhere pushes us as far as possible in that direction.</p>

<div class="partners__lead-place"></div>

<h2 id="specific">Specific</h2>

<p>We touched on this in the “usable” section, but naming conventions are so important for ensuring the discoverability and adoption of components within a system.</p>

<p>The more specific we can make components, the more likely they are to be used in the <em>right</em> place. Again, this may mean introducing inefficiencies within the system, but I strongly believe that efficiency is a long-term play and something we reach gradually over time. This means being <em>incredibly inefficient</em> in the short term and being okay with that!</p>

<p>Specific to me means calling a <em>header</em> a <em>header</em>, a <em>filter</em> a <em>filter</em>, and a <em>search field</em> a <em>search field</em>. Doesn’t it seem obvious? You’re right. It <em>seems</em> obvious, but if my Twitter “<a href="https://twitter.com/disco_lu/status/1540278986948968448?s=20">name that component</a>” game has taught me anything, it’s that naming components is hard.</p>

<p>Let’s take our <em>search field</em> example.</p>

<ul>
<li>Apple’s <a href="https://developer.apple.com/design/human-interface-guidelines/search-fields">Human Interface Guidelines</a> call it a “search field.”</li>
<li>Material Design calls it a “search bar.”</li>
<li>Microsoft Fluent 2 doesn’t have a search field. Instead, it has a “combobox” component with a typeahead search function.</li>
</ul>

<p>Sure, the intentions may be different between a combobox and a search field or a search bar, but does your designer or developer know about these subtle nuances? Are they aware of the different use cases when searching for a component to use? <strong>Specificity</strong> here is the sharpest way for us to remove these questions and ensure efficiency within the system.</p>

<p>As I said before, this may mean that we end up performing <em>inefficient</em> activities within the system. For example, instead of bundling <em>combobox</em> and <em>search</em> into <strong>one</strong> component set with <a href="https://english.stackexchange.com/questions/232774/is-it-togglable-or-toggleable">toggl</a><a href="https://english.stackexchange.com/questions/232774/is-it-togglable-or-toggleable">e-</a><a href="https://english.stackexchange.com/questions/232774/is-it-togglable-or-toggleable">able</a> settings, we should <strong>split</strong> them. This means searching for “search” in Figma would provide us with the only component we need, rather than having to think ahead if our <em>combobox</em> component can be customized to our needs (or not).</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/13-split.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="450"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/13-split.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/13-split.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/13-split.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/13-split.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/13-split.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/13-split.png"
			
			sizes="100vw"
			alt="An illustration that shows how a single component is then split into two separate components: one of the components is labeled ‘Search’ and the other one ‘Combobox’."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      A single search variant component split into two main components, one for each distinct type: Search and Combobox. (<a href='https://files.smashing.media/articles/building-components-consumption-not-complexity-part2/13-split.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h2 id="conclusion">Conclusion</h2>

<p>It was a long journey! I hope that throughout the past ten thousand words or so, you’ve managed to extract quite a few useful bits of information and advice, and you can now tackle your design systems within Figma in a way that <em>increases</em> the likelihood of adoption. As we know, this is right up there with the priorities of most design systems teams, and I firmly believe that following the principles laid out in this article will help you (as maintainers) sprint towards a path of more funding, more refined components, and happier team members.</p>

<p>And should you need some help or if you have questions, ask me in the comments below, or ping me on <a href="https://twitter.com/disco_lu">Twitter</a>/<a href="https://mastodon.social/@Disco_lu">Posts/Mastodon</a>, and I’ll be more than happy to reply.</p>

<h3 id="further-reading">Further Reading</h3>

<ul>
<li>“<a href="https://www.youtube.com/watch?v=lEccln75Q7U">Driving change with design systems and process</a>,” Matt Gottschalk and Aletheia Délivré <em>(Config 2023)</em><br />
The conference talk explores in detail how small design teams can use design systems and design operations to help designers have the right environment for them.</li>
<li><a href="https://gestalt.pinterest.systems/blog/2023_q2_newsletter">Gestalt 2023 &mdash; Q2 newsletter</a><br />
In this article article, you will learn about the design systems roadmaps (from the Pinterest team).</li>
<li>“<a href="https://github.com/sturobson/Awesome-Design-Tokens">Awesome Design Tokens</a>”<br />
A project that hosts a large collection of design token-related articles and links, such as GitHub repositories, articles, tools, Figma and Sketch plugins, and many other resources.</li>
<li>“<a href="https://blog.damato.design/posts/ondark-virus/">The Ondark Virus</a>” <em>(D’Amato Design blog)</em><br />
An important article about naming conventions within design tokens.</li>
<li>“<a href="https://www.redhat.com/en/topics/api/what-are-application-programming-interfaces">API?</a>” <em>(RedHat Help)</em><br />
This article will explain in detail how APIs (Application Programming Interface) work, what the SOAP vs. REST protocols are, and more.</li>
<li>“<a href="https://alistapart.com/article/responsive-web-design/">Responsive Web Design</a>,” by Ethan Marcotte <em>(A List Apart)</em><br />
This is an old (but gold) article that set the de-facto standards in responsive web design (RWD).</li>
<li>“<a href="https://www.figma.com/community/file/1158765244991590065/simple-design-system-structure">Simple design system structure</a>” (FigJam file, by <a href="https://www.figma.com/@disco_lu">Luis Ouriach</a> &mdash; <a href="https://creativecommons.org/licenses/by/4.0/">CC-BY</a> license)<br />
For when you need to get started!</li>
<li>“<a href="https://www.figma.com/community/file/1110928859206538912/fixed-aspect-ratio-images-with-variants">Fixed aspect ratio images with variants</a>” (Figma file, by <a href="https://www.figma.com/@disco_lu">Luis Ouriach</a> &mdash; <a href="https://creativecommons.org/licenses/by/4.0/">CC-BY</a> license)<br />
Aspect ratios are hard with image fills, so the trick to making them work is to define your breakpoints and create variants for each image. As the image dimensions are fixed, you will have much more flexibility &mdash; you can drag the components into your designs and use auto layout.</li>
<li><a href="https://github.com/BuilderIO/mitosis">Mitosis</a><br />
Write components once, run everywhere; compiles to React, Vue, Qwik, Solid, Angular, Svelte, and others.</li>
<li>“<a href="https://blog.logrocket.com/creating-reusable-components-mitosis-builder-io/">Create reusable components with Mitosis and Builder.io</a>,” by Alex Merced<br />
A tutorial about Mitosis, a powerful tool that can compile code to standard JavaScript in addition to frameworks and libraries like Angular, React, and Vue, allowing you to create reusable components.</li>
<li>“<a href="http://Slots">VueJS &mdash; Component Slots</a>” <em>(Vue documentation)</em><br />
Components can accept properties (which can be JavaScript values of any type), but how about template content?</li>
<li>“<a href="https://css-tricks.com/magic-numbers-in-css/">Magic Numbers in CSS</a>,” by Chris Coyier <em>(CSS Tricks)</em><br />
In CSS, magic numbers refer to values that work under some circumstances but are frail and prone to break when those circumstances change. The article will take a look at some examples so that you know what they are and how to avoid the issues related to their use.</li>
<li>“<a href="https://www.youtube.com/watch?v=EA0NbEOrpuo">Figma component properties</a>” <em>(Figma, YouTube)</em><br />
In this quick video tip, you’ll learn what component properties are and how to create them.</li>
<li>“<a href="https://help.figma.com/hc/en-us/articles/8883756012823-Create-and-manage-component-properties">Create and manage component properties</a>” <em>(Figma Help)</em><br />
New to component properties? Learn how component properties work by exploring the different types, preferred values, and exposed nested instances.</li>
<li>“<a href="https://help.figma.com/hc/en-us/articles/5731482952599-Using-auto-layout">Using auto layout</a>” <em>(Figma Help)</em><br />
Master auto layout by exploring its properties, including resizing, direction, absolute position, and a few others.</li>
<li>“<a href="https://help.figma.com/hc/en-us/articles/7938814091287-Add-style-and-component-descriptions#add-component-descriptions">Add descriptions to styles, components, and variables</a>” <em>(Figma Help)</em><br />
There are a few ways to incorporate design system documentation in your Figma libraries. You can give styles, components, and variables meaningful names; you can add short descriptions to styles, components, and variables; you can add links to external documentation to components; and you can add descriptions to library updates.</li>
<li>“<a href="https://bradfrost.com/blog/post/design-system-components-recipes-and-snowflakes/">Design system components, recipes, and snowflakes</a>,” by Brad Frost<br />
Creating things with a component-based mindset right from the start saves countless hours. Everything is/should be a component!</li>
<li>“<a href="https://www.ibm.com/topics/digital-asset-management">What is digital asset management?</a>” <em>(IBM)</em><br />
A digital asset management solution provides a systematic approach to efficiently storing, organizing, managing, retrieving, and distributing an organization’s digital assets.</li>
<li>”<a href="https://developer.apple.com/design/human-interface-guidelines/search-fields">Search fields (Components)</a>” <em>(Apple Developer)</em><br />
A search field lets people search a collection of content for specific terms they enter.</li>
<li>“<a href="https://m3.material.io/components/search/overview">Search &mdash; Components Overview</a>” <em>(Material Design 3)</em><br />
Search lets people enter a keyword or phrase to get relevant information.</li>
<li>“<a href="https://fluent2.microsoft.design/components/web/react/combobox/usage">Combobox &mdash; Components</a>” <em>(Fluent 2)</em><br />
A combobox lets people choose one or more options from a list or enter text in a connected input; entering text will filter options or allow someone to submit a free-form answer.</li>
<li>“<a href="https://medium.com/ithaka-tech/pharos-jstors-design-system-for-the-intellectually-curious-9c4f21b956a8">Pharos: JSTOR’s design system serving the intellectually curious</a>” <em>(JSTOR)</em><br />
Building a design system from the ground up &mdash; a detailed account written by the JSTOR team.</li>
<li>“<a href="https://www.designsystems.com/design-systems-are-everybodys-business/">Design systems are everybody’s business</a>,” by Alex Nicholls <em>(Director of Design at Workday)</em><br />
This is Part 1 in a three-part series that takes a deep dive into Workday’s experience of developing and releasing their design system out into the open. For the next parts, check Part II, <a href="https://www.designsystems.com/productizing-your-design-system/">“Productizing your design system</a>,” and Part III, “<a href="https://www.designsystems.com/the-case-for-an-open-design-system/">The case for an open design system</a>.”</li>
<li>“<a href="https://design.education.gov.uk/inside-design/maturity/results/september-2023">Design maturity results ‘23</a>,” <em>(UK Dept. for Education)</em><br />
The results of the design maturity survey carried out in the Department for Education (UK), September 2023.</li>
<li>“<a href="https://design.education.gov.uk/">Design Guidance and Standards</a>,” <em>(UK Dept. for Education)</em><br />
Design principles, guidance, and standards to support people who use the Department for Education services (UK).</li>
<li>“<a href="https://designsystemssurvey.sparkbox.com/2022/#section-4">Sparkbox’s Design Systems Survey, 2022 (5th edition)</a>”<br />
The top three biggest challenges faced by design teams: are overcoming technical/creative debt, parity between design &amp; code, and adoption. This article reviews in detail the survey results; 183 respondents maintaining design systems have responded.</li>
<li>“<a href="https://shinytoyrobots.substack.com/p/the-hub-and-spoke-design-system-model">The hub and spoke design system model</a>,” by Robin Cannon <em>(IBM)</em><br />
No design system team can scale enough to support an enterprise-scale business by itself. This article sheds some light on IBM’s hub and spoke model.</li>
<li>“<a href="https://www.youtube.com/watch?v=fx9AiDjdeYs">Building a design system around collaboration, not components</a>” <em>(Figma, YouTube)</em><br />
It’s easy to focus your design system on the perfect component, missing out on the aspect that’ll ensure your success &mdash; collaboration. Louise From and Julia Belling (from <a href="https://en.zalando.de/">Zalando</a>) explain how they created and then scaled effectively their internal design system.</li>
<li>“<a href="https://www.youtube.com/@friendsoffigmadesignops4765/featured">Friends of Figma, DesignOps</a>” <em>(YouTube interest group)</em><br />
This group is about practices and resources that will help your design organization to grow. The core topics are centered around the standardization of design, design growth, design culture, knowledge management, and processes.</li>
<li>“<a href="https://medium.com/sketch-app-sources/linting-meets-design-f4c3e49fe71">Linting meets Design</a>,” by Konstantin Demblin <em>(George Labs)</em><br />
The author is convinced that the concept of “design linting” (in Sketch) is groundbreaking for digital design and will remain state-of-the-art for a long time.</li>
<li>“<a href="https://uxdesign.cc/how-to-set-up-custom-design-linting-in-figma-using-the-design-lint-plugin-c435e2f8851b">How to set up custom design linting in Figma using the Design Lint plugin</a>,” by Daniel Destefanis <em>(Product Design Manager at Discord)</em><br />
This is an article about Design Lint &mdash; a Figma plugin that loops through layers you’ve selected to help you find missing styles. You can check for errors such as color styles being used in the wrong way, flag components that aren’t published to your library, mark components that don’t have a description, and so on.</li>
<li>“<a href="https://twitter.com/brad_frost/status/1729614882796962128">Design Systems and Speed</a>,” by Brad Frost<br />
In this Twitter thread, Brad discusses the seemingly paradoxical relationship between design systems and speed. Design systems make the product work faster. At the same time, do design systems also need to go slower?</li>
<li>“<a href="https://bigmedium.com/ideas/design-system-pace-layers-slow-fast.html">Ship Faster by Building Design Systems Slower</a>,” by Josh Clark <em>(Principal, Big Medium)</em><br />
Design systems should prioritize quality over speed, but product teams often have “ship at all costs” policies, prioritizing speed over quality. Actually, successful design systems move more slowly than the products they support, and the slower pace doesn’t mean that they have to be the bottleneck in the process.</li>
<li><a href="https://www.smashingmagazine.com/design-systems-book/"><em>Design Systems</em></a>, a book by Alla Kholmatova <em>(Smashing Magazine)</em><br />
Often, our design systems get out-of-date too quickly or just don’t get enough traction in our companies. What makes a design system effective? What works and what doesn’t work in real-life products? The book is aimed mainly at small to medium-sized product teams trying to integrate modular thinking into their organization’s culture. Visual and interaction designers, UX practitioners, and front-end developers particularly, will benefit from the knowledge in this book.</li>
<li>“<a href="https://www.smashingmagazine.com/2023/01/sharing-components-designers-developers-collaboration-problems/">Making Your Collaboration Problems Go Away By Sharing Components</a>,” by Shane Hudson <em>(Smashing Magazine)</em><br />
Recently UXPin has extended its powerful Merge technology by adding npm integration, allowing designers to sync React component libraries without requiring any developer input.</li>
<li>“<a href="https://www.smashingmagazine.com/2022/12/taking-stress-out-design-system-management/">Taking The Stress Out Of Design System Management</a>,” by Masha Shaposhnikova <em>(Smashing Magazine)</em><br />
In this article, the author goes over five tips that make it easier to manage a design system while increasing its effectiveness. This guide is aimed at smaller teams.</li>
<li>“<a href="https://www.smashingmagazine.com/2022/04/artifacts-design-systems/">Around The Artifacts Of Design Systems (Case Study)</a>,” by Dan Donald <em>(Smashing Magazine)</em><br />
Like many things, a design system isn’t ever a finished thing but a journey. How we go about that journey can affect the things we produce along the way. Before diving in and starting to plan anything out, be clear about where the benefits and the risks might lie.</li>
<li>“<a href="https://www.smashingmagazine.com/2022/11/design-systems-inspiration-resources-case-studies/">Design Systems: Useful Examples and Resources</a>,” by Cosima Mielke <em>(Smashing Magazine)</em><br />
In complex projects, you’ll sooner or later get to the point where you start to think about setting up a design system. In this article, some interesting design systems and their features will be explored, as well as useful resources for building a successful design system.</li>
</ul>

<div class="signature">
  <img src="https://www.smashingmagazine.com/images/logo/logo--red.png" alt="Smashing Editorial" width="35" height="46" loading="lazy" decoding="async" />
  <span>(mb, yk)</span>
</div>


              </article>
            </body>
          </html>
        ]]></content:encoded></item><item><author>Luis Ouriach</author><title>Building Components For Consumption, Not Complexity (Part 1)</title><link>https://www.smashingmagazine.com/2023/12/building-components-consumption-not-complexity-part1/</link><pubDate>Mon, 11 Dec 2023 21:00:00 +0000</pubDate><guid>https://www.smashingmagazine.com/2023/12/building-components-consumption-not-complexity-part1/</guid><description>Design systems can be of immense help, but failure to adopt them invalidates the hard work that goes into building the thing in the first place! In this two-part series of articles, Luis shares his experience with design systems and how you can overcome the potential pitfalls, starting from how to make designers on your team adopt the complex and well-built system that you created to what are the best naming conventions and how to handle the auto-layout of components, indexing/search, and more.</description><content:encoded><![CDATA[
          <html>
            <head>
              <meta charset="utf-8">
              <link rel="canonical" href="https://www.smashingmagazine.com/2023/12/building-components-consumption-not-complexity-part1/" />
              <title>Building Components For Consumption, Not Complexity (Part 1)</title>
            </head>
            <body>
              <article>
                <header>
                  <h1>Building Components For Consumption, Not Complexity (Part 1)</h1>
                  
                    
                    <address>Luis Ouriach</address>
                  
                  <time datetime="2023-12-11T21:00:00&#43;00:00" class="op-published">2023-12-11T21:00:00+00:00</time>
                  <time datetime="2023-12-11T21:00:00&#43;00:00" class="op-modified">2026-02-09T03:03:08+00:00</time>
                </header>
                
                

<p>Design systems are on the tip of every designer’s tongue, but the narrative in the industry mainly focuses on <em>why</em> you need a design system and its importance rather than the reality of <em>endless maintenance</em> and internal politics. The truth is that design teams spend years creating these systems only to find out that few people adhere to the guidelines or stay within the “guardrails.”</p>

<p>I’ve been fortunate with Figma to host and run workshops at various conferences across Europe that center on one very specific aspect of product design: components.</p>

<p>I love components! They are the start, the end, the hair-tearing-out middle, the “building blocks,” and the foundation &mdash; the <em>everything</em> within every great product design organization.</p>

<p>The reason they are so important to me is because, firstly, who doesn’t like efficiency? Second, and more importantly, they are proven to increase the time-to-delivery from design to engineering, and here comes a buzzword &mdash; they offer a route to return on investment (ROI) within design teams. This is becoming increasingly important in a tough hiring market. So what’s not to love?</p>

<p><strong>Note</strong>: <em>You may be interested in watching <a href="https://www.youtube.com/watch?v=lEccln75Q7U">Matt Gottschalk’s talk</a> from Figma’s Config 2023 conference, which was dedicated to the topic of ROI within small design teams. The talk explored how small design teams can use design systems and design operations to help designers have the right environment for them to deliver better, more impactful results.</em></p>


<figure class="video-embed-container break-out">
  <div
  
  class="video-embed-container--wrapper">
		<lite-youtube
			videoid="lEccln75Q7U"
      
			videotitle="“&lt;a href=&#39;https://www.youtube.com/watch?v=lEccln75Q7U&#39;&gt;Driving change with design systems and process.&lt;/a&gt;” (YouTube recording of Matt Gottschalk and Aletheia Délivré talks at Figma Config 2023.)"
		></lite-youtube>
	</div>
	
		<figcaption>“<a href='https://www.youtube.com/watch?v=lEccln75Q7U'>Driving change with design systems and process.</a>” (YouTube recording of Matt Gottschalk and Aletheia Délivré talks at Figma Config 2023.)</figcaption>
	
</figure>

<p>Well, let me tell you a little secret: components are <em>hard</em>, but not actually hard to create. In fact, it’s arguably <em>too easy</em> to create a component on the design side. Have you ever seen a local component in your design files, one that a member of your team created to speed up their ideation and workflow? And speaking of speed…</p>

<blockquote>“It’s a signature trait of design system teams to believe they’re moving too slow and must move faster. Actually, successful design systems move more slowly than the products they support.”<br /><br />&mdash; Josh Clark, “<a href="https://bigmedium.com/ideas/design-system-pace-layers-slow-fast.html">Ship Faster by Building Design Systems Slower</a>”</blockquote>

<p>There’s nothing stopping anyone from creating more components outside of your design system whenever they want. Nothing even stops people from creating components that are identical to the ones you <em>already</em> have! Don’t worry, we’ve all been there.</p>

<blockquote class="pull-quote">
  <p>
    <a class="pull-quote__link" aria-label="Share on Twitter" href="https://twitter.com/share?text=%0aThe%20ease%20at%20which%20we%20can%20create%20components%20contrasts%20a%20lot%20with%20the%20difficulty%20of%20creating%20a%20%e2%80%9cgood%20component.%e2%80%9d%20The%20word%20%e2%80%9cgood%e2%80%9d%20is%20subjective,%20and%20that%e2%80%99s%20exactly%20my%20point:%20every%20organization%20has%20different%20requirements,%20many%20design%20teams%20struggle%20to%20align%20on%20naming%20conventions%20even%20for%20the%20simplest%20of%20components,%20and%20most%20engineering%20teams%20work%20in%20slightly%20different%20ways.%0a&url=https://smashingmagazine.com%2f2023%2f12%2fbuilding-components-consumption-not-complexity-part1%2f">
      
The ease at which we can create components contrasts a lot with the difficulty of creating a “good component.” The word “good” is subjective, and that’s exactly my point: every organization has different requirements, many design teams struggle to align on naming conventions even for the simplest of components, and most engineering teams work in slightly different ways.

    </a>
  </p>
  <div class="pull-quote__quotation">
    <div class="pull-quote__bg">
      <span class="pull-quote__symbol">“</span></div>
  </div>
</blockquote>

<p>I would personally prefer not to use phrasings such as “good” or “bad” components because, as curious creatives, we all know that there’s no such thing as “one size fits them all” when it comes to design. That beautiful user interface kit you paid $99 for? It wasn’t designed for your business, so you have to recreate or manipulate a lot of the work to make it fit. That glorious ReactJS calendar widget your engineers found? It turns out it’s not accessible within screen readers, and you have to remodel it and then go through another round of quality assurance (QA) testing anyway.</p>

<p>Components are inherently part of a system that spans design and engineering &mdash; and often brand and marketing, too. We, as designers, are seemingly on a mission to call this a design system, but I’d much prefer for us as an industry to steer away from applying the word “design” to activities that are <em>cross-functional</em> by nature. It will improve collaboration and help to foster a culture of shared responsibility. It’s important to remind ourselves that everyone is a problem solver, regardless of job title! Maybe we could agree to call them simply… systems? (Let’s maybe not argue over that just yet; we’ve only just begun.)</p>

<p>As proof of this, a designer can help craft an <a href="https://www.redhat.com/en/topics/api/what-are-application-programming-interfaces">API</a> (application programming interface) structure, and an engineer can help fine-tune a user flow for a complex form. This is collaboration in its purest form and something we shouldn’t try to make harder by applying one discipline’s area as a stamp on cross-functional output.</p>

<p>Additionally, with the inherent flexibility of our design tools, we’re often setting ourselves up for failure with our creations.</p>

<p>Ultimately, all we want are components which are:</p>

<ul>
<li><strong>F</strong>lexible,</li>
<li><strong>R</strong>epeatable,</li>
<li><strong>A</strong>doptable,</li>
<li><strong>I</strong>ndexable,</li>
<li><strong>L</strong>ogical,</li>
<li><strong>S</strong>pecific.</li>
</ul>

<p>For now, let’s call this the <strong>FRAILS</strong> framework.</p>

<p><strong>Note</strong>: You’re probably thinking: “flexible” <em>and</em> “specific,” aren’t they a bit conflicting? And you’d be kind of right. However, this is one of the goals of almost every design team I’ve spoken to. There is a world where both flexible and specific can live side by side, but the challenge we face is the need to decide on a model of a system that is either flexible or rigid or lives in a “halfway house.” <em>(I’ll explain a little later how we can tackle either of these approaches.)</em></p>

<p>In this article (Part 1), we’ll take the first two points, <strong>Flexible</strong> and <strong>Repeatable</strong>, and we will look at building systems with these goals in mind. Ready? Let’s go.</p>

<div data-audience="non-subscriber" data-remove="true" class="feature-panel-container">

<aside class="feature-panel" style="">
<div class="feature-panel-left-col">

<div class="feature-panel-description"><p><p>Meet <a data-instant href="/the-smashing-newsletter/"><strong>Smashing Email Newsletter</strong></a> with useful tips on front-end, design &amp; UX. Subscribe and <strong>get “Smart Interface Design Checklists”</strong> &mdash; a <strong>free PDF deck</strong> with 150+ questions to ask yourself when designing and building almost <em>anything</em>.</p><div><section class="nlbf"><form action="//smashingmagazine.us1.list-manage.com/subscribe/post?u=16b832d9ad4b28edf261f34df&amp;id=a1666656e0" method="post"><div class="nlbwrapper"><label for="mce-EMAIL-hp" class="sr-only">Your (smashing) email</label><div class="nlbgroup"><input type="email" name="EMAIL" class="nlbf-email" id="mce-EMAIL-hp" placeholder="Your email">
<input type="submit" value="Meow!" name="subscribe" class="nlbf-button"></div></div></form><style>.c-garfield-the-cat .nlbwrapper{margin-bottom: 0;}.nlbf{display:flex;padding-bottom:.25em;padding-top:.5em;text-align:center;letter-spacing:-.5px;color:#fff;font-size:1.15em}.nlbgroup:hover{box-shadow:0 1px 7px -5px rgba(50,50,93,.25),0 3px 16px -8px rgba(0,0,0,.3),0 -6px 16px -6px rgba(0,0,0,.025)}.nlbf .nlbf-button,.nlbf .nlbf-email{flex-grow:1;flex-shrink:0;width:auto;margin:0;padding:.75em 1em;border:0;border-radius:11px;background:#fff;font-size:1em;box-shadow:none}.promo-box .nlbf-button:focus,.promo-box input.nlbf-email:active,.promo-box input.nlbf-email:focus{box-shadow:none}.nlbf-button:-ms-input-placeholder,.nlbf-email:-ms-input-placeholder{color:#777;font-style:italic}.nlbf-button::-webkit-input-placeholder,.nlbf-email::-webkit-input-placeholder{color:#777;font-style:italic}.nlbf-button:-ms-input-placeholder,.nlbf-button::-moz-placeholder,.nlbf-button::placeholder,.nlbf-email:-ms-input-placeholder,.nlbf-email::-moz-placeholder,.nlbf-email::placeholder{color:#777;font-style:italic}.nlbf .nlbf-button{transition:all .2s ease-in-out;color:#fff;background-color:#0168b8;font-weight:700;box-shadow:0 1px 1px rgba(0,0,0,.3);width:100%;border:0;border-left:1px solid #ddd;flex:2;border-top-left-radius:0;border-bottom-left-radius:0}.nlbf .nlbf-email{border-top-right-radius:0;border-bottom-right-radius:0;width:100%;flex:4;min-width:150px}@media all and (max-width:650px){.nlbf .nlbgroup{flex-wrap:wrap;box-shadow:none}.nlbf .nlbf-button,.nlbf .nlbf-email{border-radius:11px;border-left:none}.nlbf .nlbf-email{box-shadow:0 13px 27px -5px rgba(50,50,93,.25),0 8px 16px -8px rgba(0,0,0,.3),0 -6px 16px -6px rgba(0,0,0,.025);min-width:100%}.nlbf .nlbf-button{margin-top:1em;box-shadow:0 1px 1px rgba(0,0,0,.5)}}.nlbf .nlbf-button:active,.nlbf .nlbf-button:focus,.nlbf .nlbf-button:hover{cursor:pointer;color:#fff;background-color:#0168b8;border-color:#dadada;box-shadow:0 1px 1px rgba(0,0,0,.3)}.nlbf .nlbf-button:active,.nlbf .nlbf-button:focus{outline:0!important;text-shadow:1px 1px 1px rgba(0,0,0,.3);box-shadow:inset 0 3px 3px rgba(0,0,0,.3)}.nlbgroup{display:flex;box-shadow:0 13px 27px -5px rgba(50,50,93,.25),0 8px 16px -8px rgba(0,0,0,.3),0 -6px 16px -6px rgba(0,0,0,.025);border-radius:11px;transition:box-shadow .2s ease-in-out}.nlbwrapper{display:flex;flex-direction:column;justify-content:center}.nlbf form{width:100%}.nlbf .nlbgroup{margin:0}.nlbcaption{font-size:.9em;line-height:1.5em;color:#fff;border-radius:11px;padding:.5em 1em;display:inline-block;background-color:#0067b859;text-shadow:1px 1px 1px rgba(0,0,0,.3)}.wf-loaded-stage2 .nlbf .nlbf-button{font-family:Mija}.mts{margin-top: 5px !important;}.mbn{margin-bottom: 0 !important;}</style></section><p class="mts mbn"><small class="promo-box__footer mtm block grey"><em>Once a week. Useful tips on <a href="https://www.smashingmagazine.com/the-smashing-newsletter/">front-end &amp; UX</a>. Trusted by 207.000 friendly folks.</em></small></p></div></p>
</div>
</div>
<div class="feature-panel-right-col">
<div class="feature-panel-image">
<img
    loading="lazy"
    decoding="async"
    class="feature-panel-image-img"
    src="/images/smashing-cat/cat-firechat.svg"
    alt="Feature Panel"
    width="310"
    height="400"
/>

</div>

<p></div>
</aside>
</div></p>

<h2 id="flexible">Flexible</h2>

<p>When asked to define “consumable components,” I often find that the most common answer by the design teams is “a component that is <strong>flexible</strong>.” This can mean a few things!</p>

<h3 id="flexible-the-component-instances-can-be-modified">Flexible: The Component Instances Can Be Modified</h3>

<p>When planning for scale, the easiest approach (from a maintenance perspective) is to create a small batch of components that can be modified infinitely at the instance level. This makes a lot of sense! <a href="https://en.wikipedia.org/wiki/Reusability">Reusability</a> &mdash; or <em>don’t repeat yourself</em> (DRY) &mdash; is a key concept in software engineering. Why wouldn’t we want to borrow from this established norm?</p>

<blockquote>“Don’t repeat yourself (DRY) is a principle of software development aimed at reducing repetition of information that is likely to change, replacing it with abstractions that are less likely to change. The DRY principle is stated as: “Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.”<br /><br />&mdash; “<a href="https://en.wikipedia.org/wiki/Don%27t_repeat_yourself">Don’t repeat yourself</a>” (Wikipedia)</blockquote>

<p>But there is a side effect to flexibility, and that is when something is modified to a level that you, the maintainer, don’t want. As I said earlier, it’s <em>incredibly easy</em> to make changes in design software, which can sometimes mean you are setting components up to be <em>too</em> flexible.</p>

<p>As an example, let’s take the <a href="https://spectrum.adobe.com/page/color-system/#Color-semantics">negative</a> (warning) state of your form input fields, the one often with a nice red border if some data is missing or incorrectly entered into them. What happens if a designer on your team changes that to a rather nice green color? This is <strong>flexibility</strong> in its core, and we can accidentally promote this by creating generic components that require customization with every usage.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/24-adobe.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="450"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/24-adobe.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/24-adobe.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/24-adobe.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/24-adobe.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/24-adobe.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/24-adobe.png"
			
			sizes="100vw"
			alt="A diagram which illustrates semantic color meanings. Red is for negative, orange is for notice, green is for positive, blue is for informative, and accent recreated from Adobe Spectrum’s design system."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Diagram illustrating through labels the semantic color meanings for red (negative), orange (notice), green (positive), and blue (informative and accent) recreated from Adobe Spectrum’s design system. (<a href='https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/24-adobe.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Like in most things, a solution to this is <strong>education</strong> and <strong>communication</strong>. If you aren’t comfortable with modifications on styles, you may want to set up your components in such a way as to indicate this. For example, using emojis in layers is the quickest way to say, “Hey, please don’t edit this!” or “You can edit this!”.</p>

<p>Or, consider shipping out components that are named for intention. Would separating components entirely (components named for intention) work better? An <em>Input/Error</em>, rather than a customizable <em>Input</em>?</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/1-component-names.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="450"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/1-component-names.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/1-component-names.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/1-component-names.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/1-component-names.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/1-component-names.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/1-component-names.png"
			
			sizes="100vw"
			alt="On the left is shown a single component, one input that contains two fields (default and error); on the right, there are now two components: one is for default, the other for error."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Splitting components: one input field with a default and error state becomes two individual components. (<a href='https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/1-component-names.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>When considering the <strong>emoji name</strong> approach, here’s a set that I’ve relied on in the past:</p>

<ol>
<li>Components

<ul>
<li>🚨 Deprecated</li>
<li>🟠 Not ready</li>
</ul></li>
<li>Component instances

<ul>
<li>🔐️ Not editable</li>
<li>✍️ Overwritten name</li>
</ul></li>
<li>Layers

<ul>
<li>✍️ Editable</li>
<li>🚨 Important</li>
</ul></li>
<li>Component properties

<ul>
<li>◈ Type</li>
<li>✍️ Edit text</li>
<li>🔁️ Swap instance</li>
<li>🔘 Toggle</li>
<li>←️ Left</li>
<li>→️ Right</li>
<li>🖱 Interaction</li>
<li>📈 Data</li>
<li>↔️ Size</li>
</ul></li>
</ol>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/2-layer-names.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="450"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/2-layer-names.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/2-layer-names.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/2-layer-names.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/2-layer-names.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/2-layer-names.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/2-layer-names.png"
			
			sizes="100vw"
			alt="An illustration that shows emoji naming conventions within components, component instances, layers, and component properties."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Emoji naming conventions within components, component instances, layers, and component properties. (<a href='https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/2-layer-names.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h3 id="flexible-responsive-design">Flexible: Responsive Design</h3>

<p>Ahh, our old friend, responsive design (<a href="https://alistapart.com/article/responsive-web-design/">RWD</a>)!</p>

<blockquote>“The control which designers know in the print medium, and often desire in the web medium, is simply a function of the limitation of the printed page. We should embrace the fact that the web doesn’t have the same constraints and design for this flexibility. But first, we must accept the ebb and flow of things.”<br /><br />&mdash; John Allsopp, “<a href="http://www.alistapart.com/articles/dao/">A Dao of Web Design</a>”</blockquote>

<p>As it stands, there is no native solution within Figma to create fully responsive components. What I mean by “fully responsive” is that layout directions and contents change according to their breakpoint.</p>

<p>Here’s an example:</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/3-cards.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="450"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/3-cards.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/3-cards.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/3-cards.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/3-cards.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/3-cards.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/3-cards.png"
			
			sizes="100vw"
			alt="The same card is at different breakpoints: desktop (1440), tablet (768), and mobile (320). The card contains the following elements: a photo of raspberries, ‘Card Title’, ‘Card description’, and ‘Action’ button; and each element within each card is rearranged differently at different breakpoints."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      A card at different breakpoints: desktop (1440), tablet (768), and mobile (320). (<a href='https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/3-cards.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p><strong>Note</strong>: <em>It is technically possible to achieve this example now with auto layout wrapping and min/max widths on your elements, but this does not mean that you can build fully responsive components. Instead, you will likely end up in a <a href="https://css-tricks.com/magic-numbers-in-css/">magic numbers</a> soup with a lengthy list of variables for your min and max widths!</em></p>

<p>With this limitation in mind, we may want to reconsider goals around responsive design within our component libraries. This may take the form of adapting their structure by introducing… more components! Do we want to be able to ship <em>one component</em> that changes from mobile all the way up to the desktop, or would it be easier to use, find, and customize <em>separate components</em> for each distinct breakpoint?</p>

<blockquote>“Despite the fun sounding name, <strong>magic numbers</strong> are a bad thing. It is an old school term for ‘unnamed numerical constant,’ as in, just some numbers put into the code that are probably vital to things working correctly but are very difficult for anyone not intimately familiar with the code to understand what they are for. Magic numbers in CSS refer to values which ‘work’ under some circumstances but are frail and prone to break when those circumstances change.”<br /><br />&mdash; Chris Coyier, “<a href="https://css-tricks.com/magic-numbers-in-css/">Magic Numbers in CSS</a>”</blockquote>

<p>Never be hesitant to create more components if there is a likelihood that adoption will increase.</p>

<p>Then, what does this look like within Figma? We have a few options, but first, we need to ask ourselves a few questions:</p>

<ol>
<li>Does the team design for various screen sizes/dimensions? E.g., mobile and desktop web.</li>
<li>Does the development team build for a specific platform/screen size(s)? E.g., an iOS team.</li>
<li>Do you build apps aligning with native style guides? E.g., <a href="https://m3.material.io/">Material</a> <a href="https://m3.material.io/">D</a><a href="https://m3.material.io/">esign</a>.</li>
</ol>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/4-questions.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="450"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/4-questions.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/4-questions.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/4-questions.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/4-questions.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/4-questions.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/4-questions.png"
			
			sizes="100vw"
			alt="An image that shows a matrix that can help you decide whether your components should be shared or unique. It is created in the form of a table; the table header has ‘Shared Components’ and ‘Unique Components’; on the left, there is a series of questions in three rows, and there are checkboxes in the columns/rows intersections."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      A matrix to help you decide whether your components should be shared or unique. (<a href='https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/4-questions.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>The answers to these questions will help us determine how we should structure our components and, more importantly, what our library structures will look like.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/5-simple-system.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="450"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/5-simple-system.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/5-simple-system.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/5-simple-system.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/5-simple-system.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/5-simple-system.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/5-simple-system.png"
			
			sizes="100vw"
			alt="An illustration that shows a design system structure example within Figma. The title is ‘UI Kit’, and below are five boxes: ‘File: Foundations’, ‘File: Icons’, ‘File: ‘Global’, ‘File: iOS’, and ‘File: Android’."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      A design system structure example within Figma. (<a href='https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/5-simple-system.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>If the answer to questions <strong>1.</strong> (Design for various screen sizes/dimensions?) and <strong>2.</strong> (build for a specific platform/screen sizes?) is “No,” and to <strong>3.</strong> (Build apps aligning with native style guides?) is “Yes,” to me, this means that we should split out components into separate component library files. We don’t want to enter into a world where an iOS component is accidentally added to a web design and pushed to production! This becomes increasingly common if we share component naming conventions across different platforms.</p>

<p>If the answer to question <strong>3.</strong> (“Do we build native apps, using their design guidelines?”) is “Yes,” this definitely requires a separate component library for the platform-specific styles or components. You may want to investigate an option where you have a global set of styles and components used on every platform and then a more localized set for when designing on your native platforms.</p>

<p>The example below, with an example mapping of library files for an iOS design project, is inspired by my Figma community file (“Simple design system structure”), which I created to help you set up your design system more easily across different platforms.</p>

<p><strong>→</strong> Get “<a href="https://www.figma.com/community/file/1158765244991590065/simple-design-system-structure"><strong>Simple design system structure</strong></a>” [FigJam file / <a href="https://www.figma.com/@disco_lu">Luis Ouriach</a>, <a href="https://creativecommons.org/licenses/by/4.0/">CC-BY</a> license]</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/6-simple-system.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="450"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/6-simple-system.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/6-simple-system.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/6-simple-system.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/6-simple-system.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/6-simple-system.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/6-simple-system.png"
			
			sizes="100vw"
			alt="An example mapping of library files for an iOS design project. The image is similar to the previous one: the title is ‘UI Kit’, and below are five boxes. From the first four boxes (‘File: Foundations’, ‘File: Icons’, ‘File: ‘Global’, ‘File: iOS’), there are four arrows going into another larger box at the bottom that says: ‘File: iOS App designs’. From the box ‘File: Android’, there is no arrow."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      An example mapping of library files for an iOS design project. (<a href='https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/6-simple-system.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p class="c-pre-sidenote--left">If you are designing across multiple platforms in a device-agnostic manner, you can bring components a lot closer together! If you aren’t currently working with an agnostic codebase, it might be worth checking <a href="https://github.com/BuilderIO/mitosis">Mitosis</a> (<em>“Write components once, run everywhere”</em>).</p>
<p class="c-sidenote c-sidenote--right">A common challenge among development teams is using the same language; while one sub-team may be using <a href="https://vuejs.org/">Vue</a>, another perhaps is using <a href="https://react.dev/">React</a>, causing redundant work and forcing you to create shared components twice. In “<a href="https://blog.logrocket.com/creating-reusable-components-mitosis-builder-io/">Create reusable components with Mitosis and Builder.io</a>,” Alex Merced explores in detail <strong>Mitosis</strong>, a free tool developed under the <a href="https://github.com/BuilderIO/mitosis/blob/main/LICENSE">MIT license</a>. Mitosis can compile code to standard JavaScript code in addition to frameworks and libraries such as Angular, React, and Vue, allowing you to create reusable components with more ease and speed.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/25-simple-system.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="450"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/25-simple-system.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/25-simple-system.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/25-simple-system.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/25-simple-system.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/25-simple-system.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/25-simple-system.png"
			
			sizes="100vw"
			alt="A screenshot of a page from the Simple design system structure Figma community file, by Luis Ouriach."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      The “<a href='https://www.figma.com/community/file/1158765244991590065/simple-design-system-structure'>Simple design system</a>” Figma community file. (<a href='https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/25-simple-system.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h3 id="using-a-variant">Using A Variant</h3>

<p>This may look like a variant set, with a specific property for device/size/platform added. For example,</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/7-variants.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="450"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/7-variants.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/7-variants.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/7-variants.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/7-variants.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/7-variants.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/7-variants.png"
			
			sizes="100vw"
			alt="A screenshot that shows the use of variants. There are two cards here that are similar to the ones found in the ‘A card at different breakpoints’ illustration. The cards contain the following elements: a photo of raspberries, ‘Card Title’, ‘Card description’, and ‘Action’ button; and each element within each card is rearranged differently for the different platforms: desktop and mobile."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Using variants for different platform types. (<a href='https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/7-variants.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>As you can imagine, as those components increase in complexity (with different states added, for example), this can become unwieldy. Combining them into the same variant is useful for a smaller system, but across larger teams, I would recommend splitting them up.</p>

<div class="partners__lead-place"></div>

<h3 id="using-sections">Using Sections</h3>

<p>You could consider grouping your components into different sections for each platform/device breakpoint. The approach would be the following:</p>

<ol>
<li>Use pages within Figma libraries to organize components.</li>
<li>Within the pages, group each breakpoint into a section. This is titled by the breakpoint.</li>
<li>Name the component by its semantic, discoverable name.</li>
</ol>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/8-sections.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="450"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/8-sections.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/8-sections.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/8-sections.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/8-sections.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/8-sections.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/8-sections.png"
			
			sizes="100vw"
			alt="An image similar to the previous one in the list. The cards again contain the following elements: a photo of raspberries, ‘Card Title’, ‘Card description’, and an ‘Action’ button. On the left, the Desktop card layout is shown with a horizontal content arrangement, and on the right, the Mobile one with a vertical content arrangement."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Using sections for components. (<a href='https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/8-sections.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>There is a caveat here! I’m sure you’re wondering: “But couldn’t variables handle these breakpoints, removing the need for different components?” The answer, as always, is that it’s down to your <em>specific implementation</em> and adoption of the system.</p>

<p>If your designer and developer colleagues are comfortable working within the variable workflow, you may be able to consolidate them! If not, we may be better served with many components.</p>

<p>Additionally, the split-component approach allows you to handle components in a structurally different manner across these different sizes &mdash; something that is not currently possible with variants.</p>

<h3 id="auto-layout">Auto Layout</h3>

<p>Regardless of how we organize the components, responsiveness can be pushed very far with the use of <a href="https://help.figma.com/hc/en-us/articles/5731482952599-Using-auto-layout">auto layout at every level</a> of our screens. Although it can be intimidating at first, the auto layout makes components work similarly to how they would be structured in HTML and CSS, moving design and engineering teams closer together.</p>


<figure class="video-embed-container break-out">
  <div class="video-embed-container--wrapper"
	
  >
    <iframe class="video-embed-container--wrapper-iframe" src="https://player.vimeo.com/video/893296008"
        frameborder="0"
        allow="autoplay; fullscreen; picture-in-picture"
        allowfullscreen>
    </iframe>
	</div>
	
		<figcaption>Auto layout and minimum width within Figma in action.</figcaption>
	
</figure>

<p>As mentioned before, we can get very close to responsive design with Figma by using variables and auto layout, but should your layout structure or typography styles differ significantly between each breakpoint, you may be better off maintaining <em>multiple components</em> instead of one hyper-flexible one.</p>

<h2 id="repeatable">Repeatable</h2>

<p>In their essence, every component is <strong>repeatable</strong>. The challenge with how reusable a component is arises when we start to think about its <em>specificity</em>. Specificity normally means the following:</p>

<ul>
<li><strong>Textual content</strong>: labels, titles, or text content generally.</li>
<li><strong>Imagery/media</strong>: cropping, aspect ratios, style.</li>
<li><strong>Arrangement</strong>: the order of elements within components.</li>
</ul>

<h3 id="textual-content">Textual Content</h3>

<p>Overrides for text are often a large hurdle to jump over when starting your design system journey, but there are two main things we can do to reduce potential losses and maintain override preservation within our instances.</p>

<p>“Override preservation” is quite a mouthful, so let’s define that first.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/10-input.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="450"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/10-input.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/10-input.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/10-input.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/10-input.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/10-input.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/10-input.png"
			
			sizes="100vw"
			alt="A screenshot that shows a generic input field, with a value of ‘Label’."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      A generic input field. (<a href='https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/10-input.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Let’s take a simple example: a generic input field. In your main component, you’re likely to have a text label within it with the text, e.g., “Label.” Generics are useful! It means that we can swap this content to be specific to our needs at an instance level.</p>

<p>Now, let’s say you insert this component into your design and swap that “Label” content for a label that reads “Email address.” This is our override; so far, so good.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/11-input.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="450"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/11-input.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/11-input.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/11-input.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/11-input.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/11-input.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/11-input.png"
			
			sizes="100vw"
			alt="A screenshot that illustrates an override to the previous input field. The value now reads ‘Email address’."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Let’s change the value of “Label” to “Email address” — this is an override! (<a href='https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/11-input.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>However, if you then decide to change your main component <em>structurally</em>, you put that label at risk of losing its overrides. As an example of a structural change, your original “Placeholder” now becomes a “Label” above the input field. Instinctively, this may mean creating a new text element for the label. But! Should you try this, you are losing the mapping between your original text element and the new one.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/12-input.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="450"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/12-input.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/12-input.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/12-input.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/12-input.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/12-input.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/12-input.png"
			
			sizes="100vw"
			alt="A more complex illustration that shows what happens when you make a structural change and the ‘Placeholder’ becomes a ’Label’ above the input field. Top: Old component; bottom: New component."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      If you make a structural change and the “Placeholder” becomes a “Label” above the input field, you create a new text element for the label, losing the mapping between your original text element and the new one. (<a href='https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/12-input.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>This could potentially break your existing signed-off designs. Even though this seems like it <em>could</em> work &mdash; layer names are a great way to preserve overrides &mdash; they are separate elements, and Figma won’t know how to transfer that override to the new element.</p>

<p>At this point, <a href="https://www.youtube.com/watch?v=EA0NbEOrpuo">introducing component properties</a> can save us from this trouble. I’d recommend adding a text component property to all of your text layers in order to try to prevent any loss of data across the design files in which we are using the component.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/13-input.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="450"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/13-input.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/13-input.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/13-input.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/13-input.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/13-input.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/13-input.png"
			
			sizes="100vw"
			alt="An illustration that shows how a text component property is added to your text layers."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      I recommend adding a text component property to your text layers. (<a href='https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/13-input.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>As I showed before, I find adding a writing emoji (✍️) to the property name is a nice way to keep our component properties panel as scannable as possible.</p>

<h3 id="content-specificity">Content Specificity</h3>

<p>A decision then needs to be made about how <strong>specific</strong> the default content is within the component.</p>

<p>And this is where we should ask ourselves a question: do we need to change this content frequently? If the answer is <strong>yes</strong>, abstracting specific textual values from components means that they can be interpreted more widely. It’s a little bit of reverse psychology, but a text layer reading “[placeholder]” would prompt a designer to change it to their local use case.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/14-input.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="450"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/14-input.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/14-input.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/14-input.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/14-input.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/14-input.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/14-input.png"
			
			sizes="100vw"
			alt="Two examples are shown. On the left is ‘Fixed content’, on the right is ‘Flexible content’. In the flexible content example (on the right), a text layer reading ’[placeholder]’ below ‘[Label]’ would prompt a designer to change it to their specific local use case."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Fixed content/Flexible content example. In the flexible content example, a text layer reading “[placeholder]” would likely prompt a designer to change it to their local use case. (<a href='https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/14-input.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>If the answer is <strong>no</strong>, we will bake the fixed value we want into the component. Going back to our input field example, we might set the default label value to be “Email address” instead of “placeholder.” Or, we could create an entirely new email address component! (This is a call we’d need to make based on anticipated/recorded usage of the component.)</p>

<h3 id="imagery-media">Imagery / Media</h3>

<p>When setting up a content system within Figma, a few different questions immediately pop up:</p>

<ol>
<li>How do you use specific media for specific components?</li>
<li>How do you fix aspect ratios for media?</li>
</ol>

<p>Within Figma, an image is essentially a fill within a shape rather than its own content type, and this impacts how we manage that media. There are two ways to do this:</p>

<ol>
<li>Using styles.</li>
<li>Using component sets (variants).</li>
</ol>

<p>Before we look at styles and components, though, let’s take a look at the format that all assets within Figma could take.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/15-media.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="450"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/15-media.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/15-media.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/15-media.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/15-media.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/15-media.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/15-media.png"
			
			sizes="100vw"
			alt="There are six boxes in the image. The top row is Media format: [Domain] / [Type] / [Name]; and the bottom row is Media example: Figma.com / Logo / FigJam."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      The proposed media format: [Domain] / [Type] / [Name], with an example: Figma.com / Logo / FigJam. (<a href='https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/15-media.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Practically, I would advise setting up your media assets as their <em>own library</em> within Figma, potentially even setting up <em>a few</em> libraries if you work across various products/brands with different approaches to media.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/16-libraries.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="450"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/16-libraries.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/16-libraries.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/16-libraries.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/16-libraries.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/16-libraries.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/16-libraries.png"
			
			sizes="100vw"
			alt="A proposal for a Figma library media structure. Three file boxes on the left: Media → Global, Media → Product, Media → Marketing. Then there’s an arrow that points from these three file boxes to another box on the right, which shows ‘Pages’ at the top of it, and then there are ‘Logos, Icons, Illustrations, Images, Videos’ underneath."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      A proposal for a Figma library media structure. There are three files: Media → Global, Media → Product, Media → Marketing. Within these files, the idea is to have the following page structure: Logos, Icons, Illustrations, Images, and Videos. (<a href='https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/16-libraries.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>For example, the imagery your product team uses within design files and marketing materials is likely to be very different, so we would look to set these up as different Figma libraries. A designer using those assets would toggle “on” the library they need to create an asset for a specific intention, keeping the right media in the right place.</p>

<p>Because this media is the same as any other style or component within Figma, we can use slash naming conventions to group types of media within the names.</p>

<p><strong>Domain examples:</strong></p>

<ul>
<li>Company website,</li>
<li>Product,</li>
<li>Marketing,</li>
<li>Sub brand/s.</li>
</ul>

<p><strong>Media types:</strong></p>

<ul>
<li>Logo,</li>
<li>Icon,</li>
<li>Illustration,</li>
<li>Image,</li>
<li>Video.</li>
</ul>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/17-media.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="450"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/17-media.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/17-media.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/17-media.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/17-media.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/17-media.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/17-media.png"
			
			sizes="100vw"
			alt="A screenshot that shows four example styles. Four boxes on it, and inside each box: ‘Figma.com/Logo/Figma,’ ‘Figma.com/Icon/Variable,’ ‘Figma.com/Illustration/Components,’ ‘Figma.com/Image/Office.’"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Four example styles: Figma.com/Logo/Figma, Figma.com/Icon/Variable, Figma.com/Illustration/Components, Figma.com/Image/Office. (<a href='https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/17-media.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Example names, using the format:</p>

<ul>
<li><code>Figma.com/Logo/Figma</code>,</li>
<li><code>Figma.com/Icon/Variable</code>,</li>
<li><code>Figma.com/Illustration/Components</code>,</li>
<li><code>Figma.com/Image/Office</code>,</li>
<li><code>Designsystems.com/Logo/Stripe</code>,</li>
<li><code>Designsystems.com/Icon/Hamburger</code>,</li>
<li><code>Designsystems.com/Illustration/Orbs</code>,</li>
<li><code>Designsystems.com/Image/Modular grid</code>.</li>
</ul>

<p>These are split into:</p>

<ul>
<li>Library: <code>Figma.com</code> or <code>Designsystems.com</code>,</li>
<li>Media type: <code>Illustration</code> or <code>Logo</code>,</li>
<li>Media name: e.g., <code>Component libraries</code>, <code>Iconography</code>.</li>
</ul>

<p>Although I’m using images for the examples here, it works with video assets, too! This means we can move in the direction of effectively using Figma like a mini DAM (<a href="https://www.ibm.com/topics/digital-asset-management">digital asset manager</a>) and iterate fast on designs using brand-approved media assets, rather than relying on dummy content.</p>

<blockquote>“A digital asset management solution is a software solution that provides a systematic approach to efficiently storing, organizing, managing, retrieving, and distributing an organization’s digital assets. DAM functionality helps many organizations create a centralized place where they can access their media assets.”<br /><br />&mdash; IBM, “<a href="https://www.ibm.com/topics/digital-asset-management">What is digital asset management?</a>”</blockquote>

<h4 id="using-fill-styles">Using Fill Styles</h4>

<p>Fill styles aren’t just for color! We can use them for images, videos, and even illustrations if we want to. It’s worth bearing in mind that because of the flexible nature of fills, you may want to consider working within fixed sizes or aspect ratios to ensure cropping is kept to a minimum.</p>

<p>Figma’s redline “snapping” feature lets us know when the original asset’s aspect ratio is being respected as we resize. It’s a pretty cool trick!</p>


<figure class="video-embed-container break-out">
  <div class="video-embed-container--wrapper"
	
  >
    <iframe class="video-embed-container--wrapper-iframe" src="https://player.vimeo.com/video/893300604"
        frameborder="0"
        allow="autoplay; fullscreen; picture-in-picture"
        allowfullscreen>
    </iframe>
	</div>
	
		<figcaption>The redline “snapping” feature lets us know when the original asset’s aspect ratio is being respected as we perform a resize.</figcaption>
	
</figure>

<h4 id="using-component-sets-variants">Using Component Sets (Variants)</h4>

<p>Instinctively, this may not make much sense. Images as components? But they are images! However, it provides us with much more control over how images are used across the system.</p>

<p><em>Images as components</em> is the method you’ll want to use if you are designing in a world of fixed aspect ratios for design, e.g., <code>16:9</code>, <code>4:3</code>, <code>1:1</code>, and so on. This is typically defined by the grid you use in designs and is most useful for people who aren’t using media as a background for a flexible object.</p>

<p>It’s also the best method for assets like logos, illustrations, and icons, where you may need variations of the original for different use cases. For example, a filled and an outline version or different stroke widths for different sizes.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/19-aspect.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="450"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/19-aspect.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/19-aspect.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/19-aspect.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/19-aspect.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/19-aspect.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/19-aspect.png"
			
			sizes="100vw"
			alt="A detailed image that shows a proposal for structuring a Figma variant component for mixed aspect ratios and sizes. The top shows the X axis (for the aspect ratios), and the left shows the Y axis (for the sizes, in pixels). A photo of a cat is being used to illustrate the different aspect ratios."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      A proposal for structuring a Figma variant component for mixed aspect ratios and sizes. Along the X axis are the aspect ratios, and on the Y axis are the sizes. (<a href='https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/19-aspect.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>You can get the above example from Figma’s community:</p>

<p><strong>→</strong> “<a href="https://www.figma.com/community/file/1110928859206538912/fixed-aspect-ratio-images-with-variants"><strong>Fixed aspect ratio images with variants</strong></a>” [Figma file / <a href="https://www.figma.com/@disco_lu">Luis Ouriach</a>, <a href="https://creativecommons.org/licenses/by/4.0/">CC-BY</a> license]</p>

<p>For this world, though, I would advise <em>against</em> trying to hack Figma into setting up fully responsive images. Instead, I’d recommend working with a <strong>predefined fixed set</strong> of sizes in a component set. This may sound like a limitation, but I strongly believe that the more time we spend inside Figma, the further we get from the production environment. “Can we test this in the actual product?” is a question we should be asking ourselves frequently.</p>

<p>Practically, this looks like creating a component set where we set the fixed sizes along one dimension and the aspect ratio along the other. Creating a matrix like this means we can use the Component Properties panel to toggle between sizes and aspect ratios, preserving the media inside the component.</p>

<p>This can be used in tandem with a separate set of components specifically for images. If we combine this with Figma’s “nested instances” feature within variant components, we can “surface” all the preferred images from our component set within every instance at the aspect ratios needed!</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/20-animals.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="450"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/20-animals.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/20-animals.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/20-animals.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/20-animals.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/20-animals.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/20-animals.png"
			
			sizes="100vw"
			alt="A detailed image that demonstrates how to nest a main variant component for each image type, which is then nested inside a separate variant component for the size. Again, a photo of a cat is being used in the explanation."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      A demonstration of nesting a main variant component for each image type, which is then nested inside a separate variant component for the size. (<a href='https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/20-animals.png'>Large preview</a>)
    </figcaption>
  
</figure>

<div class="partners__lead-place"></div>

<h3 id="arrangement">Arrangement</h3>

<p>This is the hardest thing to predict when we think through the usability of customizable components. The simplest example here is our old enemy: the form. Instinctively, we may create a complete form in a component library and publish it to the team. This makes sense!</p>

<p>The issue is that when a designer working on a particular project requires a rearrangement of that structure, we are kind of in trouble.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/21-arrangement.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="450"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/21-arrangement.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/21-arrangement.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/21-arrangement.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/21-arrangement.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/21-arrangement.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/21-arrangement.png"
			
			sizes="100vw"
			alt="A detailed image that shows a form component in two variations. On the left, we have a form with ‘full name’, ‘email address’, and a ‘sign up’ button. On the right is shown a form in the same visual style, but the fields are ‘first name’, ‘second name’, and ‘email address’; and the button after the fields is now a button group (two buttons): one button for “cancel”, the other button for “sign up”."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      A form component in two variations. Left: We have a form with “full name,” “email address,” and a “sign up” button. Right: Here we have a form in the same visual style, but the fields are “first name,” “second name,” and “email address.” The button has been converted into a button group: one button for “cancel,” the other for “sign up”. (<a href='https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/21-arrangement.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>This problem extends to almost all component groups that require manipulation. Tables, menus, lists, forms, navigation… we will hit this wall frequently. This is where I’d like to introduce the concept of <strong>fixed</strong> vs <strong>flexible</strong> content within components, which should help to address the future problems of a world where we put the DRY (<a href="https://en.wikipedia.org/wiki/Don%27t_repeat_yourself">don’t repeat yourself</a>) principles at risk.</p>

<p>As design system maintainers, we naturally want to keep components as composable as possible. How can this <em>one</em> component be used in lots of different ways without requiring us to ship an <em>infinite number</em> of variations? This is the central theme of the DRY principle but can be challenging in design tools because of the lack of component order management within the main components.</p>

<p>As a result, we often end up in a world where we build, maintain, and ship endless variations of the same component in an attempt to keep up with <a href="https://bradfrost.com/blog/post/design-system-components-recipes-and-snowflakes/">snowflake</a> <a href="https://bradfrost.com/blog/post/design-system-components-recipes-and-snowflakes/">implementations</a> of our core component.</p>

<blockquote>“‘When should we make something a component?’ is a question I’ve been fielding for years. My strong answer: right from the start. Creating things with a component-based mindset right out the gate saves countless hours &mdash; everything is a component!”<br /><br />&mdash; Brad Frost, “<a href="https://bradfrost.com/blog/post/design-system-components-recipes-and-snowflakes/">Design system components, recipes, and snowflakes</a>”</blockquote>

<p>For example, the form we spoke about before could be one for:</p>

<ul>
<li>Logging in;</li>
<li>Registering;</li>
<li>Signing up to the newsletter;</li>
<li>Adding billing information.</li>
</ul>

<p>These are all clearly forms that require different data points and functionality from an engineering perspective, but they will most likely share common design foundations, e.g., padding, margins, headings, labels, and input field designs. The question then becomes, “How can we reduce repetition whilst also encouraging combinatorial design?”</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/22-arrangement.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="450"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/22-arrangement.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/22-arrangement.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/22-arrangement.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/22-arrangement.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/22-arrangement.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/22-arrangement.png"
			
			sizes="100vw"
			alt="An illustration that shows how to fix the spacing values between each element while making the combinations of components infinitely flexible. Two forms with different spacing component combinations are being shown."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      When designing forms, we need to fix the spacing values between each element but make the combinations of components infinitely flexible. (<a href='https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/22-arrangement.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>A concept that has been long-used in the developer world and loosely agreed upon in the design community is termed “<a href="https://vuejs.org/guide/components/slots.html">component slots</a>.” This approach allows the design system maintainers to ship component containers with agreed properties &mdash; sizing, padding, and styles &mdash; whilst allowing for a flexible arrangement of components <em>inside</em> it.</p>

<p>Taking our previous form examples, we can then abstract the content &mdash; login form, register form, newsletter form, and billing information form &mdash; and provide a much simpler shell component from the library. The designers using this shell (let’s call it a “form/wrapper”) will then build their forms <em>locally</em> and replace the slot component inside the shell with this new custom main component.</p>

<p>This is best explained visually:</p>


<figure class="video-embed-container break-out">
  <div
  
  class="video-embed-container--wrapper">
		<lite-youtube
			videoid="XMqUKlFUETc"
      
			videotitle="Figma tip: &lt;a href=&#39;https://www.youtube.com/watch?v=XMqUKlFUETc&#39;&gt;Scoped slot components&lt;/a&gt;"
		></lite-youtube>
	</div>
	
		<figcaption>Figma tip: <a href='https://www.youtube.com/watch?v=XMqUKlFUETc'>Scoped slot components</a></figcaption>
	
</figure>

<p>The question then becomes: “Where should these custom components live?” The process becomes the same as it would for any component, which should hopefully align with your team’s policy already.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/23-frequency.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="450"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/23-frequency.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/23-frequency.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/23-frequency.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/23-frequency.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/23-frequency.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/23-frequency.png"
			
			sizes="100vw"
			alt="A complex illustration that shows a usage graph for components. There are three main elements in the illustration. The top one shows the ‘Global component,’ the middle one ‘Domain/team component,’ and the bottom one ‘Snowflake component.’"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      A usage graph for components. If you need a snowflake component specific to your feature work, store it locally in the file. If it is required by your specific team or platform, you can move it into a team library. If it needs to be globally used, move it into the broader design system. (<a href='https://files.smashing.media/articles/building-components-consumption-not-complexity-part1/23-frequency.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Does this custom component need to live in multiple files? If yes, we move it to the next level up, either team-level libraries or global, if working on a smaller system. If not, we can comfortably keep that component local to the specific Figma file on a page (I like to call it “❖ Components”).</p>

<p><strong>Important</strong>: For this premise to really work, we must employ auto layout at <strong>every level</strong>, with no exceptions!</p>

<h2 id="conclusion">Conclusion</h2>

<p>That was a lot to process (over five thousand words, actually), and I think it‘s time for us to stop staring at the computer screen and take a little break before walking through the next set of principles.</p>

<p>Go grab a drink or take some rest, then meet me in <a href="https://www.smashingmagazine.com/2023/12/building-components-consumption-not-complexity-part2/">Part 2</a>, where you will learn even more about the <strong>adoptable</strong>, <strong>indexable</strong>, <strong>logical</strong>, and <strong>specific</strong> components.</p>

<div class="signature">
  <img src="https://www.smashingmagazine.com/images/logo/logo--red.png" alt="Smashing Editorial" width="35" height="46" loading="lazy" decoding="async" />
  <span>(mb, yk)</span>
</div>


              </article>
            </body>
          </html>
        ]]></content:encoded></item><item><author>Matthew Mattei</author><title>An Efficient Design-to-Code Handoff Process Using Uno Platform For Figma</title><link>https://www.smashingmagazine.com/2023/11/design-to-code-handoff-process-uno-platform-figma/</link><pubDate>Fri, 17 Nov 2023 10:00:00 +0000</pubDate><guid>https://www.smashingmagazine.com/2023/11/design-to-code-handoff-process-uno-platform-figma/</guid><description>Effective collaboration between designers and developers is vital to creating good user experiences. However, bridging the handoff between design and development with the many tools and workflows available today has its pitfalls. Matthew Mattei introduces you to the Uno Platform. This free and open-source project offers a robust set of productivity boosters, including a design-to-code plugin that fosters better designer/developer collaboration.</description><content:encoded><![CDATA[
          <html>
            <head>
              <meta charset="utf-8">
              <link rel="canonical" href="https://www.smashingmagazine.com/2023/11/design-to-code-handoff-process-uno-platform-figma/" />
              <title>An Efficient Design-to-Code Handoff Process Using Uno Platform For Figma</title>
            </head>
            <body>
              <article>
                <header>
                  <h1>An Efficient Design-to-Code Handoff Process Using Uno Platform For Figma</h1>
                  
                    
                    <address>Matthew Mattei</address>
                  
                  <time datetime="2023-11-17T10:00:00&#43;00:00" class="op-published">2023-11-17T10:00:00+00:00</time>
                  <time datetime="2023-11-17T10:00:00&#43;00:00" class="op-modified">2026-02-09T03:03:08+00:00</time>
                </header>
                
                

<p>Effective collaboration between designers and developers is vital for creating a positive user experience, but bridging the gap between design and code can be challenging at the best of times. The handoff process often leads to communication gaps, inconsistencies, and, most importantly, lost productivity, causing frustration for both designers and developers.</p>

<p>When we try to understand where most of the time is spent building software applications, we will notice that a significant amount of it is lost due to a lack of true collaboration, miscommunication, and no single “source of truth.” As a result, we see designers creating great user experiences for clients and passing on their approved designs with little input from the developers. They then attempt to recreate the designs with their developer tools, resulting in a complicated, cost-intensive process and often unimplementable designs.</p>

<p>Developers and integrators are supposed to closely inspect a design and try to analyze all there is to it: the margins, spacing, alignments, the types of controls, and the different visual states that the user interface might go through (a loading state, a partial state, an error state, and so on) during the interactions with it, and then try to figure out how to write the code for this interface. Traditionally, this is the <strong>design handoff process</strong> and has long become the norm.</p>

<p>We at Uno Platform believe that a better, more pragmatic approach must exist. So, we focused on improving the workflow and adding the option to generate the code for the user interface straight from the design while allowing developers to build upon the generated code’s foundation and further expand it.</p>

<blockquote>“When designers are fully satisfied with their designs, they create a document with all the details and digital assets required for the development team to bring the product to life. This is the design handoff process.”<br /><br />&mdash; UX Design Institute, “<a href="https://www.uxdesigninstitute.com/blog/design-handoff-developers/">How to create a design handoff for developers</a>”</blockquote>

<p>Let’s look at some of the problems associated with the handoff process and how the <a href="https://platform.uno/unofigma/"><strong>Uno Platform for Figma Plugin</strong></a> may help alleviate the pitfalls traditionally seen in this process.</p>

<p><strong>Note</strong>: <em>The <a href="https://aka.platform.uno/uno-figma-plugin">Uno Platform Plugin</a> for Figma is free, so if you’d like to try it while reading this article, you can <a href="https://aka.platform.uno/uno-figma-plugin">install it right away</a>. Uno Platform is a developer productivity platform that enables the creation of native mobile, web, desktop, and embedded apps using a single codebase. As part of its comprehensive tooling, Uno Platform offers the Uno Figma plugin, enabling easy translation of designs to code. (While Uno Platform is free and open-source, the plugin itself is free but not open-source.) If you want to explore the code or contribute to the Uno project, please visit the <a href="https://github.com/unoplatform/uno">Uno Platform GitHub</a> repository.</em></p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/1-uno-platform-github-screenshot.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="453"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/1-uno-platform-github-screenshot.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/1-uno-platform-github-screenshot.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/1-uno-platform-github-screenshot.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/1-uno-platform-github-screenshot.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/1-uno-platform-github-screenshot.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/1-uno-platform-github-screenshot.jpg"
			
			sizes="100vw"
			alt="A screenshot of the Uno Platform repository on Github"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      The <a href='https://github.com/unoplatform/uno'>GitHub repository</a> of the open-source project Uno Platform. (<a href='https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/1-uno-platform-github-screenshot.jpg'>Large preview</a>)
    </figcaption>
  
</figure>


<figure class="video-embed-container break-out">
  <div
  
  class="video-embed-container--wrapper">
		<lite-youtube
			videoid="t05lQ4ej47k"
      
			videotitle="Uno Platform 5.0: Figma plugin, C# Markup, and Hot Reload showcase via Uno Tube Player app"
		></lite-youtube>
	</div>
	
		<figcaption>Uno Platform 5.0: Figma plugin, C# Markup, and Hot Reload showcase via Uno Tube Player app</figcaption>
	
</figure>

<div data-audience="non-subscriber" data-remove="true" class="feature-panel-container">

<aside class="feature-panel" style="">
<div class="feature-panel-left-col">

<div class="feature-panel-description"><p>Meet <strong><a data-instant href="/printed-books/image-optimization/">Image Optimization</a></strong>, Addy Osmani’s new practical guide to optimizing and delivering <strong>high-quality images</strong> on the web. Everything in one single <strong>528-pages</strong> book.</p>
<a data-instant href="https://www.smashingmagazine.com/printed-books/image-optimization/" class="btn btn--green btn--large" style="">Jump to table of contents&nbsp;↬</a></div>
</div>
<div class="feature-panel-right-col"><a data-instant href="https://www.smashingmagazine.com/printed-books/image-optimization/" class="feature-panel-image-link">
<div class="feature-panel-image"><picture><source type="image/avif" srcSet="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2c669cf1-c6ef-4c87-9901-018b04f7871f/image-optimization-shop-cover-opt.avif" />
<img
    loading="lazy"
    decoding="async"
    class="feature-panel-image-img"
    src="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/87fd0cfa-692e-459c-b2f3-15209a1f6aa7/image-optimization-shop-cover-opt.png"
    alt="Feature Panel"
    width="480"
    height="697"
/>
</picture>
</div>
</a>
</div>
</aside>
</div>

<h2 id="unifying-design-and-development">Unifying Design And Development</h2>

<p>“Translating” design elements from Figma to code is time-consuming and prone to errors. Too often, projects are abandoned at handoff; developers and designers may opt to change a specific requirement in their designs but only sometimes communicate these changes effectively. Once designers pass their work files and documentation to the development team, they are on to the next project.</p>

<blockquote class="pull-quote">
  <p>
    <a class="pull-quote__link" aria-label="Share on Twitter" href="https://twitter.com/share?text=%0aOur%20philosophy%20is%20that%20your%20Figma%20Design%20is%20the%20single%20source%20of%20truth%20on%20which%20end-users,%20designers,%20and%20developers%20should%20agree.%0a&url=https://smashingmagazine.com%2f2023%2f11%2fdesign-to-code-handoff-process-uno-platform-figma%2f">
      
Our philosophy is that your Figma Design is the single source of truth on which end-users, designers, and developers should agree.

    </a>
  </p>
  <div class="pull-quote__quotation">
    <div class="pull-quote__bg">
      <span class="pull-quote__symbol">“</span></div>
  </div>
</blockquote>

<p>Designers and developers should not work in a <a href="https://www.techtarget.com/searchsoftwarequality/definition/waterfall-model">waterfall system</a>. Instead, they should have their own sets of specifications and requirements evolving in parallel. Developers usually work from a backlog, which is rarely used by designers whose point of view is generally a much wider lens, not well represented in granular backlog-type structures.</p>

<blockquote>“The waterfall model is a linear, sequential approach to the software development lifecycle (SDLC) that is popular in software engineering and product development. The waterfall model uses a logical progression of SDLC steps for a project, similar to the direction in which water flows over the edge of a cliff. It sets distinct endpoints (or goals) for each phase of development. Those endpoints (goals) can’t be revisited after their completion.”<br /><br />&mdash; Ben Lutkevich, “<a href="https://www.techtarget.com/searchsoftwarequality/definition/waterfall-model">What is the waterfall model?</a>”</blockquote>

<p>When managing the dynamic aspect of the workflow &mdash; it’s not a waterfall type where you hand off the entire design project when it’s completely done &mdash; you need to constantly communicate the changes (colors, assets, layouts, typography, interactions, and so on). The more designers work on an interface, the more they have to effectively communicate the changes and details to the developers &mdash; making detailed documentation does not always suffice.</p>

<p>Another important point should be mentioned. Individual developers will not always have an extensive picture overview of what they are working on as their work is broken down into a set of granular tasks, which may lead to unnecessary rework, double work (that needs to be QA’ed multiple times), or a developer asking for changes that may not benefit the project as a whole. At the same time, designers often have the <em>opposite issue</em> where they constantly move vast chunks of layouts, which sometimes leads them to miss states and assets necessary to complete the details of a specific interaction. Even then, when the design is ready, it still requires a lot of implementation effort on the developers’ part once they start working inside their <strong>integrated development environment (<a href="https://en.wikipedia.org/wiki/Integrated_development_environment">IDE</a>)</strong>.</p>

<h2 id="choosing-the-right-tools-for-your-team">Choosing the Right Tools for Your Team</h2>

<p>In the past, designers and developers have often used different platforms and workflows, which led to miscommunication and delays in the handoff process. Nowadays, software development teams can benefit from the availability of many new technologies and tools, and by leveraging them, they can work together more efficiently, reducing the burden on both parties and ultimately delivering better results for their clients and customers. Figma and Uno Platform are some of those new available tools.</p>

<h2 id="why-figma">Why Figma?</h2>

<p>Uno Platform is one of many tools trying to solve the handoff issues for the designers and developers and improve their collaboration efficiency. In fact, many platforms are tackling every aspect of the workflow for every programming language.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/2-uno-figma-plugin-cover.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="400"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/2-uno-figma-plugin-cover.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/2-uno-figma-plugin-cover.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/2-uno-figma-plugin-cover.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/2-uno-figma-plugin-cover.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/2-uno-figma-plugin-cover.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/2-uno-figma-plugin-cover.png"
			
			sizes="100vw"
			alt="Screenshot of the main page of Uno Platform for Figma."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      <a href='https://platform.uno/unofigma/'>Uno Platform</a> for Figma Plugin: export Figma designs as XAML and C# code. (<a href='https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/2-uno-figma-plugin-cover.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>A significant factor in choosing our current development path lies in the belief that Figma outperforms the <a href="https://medium.com/sketch-app-sources/how-i-use-sketch-with-zeplin-to-design-and-specify-apps-71979ccf8f72">Sketch + Zeplin combination</a> (and not only) because of its platform-agnostic nature. Being a web-based tool, Figma is more universal, while Sketch is limited to MacOS, and sharing designs with non-Mac developers necessitates using third-party software. Figma offers an all-in-one solution, making it a more convenient option.</p>

<p>In addition, Figma now also supports plugins, many of them assisting with the handoff process specifically. For example, Rogie King <a href="https://twitter.com/ozanoz/status/1690694746661089280">recently launched</a> a plugin “<a href="https://www.figma.com/community/plugin/1270403910069102271/Clippy-%E2%80%94%C2%A0Add-attachments-to-your-Figma-files!">Clippy &mdash; add attachments</a>” that allows attachments to your Figma files, which is very useful during the handoff process. Of course, there are many others.</p>

<p>This and other factors “weighed” us towards Figma Design. And <a href="https://blog.zomato.com/why-we-switched-to-figma-as-a-primary-design-tool-at-zomato">we aren’t alone</a>; others have picked up Figma as <a href="https://medium.com/purplebricks-digital/why-we-chose-figma-as-our-primary-design-tool-e89d371f6eec">their key design tool</a> after doing some research and then trying things in practice.</p>

<blockquote>“Comparing the must-haves against the features of a list of possible design apps we compiled (including Sketch, Axure RP, Framer, and more), Figma came out as the clear forerunner. We decided to proceed with a short-term trial to test Figma’s suitability, and we haven’t looked back since. It met all of our key feature requirements but surprised us with a lot of other things along the way.”<br /><br />&mdash; Simon Harper, “<a href="https://medium.com/purplebricks-digital/why-we-chose-figma-as-our-primary-design-tool-e89d371f6eec">Why we chose Figma as our primary design tool</a>”</blockquote>

<div class="partners__lead-place"></div>

<h2 id="working-with-the-uno-figma-plugin">Working with the Uno Figma Plugin</h2>

<h3 id="1-get-started-with-uno-platform-for-figma-plugin">1: Get Started with Uno Platform for Figma Plugin</h3>

<p>Uno for Figma presents a significant advantage for teams that rely on Figma as their primary design tool.</p>

<blockquote class="pull-quote">
  <p>
    <a class="pull-quote__link" aria-label="Share on Twitter" href="https://twitter.com/share?text=%0aBy%20combining%20the%20familiarity%20and%20efficiency%20of%20Figma%20with%20the%20capabilities%20of%20the%20Uno%20Platform,%20designers%20can%20seamlessly%20continue%20working%20in%20a%20familiar%20environment%20that%20they%20are%20already%20comfortable%20with%20while%20knowing%20their%20designs%20will%20be%20integrated%20practically%20by%20their%20development%20team.%0a&url=https://smashingmagazine.com%2f2023%2f11%2fdesign-to-code-handoff-process-uno-platform-figma%2f">
      
By combining the familiarity and efficiency of Figma with the capabilities of the Uno Platform, designers can seamlessly continue working in a familiar environment that they are already comfortable with while knowing their designs will be integrated practically by their development team.

    </a>
  </p>
  <div class="pull-quote__quotation">
    <div class="pull-quote__bg">
      <span class="pull-quote__symbol">“</span></div>
  </div>
</blockquote>

<p>Getting started with the Uno Figma plugin is a straightforward process:</p>

<ol>
<li>Install the <strong><a href="https://aka.platform.uno/uno-figma-plugin">Uno Platform (Figma to C# or XAML)</a> plugin.</strong></li>
<li>Open the <strong><a href="https://aka.platform.uno/uno-figma-material-toolkit">Uno Platform Material Toolkit</a></strong> design file available from the Figma Community.</li>
</ol>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/3-uno-material-toolkit-file.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="467"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/3-uno-material-toolkit-file.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/3-uno-material-toolkit-file.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/3-uno-material-toolkit-file.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/3-uno-material-toolkit-file.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/3-uno-material-toolkit-file.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/3-uno-material-toolkit-file.png"
			
			sizes="100vw"
			alt="Screenshot of the Uno Material Toolkit file available in Figma Community."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      <a href='https://aka.platform.uno/uno-figma-material-toolkit'>Uno Platform Material Toolkit</a> (available in Figma Community). (<a href='https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/3-uno-material-toolkit-file.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>With the <strong>Uno Material Toolkit</strong>, you no longer need to design many of the components from scratch as the toolkit provides UI (user interface) controls designed specifically for multi-platform, responsive applications.</p>

<p><strong>Note</strong>: <em>To use the plugin, you must create your design</em> <strong><em>inside</em></strong> <em>the Uno Material Toolkit Figma file, using its components. Without it, the plugin won’t be able to generate any output, making it incompatible with existing Figma designs.</em></p>

<h3 id="2-setting-up-your-design">2: Setting Up Your Design</h3>

<p>Once you have installed the Uno Platform for Figma plugin and opened the Material Toolkit design file, you can use the “Getting Started” page in the file layers to set up your design. The purpose of this page is to simplify the process of defining your application’s theme, colors, and font styles.</p>

<p>You can also use <a href="https://platform.uno/docs/articles/external/uno.themes/doc/material-dsp.htmlTooling%20in%20Uno.Material">DSP Tooling in Uno.Material</a> for Uno Platform applications. This feature has been one of the top requests from the Uno Platform community, and it is now available both as a package and as part of the App Template Wizard.</p>

<p>If you’re unfamiliar with <strong><a href="https://github.com/AdobeXD/design-system-package-dsp">DSP</a> (Design System Packages)</strong>, it’s essentially a repository of design assets, including icons, buttons, and other UI elements, accompanied by JSON files containing design system information. With a DSP, you can craft a personalized theme that aligns with your brand, effortlessly integrate it into your Uno Platform application through the Figma plugin, and implement theme changes across the entire user interface of your application.</p>

<p>The ability to import custom Design System Packages (DSPs) is a significant development for Uno Platform. With this feature, designers can create and manage their own design systems, which can be shared across projects and teams. This not only saves time but also ensures consistency across all design work. Additionally, it allows designers to maintain control over the design assets, making it easier to make updates and changes as needed.</p>

<p><strong>Note</strong>: <em>The “Getting Started” page offers step-by-step instructions for modifying the colors and fonts of the user interface, including previewing your overall theme. While you can modify these later, I’d recommend doing this right at the beginning of your project for better organization.</em></p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/4-getting-started-page-material-toolkit.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="394"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/4-getting-started-page-material-toolkit.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/4-getting-started-page-material-toolkit.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/4-getting-started-page-material-toolkit.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/4-getting-started-page-material-toolkit.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/4-getting-started-page-material-toolkit.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/4-getting-started-page-material-toolkit.png"
			
			sizes="100vw"
			alt="Screenshot of the Getting Started instructions page in Uno Material Toolkit file."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      The Getting Started page in the Material Toolkit file. (<a href='https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/4-getting-started-page-material-toolkit.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Afterward, create a new page and ensure that you begin by using the <strong>Standard Page Template</strong> provided in the Uno Toolkit components to start the design of your application. It’s essential to remember that you will have to <strong>detach the instance</strong> from the template to utilize it.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/5-detach-Instance.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="655"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/5-detach-Instance.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/5-detach-Instance.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/5-detach-Instance.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/5-detach-Instance.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/5-detach-Instance.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/5-detach-Instance.png"
			
			sizes="100vw"
			alt="Screenshot of the steps needed in order to detach the instance from the template in Figma Design."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      To get started with the Page Template, first, you need to detach the instance from the template. (<a href='https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/5-detach-Instance.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h3 id="3-start-creating-the-design">3: Start Creating The Design</h3>

<p>Most Toolkit Components have variants that will act as time savers, allowing a single component to contain its various states and variations, with specific attributes that you may toggle on and off.</p>

<p>For example, button components have a Leading Icon variant so you can use the same element with or without icons throughout the design.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/5b-leading-icon-variants.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="606"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/5b-leading-icon-variants.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/5b-leading-icon-variants.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/5b-leading-icon-variants.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/5b-leading-icon-variants.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/5b-leading-icon-variants.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/5b-leading-icon-variants.png"
			
			sizes="100vw"
			alt="Screenshot of the button components with a Leading Icon variant — the same set of icons is shown with an icon in front of the labels, and then without."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Button components with a Leading Icon variant: you can use the same element with or without icons in your design. (<a href='https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/5b-leading-icon-variants.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>The Uno Toolkit provides a comprehensive library of pre-built components and templates that come with the appropriate layer structures to generate <strong>XAML</strong> (eXtensible Application Markup Language is <a href="https://wpf-tutorial.com/xaml/what-is-xaml/">Microsoft’s variant of XML</a> for describing a graphic user interface) and <strong>C#</strong> markup and allows designers to preview their designs using the Uno plugin. This helps synchronize design and development efforts, maintain project consistency, and optimize code output. Furthermore, these components can be reused, making creating and managing consistent designs across multiple projects easier.</p>

<h3 id="4-live-preview-your-app">4: Live Preview Your App</h3>

<p>The <strong>Previewer</strong> in the Uno Platform is a powerful tool that enables designers to troubleshoot their designs and catch issues before the handoff process starts, avoiding redundancy in communications with developers. It provides a live interactive preview of the translated look, behavior, and code of the application’s design, including all styling and layout properties. Designers can interact with their design as if it is a running app, scrolling through content and testing components to see how they behave.</p>

<p>To preview the designed user interface, follow these steps:</p>

<ol>
<li>In Figma, select the screen you want to preview.</li>
<li>Right-click the screen → <strong>Plugins</strong> → <strong>Uno Platform (Figma to C# or XAML)</strong>.</li>
<li>Once the plugin has launched, select the <strong>Preview</strong> tab.</li>
<li>Press the <strong>Refresh</strong> button.</li>
</ol>


<figure class="video-embed-container break-out">
  <div class="video-embed-container--wrapper"
	
  >
    <iframe class="video-embed-container--wrapper-iframe" src="https://player.vimeo.com/video/884927531"
        frameborder="0"
        allow="autoplay; fullscreen; picture-in-picture"
        allowfullscreen>
    </iframe>
	</div>
	
		<figcaption>Figma → Uno Platform (Figma to C# or XAML) plugin → Preview tab (providing a live interactive preview of the user interface).</figcaption>
	
</figure>

<p>The <strong>Export</strong> tab view allows you to see the C# or XAML code separately, saving you the effort of writing the code yourself. The generated code uses <strong>Uno Toolkit</strong> components, which are provided with comprehensive <a href="https://platform.uno/docs/articles/external/uno.toolkit.ui/doc/getting-started.html">developer documentation</a>. Moreover, you are skipping the handoff where developers must inspect the assets to extract the visual specifications, which usually requires more communication efforts and multiple rounds of back-and-forth design “polishing.”</p>


<figure class="video-embed-container break-out">
  <div class="video-embed-container--wrapper"
	
  >
    <iframe class="video-embed-container--wrapper-iframe" src="https://player.vimeo.com/video/884928658"
        frameborder="0"
        allow="autoplay; fullscreen; picture-in-picture"
        allowfullscreen>
    </iframe>
	</div>
	
		<figcaption>Figma → Uno Platform (Figma to C# or XAML) plugin → Export tab (for the generated code).</figcaption>
	
</figure>

<h3 id="5-generate-and-export-your-code">5: Generate and Export your Code</h3>

<p>Relying on a third-party tool to generate the code automatically may cause some initial reservations, but it can significantly improve workflow efficiency and save the designers’ and developers’ time. By “translating” the design to code directly from the Figma file, the developers can ensure that the application looks and behaves as intended, and designers can ensure that their designs remain pixel-perfect and provide the interaction/UX experience as they were originally intended.</p>

<p>Uno Platform uses C# and XAML as languages of choice. C# markup and XAML provide a wide range of features, such as support for animations, styles, and templates. In addition, XAML is generally perceived to be providing a good separation between UI styling and business logic, allowing the developers to focus more on high-level business logic during the development process while reducing the amount of code they need to write as XAML can be reused across Windows, iOS, Android, WebAssembly, macOS, and Linux. This level of precision ensures that the user experience is consistent throughout the application (regardless of the software platform being used), saves time, and reduces the likelihood of human error, even for the most experienced developers.</p>

<blockquote>“XAML is a declarative markup language which simplifies creating user interfaces for .NET apps. You can create visible UI elements in the declarative XAML markup and then separate the UI definition from the run-time logic by using code-behind files that are joined to the markup through partial class definitions. XAML directly represents the instantiation of objects in a specific set of backing types defined in assemblies and enables a workflow where separate parties can work on the UI and the logic of an app, using potentially different tools.”<br /><br />&mdash; <a href="https://learn.microsoft.com/en-us/dotnet/desktop/wpf/xaml/?view=netdesktop-7.0">XAML overview</a> (Microsoft Docs)</blockquote>

<p>How can you leverage the generated code from the Uno Figma plugin?</p>

<p>The <strong>Export</strong> tab in the Uno Figma plugin allows you to inspect and export the generated code &mdash; the code can be later used in your preferred IDE and by the developers. Using the top-left dropdown menu, you can alternate between <strong>C#,</strong> <strong>XAML</strong>,<strong>Color, and Fonts Override File</strong> to export. Additionally, the contextual controls at the bottom of the tab allow you to set the view type and refresh the view.</p>


<figure class="video-embed-container break-out">
  <div class="video-embed-container--wrapper"
	
  >
    <iframe class="video-embed-container--wrapper-iframe" src="https://player.vimeo.com/video/885154810"
        frameborder="0"
        allow="autoplay; fullscreen; picture-in-picture"
        allowfullscreen>
    </iframe>
	</div>
	
		<figcaption>Example of generated XAML and C# Markup from <a href='https://aka.platform.uno/simplecalc-workshop'>Simple Calc workshop</a>.</figcaption>
	
</figure>

<p>To generate and export the code, copy the <strong>Export</strong> tab’s content to the clipboard and paste it into your preferred <a href="https://www.techrepublic.com/article/best-ide-software/">IDE tool</a>. As a designer, you do not have to do this; your development team can use the plugin (even without Figma <a href="https://help.figma.com/hc/en-us/articles/360039960434-Roles-in-Figma">editor role</a> fees) using <a href="https://www.figma.com/dev-mode/">Dev Mode</a> to access the code directly from your design.</p>

<p>To do this, follow these steps:</p>

<ol>
<li>Select the page or component that you want to inspect.</li>
<li>From the <strong>Plugins</strong> menu in Figma, choose <strong>Uno Platform (Figma to C# or XAML)</strong>.</li>
<li>Select the <strong>Export</strong> tab.</li>
<li>Click the <strong>Refresh</strong> button located at the bottom of the tab.</li>
<li>Optionally, you can change the left-top dropdown to other files to view the theme’s colors, fonts, and Localization files. You can also export each of these files into your project. For <strong>Color Override File</strong>, copy the generated code into your application’s “<strong>Color Override</strong>” file. (This is documented in detail in the “<a href="https://platform.uno/docs/articles/external/uno.themes/doc/material-getting-started.html#customize-color-palette">Uno Material library → Customize Color Palette</a>” help page.)</li>
</ol>

<h3 id="6-build-in-visual-studio">6: Build in Visual Studio</h3>

<p>Moving the generated code (C# markup and XAML) to <a href="https://visualstudio.microsoft.com/">Visual Studio</a> is just as easy when your design is good enough to go into the development stage.</p>

<p>If you create a new project using the <a href="https://platform.uno/blog/the-new-uno-platform-solution-template-wizard/"><strong>Uno Solution Template Wizard for Visual Studio</strong></a>, this user-friendly tool will automatically configure your project to your exact preferences and will allow you to use as many (or as few) of the Uno Platform features as you’d like, including the <a href="https://platform.uno/docs/articles/external/uno.themes/doc/material-getting-started.html">Uno.Material theme</a>, which is made for designing applications that have a great look yet don’t feel too standard. Alternatively, you can use the <a href="https://platform.uno/docs/articles/features/fluent-styles.html">Fluent theme</a>, the default theme for WinUI-based applications.</p>

<p><strong>Note</strong>: <em>The Toolkit file’s default theme is</em> <strong><em>Material.</em></strong> <em>However, since Uno Platform supports overrides, you have the flexibility to customize your components and achieve a</em> <strong><em>Fluent</em></strong> <em>theme or any other style you like.</em></p>

<div class="partners__lead-place"></div>

<h2 id="practical-exercise-flight-app-ui-tutorial">Practical Exercise: Flight App UI Tutorial</h2>

<p>Let’s review together a detailed practical example!</p>

<p>In this mini-tutorial, I will guide you step-by-step through the process of effectively using Uno Toolkit components and mastering some of the capabilities of the Uno Figma plugin. By the end of the tutorial, you will have the tools and knowledge needed for creating elegant interfaces and how to generate C# Markup and XAML, which could be extended further by you or your team.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/9-uno-flights-cover.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="450"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/9-uno-flights-cover.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/9-uno-flights-cover.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/9-uno-flights-cover.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/9-uno-flights-cover.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/9-uno-flights-cover.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/9-uno-flights-cover.png"
			
			sizes="100vw"
			alt="Screenshot of a flight app user interface and the generated code."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Uno Flights: a tutorial that will teach you how to create a mobile Uno Platform app. (<a href='https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/9-uno-flights-cover.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h3 id="getting-started-with-the-tutorial-first-steps">Getting Started With The Tutorial: First Steps</h3>

<p>If you’re new to using the Uno Platform for Figma plugin, the first step is to <a href="https://aka.platform.uno/uno-figma-plugin">install it from the Figma community</a>. After downloading the plugin, proceed with the following steps:</p>

<ol>
<li>Navigate to the <a href="https://aka.platform.uno/uno-figma-material-toolkit"><strong>Uno Material Toolkit File</strong></a> in the Figma community and select <strong>Open in Figma</strong> to start a new project.</li>
<li>Setting up your project theme <em>first</em> is optional but recommended. You can set your desired theme from the <strong>Getting Started</strong> page (included in the file) or import a DSP (Design System Package) file to quickly transform your theme.</li>
<li>Create a new page. Within the <strong>Resources</strong> tab of the menu, under Components, find and select the “<strong>Standard Page Template</strong>.”</li>
<li>Right-click on the template and select <strong>Detach the instance</strong>.</li>
</ol>

<p>These are the initial steps for all new projects using the Uno Platform for Figma plugin and Uno Material Toolkit &mdash; not only the steps for this tutorial. This workflow will set you on the right path to creating various mobile app designs effectively.</p>

<h3 id="designing-with-uno-material-toolkit">Designing With Uno Material Toolkit</h3>

<p>You can follow along here with the <a href="https://www.figma.com/community/file/1263207005263866464">Uno Flights file template</a>, which you can use for reference. Please note that when building your UI design, you should only <strong>use components that are part of the material toolkit file</strong>. Refer to the components page to see the list of available components.</p>

<h4 id="step-1-search-results-sort-and-filter">Step 1: Search Results, Sort, And Filter</h4>

<p>First, implement the search results and the <strong>Sort and Filter</strong> action buttons by following these steps:</p>

<ol>
<li>Add a <strong>TextBox</strong> and change the placeholder text.</li>
<li>In the <strong>TextBox properties</strong>, toggle on a leading/trailing icon. <em>(optional)</em></li>
<li>Add <strong>Text</strong> to display the number of results and the associated text. (Use <kbd>Shift</kbd> + <kbd>A</kbd> to add them to an Auto Layout.)</li>
<li>Add an <strong>IconButton</strong> (use the components provided by the Material Toolkit) and swap the default icon to a Filter icon. Include accompanying Text for the icon, and group them within a frame with a horizontal Auto Layout.</li>
<li>Repeat the previous step for the filter action, adding an <strong>IconButton</strong> with a filter icon accompanied by Text and placing them in an Auto Layout.</li>
<li>Nest both actions within another Auto Layout.</li>
<li>Finally, group the three sections (number of results, sort action, and filter action) into an Auto Layout.</li>
<li>Add the <strong>SearchBox</strong> and your final Layout and nest them inside <strong>Content.Scrollable</strong>.</li>
</ol>

<p>By following these steps, you should see a result similar to the example below:</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/10-step1-results.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="620"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/10-step1-results.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/10-step1-results.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/10-step1-results.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/10-step1-results.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/10-step1-results.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/10-step1-results.png"
			
			sizes="100vw"
			alt="Screenshot of step 1 in the flight app tutorial: adding search and filter results."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Step 1: Adding the Result Actions. (<a href='https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/10-step1-results.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h4 id="step-2-flight-information">Step 2: Flight Information</h4>

<p>The <strong>Flight Itinerary</strong> block can be divided into three sections:</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/11-card-componenet.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="128"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/11-card-componenet.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/11-card-componenet.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/11-card-componenet.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/11-card-componenet.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/11-card-componenet.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/11-card-componenet.png"
			
			sizes="100vw"
			alt="The card component with flight information (step 2. in the flight app tutorial)."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Step 2: The result we are trying to achieve for the flight blocks. (<a href='https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/11-card-componenet.png'>Large preview</a>)
    </figcaption>
  
</figure>

<ul>
<li>Flight Times and the ProgressBar are included in the first Auto Layout.</li>
<li>Airport and Flight Information are organized in a separate Auto Layout.</li>
<li>Airline Information and Flight Costs are presented in a third Auto Layout.</li>
</ul>

<p><strong>Flight Times and ProgressBar</strong></p>

<ol>
<li>Insert two <strong>Text</strong> elements for arrival and departure times.</li>
<li>Locate the <strong>ProgressBar</strong> component in the <strong>Resources</strong> tab and add it between the two times created.</li>
<li>Group the three components (arrival time, ProgressBar, departure time) into an Auto Layout.</li>
<li>Add an icon and swap the instance with a plane icon.</li>
<li>Select the absolute position and place the plane icon at the beginning of the <strong>ProgressBar</strong>.</li>
</ol>

<p><strong>Flight Info</strong></p>

<ol>
<li>Insert <strong>Text</strong> for your flight time and flight status.</li>
<li>Apply an <strong>Auto Layout</strong> to organize them and set it to <strong>Fill</strong>.</li>
<li>Proceed to add <strong>Text</strong> for the Airport initials.</li>
<li>Combine the two Texts and the previously created Auto Layout into a new <strong>horizontal Auto Layout</strong>.</li>
</ol>

<p><strong>Airline Information</strong></p>

<ol>
<li>Add the necessary <strong>Text</strong> for Airline Information and pricing.</li>
<li>Select both Text elements and apply an <strong>Auto Layout</strong> to them.</li>
<li>Set the frame of the Auto Layout to <strong>Fill</strong>.</li>
<li>Adjust the <strong>horizontal gap</strong> as desired.</li>
</ol>

<p>Select the three sections you want to modify:</p>

<ol>
<li>Add a new <strong>Auto Layout</strong>.</li>
<li>Apply a Fill color to the new layout.</li>
<li>Adjust the vertical and horizontal spacing according to your preference.</li>
<li>Move your component to the Standard Page Template by dragging it below the <strong>content.Scrollable</strong> layer.</li>
</ol>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/12-step2-result.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="647"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/12-step2-result.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/12-step2-result.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/12-step2-result.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/12-step2-result.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/12-step2-result.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/12-step2-result.png"
			
			sizes="100vw"
			alt="The UI with the first card component created (step 2. completed)."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      The results after completing Step 2. (<a href='https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/12-step2-result.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h4 id="step-3-bottom-tabbar">Step 3. Bottom TabBar</h4>

<p>The <strong>Bottom TabBar</strong> is relatively simple to modify and is part of the Standard Page Template. To complete this section:</p>

<ol>
<li>Select each item from the Bottom <strong>TabBar</strong>.</li>
<li>Expand it to the lowest icon layer.</li>
<li>In the <strong>Design</strong> tab, replace the current instance with the appropriate one.</li>
<li>Next, select the associated Text and update it to match the corresponding menu item.</li>
</ol>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/13-step3.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="409"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/13-step3.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/13-step3.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/13-step3.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/13-step3.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/13-step3.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/13-step3.png"
			
			sizes="100vw"
			alt="Changing icons in the bottom tab bar screen (step 3. in progress)."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Step 3: Swapping icon instances in the Bottom TabBar (Swap instance → Local components → Icons). (<a href='https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/13-step3.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h4 id="step-4-preview-export-and-transition-from-figma-to-visual-studio">Step 4. Preview, Export, And Transition From Figma To Visual Studio</h4>

<p>Once the user interface design is finalized in Figma, the Uno Platform Plugin enables us to render and preview our application with the click of a button. Within the <strong>Previewer</strong>, you can interact with the components, such as clicking the buttons, scrolling, toggling various functionalities, and so on.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/14-step4-result.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="622"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/14-step4-result.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/14-step4-result.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/14-step4-result.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/14-step4-result.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/14-step4-result.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/14-step4-result.png"
			
			sizes="100vw"
			alt="Preview of final user interface (final step 4. now complete)."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Step 4: The result in the Plugin Previewer. (<a href='https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/14-step4-result.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>After previewing the app, we can examine the XAML code generated in the <strong>Export</strong> tab.</p>

<p>Open the Uno Figma Plugin (right-click the screen → <strong>Plugins</strong> → <strong>Uno Platform (Figma to C# or XAML</strong>).</p>

<p><strong>For XAML</strong></p>

<ol>
<li>You can change your namespace in the first tab (<strong>Properties</strong>) under <strong>Application</strong> (optional).</li>
<li>Go to the <strong>Export</strong> tab and select <strong>Copy to Clipboard</strong> (bottom right button).</li>
<li>Open Visual Studio and create a new project using the Uno App Template Wizard (this is where you will choose between using XAML or C# Markup for your user interface).</li>
<li>Open your <code>MainPage.xaml</code> file, remove the existing code, and paste your exported code from the Uno Figma Plugin.</li>
<li>Change your <code>x:class</code> and <code>xmlns:local</code> namespaces.</li>
<li>Export the color override file and paste it into your <code>ColorPaletteOverride.xaml</code>.</li>
</ol>

<p><strong>For C# Markup</strong></p>

<ol>
<li>Go to the <strong>Export</strong> tab and select all contents from the line after <code style="color: blue">this</code> to the semicolon <code style="color: blue">;</code> at the end. (See the screenshot below.)</li>
<li>Copy the selected code to the clipboard (<kbd>Ctrl</kbd>/<kbd>Cmd</kbd> + <kbd>C</kbd> on Win/Mac).</li>
<li>In Visual Studio, create a new project using the Uno App Template Wizard. (This is where you will choose between using XAML or C# Markup for your user interface.)</li>
<li>Open <code>MainPage.cs</code> and replace all the Page contents with the copied code.</li>
<li>To set the appropriate font size for all buttons, access the <code>MaterialFontsOverride.cs</code> file in the <code>Style</code> folder. Go to the Figma Plugin, and in the <strong>Export</strong> tab, select <strong>Fonts Override File</strong> from the dropdown menu. Copy the content in the <strong>ResourceDictionary</strong> and replace it in your <code>MaterialFontsOverride.cs</code>.</li>
</ol>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/16-figma-export-csharp.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="637"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/16-figma-export-csharp.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/16-figma-export-csharp.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/16-figma-export-csharp.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/16-figma-export-csharp.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/16-figma-export-csharp.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/16-figma-export-csharp.png"
			
			sizes="100vw"
			alt="Preview of the C# markup code when you need to copy it to the clipboard."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Example of where to start when you need to copy the code to the clipboard. (<a href='https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/16-figma-export-csharp.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Here’s an example of the generated <strong>XAML</strong> (and also <strong>C#</strong>) code that you can import into Microsoft Visual Studio:</p>

<p>⏬ <a href="https://www.smashingmagazine.com/provide/flightXAML.txt">flightXAML.txt</a> (38 kB)</p>

<p>⏬ <a href="https://www.smashingmagazine.com/provide/flightCsharp.txt">flightCsharp.txt</a> (56 kB)</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/15-design-code-ide.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="412"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/15-design-code-ide.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/15-design-code-ide.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/15-design-code-ide.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/15-design-code-ide.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/15-design-code-ide.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/15-design-code-ide.png"
			
			sizes="100vw"
			alt="Screenshot of the exported XAML code of the UI in the emulator."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Design-to-code results: exported XAML code. (<a href='https://files.smashing.media/articles/design-to-code-handoff-process-uno-platform-figma/15-design-code-ide.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h2 id="conclusion">Conclusion</h2>

<p>Harmonizing design and development is no easy task, and the nuances between teams make it so there is no one-size-fits-all solution. However, by focusing on the areas that most often affect productivity, the Uno Platform for Figma tool helps enhance designer-developer workflows. It facilitates the efficient creation of high-fidelity designs, interactive prototypes, and the export of responsive code, making the entire process more efficient.</p>

<p>The examples provided in the article primarily showcase working with mobile design versions. However, there are no limitations in the document or the generated code that restrict you from creating suitable versions for desktops, laptops, tablets, and just the world of the World Wide Web. Specify the desired resolutions and responsive elements (and how they should behave), and the designs you create should be easily adaptable across different platforms and screen sizes.</p>

<h3 id="further-reading">Further Reading</h3>

<ul>
<li>“<a href="https://platform.uno/blog/uno-platform-5-0/">Five is for 5X productivity. Announcing Uno Platform 5.0</a>,” <em>(Uno Platform )</em><br />
This article provides an overview of all the new features available in the Uno Platform, including the new Figma to C# Markup plugin feature.</li>
<li>“<a href="https://platform.uno/blog/intro-to-figma-for-net-developers/">Intro to Figma for .NET Developers</a>,” <em>(Uno Platform )</em><br />
This article provides an overview of Figma and its features and how .NET developers can use it together with the Uno Platform to streamline their design-to-development workflows.</li>
<li>“<a href="https://www.youtube.com/watch?v=t05lQ4ej47k">Uno Platform 5.0 &mdash; Figma plugin, C# Markup, and Hot Reload showcase via Uno Tube Player sample app</a>,” <em>(YouTube)</em><br />
This is a short video highlight for Uno Platform v. 5.0, edited from the following steps in the <a href="https://www.figma.com/community/file/1301577692003051222/tube-player-workshop">Tube Player workshop</a> (this is a Figma Design file which is part of the Tube Player workshop and is tailored to .NET developers specifically).</li>
<li>“<a href="https://www.youtube.com/watch?v=8b2oH-BQgms">Uno Platform for Figma &mdash; Uno Flight speed build</a>,” <em>(YouTube)</em><br />
A short video that shows the making of the Uno Flight app UI compressed into only a minute and a half.</li>
<li>“<a href="https://platform.uno/blog/building-a-login-page-with-uno-platform-and-figma/">Building a Login Page with Uno Platform and Figma</a>,” <em>(Uno Platform)</em><br />
The Uno Platform’s plugin and toolkit offer a large library of ready-to-use components, allowing developers and designers to take advantage of a set of higher-level user interface controls designed specifically for multi-platform, responsive applications.</li>
<li>“<a href="https://platform.uno/blog/building-a-profile-page-with-uno-platform-for-figma/">Building a Profile Page with Uno Platform for Figma</a>,” <em>(Uno Platform)</em><br />
In this tutorial, you will learn how to build a completely functional Profile page using Figma and Uno Platform and how to generate responsive and extendable XAML code.</li>
<li>“<a href="https://platform.uno/blog/replicating-pet-adoption-ui-with-uno-platform-and-figma/">Replicating Pet Adoption UI with Uno Platform and Figma</a>,” <em>(Uno Platform)</em><br />
This tutorial will walk you through creating a Pet Adopt user interface mobile screen and exporting your Figma designs into code, including setting up your Figma file and designing using Uno Material Toolkit components.</li>
<li>“<a href="https://platform.uno/blog/from-figma-to-visual-studio-adding-back-end-logic-to-goodreads-app/">From Figma to Visual Studio &mdash; Adding Back-End Logic to Goodreads App</a>,” <em>(Uno Platform)</em><br />
The Uno Platform has an XAML tab (which houses the generated code for the page you created in Figma) and a Themes tab (which houses the Resource Dictionary for the page you created). This tutorial contains a working Goodreads sample and provides many details as to using the XAML and Themes tabs.</li>
<li>“<a href="https://platform.uno/blog/replicating-a-dating-app-ui-with-net-uno-platform-and-figma/">Replicating a Dating App UI with .NET, Uno Platform and Figma</a>,” <em>(Uno Platform)</em><br />
In this tutorial, you’ll learn how to use Uno Platform to create a dating app user interface, covering in detail various sections and components of the interface; at the end, you’ll also be able to export the design into Visual Studio Code.</li>
<li>“<a href="https://platform.uno/docs/articles/external/uno.toolkit.ui/doc/getting-started.html">Getting Started with Uno Toolkit</a>,” <em>(Uno Platform)</em><br />
Detailed developer documentation pages for working with Uno Platform.</li>
<li>“<a href="https://www.techrepublic.com/article/best-ide-software/">The 12 best IDEs for programming</a>,” Franklin Okeke<br />
To keep up with the fast pace of emerging technologies, there has been an increasing demand for IDEs among software development companies. We will explore the 12 best IDEs that currently offer valuable solutions to programmers.</li>
<li>“<a href="https://medium.com/purplebricks-digital/why-we-chose-figma-as-our-primary-design-tool-e89d371f6eec">Why we chose Figma as our primary design tool</a>,” Simon Harper <em>(Purplebricks Digital)</em><br />
Comparing the must-haves against the features of a list of possible design apps we compiled (including Sketch, Axure RP, Framer, and more), Figma came out as the clear forerunner. It met all of our key feature requirements but surprised us with a lot of other things along the way.</li>
<li>“<a href="https://blog.zomato.com/why-we-switched-to-figma-as-a-primary-design-tool-at-zomato">Why we switched to Figma as the primary design tool at Zomato</a>,” Vijay Verma<br />
Before Figma, several other tools were used to facilitate the exchange of design mockups and updates; after Figma, the need to use other tools and services was reduced as everything comes in one single package.</li>
<li>“<a href="https://www.smashingmagazine.com/2023/03/best-handoff-is-no-handoff/">The Best Handoff Is No Handoff</a>,” Vitaly Friedman <em>(Smashing Magazine)</em><br />
Design handoffs are often inefficient and painful; they cause frustration, friction, and a lot of back and forth. Can we avoid them altogether? This article discusses in detail the “No Handoff” fluid model, where product and engineering teams work on the product iteratively all the time, with functional prototyping being the central method of working together.</li>
<li>“<a href="https://www.smashingmagazine.com/2023/05/designing-better-design-handoff-file-figma/">Designing A Better Design Handoff File In Figma</a>,” Ben Shih <em>(Smashing Magazine)</em><br />
Creating an effective handoff process from design to development is a critical step in any product development cycle. This article shares many practical tips to enhance the handoff process between design and development in product development, with guidelines for effective communication, documentation, design details, version control, and plugin usage.</li>
<li>“<a href="https://medium.com/sketch-app-sources/how-i-use-sketch-with-zeplin-to-design-and-specify-apps-71979ccf8f72">How I use Sketch with Zeplin to Design and Specify Apps</a>,” Marc Decerle<br />
Sketch is a very powerful tool in combination with Zeplin. In this article, the author describes how he organizes his Sketch documents and how he uses Sketch in conjunction with Zeplin.</li>
<li><a href="https://github.com/AdobeXD/design-system-package-dsp">Design System Package (DSP)</a><br />
This document describes the Design System Package structure, including details on how each internal file or folder should be used.</li>
</ul>

<div class="signature">
  <img src="https://www.smashingmagazine.com/images/logo/logo--red.png" alt="Smashing Editorial" width="35" height="46" loading="lazy" decoding="async" />
  <span>(mb, yk)</span>
</div>


              </article>
            </body>
          </html>
        ]]></content:encoded></item><item><author>Ben Shih</author><title>Designing A Better Design Handoff File In Figma</title><link>https://www.smashingmagazine.com/2023/05/designing-better-design-handoff-file-figma/</link><pubDate>Fri, 26 May 2023 15:30:00 +0000</pubDate><guid>https://www.smashingmagazine.com/2023/05/designing-better-design-handoff-file-figma/</guid><description>Practical tips to enhance the handoff process between design and development in product development. With guidelines for effective communication, documentation, design details, version control, and plugin usage.</description><content:encoded><![CDATA[
          <html>
            <head>
              <meta charset="utf-8">
              <link rel="canonical" href="https://www.smashingmagazine.com/2023/05/designing-better-design-handoff-file-figma/" />
              <title>Designing A Better Design Handoff File In Figma</title>
            </head>
            <body>
              <article>
                <header>
                  <h1>Designing A Better Design Handoff File In Figma</h1>
                  
                    
                    <address>Ben Shih</address>
                  
                  <time datetime="2023-05-26T15:30:00&#43;00:00" class="op-published">2023-05-26T15:30:00+00:00</time>
                  <time datetime="2023-05-26T15:30:00&#43;00:00" class="op-modified">2026-02-09T03:03:08+00:00</time>
                </header>
                
                

<p>Creating an effective handoff process from design to development is a critical step in any product development cycle. However, as any designer knows, it can be a nerve-wracking experience to send your carefully crafted design off to the dev team. It’s like waiting for a cake to bake &mdash; you can’t help but wonder how it will evolve in the oven and how it will taste when you take it out of the oven.</p>

<p>The relationship between designers and developers has always been a little rocky. Despite tools like Figma’s <a href="https://help.figma.com/hc/en-us/articles/360055203533-Use-the-Inspect-panel">Inspect feature</a> (which allows developers to inspect designs and potentially convert them to code in a more streamlined way), there are still many barriers between the two roles. Often, design details are hidden within even more detailed parts, making it difficult for developers to accurately interpret the designer’s intentions.</p>

<p>For instance, when designing an image, a designer might import an image, adjust its style, and call it done. More sophisticated designers might also wrap the image in a frame or <a href="https://help.figma.com/hc/en-us/articles/5731482952599-Using-auto-layout">auto layout</a> so it better matches how developers will later convert it to code. But even then, many details could still be missing. The main problem here is that <strong>designers typically create their designs within a finite workspace</strong> (a frame with a specific width). In reality, however, the design elements will need to adapt to a variety of different environments, such as varying device sizes, window widths, screen resolutions, and other factors that can influence how the design is displayed. Therefore, developers will always come back with the following questions:</p>

<ul>
<li>What should be the minimum/maximum width/height of the image?</li>
<li>What is its content style?</li>
<li>What effects need to be added?</li>
</ul>

<p>As in reality, these are the details needed to be addressed.</p>

<p>Designers, let’s face the truth: there’s <em>no perfect handoff</em>.</p>

<blockquote class="pull-quote">
  <p>
    <a class="pull-quote__link" aria-label="Share on Twitter" href="https://twitter.com/share?text=%0aEvery%20developer%20works,%20thinks,%20and%20writes%20code%20differently,%20which%20means%20there%20is%20no%20such%20thing%20as%20the%20ideal%20handoff%20document.%20Instead,%20our%20focus%20should%20be%20on%20creating%20a%20non-perfect%20but%20still%20effective%20and%20usable%20handoff%20process.%0a&url=https://smashingmagazine.com%2f2023%2f05%2fdesigning-better-design-handoff-file-figma%2f">
      
Every developer works, thinks, and writes code differently, which means there is no such thing as the ideal handoff document. Instead, our focus should be on creating a non-perfect but still effective and usable handoff process.

    </a>
  </p>
  <div class="pull-quote__quotation">
    <div class="pull-quote__bg">
      <span class="pull-quote__symbol">“</span></div>
  </div>
</blockquote>

<p>In this article, we will explore <em>how</em> to create a design handoff document that attempts to strike the right balance between providing developers with the information they need while still allowing them the flexibility to bring the design to life in their own way.</p>

<p><strong>How Can The Handoff Files Be improved?</strong></p>

<h2 id="1-talk-to-developers-more-often">1. Talk To Developers More Often</h2>

<p>Design is often marked as complete once the design handoff file is created and the developers start transforming it into code. However, in reality, the design is only complete when the user finds the experience pleasant.</p>

<p>Therefore, crafting the design handoff file and having the developer help bring your design to the user is essentially another case study on top of the one you have already worked on. To make it perfect, just as you would talk to users, you also need to communicate with engineers &mdash; to better understand their needs, how they read your file, and perhaps even teach them a few key things about using Figma (if Figma is your primary design tool).</p>

<p>Here are a few tips you can teach your developers to make their lives easier when working with Figma:</p>

<h3 id="show-developers-the-superpower-of-the-inspect-panel">Show Developers The Superpower Of The Inspect Panel</h3>

<p>Figma’s Inspect feature allows developers to see the precise design style that you’ve used, which can greatly simplify the development process. Additionally, if you have a design library in place, Inspect will display the name of each component and style that you’ve used. This can be incredibly helpful for developers, especially if they’re working with a style guide, as they can use the component or style directly to match your design with ease.</p>

<p>In addition to encouraging developers to take advantage of the Inspect panel, it’s sometimes helpful to <strong>review your own design in a read-only view</strong>. This allows you to see precisely what the developers will see in the Inspect panel and ensures that components are named accurately, colors are properly linked to the design system, and other vital details are structured correctly.</p>














<figure class="
  
  
  ">
  
    <a href="https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-figma-inspect.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="585"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-figma-inspect.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-figma-inspect.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-figma-inspect.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-figma-inspect.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-figma-inspect.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-figma-inspect.png"
			
			sizes="100vw"
			alt="An image featuring Figma’s inspect feature"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Figma’s Inspect panel allows you to view properties and values for any selected object/layer. (Image source: “<a href='https://help.figma.com/hc/en-us/articles/360055203533-Use-the-Inspect-panel'>Use the Inspect panel</a>” help page) (<a href='https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-figma-inspect.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h3 id="share-with-developers-the-way-to-export-images-icons">Share With Developers The Way To Export Images/Icons</h3>

<p>Handling image assets, including icons, illustrations, and images, is also an essential part of the handoff process, as the wrong format might result in a poor presentation in the production environment.</p>

<p>Be sure to align with your developers on how they would like you to handle the icons and images. It could either be the case where they would prefer you to export all images and icons in a single ZIP file and share it with them or the case where they would prefer to export the images and icons on their own. If it’s the latter, it’s important to explain in detail the correct way to export the images and icons so that they can handle the export process on their own!</p>














<figure class="
  
  
  ">
  
    <a href="https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-export.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="509"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-export.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-export.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-export.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-export.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-export.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-export.png"
			
			sizes="100vw"
			alt="An image featuring Figma’s export feature"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Figma’s export feature allows designers and developers to export content into different formats. (<a href='https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-export.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h3 id="encourage-them-to-use-figma-s-commenting-feature">Encourage Them To Use Figma’s Commenting Feature</h3>

<p>It’s common for developers to have questions about the design during the handoff process. To make it easier for everyone involved, consider teaching them to leave comments directly in Figma instead of sending you a message. This way, the comments are visible to everyone and provide context for the issue at hand. Additional features, such as comment reactions and the “mark as resolved” button, further enable better interaction between team members and help everyone keep track of whether an issue has been addressed or not.</p>














<figure class="
  
  
  ">
  
    <a href="https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-figma-comment.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="628"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-figma-comment.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-figma-comment.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-figma-comment.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-figma-comment.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-figma-comment.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-figma-comment.png"
			
			sizes="100vw"
			alt="An image featuring Figma’s comment feature"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Figma’s <a href='https://help.figma.com/hc/en-us/articles/360041068574-Add-comments-to-files'>comment feature</a>. (<a href='https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-figma-comment.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h3 id="leverage-cursor-chat">Leverage Cursor Chat</h3>

<p>If you and the developers are both working within the same Figma file, you can also make use of the <a href="https://help.figma.com/hc/en-us/articles/1500004414842-Send-messages-with-cursor-chat">cursor chat feature</a> to clarify any questions or issues that arise. This can be a fun and useful way to collaborate and ensure that everyone is on the same page.</p>














<figure class="
  
  
  ">
  
    <a href="https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-figma-cursor-chat.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="555"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-figma-cursor-chat.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-figma-cursor-chat.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-figma-cursor-chat.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-figma-cursor-chat.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-figma-cursor-chat.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-figma-cursor-chat.png"
			
			sizes="100vw"
			alt="An image featuring Figma’s cursor-chat feature"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Figma’s <a href='https://help.figma.com/hc/en-us/articles/1500004414842-Send-messages-with-cursor-chat'>cursor-chat feature</a>. (<a href='https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-figma-cursor-chat.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h3 id="use-figma-audio-chat">Use Figma Audio Chat</h3>

<p>If you need to discuss a complex issue in more detail, consider using Figma’s audio chat feature. This can be a quick and efficient way to clarify any questions or concerns arising during the development process.</p>














<figure class="
  
  
  ">
  
    <a href="https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-figma-audio-chat.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="600"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-figma-audio-chat.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-figma-audio-chat.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-figma-audio-chat.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-figma-audio-chat.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-figma-audio-chat.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-figma-audio-chat.jpg"
			
			sizes="100vw"
			alt="An image featuring Figma’s audio chat feature"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Figma’s audio chat feature. (Image source: “<a href='https://help.figma.com/hc/en-us/articles/1500004414622-Use-audio-to-chat-with-your-team'>Use audio to chat with your team</a>” help page) (<a href='https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-figma-audio-chat.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<p>It’s important to keep in mind that <strong>effective collaboration relies on good communication</strong>. Therefore, it’s crucial to talk to your developers regularly and understand their approach to reading and interpreting your designs, especially when you first start working with them. This sets the foundation for a productive and successful partnership.</p>

<div data-audience="non-subscriber" data-remove="true" class="feature-panel-container">

<aside class="feature-panel" style="">
<div class="feature-panel-left-col">

<div class="feature-panel-description"><p><strong>Web forms</strong> are at the center of every meaningful interaction. Meet Adam Silver&rsquo;s <strong><a href="https://www.smashingmagazine.com/printed-books/form-design-patterns/">Form Design Patterns</a></strong>, a practical guide to <strong>designing and building forms</strong> for the web.</p>
<a data-instant href="https://www.smashingmagazine.com/printed-books/form-design-patterns/" class="btn btn--green btn--large" style="">Jump to table of contents&nbsp;↬</a></div>
</div>
<div class="feature-panel-right-col"><a data-instant href="https://www.smashingmagazine.com/printed-books/form-design-patterns/" class="feature-panel-image-link">
<div class="feature-panel-image"><picture><source type="image/avif" srcSet="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/64e57b41-b7f1-4ae3-886a-806cce580ef9/form-design-patterns-shop-image-1-1.avif" />
<img
    loading="lazy"
    decoding="async"
    class="feature-panel-image-img"
    src="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/51e0f837-d85d-4b28-bfab-1c9a47f0ce33/form-design-patterns-shop-image.png"
    alt="Feature Panel"
    width="481"
    height="698"
/>
</picture>
</div>
</a>
</div>
</aside>
</div>

<h2 id="2-documenting-design-decisions-for-you-and-developers">2. Documenting Design Decisions For You And Developers</h2>

<p>We have to be honest, the reason why building our design portfolios often takes <em>a</em> <em>lot</em> of time is the fact that we do not document every design decision along the way, and so we need to start building the case studies later by trying our best to fetch the design files and all the stuff we need.</p>

<p>I find it useful to document my decisions in Figma, not only just designs but, if appropriate, also competitor analysis, problem statements, and user journeys, and leave the links to these pages within the handoff file as well. The developer might not read it, but I often hear from the developers in my team that they like it as they can also dig into what the designers think while working on the design, and they can learn tips for building a product from us as well.</p>














<figure class="
  
  
  ">
  
    <a href="https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-overview.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="197"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-overview.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-overview.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-overview.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-overview.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-overview.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-overview.jpg"
			
			sizes="100vw"
			alt="An example of how I structured my Figma file. I usually place an overview of the projects, current screens, and problems in the Figma file so that developers can see it"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      An example of how I am structuring a Figma design file. (<a href='https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-overview.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<h2 id="3-don-t-just-leave-the-design-there-add-the-details">3. Don’t Just Leave The Design There. Add The Details</h2>

<p>When it comes to design, <em>details matter</em> &mdash; just leaving the design “as is” won’t cut it. Adding details not only helps developers better understand the design, but it can also make their lives easier. Here are some tips for adding those crucial design details to your handoff.</p>

<h3 id="number-the-frame-flow-if-possible">Number The Frame/Flow If Possible</h3>

<p>I really like the Figma <a href="https://www.figma.com/community/file/1004041613962064465"><strong>handoff template</strong></a> that Luis Ouriach (<a href="https://medium.com/@disco*lu">Medium</a>, <a href="https://twitter.com/disco*lu">Twitter</a>) created. The numbering and title pattern makes it easy for developers to understand which screen belongs to which flow immediately. However, it can be complicated to update the design later as the numbering and title need to be <em>manually</em> updated.</p>

<p><strong>Note:</strong> <em>While there are plugins available (like, for example, <a href="https://www.figma.com/community/plugin/1057630145566901048">Renamed</a>), which can help with renaming multiple frames and layers all at once, this workflow can still be inconvenient when dealing with more complicated naming patterns. For instance, updating “1. Welcome → 2. Onboarding → 3. Homepage” into “1. Welcome → 2. Onboarding → 3. Sign up → 4. Homepage” can become quite a hassle. Therefore, one alternative approach is to break down the screens into different tickets or user journeys and assign a number that matches each ticket/user journey.</em></p>














<figure class="
  
  
  ">
  
    <a href="https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-labelling.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="590"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-labelling.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-labelling.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-labelling.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-labelling.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-labelling.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-labelling.png"
			
			sizes="100vw"
			alt="An example of how design can be labeled with numbers"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      An example of a numbering system based on <a href='https://twitter.com/disco_lu'>Luis</a>’s <a href='https://www.figma.com/community/file/1004041613962064465'>Figma design template</a>. (<a href='https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-labelling.png'>Large preview</a>)
    </figcaption>
  
</figure>














<figure class="
  
  
  ">
  
    <a href="https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-numbering-onflow.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="472"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-numbering-onflow.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-numbering-onflow.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-numbering-onflow.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-numbering-onflow.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-numbering-onflow.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-numbering-onflow.png"
			
			sizes="100vw"
			alt="An example of how I structured the screen by breaking down the screens into different tickets or user journeys"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
       An example of an alternative approach of structuring the screens. (<a href='https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-numbering-onflow.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h3 id="name-the-layers-if-possible">Name The Layers If Possible</h3>

<p>We talked about numbering/naming the frames, but naming the layers is equally important! Imagine trying to navigate a Figma file cluttered with layers and labels like “Frame 3123,” “Rectangle 8,” and “Circle 35.” This can be confusing and time-consuming for both designers and developers, as they need to sift through numerous unnamed layers to identify the correct one.</p>

<p><strong>Well-named layers facilitate better collaboration</strong>, as team members can quickly locate and comprehend the purpose of each element. This also helps ensure consistency and accuracy when translating designs into code.</p>

<p>If you search around in Figma, you will find a number of plugins that can help you with naming the layers in a more systematic way.</p>

<h3 id="add-the-details-for-interaction-make-use-of-figma-s-section-feature">Add The Details For Interaction: Make Use Of Figma’s Section Feature</h3>

<p>This might seem trivial, but I consider it important. Design details shouldn’t be something like “This design does X, and if you press that, it will do Y.” Instead, it’s crucial to include details like the hover state, initial state, max width/height, and the outcome of different use cases.</p>

<p>For this reason, I appreciate the new section feature that Figma has released. It allows me to have a big design at the top so that developers can see all of the design at once and then look at the section details for all the design and interaction details.</p>














<figure class="
  
  
  ">
  
    <a href="https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-figma-section.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="457"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-figma-section.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-figma-section.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-figma-section.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-figma-section.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-figma-section.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-figma-section.jpg"
			
			sizes="100vw"
			alt="An example of how I use Figma Sections to better describe interaction and design details"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      I like to use <a href='https://help.figma.com/hc/en-us/articles/9771500257687-Organize-your-canvas-with-sections'>Sections</a> to describe the details of the design. With this approach, I can create direct links to specific sections and guide the developer to review them with more ease. (<a href='https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-figma-section.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<h3 id="make-use-of-the-interactive-prototype-and-figjam-features-to-show-the-user-flow">Make Use Of The Interactive Prototype And FigJam Features To Show The User Flow</h3>

<p>Additionally, try to share with the developers how the design screens connect to one another. You can use the interactive prototype feature within Figma to connect the screens and make them move so that developers can understand the logic. Alternatively, you can use FigJam to connect the screens, allowing developers to see how everything is connected at a glance.</p>














<figure class="
  
  
  ">
  
    <a href="https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-figjam.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="470"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-figjam.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-figjam.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-figjam.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-figjam.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-figjam.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-figjam.jpg"
			
			sizes="100vw"
			alt="An example of how Figjam can connect different screens and flows"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      FigJam allows designers to connect screens and present them easily. (<a href='https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-figjam.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<div class="partners__lead-place"></div>

<h2 id="4-the-secret-weapon-is-adding-loom-video">4. The Secret Weapon Is Adding Loom Video</h2>

<p>Loom video is a lifesaver for us. You only need to record it once, and then you can share it with anyone interested in the details of your design. Therefore, I highly recommend making use of Loom! For every design handoff file, I always record a video to walk through the design. For more complicated designs, I will record a separate video specifically describing the details so that I don’t need to waste other people’s time if they’re not interested.</p>

<p>To attach the Loom video, I use the <em>Loom</em> plugin and place it right beside the handoff file. Developers can play it as many times as needed without even disturbing you, asking you more questions, and so on.</p>

<p>→ Download the <a href="https://www.figma.com/community/plugin/1050134017138821899/Loom-Embed"><strong>Loom Embed</strong></a> Figma plugin</p>














<figure class="
  
  
  ">
  
    <a href="https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-loom.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="452"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-loom.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-loom.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-loom.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-loom.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-loom.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-loom.jpg"
			
			sizes="100vw"
			alt="An example of how I attach Loom video to my Figma file using Figma’s Loom widget"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      An example of how I attach my Loom video. (<a href='https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-loom.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<h2 id="5-the-biggest-fear-version-control">5. The Biggest Fear: Version Control</h2>

<p>In an ideal world, the design would be completely finalized before developers start coding. But in reality, design is always subject to adjustments, even after development has already begun. That’s why <a href="https://www.atlassian.com/git/tutorials/what-is-version-control#:~:text=Version%20control%2C%20also%20known%20as,to%20source%20code%20over%20time.">version control</a> is such an important topic.</p>

<p>Although Figma has a branching feature for enterprise customers to create new designs in a separate branch, I find it helpful to keep a few extra things in your design file.</p>

<h3 id="have-a-single-source-of-truth">Have A Single Source Of Truth</h3>

<p>Always ensure that the developer handoff file you share with your team is the single source of truth for the latest design. If you make any changes, update the file directly, and keep the original as a duplicate for reference. This will prevent confusion and avoid pointing developers to different pages in Figma.</p>

<p>If you have access to the <strong>branching feature</strong> in Figma, it can be highly beneficial to utilize it to further streamline your workflow. When I need to update a handoff file that I have already shared with the developers, my typical process is to create a new branch in Figma first. Then I update the developer handoff file in that branch, send it to the relevant stakeholders for review, and finally merge it back into the original developer handoff file once everything is confirmed. This ensures that the link to the developer handoff file remains <em>unchanged</em> for the developers.</p>














<figure class="
  
  
  ">
  
    <a href="https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-file-layers.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="408"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-file-layers.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-file-layers.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-file-layers.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-file-layers.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-file-layers.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-file-layers.png"
			
			sizes="100vw"
			alt="An example of how I use the branching feature in Figma to manage my design versions"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      An example of how my Branches look like in Figma. (<a href='https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-file-layers.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h3 id="changelogs-future-plan">Changelogs/Future Plan</h3>

<p>Include a <a href="https://en.wikipedia.org/wiki/Changelog">changelog</a> in the handoff file to help developers understand the latest changes made to the design.</p>

<p>Similarly to changelogs, if you already know of future plans to adjust the design, write them down somewhere in Figma so that the developers can understand what changes are to be expected.</p>














<figure class="
  
  
  ">
  
    <a href="https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-changelog.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="499"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-changelog.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-changelog.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-changelog.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-changelog.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-changelog.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-changelog.jpg"
			
			sizes="100vw"
			alt="An example of how to present changelog and todo in Figma"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      An example of how my changelog looks like. (<a href='https://files.smashing.media/articles/designing-better-design-handoff-file-figma/content-changelog.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<h2 id="6-make-use-of-plugins">6. Make Use Of Plugins</h2>

<p>There are also a number of plugins to help you with creating your handoff:</p>

<ul>
<li><strong>EightShapes Specs</strong><br />
<em>EightShapes Specs</em> creates specs for your design automatically with just one click.<br />
→ Download the <strong><a href="https://www.figma.com/community/plugin/1205622541257680763/EightShapes-Specs">EightShapes Spec</a></strong> Figma plugin</li>
<li><strong>Autoflow</strong><br />
<em>Autoflow</em> allows you to connect the screens visually without using FigJam.<br />
→ Download the <strong><a href="https://www.figma.com/community/plugin/733902567457592893">Autoflow</a></strong> Figma plugin</li>
<li><strong>Style Organizer</strong><br />
<em>Style Organizer</em> allows you to make sure all of your styles are linked to your component/style so that developers won’t need to read hex code in any case.<br />
→ Download the <strong><a href="https://www.figma.com/community/plugin/816627069580757929">Style Organizer</a></strong> Figma plugin</li>
</ul>

<div class="partners__lead-place"></div>

<h2 id="7-the-ultimate-goal-is-to-have-a-design-system">7. The Ultimate Goal Is To Have A Design System</h2>

<p>If you want to take things a step or two further, consider pushing your team to adopt a <a href="https://www.invisionapp.com/inside-design/guide-to-design-systems/"><strong>design system</strong></a>. This will enable the designs created in Figma to be more closely aligned with what developers expect in the code. You can match token names and name your layers/frames to align with how developers name their containers and match them in your design system.</p>

<p>Here are some of the benefits of using a design system:</p>

<ul>
<li><strong>Consistency</strong><br />
A design system ensures a <em>unified visual language</em> across different platforms, resulting in a more consistent user experience.</li>
<li><strong>Efficiency</strong><br />
With a design system in place, designers and developers can <em>reuse components and patterns</em>, reducing the time spent on creating and updating individual elements.</li>
<li><strong>Collaboration</strong><br />
A design system facilitates better communication between designers and developers by establishing a <em>shared language</em> and understanding of components and their usage.</li>
</ul>

<p><strong>Note:</strong> <em>If you would like to dig deeper into the topic of design systems, I recommend reading some of the <a href="https://www.smashingmagazine.com/category/design-systems/">Smashing Magazine articles on this topic</a>.</em></p>

<h2 id="conclusion-keep-improving-the-non-perfect">Conclusion: Keep Improving The Non-perfect</h2>

<p>Ultimately, as I mentioned at the beginning, there’s no <em>one-size-fits-all approach</em> to developer handoff, as it depends on various factors such as product design and the engineers we work with. However, what we can do is work closely with our engineers, communicate with them regularly, and collaborate to find solutions that make everyone’s lives easier. Just like our designs, the key to successful developer handoff is prioritizing good communication and collaboration.</p>

<h3 id="further-reading">Further Reading</h3>

<ul>
<li>“<a href="https://www.interaction-design.org/literature/topics/design-handoffs">Design Handoffs</a>,” Interactive Design Foundation<br />
Design handoff is the process of handing over a finished design for implementation. It involves transferring a designer’s intent, knowledge, and specifications for a design and can include visual elements, user flows, interaction, animation, copy, responsive breakpoints, accessibility, and data validations.</li>
<li>“<a href="https://phase.com/magazine/designer-and-developer-handoff-guide/">A Comprehensive Guide to Executing The Perfect Design-to-Development Handoff</a>,” Phase Mag</li>
<li>“<a href="https://blog.zeplin.io/design-handoff-101-how-to-handoff-designs-to-developers">Design Handoff 101: How to handoff designs to developers</a>,” Zeplin Blog<br />
Before we had tools like Figma, design handoff was a file-sharing nightmare for designers. When UI designs were ready for developers to start building, nothing could begin until designers manually added redlines to their latest local design file, saved it as a locked Sketch or Photoshop file or a PDF, and made sure developers were working on the correct file after every update. But those design tools completely changed the way teams collaborate around UI design &mdash; including the way design handoff happens.</li>
<li>“<a href="https://twitter.com/101babich/status/1635584302200274944">How to communicate design to developers (checklist)</a>,” <a href="https://twitter.com/@101babich">Nick Babich</a></li>
<li>“<a href="https://www.smashingmagazine.com/2014/10/front-end-development-ode-to-specifications/">A Front-End Developer’s Ode To Specifications</a>,” Dmitriy Fabrikant, Smashing Magazine<br />
In the physical world, no one builds anything without detailed blueprints because people’s lives are on the line. In the digital world, the stakes just aren’t as high. It’s called “software” for a reason: when it hits you in the face, it doesn’t hurt as much. But, while the users’ lives might not be on the line, design blueprints (also called design specifications or specs) could mean the difference between a correctly implemented design that improves the user experience and satisfies customers and a confusing and inconsistent design that corrupts the user experience and displeases customers. (Editor’s Note: Before tools like Figma were on the rise, it was even more difficult for designers and developers to communicate and so tools such as Specctr &mdash; which this article mentions &mdash; were much needed. As of today, this article from 2014 is a bit of a trip into history, but it will also give you a fairly good idea of what design blueprints are and why they are so important in the designer-developer handoff process.)</li>
<li>“<a href="https://www.smashingmagazine.com/2020/09/figma-developers-guide/">Everything Developers Need To Know About Figma</a>,” Jurn van Wissen, Smashing Magazine<br />
Unlike most design software, Figma is free and browser-based, so developers can easily access the full design files making the developer handoff process significantly smoother. This article teaches developers who have nothing but a basic understanding of design tools everything they need to know to work with Figma.</li>
<li>“<a href="https://www.smashingmagazine.com/2023/02/meet-penpot-open-source-design-platform-designers-developers/">Penpot, An Open-Source Design Platform Made For Designers And Developers Alike</a>,” Mikołaj Dobrucki, Smashing Magazine<br />
In the ever-evolving design tools landscape, it can be difficult to keep up with the latest and greatest. In this article, we’ll take a closer look at Penpot, the first design and prototyping tool that’s fully open-source and based on open web standards, making it an ideal choice for both designers and developers. (Editor’s Note: Today, it’s not always “There’s only Figma.” There are alternatives, and this article takes a good look at one of them &mdash; <a href="https://penpot.app/">Penpot</a>.)</li>
<li>“<a href="https://www.smashingmagazine.com/2023/03/best-handoff-is-no-handoff/">The Best Handoff Is No Handoff</a>,” Vitaly Friedman, Smashing Magazine<br />
Design handoffs are inefficient and painful. They cause frustration, friction, and a lot of back and forth. Can we avoid them altogether? Of course, we can! Let’s see how to do just that.</li>
</ul>

<div class="signature">
  <img src="https://www.smashingmagazine.com/images/logo/logo--red.png" alt="Smashing Editorial" width="35" height="46" loading="lazy" decoding="async" />
  <span>(mb, yk, il)</span>
</div>


              </article>
            </body>
          </html>
        ]]></content:encoded></item><item><author>Christine Vallaure</author><title>Everything Developers Must Know About Figma</title><link>https://www.smashingmagazine.com/2022/08/everything-developers-must-know-about-figma/</link><pubDate>Mon, 15 Aug 2022 11:30:00 +0000</pubDate><guid>https://www.smashingmagazine.com/2022/08/everything-developers-must-know-about-figma/</guid><description>Christine highlights some of Figma’s features and possibilities to help you build a design that aligns with code as much as needed and improve your team work.</description><content:encoded><![CDATA[
          <html>
            <head>
              <meta charset="utf-8">
              <link rel="canonical" href="https://www.smashingmagazine.com/2022/08/everything-developers-must-know-about-figma/" />
              <title>Everything Developers Must Know About Figma</title>
            </head>
            <body>
              <article>
                <header>
                  <h1>Everything Developers Must Know About Figma</h1>
                  
                    
                    <address>Christine Vallaure</address>
                  
                  <time datetime="2022-08-15T11:30:00&#43;00:00" class="op-published">2022-08-15T11:30:00+00:00</time>
                  <time datetime="2022-08-15T11:30:00&#43;00:00" class="op-modified">2026-02-09T03:03:08+00:00</time>
                </header>
                
                

<p>We must understand the possibilities and limitations of each other’s tools to work hand in hand, so let me show you the design side of things and all the little Figma treasures you might not yet understand fully.</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/fb045466-6112-4611-a2f9-694637cad7c7/54-everything-developers-must-know-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="343"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/fb045466-6112-4611-a2f9-694637cad7c7/54-everything-developers-must-know-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/fb045466-6112-4611-a2f9-694637cad7c7/54-everything-developers-must-know-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/fb045466-6112-4611-a2f9-694637cad7c7/54-everything-developers-must-know-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/fb045466-6112-4611-a2f9-694637cad7c7/54-everything-developers-must-know-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/fb045466-6112-4611-a2f9-694637cad7c7/54-everything-developers-must-know-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/fb045466-6112-4611-a2f9-694637cad7c7/54-everything-developers-must-know-figma.png"
			
			sizes="100vw"
			alt="Two hearts with a Figma logo and code inside."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/fb045466-6112-4611-a2f9-694637cad7c7/54-everything-developers-must-know-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<ol>
<li><a href="#1-we-work-with-components-and-variants-in-figma">We work with components and variants in Figma</a>.</li>
<li><a href="#2-we-work-with-styles-in-figma-but-they-are-not-very-smart">We work with styles in Figma, but they are not very smart</a>.</li>
<li><a href="#3-we-can-set-up-and-test-responsive-design">We can set up and test responsive design!</a></li>
<li><a href="#4-we-have-no-breakpoints-in-figma">We have no breakpoints in Figma</a>.</li>
<li><a href="#5-we-can-also-work-with-actual-data-sort-of">We can also work with actual data (sort of)</a>.</li>
<li><a href="#6-you-might-want-to-point-out-soft-grid-vs-hard-grid-to-us">You might want to point out soft grid vs. hard grid to us</a>.</li>
<li><a href="#7-why-we-sometimes-mess-up-line-height">Why we sometimes mess up line-height</a>.</li>
<li><a href="#8-all-we-have-in-figma-is-px">All we have in Figma is PX</a>.</li>
<li><a href="/#9-we-can-set-up-pretty-sweet-prototypes-in-figma">We can set up pretty sweet prototypes in Figma</a>.</li>
<li><a href="#10-we-will-invite-you-to-view-only-rights-giving-you-access-to-everything-you-need-as-a-developer">We will invite you to ‘View Only’ rights, giving you access to everything you need as a developer</a>.</li>
</ol>

<h2 id="1-we-work-with-components-and-variants-in-figma">1. We Work With Components And Variants In Figma</h2>

<h3 id="components-in-figma">Components In Figma</h3>

<p>In Figma, we can set up re-usable UI components and create instances. <strong>Components can also be nested.</strong> Hence we can follow a nice <a href="https://atomicdesign.bradfrost.com/">atomic design</a> path.</p>


<figure class="video-embed-container">
  <div class="video-embed-container--wrapper"
	
  >
    <iframe class="video-embed-container--wrapper-iframe" src="https://player.vimeo.com/video/736480249"
        frameborder="0"
        allow="autoplay; fullscreen; picture-in-picture"
        allowfullscreen>
    </iframe>
	</div>
	
</figure>

<h4 id="we-also-have-variants">We Also Have Variants</h4>

<p>We can also create component sets containing variants, <strong>swapping</strong> them easily throughout our design via the properties panel. Therefore, all <strong>states</strong> of a component can be found in one place for documentation.</p>


<figure class="video-embed-container">
  <div class="video-embed-container--wrapper"
	
  >
    <iframe class="video-embed-container--wrapper-iframe" src="https://player.vimeo.com/video/736482094"
        frameborder="0"
        allow="autoplay; fullscreen; picture-in-picture"
        allowfullscreen>
    </iframe>
	</div>
	
</figure>

<p>Figma variants can be <strong>one-dimensional or multi-dimensional</strong>, adding <strong>several properties.</strong></p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/99d72008-835d-43bc-b1b9-bc1f5c5a200a/3-everything-developers-must-know-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="301"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/99d72008-835d-43bc-b1b9-bc1f5c5a200a/3-everything-developers-must-know-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/99d72008-835d-43bc-b1b9-bc1f5c5a200a/3-everything-developers-must-know-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/99d72008-835d-43bc-b1b9-bc1f5c5a200a/3-everything-developers-must-know-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/99d72008-835d-43bc-b1b9-bc1f5c5a200a/3-everything-developers-must-know-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/99d72008-835d-43bc-b1b9-bc1f5c5a200a/3-everything-developers-must-know-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/99d72008-835d-43bc-b1b9-bc1f5c5a200a/3-everything-developers-must-know-figma.png"
			
			sizes="100vw"
			alt="Figma variants with added several properties"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/99d72008-835d-43bc-b1b9-bc1f5c5a200a/3-everything-developers-must-know-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p><strong>Tip:</strong> <em>With <code>true/false or yes/no</code>, you can create a toggle of the entire component. This is a great way to create a <code>light/dark mode</code>.I saw this setup in <a href="https://www.joeyabanks.me/">Joey Banks’s</a> excellent <a href="https://www.figma.com/community/file/1121065701252736567">iOS 16 UI Kit for Figma</a>. Best file setup I have ever seen in general!</em></p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/a8c28d06-66fc-40f8-8715-6219e5d35d67/4-everything-developers-must-know-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="233"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/a8c28d06-66fc-40f8-8715-6219e5d35d67/4-everything-developers-must-know-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/a8c28d06-66fc-40f8-8715-6219e5d35d67/4-everything-developers-must-know-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/a8c28d06-66fc-40f8-8715-6219e5d35d67/4-everything-developers-must-know-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/a8c28d06-66fc-40f8-8715-6219e5d35d67/4-everything-developers-must-know-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/a8c28d06-66fc-40f8-8715-6219e5d35d67/4-everything-developers-must-know-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/a8c28d06-66fc-40f8-8715-6219e5d35d67/4-everything-developers-must-know-figma.png"
			
			sizes="100vw"
			alt="Joey Banks iOS UI Kit for Figma"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Source: <a href='https://www.figma.com/community/file/1121065701252736567'>Joey Banks iOS UI Kit for Figma</a> (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/a8c28d06-66fc-40f8-8715-6219e5d35d67/4-everything-developers-must-know-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h4 id="we-have-props">We Have Props!</h4>

<p>Component properties were released in March 2022. So I assume a lot of developers do not know about the possibility of using them in design yet. So far, we have <strong>text props, for instance, swap and toggle props</strong>. And of course, we can combine them all together.</p>


<figure class="video-embed-container">
  <div class="video-embed-container--wrapper"
	
  >
    <iframe class="video-embed-container--wrapper-iframe" src="https://player.vimeo.com/video/736484670"
        frameborder="0"
        allow="autoplay; fullscreen; picture-in-picture"
        allowfullscreen>
    </iframe>
	</div>
	
</figure>

<h4 id="external-or-local-component-libraries">External Or Local Component Libraries</h4>

<p>Just as in code, we can store components locally or create external libraries. (Same for styles, by the way). This way, we can pull components into multiple files in Figma yet remain a single source of truth and tidy structure.</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/463ece74-bba6-494b-b6b1-bd91017f3d28/5-everything-developers-must-know-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="322"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/463ece74-bba6-494b-b6b1-bd91017f3d28/5-everything-developers-must-know-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/463ece74-bba6-494b-b6b1-bd91017f3d28/5-everything-developers-must-know-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/463ece74-bba6-494b-b6b1-bd91017f3d28/5-everything-developers-must-know-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/463ece74-bba6-494b-b6b1-bd91017f3d28/5-everything-developers-must-know-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/463ece74-bba6-494b-b6b1-bd91017f3d28/5-everything-developers-must-know-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/463ece74-bba6-494b-b6b1-bd91017f3d28/5-everything-developers-must-know-figma.png"
			
			sizes="100vw"
			alt="External or local component libraries"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/463ece74-bba6-494b-b6b1-bd91017f3d28/5-everything-developers-must-know-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h3 id="opportunities-between-design-and-code">Opportunities Between Design And Code</h3>

<h4 id="align-ui-and-code-components-in-naming-and-structure">Align UI And Code Components In Naming And Structure</h4>

<p>Due to the use of components, variants, and props, we can align our UI components with code components. However, to do so, we need information about the structure, naming, behavior, etc., from development. So sit down with us, have a coffee, and show us the code base you have or dream of building. Many videos and tutorials show how different teams handle this alignment process. I leave you to the rabbit hole.</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/dae29757-4197-49ad-a4e5-3890a26886e2/6-everything-developers-must-know-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="283"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/dae29757-4197-49ad-a4e5-3890a26886e2/6-everything-developers-must-know-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/dae29757-4197-49ad-a4e5-3890a26886e2/6-everything-developers-must-know-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/dae29757-4197-49ad-a4e5-3890a26886e2/6-everything-developers-must-know-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/dae29757-4197-49ad-a4e5-3890a26886e2/6-everything-developers-must-know-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/dae29757-4197-49ad-a4e5-3890a26886e2/6-everything-developers-must-know-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/dae29757-4197-49ad-a4e5-3890a26886e2/6-everything-developers-must-know-figma.png"
			
			sizes="100vw"
			alt="Screenshot of how to align UI and Code components in naming and structure"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/dae29757-4197-49ad-a4e5-3890a26886e2/6-everything-developers-must-know-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h4 id="quick-link-ui-and-code-components-in-figma">Quick Link UI And Code Components In Figma</h4>

<p>If you want to link components to a code base without much effort and documentation, you can simply add a link and a description to the Figma component documentation (a bit hidden). The link will create a button in the inspect tab linking directly to, e.g., the Github section of the same component in code. The Figma component search also picks up the description, which is handy for larger systems.</p>


<figure class="video-embed-container break-out">
  <div class="video-embed-container--wrapper"
	
  >
    <iframe class="video-embed-container--wrapper-iframe" src="https://player.vimeo.com/video/736486721"
        frameborder="0"
        allow="autoplay; fullscreen; picture-in-picture"
        allowfullscreen>
    </iframe>
	</div>
	
</figure>

<h4 id="embed-a-figma-component-in-your-documentation">Embed A Figma Component In Your Documentation</h4>

<p>You can simply copy a link (<kbd>Cmd</kbd> + <kbd>L</kbd>) of the Figma file (or frame) and live embed it in places like Notion, GitHub, and many more. I did just this in the example below. This is a great way to live embed your design with an existing (probably more code-heavy) documentation. It will, of course, update as you change your Figma file.</p>

<iframe style="border: 1px solid rgba(0, 0, 0, 0.1);" width="800" height="450" src="https://www.figma.com/embed?embed_host=share&url=https%3A%2F%2Fwww.figma.com%2Ffile%2F4Yp6P5bn2x6RTRfWSMkvxf%2FDay-07-moonlearning-BookApp-Full%3Fnode-id%3D1%253A2" allowfullscreen></iframe>

<h4 id="create-a-test-environment-and-swap-component-libraries">Create A Test Environment And Swap Component Libraries</h4>

<p>If components and styles have the same name in two different libraries, they can be swapped. This is a really great opportunity to set up test environments in Figma before pushing a new style or component to the master file. More relevant for advanced setups where code and components are already aligned.</p>


<figure class="video-embed-container break-out">
  <div class="video-embed-container--wrapper"
	
  >
    <iframe class="video-embed-container--wrapper-iframe" src="https://player.vimeo.com/video/736489640"
        frameborder="0"
        allow="autoplay; fullscreen; picture-in-picture"
        allowfullscreen>
    </iframe>
	</div>
	
</figure>

<h4 id="align-with-your-actual-components-via-storybook">Align With Your Actual Components Via Storybook</h4>

<p>There are some plugins to align UI components and code components. The most promising one I saw is <a href="https://www.figma.com/community/plugin/1056265616080331589">Storybook Connect</a>. By the way, if you have this fantastic setup, how do you align your code? And Figma makes sure to comment! I would love to hear and add it!</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/491a5d5c-1581-4958-a896-140e62bf1aa9/9-everything-developers-must-know-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="343"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/491a5d5c-1581-4958-a896-140e62bf1aa9/9-everything-developers-must-know-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/491a5d5c-1581-4958-a896-140e62bf1aa9/9-everything-developers-must-know-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/491a5d5c-1581-4958-a896-140e62bf1aa9/9-everything-developers-must-know-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/491a5d5c-1581-4958-a896-140e62bf1aa9/9-everything-developers-must-know-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/491a5d5c-1581-4958-a896-140e62bf1aa9/9-everything-developers-must-know-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/491a5d5c-1581-4958-a896-140e62bf1aa9/9-everything-developers-must-know-figma.png"
			
			sizes="100vw"
			alt="Storybook Connect"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/491a5d5c-1581-4958-a896-140e62bf1aa9/9-everything-developers-must-know-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p><strong>Note:</strong> <em>Aligning components is fantastic, but it also takes a lot of effort and, most of all, maintenance, so use it where it makes sense, e.g., a design system. If you just design a one-pager website, you still use components with a clean and scalable design and clear building blocks to be coded, but they do not necessarily need to align with the code. It’s like you would not build an assembly line to streamline the process of making a cake if you would only want to bake a birthday cake for your friend. Yet you still use the same basic ingredients.</em></p>

<div data-audience="non-subscriber" data-remove="true" class="feature-panel-container">

<aside class="feature-panel" style="">
<div class="feature-panel-left-col">

<div class="feature-panel-description"><p><strong>Web forms</strong> are at the center of every meaningful interaction. Meet Adam Silver&rsquo;s <strong><a href="https://www.smashingmagazine.com/printed-books/form-design-patterns/">Form Design Patterns</a></strong>, a practical guide to <strong>designing and building forms</strong> for the web.</p>
<a data-instant href="https://www.smashingmagazine.com/printed-books/form-design-patterns/" class="btn btn--green btn--large" style="">Jump to table of contents&nbsp;↬</a></div>
</div>
<div class="feature-panel-right-col"><a data-instant href="https://www.smashingmagazine.com/printed-books/form-design-patterns/" class="feature-panel-image-link">
<div class="feature-panel-image"><picture><source type="image/avif" srcSet="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/64e57b41-b7f1-4ae3-886a-806cce580ef9/form-design-patterns-shop-image-1-1.avif" />
<img
    loading="lazy"
    decoding="async"
    class="feature-panel-image-img"
    src="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/51e0f837-d85d-4b28-bfab-1c9a47f0ce33/form-design-patterns-shop-image.png"
    alt="Feature Panel"
    width="481"
    height="698"
/>
</picture>
</div>
</a>
</div>
</aside>
</div>

<h2 id="2-we-work-with-styles-in-figma-but-they-are-not-very-smart">2. We Work With Styles In Figma, But They Are Not Very Smart</h2>

<h3 id="styles-in-figma">Styles In Figma</h3>

<p>In Figma, we can create styles for <strong>color, text, grids</strong>, and <strong>things like shadows or blurs</strong> and re-apply them across our design. However, that’s pretty much it.</p>


<figure class="video-embed-container break-out">
  <div class="video-embed-container--wrapper"
	
  >
    <iframe class="video-embed-container--wrapper-iframe" src="https://player.vimeo.com/video/736490819"
        frameborder="0"
        allow="autoplay; fullscreen; picture-in-picture"
        allowfullscreen>
    </iframe>
	</div>
	
</figure>

<p><strong>Tip:</strong> <em>Click on the grey background area of the canvas, and you get an overview of all (local!) styles.</em></p>

<p><strong>There is no magic documentation</strong></p>

<p>But any design team usually documents styles and their use either within the <strong>same Figma file or in a separate file</strong>. Just as with components, we can <strong>link to external styles</strong>. Oh, and there are <strong>no spacing systems styles, so we just need</strong> to document this and set the correct distances by hand.</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/dde98f58-9dbf-425f-88e9-7e1bedb17b17/11-everything-developers-must-know-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="586"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/dde98f58-9dbf-425f-88e9-7e1bedb17b17/11-everything-developers-must-know-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/dde98f58-9dbf-425f-88e9-7e1bedb17b17/11-everything-developers-must-know-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/dde98f58-9dbf-425f-88e9-7e1bedb17b17/11-everything-developers-must-know-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/dde98f58-9dbf-425f-88e9-7e1bedb17b17/11-everything-developers-must-know-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/dde98f58-9dbf-425f-88e9-7e1bedb17b17/11-everything-developers-must-know-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/dde98f58-9dbf-425f-88e9-7e1bedb17b17/11-everything-developers-must-know-figma.png"
			
			sizes="100vw"
			alt="Documentation of styles"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/dde98f58-9dbf-425f-88e9-7e1bedb17b17/11-everything-developers-must-know-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h3 id="opportunities-between-design-and-code-1">Opportunities Between Design And Code</h3>

<p><strong>Figma Token Plugin to create or connect with existing tokens</strong></p>

<p>As you can see, Figma styles are a bit isolated and do not interact with one another. So you cannot set a base font size to scale and adapt the scaling rate. You can only set a fixed size. Also, we have no styles for spacing systems (yet). However, with the <a href="https://www.figma.com/community/plugin/843461159747178978">Figma Tokens</a> plugin, you can create tokens in Figma and work with them. And even more impressive, you can connect and can align with code tokens. Check out the (really well-made) <a href="https://docs.figmatokens.com/">documentation</a> and this fantastic <a href="https://www.youtube.com/watch?v=zkLfw6Jb6WM">video by the creator Jan Six</a>. So amazing!!!</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/a7391714-0f56-4b6d-a592-b603930b83d0/12-everything-developers-must-know-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="370"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/a7391714-0f56-4b6d-a592-b603930b83d0/12-everything-developers-must-know-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/a7391714-0f56-4b6d-a592-b603930b83d0/12-everything-developers-must-know-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/a7391714-0f56-4b6d-a592-b603930b83d0/12-everything-developers-must-know-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/a7391714-0f56-4b6d-a592-b603930b83d0/12-everything-developers-must-know-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/a7391714-0f56-4b6d-a592-b603930b83d0/12-everything-developers-must-know-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/a7391714-0f56-4b6d-a592-b603930b83d0/12-everything-developers-must-know-figma.png"
			
			sizes="100vw"
			alt="Figma Tokens plugin"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/a7391714-0f56-4b6d-a592-b603930b83d0/12-everything-developers-must-know-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h2 id="3-we-can-set-up-and-test-responsive-design">3. We Can Set Up And Test Responsive Design!</h2>

<p>This is a big one! Let’s look at it step by step. The tools we have for responsive design are the following:</p>

<p>Our tools in Figma for responsive design:</p>

<ul>
<li><a href="#auto-layout">Auto Layout</a></li>
<li><a href="#constraints">Constraints</a></li>
<li><a href="#grid">Grid</a></li>
</ul>

<p>We can use the above tools <strong>individually, not at all, or combine them</strong>. It depends a lot on what we want to build. There is no right or wrong.</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9ee5e30e-ee38-4415-9fdf-945e8876364f/13-everything-developers-must-know-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9ee5e30e-ee38-4415-9fdf-945e8876364f/13-everything-developers-must-know-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9ee5e30e-ee38-4415-9fdf-945e8876364f/13-everything-developers-must-know-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9ee5e30e-ee38-4415-9fdf-945e8876364f/13-everything-developers-must-know-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9ee5e30e-ee38-4415-9fdf-945e8876364f/13-everything-developers-must-know-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9ee5e30e-ee38-4415-9fdf-945e8876364f/13-everything-developers-must-know-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9ee5e30e-ee38-4415-9fdf-945e8876364f/13-everything-developers-must-know-figma.png"
			
			sizes="100vw"
			alt="Tools in Figma for responsive design"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9ee5e30e-ee38-4415-9fdf-945e8876364f/13-everything-developers-must-know-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Very important to know from a developer’s point of view is that <strong>we have no automated breakpoints in Figma</strong> (I will talk about how to deal with that in a bit).</p>

<h3 id="auto-layout">Auto Layout</h3>

<p>Auto layout is really powerful but takes some practice to work with (and will drive you nuts to start with, but stick with it!!!). It is <a href="https://www.figma.com/blog/behind-the-feature-the-making-of-the-new-auto-layout/">(loosely) based on flexbox</a>, as you will notice when you glimpse at the Inspect tab.</p>


<figure class="video-embed-container break-out">
  <div class="video-embed-container--wrapper"
	
  >
    <iframe class="video-embed-container--wrapper-iframe" src="https://player.vimeo.com/video/736493620"
        frameborder="0"
        allow="autoplay; fullscreen; picture-in-picture"
        allowfullscreen>
    </iframe>
	</div>
	
</figure>

<p>With the auto layout, we can set:</p>

<ol>
<li><strong>Space between</strong> items (can be positive for spacing or negative for stacking);</li>
<li><strong>Padding</strong> on all sides individually;</li>
<li><strong>Alignment</strong>;</li>
<li>Set child element so <strong>packed or space between</strong> (ideal for navigations);</li>
<li><strong>Resizing behavior</strong> (full container, hug content, or fixed both horizontally and vertically);</li>
<li><strong>Nest auto layout</strong> to create <strong>powerful components and even entire pages</strong>;</li>
<li>Add <strong>relative positioned elements</strong> inside an auto layout frame (new);</li>
<li>Automatically <strong>adapt to new content</strong> while keeping all settings in place.</li>
</ol>

<h3 id="constraints">Constraints</h3>

<p>Constraints are much more straightforward to work with in Figma. With constraints, you can pin elements to the parent frame when resizing. Note that they will react to a change in parent size but will not adapt to a change in content!</p>


<figure class="video-embed-container break-out">
  <div class="video-embed-container--wrapper"
	
  >
    <iframe class="video-embed-container--wrapper-iframe" src="https://player.vimeo.com/video/736494363"
        frameborder="0"
        allow="autoplay; fullscreen; picture-in-picture"
        allowfullscreen>
    </iframe>
	</div>
	
</figure>

<p><strong>Note:</strong> <em>You cannot add auto layout and constraints to the same frame. It is either or (small exception for relative positioned elements within auto-layout). There is no better or worse. It depends on what you want to build.</em></p>

<h3 id="grids">Grids</h3>

<p>We can add grids to frames. When setting up grids, we can adjust columns, gutter, margin, and behavior.</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/018dfc88-d022-433e-8878-2224ffca27b8/16-everything-developers-must-know-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="301"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/018dfc88-d022-433e-8878-2224ffca27b8/16-everything-developers-must-know-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/018dfc88-d022-433e-8878-2224ffca27b8/16-everything-developers-must-know-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/018dfc88-d022-433e-8878-2224ffca27b8/16-everything-developers-must-know-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/018dfc88-d022-433e-8878-2224ffca27b8/16-everything-developers-must-know-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/018dfc88-d022-433e-8878-2224ffca27b8/16-everything-developers-must-know-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/018dfc88-d022-433e-8878-2224ffca27b8/16-everything-developers-must-know-figma.png"
			
			sizes="100vw"
			alt="Grids"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/018dfc88-d022-433e-8878-2224ffca27b8/16-everything-developers-must-know-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h3 id="combine-grids-and-constraints">Combine Grids And Constraints</h3>

<p>The cool thing is that as soon as a grid is applied to a frame, the constraints will assume the columns as the parent frame. So we can set up really nice and straightforward responsive behavior by combining grids and constraints.</p>


<figure class="video-embed-container break-out">
  <div class="video-embed-container--wrapper"
	
  >
    <iframe class="video-embed-container--wrapper-iframe" src="https://player.vimeo.com/video/736495427"
        frameborder="0"
        allow="autoplay; fullscreen; picture-in-picture"
        allowfullscreen>
    </iframe>
	</div>
	
</figure>

<p><strong>Tip:</strong> <em>Figma is all about nesting. You can also apply grids to nested frames, e.g., to create a frame for the sidebar with a fixed with and another nested frame holding the content.</em></p>


<figure class="video-embed-container break-out">
  <div class="video-embed-container--wrapper"
	
  >
    <iframe class="video-embed-container--wrapper-iframe" src="https://player.vimeo.com/video/736495846"
        frameborder="0"
        allow="autoplay; fullscreen; picture-in-picture"
        allowfullscreen>
    </iframe>
	</div>
	
</figure>

<p><strong>Limitation:</strong></p>

<p>This works fine for a quick test or simple setup. However, as soon as you add more content, you will notice that the <strong>margins and padding will not adapt when resizing</strong>. This is a <strong>Figma issue; in CSS, it would still work just fine.</strong></p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/81a59d7b-afed-41ff-8b5a-15bebbb9cb90/19-everything-developers-must-know-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="313"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/81a59d7b-afed-41ff-8b5a-15bebbb9cb90/19-everything-developers-must-know-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/81a59d7b-afed-41ff-8b5a-15bebbb9cb90/19-everything-developers-must-know-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/81a59d7b-afed-41ff-8b5a-15bebbb9cb90/19-everything-developers-must-know-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/81a59d7b-afed-41ff-8b5a-15bebbb9cb90/19-everything-developers-must-know-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/81a59d7b-afed-41ff-8b5a-15bebbb9cb90/19-everything-developers-must-know-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/81a59d7b-afed-41ff-8b5a-15bebbb9cb90/19-everything-developers-must-know-figma.png"
			
			sizes="100vw"
			alt="Margins and padding do not adapt when resizing if you add more content"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/81a59d7b-afed-41ff-8b5a-15bebbb9cb90/19-everything-developers-must-know-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h3 id="combine-grid-constraints-and-auto-layout-elements">Combine Grid, Constraints, And Auto Layout Elements</h3>

<p>So even though we cannot combine auto layout and constraints within a frame, we can place auto layout elements/instances inside a parent frame and then use constraints around them. In this way, the content reshuffles nicely, keeping all set parameters.</p>


<figure class="video-embed-container break-out">
  <div class="video-embed-container--wrapper"
	
  >
    <iframe class="video-embed-container--wrapper-iframe" src="https://player.vimeo.com/video/736497136"
        frameborder="0"
        allow="autoplay; fullscreen; picture-in-picture"
        allowfullscreen>
    </iframe>
	</div>
	
</figure>

<p><strong>Limitation:</strong></p>

<p>Horizontal spacing will still not adapt. So you will probably have the question in mind: “And if I make it all into an auto layout?” Yes, you can!</p>

<h3 id="pure-auto-layout-pages">Pure Auto Layout Pages</h3>

<p>So we could also set up the design in auto layout entirely. There are two ways to use this:</p>

<ol>
<li><strong>Imitating a classic grid</strong>, then we just set the space between = gutter and get the same result.</li>
<li>Not <strong>work with a Grid System at all,</strong> but set up your design later in <strong>flexbox, CSS-Grid or anything else,</strong> then we just “auto layout away” as we want, you can also <strong>mix fixed and fluid.</strong></li>
</ol>


<figure class="video-embed-container break-out">
  <div class="video-embed-container--wrapper"
	
  >
    <iframe class="video-embed-container--wrapper-iframe" src="https://player.vimeo.com/video/736497856"
        frameborder="0"
        allow="autoplay; fullscreen; picture-in-picture"
        allowfullscreen>
    </iframe>
	</div>
	
</figure>

<p><strong>Limitation:</strong></p>

<p>The auto layout will only distribute elements equally, so you cannot have one element occupying 60% and the other 40%; it will switch to <sup>50</sup>&frasl;<sub>50</sub>%. You would have to fix one element and have the rest fluid.</p>

<div class="partners__lead-place"></div>

<h2 id="4-we-have-no-breakpoints-in-figma">4. We Have No Breakpoints In Figma</h2>

<p>Ok, great, so we have these sweet features to set up responsive components. However, we have no automation in Figma to set up a breakpoint to test across different screen sizes from mobile to desktop.</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4be4c44e-1ac5-4e8a-a9ff-435b00f6434e/22-everything-developers-must-know-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="162"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4be4c44e-1ac5-4e8a-a9ff-435b00f6434e/22-everything-developers-must-know-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4be4c44e-1ac5-4e8a-a9ff-435b00f6434e/22-everything-developers-must-know-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4be4c44e-1ac5-4e8a-a9ff-435b00f6434e/22-everything-developers-must-know-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4be4c44e-1ac5-4e8a-a9ff-435b00f6434e/22-everything-developers-must-know-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4be4c44e-1ac5-4e8a-a9ff-435b00f6434e/22-everything-developers-must-know-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4be4c44e-1ac5-4e8a-a9ff-435b00f6434e/22-everything-developers-must-know-figma.png"
			
			sizes="100vw"
			alt="Visualization of no breakpoints in Figma"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4be4c44e-1ac5-4e8a-a9ff-435b00f6434e/22-everything-developers-must-know-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h3 id="we-can-make-our-own-breakpoints-by-hand">We Can Make Our Own Breakpoints By Hand!</h3>

<p>However, we can create our own breakpoints by hand! So with the technical information given, we can set up the visual representation in Figma. I am just using a random example of breakpoints here.</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7be615b1-df9c-4532-95dd-3c7ed9ef28ca/23-everything-developers-must-know-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7be615b1-df9c-4532-95dd-3c7ed9ef28ca/23-everything-developers-must-know-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7be615b1-df9c-4532-95dd-3c7ed9ef28ca/23-everything-developers-must-know-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7be615b1-df9c-4532-95dd-3c7ed9ef28ca/23-everything-developers-must-know-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7be615b1-df9c-4532-95dd-3c7ed9ef28ca/23-everything-developers-must-know-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7be615b1-df9c-4532-95dd-3c7ed9ef28ca/23-everything-developers-must-know-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7be615b1-df9c-4532-95dd-3c7ed9ef28ca/23-everything-developers-must-know-figma.png"
			
			sizes="100vw"
			alt="Visualization of how to create our own breakpoints by hand"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7be615b1-df9c-4532-95dd-3c7ed9ef28ca/23-everything-developers-must-know-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>We can then place our auto layout components within those ranges and see where adjustments are necessary. In my example, I switch from a full fluid screen on mobile to an overlay with a fixed size at breakpoint <code>S</code>.</p>


<figure class="video-embed-container break-out">
  <div class="video-embed-container--wrapper"
	
  >
    <iframe class="video-embed-container--wrapper-iframe" src="https://player.vimeo.com/video/736504441"
        frameborder="0"
        allow="autoplay; fullscreen; picture-in-picture"
        allowfullscreen>
    </iframe>
	</div>
	
</figure>

<p>This way, we can really test our components and even entire pages and already have a pretty realistic idea of the look and feel.</p>

<h4 id="if-you-want-to-work-with-a-responsive-grid">If You Want To Work With A Responsive Grid</h4>

<p>We can use the same testing setup for responsive grids if needed. With the necessary information, grids can be set up for several screen size ranges and then saved as styles and re-applied. We then just need to add the correct grid when testing the breakpoint range.</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4604b3ca-31f4-4283-bd7a-348b5d16ceb4/25-everything-developers-must-know-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="289"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4604b3ca-31f4-4283-bd7a-348b5d16ceb4/25-everything-developers-must-know-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4604b3ca-31f4-4283-bd7a-348b5d16ceb4/25-everything-developers-must-know-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4604b3ca-31f4-4283-bd7a-348b5d16ceb4/25-everything-developers-must-know-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4604b3ca-31f4-4283-bd7a-348b5d16ceb4/25-everything-developers-must-know-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4604b3ca-31f4-4283-bd7a-348b5d16ceb4/25-everything-developers-must-know-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4604b3ca-31f4-4283-bd7a-348b5d16ceb4/25-everything-developers-must-know-figma.png"
			
			sizes="100vw"
			alt="A responsive grid"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4604b3ca-31f4-4283-bd7a-348b5d16ceb4/25-everything-developers-must-know-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p><strong>Note:</strong> <em>Sometimes, you might use the same grid for several breakpoints, then just note, e.g., Grid: <code>S</code>+<code>M</code> (from 576 to 992). This way, you could always split it in two again in case the margin or anything changes in the future.</em></p>

<h4 id="responsive-typography-is-non-existent">Responsive Typography Is Non-Existent</h4>

<p>Unfortunately, what kicks in automatically with media queries in CSS needs to be <strong>added by hand in Figma</strong>. We can set up a <strong>responsive Typescale</strong> and then need to make sure to <strong>change text style (if applicable) when breakpoints are changing</strong>. It’s a bit annoying and full of potential errors, I know.</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d72ef6ab-359a-44e4-8c83-dbc7d91960d4/26-everything-developers-must-know-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="351"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d72ef6ab-359a-44e4-8c83-dbc7d91960d4/26-everything-developers-must-know-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d72ef6ab-359a-44e4-8c83-dbc7d91960d4/26-everything-developers-must-know-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d72ef6ab-359a-44e4-8c83-dbc7d91960d4/26-everything-developers-must-know-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d72ef6ab-359a-44e4-8c83-dbc7d91960d4/26-everything-developers-must-know-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d72ef6ab-359a-44e4-8c83-dbc7d91960d4/26-everything-developers-must-know-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d72ef6ab-359a-44e4-8c83-dbc7d91960d4/26-everything-developers-must-know-figma.png"
			
			sizes="100vw"
			alt="Visualization of how to set up responsive typography"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d72ef6ab-359a-44e4-8c83-dbc7d91960d4/26-everything-developers-must-know-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>If you want to work with <strong>fluid typography</strong> (VW units, <code>clamps()</code>, <code>calc()</code>, you name it), this is best <strong>tested in the browser as we cannot simulate fluid text behavior with Figma</strong>. We can, however, pick a specific min and max screen size to get a rough idea of the situation at a specific width.</p>

<h3 id="breakpoint-plugin">Breakpoint Plugin</h3>

<p>However, to end on an exciting topic: Once you go through the effort of setting up your components and pages responsively, you can chuck them into the breakpoints plugin and get a really lovely overall idea of the design.</p>


<figure class="video-embed-container break-out">
  <div class="video-embed-container--wrapper"
	
  >
    <iframe class="video-embed-container--wrapper-iframe" src="https://player.vimeo.com/video/736634749"
        frameborder="0"
        allow="autoplay; fullscreen; picture-in-picture"
        allowfullscreen>
    </iframe>
	</div>
	
</figure>

<h3 id="opportunities-between-design-code">Opportunities Between Design &amp; Code</h3>

<h4 id="save-time-money-and-nerves">Save Time, Money And Nerves</h4>

<p>Let’s be honest handing in a static design and then seeing the result in the browser never leads to an easy-going relationship between design and development. It is a bottleneck that burns time, money, and nerves on both sides.</p>

<p>Now, this does not mean that we hand off design with a bit of auto layout on top, and that’s it. Seeing the outcome in the browser will surely hold some surprises and room for discussion. However, we have a solid base to start working from and can enter a constructive dialogue between design and development to fine-tune.</p>

<p>Some things will no doubt remain easier to test in CSS than in Figma (e.g., responsive typography), which is just fine. Ultimately, it is about working as a team and valuing each other’s time and effort to create great products.</p>

<h4 id="align-components-with-code">Align Components With Code</h4>

<p>We can also align components further with existing code by mimicking the behavior.</p>

<h3 id="flexbox-in-the-inspect-tab-but-in-the-end-it-s-up-to-development">Flexbox In The Inspect Tab. But In The End, It’s Up To Development!</h3>

<p>When peeking into the inspect tabs, we can see that auto layout translates to (sort of) flexbox, or as Figma put it, “<a href="https://www.figma.com/blog/behind-the-feature-the-making-of-the-new-auto-layout/">Auto Layout should be a thoughtful subset of flexbox</a>” hmmm. This is also where it gets a little confusing because it does not mean you HAVE to use flexbox. In Figma, we only have constraints and auto layout, and as you saw, they both have pros and cons to them and do not reflect CSS behavior 100%. So if there is a more innovative or sensible way of setting something up, then, by all means, go for it!</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/eaa98138-ada7-45a0-8de6-b14855cbd5c4/28-everything-developers-must-know-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="383"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/eaa98138-ada7-45a0-8de6-b14855cbd5c4/28-everything-developers-must-know-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/eaa98138-ada7-45a0-8de6-b14855cbd5c4/28-everything-developers-must-know-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/eaa98138-ada7-45a0-8de6-b14855cbd5c4/28-everything-developers-must-know-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/eaa98138-ada7-45a0-8de6-b14855cbd5c4/28-everything-developers-must-know-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/eaa98138-ada7-45a0-8de6-b14855cbd5c4/28-everything-developers-must-know-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/eaa98138-ada7-45a0-8de6-b14855cbd5c4/28-everything-developers-must-know-figma.png"
			
			sizes="100vw"
			alt="Flexbox in the inspect tab"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/eaa98138-ada7-45a0-8de6-b14855cbd5c4/28-everything-developers-must-know-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h2 id="5-we-can-also-work-with-actual-data-sort-of">5. We Can Also Work With Actual Data (Sort Of)</h2>

<p>Figma cannot connect to a classic database, but we can use actual data with some preparation. You can use the<a href="https://www.figma.com/community/plugin/735770583268406934"> Google Sheets Sync</a> plugin and just add actual content there. By simply naming our layers with #columnname, run the plugin, add the link, and hit sync. And boom, there you go. There is also a Plugin for <a href="https://www.figma.com/community/plugin/741940457537193498">Airtable</a> and <a href="https://www.figma.com/community/plugin/1116202373222780315">Notion</a> Sync working pretty much in the same way.</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5607949d-3aab-416a-b735-5fe11676eb26/29-everything-developers-must-know-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="199"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5607949d-3aab-416a-b735-5fe11676eb26/29-everything-developers-must-know-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5607949d-3aab-416a-b735-5fe11676eb26/29-everything-developers-must-know-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5607949d-3aab-416a-b735-5fe11676eb26/29-everything-developers-must-know-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5607949d-3aab-416a-b735-5fe11676eb26/29-everything-developers-must-know-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5607949d-3aab-416a-b735-5fe11676eb26/29-everything-developers-must-know-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5607949d-3aab-416a-b735-5fe11676eb26/29-everything-developers-must-know-figma.png"
			
			sizes="100vw"
			alt="Google sheet with real data"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Google sheet with real data. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5607949d-3aab-416a-b735-5fe11676eb26/29-everything-developers-must-know-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>


<figure class="video-embed-container break-out">
  <div class="video-embed-container--wrapper"
	
  >
    <iframe class="video-embed-container--wrapper-iframe" src="https://player.vimeo.com/video/736639771"
        frameborder="0"
        allow="autoplay; fullscreen; picture-in-picture"
        allowfullscreen>
    </iframe>
	</div>
	
</figure>

<p><strong>Tip:</strong> <em>You can even swap variants dynamically! Isn’t that great?</em></p>

<h3 id="opportunities-between-design-and-code-2">Opportunities Between Design And Code</h3>

<h4 id="know-what-you-are-dealing-with">Know What You Are Dealing With</h4>

<p>It’s great to test actual content and ask for some collaboration from copywriters or content managers on the fly. This way, we do not design with perfect lorem ipsum and stock image components but realistic components in content size and look.</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8a5badd2-1105-488c-a8ad-b820a962ed65/31-everything-developers-must-know-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="343"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8a5badd2-1105-488c-a8ad-b820a962ed65/31-everything-developers-must-know-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8a5badd2-1105-488c-a8ad-b820a962ed65/31-everything-developers-must-know-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8a5badd2-1105-488c-a8ad-b820a962ed65/31-everything-developers-must-know-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8a5badd2-1105-488c-a8ad-b820a962ed65/31-everything-developers-must-know-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8a5badd2-1105-488c-a8ad-b820a962ed65/31-everything-developers-must-know-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8a5badd2-1105-488c-a8ad-b820a962ed65/31-everything-developers-must-know-figma.png"
			
			sizes="100vw"
			alt="Deisgn chairs vs real chairs"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8a5badd2-1105-488c-a8ad-b820a962ed65/31-everything-developers-must-know-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>In general, we should test components with different content such as ideal state, little content, heavy content, empty, error, and loading states where applicable. I made a <a href="https://www.figma.com/community/file/1117518363362257693">checklist for components</a> you can use before release.</p>

<p>Working with actual data gives us a good idea of potential shortcomings. We can also see if the database needs some grooming or if the image pool needs a bit of love and attention to live up to the brand promise.</p>

<h2 id="6-you-might-want-to-point-out-soft-grid-vs-hard-grid-to-us">6. You Might Want To Point Out Soft Grid vs. Hard Grid To Us</h2>

<p>When we click on Grids, Figma adds this px grid to the background. Order! Structure! As a designer, you jump at this, and as you were told to space with 8pt, you use the grid.</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3f8ee096-d28d-4ca3-9867-f6ed2f7cbb7d/32-everything-developers-must-know-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="310"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3f8ee096-d28d-4ca3-9867-f6ed2f7cbb7d/32-everything-developers-must-know-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3f8ee096-d28d-4ca3-9867-f6ed2f7cbb7d/32-everything-developers-must-know-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3f8ee096-d28d-4ca3-9867-f6ed2f7cbb7d/32-everything-developers-must-know-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3f8ee096-d28d-4ca3-9867-f6ed2f7cbb7d/32-everything-developers-must-know-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3f8ee096-d28d-4ca3-9867-f6ed2f7cbb7d/32-everything-developers-must-know-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3f8ee096-d28d-4ca3-9867-f6ed2f7cbb7d/32-everything-developers-must-know-figma.png"
			
			sizes="100vw"
			alt="8pt Grid"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3f8ee096-d28d-4ca3-9867-f6ed2f7cbb7d/32-everything-developers-must-know-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>So we have this grid, which is why many designers jump to conclusions using a hard grid to set their spacing (it can be used for other alignment and handy in mobile setup, though). We have no spacing blocks or cubes to create a soft grid, we can set this by hand, though, and nudge in steps of <code>8</code>, but that is about it.</p>

<p><strong>Tip:</strong> <em>In Figma, we can alter the nudge amount. Press <kbd>Cmd</kbd> + <kbd>/</kbd> and type “nudge” and change to <code>8</code>. Make sure to keep <code>alt</code> pressing when nudging to see the distances. By pressing shift and up and down arrows, we then nudge in, e.g., <code>8pt</code> steps.</em></p>

<h3 id="opportunities-between-design-and-code-3">Opportunities Between Design And Code</h3>

<h4 id="how-does-spacing-work-for-you-in-css">How Does Spacing Work For You In CSS?</h4>

<p>Feel free to point out (preferably at the beginning of the project) that there is no such magic background grid in CSS and that the spacing system means measuring in spacing blocks from element to element (including the line height!). Or, in other words, explain the difference between the hard grid vs. the soft Grid that we use later in UI Design and CSS.</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/001e58c5-9ae5-4c6d-b2b6-80d5dc9453c9/33-everything-developers-must-know-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="330"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/001e58c5-9ae5-4c6d-b2b6-80d5dc9453c9/33-everything-developers-must-know-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/001e58c5-9ae5-4c6d-b2b6-80d5dc9453c9/33-everything-developers-must-know-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/001e58c5-9ae5-4c6d-b2b6-80d5dc9453c9/33-everything-developers-must-know-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/001e58c5-9ae5-4c6d-b2b6-80d5dc9453c9/33-everything-developers-must-know-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/001e58c5-9ae5-4c6d-b2b6-80d5dc9453c9/33-everything-developers-must-know-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/001e58c5-9ae5-4c6d-b2b6-80d5dc9453c9/33-everything-developers-must-know-figma.png"
			
			sizes="100vw"
			alt="soft grid vs. hard grid"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/001e58c5-9ae5-4c6d-b2b6-80d5dc9453c9/33-everything-developers-must-know-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p><strong>And yet again: Use the <a href="https://www.figma.com/community/plugin/843461159747178978">Figma Tokens Plugin</a>.</strong></p>

<p>Here we can just pull the real spacing system with spacing tokens and apply it to our components. We can also set up our own tokens just in Figma right in the plugin.</p>


<figure class="video-embed-container break-out">
  <div class="video-embed-container--wrapper"
	
  >
    <iframe class="video-embed-container--wrapper-iframe" src="https://player.vimeo.com/video/736645277"
        frameborder="0"
        allow="autoplay; fullscreen; picture-in-picture"
        allowfullscreen>
    </iframe>
	</div>
	
</figure>

<div class="partners__lead-place"></div>

<h2 id="7-why-we-sometimes-mess-up-line-height">7. Why We Sometimes Mess Up Line-height</h2>

<p>Typography is UI design, quite a complex topic. Here is a <a href="https://www.moonlearning.io/typography-preview">detailed class</a> I made. Many UI Designers have a graphic design background, where text is aligned with the baseline. However, in Figma and CSS, we work with line height. This often leads to a lot of confusion amongst new designers, and I get the question “how do I get rid of this access space on top and bottom of my text?” a lot. You don’t. Just work with it!</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ed60fcca-2018-44d4-a4a5-a731aaa386dc/35-everything-developers-must-know-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="182"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ed60fcca-2018-44d4-a4a5-a731aaa386dc/35-everything-developers-must-know-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ed60fcca-2018-44d4-a4a5-a731aaa386dc/35-everything-developers-must-know-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ed60fcca-2018-44d4-a4a5-a731aaa386dc/35-everything-developers-must-know-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ed60fcca-2018-44d4-a4a5-a731aaa386dc/35-everything-developers-must-know-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ed60fcca-2018-44d4-a4a5-a731aaa386dc/35-everything-developers-must-know-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ed60fcca-2018-44d4-a4a5-a731aaa386dc/35-everything-developers-must-know-figma.png"
			
			sizes="100vw"
			alt="Visualization of how to set line height in Figma"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ed60fcca-2018-44d4-a4a5-a731aaa386dc/35-everything-developers-must-know-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p><strong>Note:</strong> <em>We cannot set line height in Figma to something like <code>1.5</code> notation! By default, it uses px. But we can cheat a little and use <code>%</code>, so <code>1.5</code> in CSS would be <code>150%</code> in Figma. You will still find the px value only in the inspect tab.</em></p>

<h3 id="opportunities-between-design-and-code-4">Opportunities Between Design And Code</h3>

<h4 id="explain-it">Explain It!</h4>

<p>So as a developer, you might find that the line height is randomly set to <code>1</code>. This is a desperate design attempt to get rid of the “random” space we do not understand (yet). So it makes sense to remind (new) designers that UI Design is dynamic. Screen sizes change, and content length will vary (either because the content is added or translated into a new language). Thus, we can never assume a single line of the text remains a single line of text forever. Also, we do not want to create too many styles. So explain that working with the natural line height is just fine, and you will do the same in CSS.</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/12257b8b-43de-4834-a8a9-6bcf54776e2d/36-everything-developers-must-know-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="189"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/12257b8b-43de-4834-a8a9-6bcf54776e2d/36-everything-developers-must-know-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/12257b8b-43de-4834-a8a9-6bcf54776e2d/36-everything-developers-must-know-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/12257b8b-43de-4834-a8a9-6bcf54776e2d/36-everything-developers-must-know-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/12257b8b-43de-4834-a8a9-6bcf54776e2d/36-everything-developers-must-know-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/12257b8b-43de-4834-a8a9-6bcf54776e2d/36-everything-developers-must-know-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/12257b8b-43de-4834-a8a9-6bcf54776e2d/36-everything-developers-must-know-figma.png"
			
			sizes="100vw"
			alt="Line-height-1 vs line-hight-1.5"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/12257b8b-43de-4834-a8a9-6bcf54776e2d/36-everything-developers-must-know-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h2 id="8-all-we-have-in-figma-is-px">8. All We Have In Figma Is PX</h2>

<p>In Figma, we can only work with px, and we work at 1px=1pt. We do not have rem, em, or any other relative way to define things like font size. So if you see px everywhere in a UI Design, this does not mean we want it hard coded!!!</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/48a3efbd-4d82-4f7f-bb93-482d2eecceba/37-everything-developers-must-know-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="131"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/48a3efbd-4d82-4f7f-bb93-482d2eecceba/37-everything-developers-must-know-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/48a3efbd-4d82-4f7f-bb93-482d2eecceba/37-everything-developers-must-know-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/48a3efbd-4d82-4f7f-bb93-482d2eecceba/37-everything-developers-must-know-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/48a3efbd-4d82-4f7f-bb93-482d2eecceba/37-everything-developers-must-know-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/48a3efbd-4d82-4f7f-bb93-482d2eecceba/37-everything-developers-must-know-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/48a3efbd-4d82-4f7f-bb93-482d2eecceba/37-everything-developers-must-know-figma.png"
			
			sizes="100vw"
			alt="px and all the other ways like rem and em are crossed out"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/48a3efbd-4d82-4f7f-bb93-482d2eecceba/37-everything-developers-must-know-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h2 id="9-we-can-set-up-pretty-sweet-prototypes-in-figma">9. We Can Set Up Pretty Sweet Prototypes In Figma</h2>

<p>We can create rather impressive prototypes directly from our design files in Figma. If you hit the play button in the file (top right), you can see them. We can link frames to new pages or overlays and also animate within component sets from variant to variant.</p>


<figure class="video-embed-container break-out">
  <div class="video-embed-container--wrapper"
	
  >
    <iframe class="video-embed-container--wrapper-iframe" src="https://player.vimeo.com/video/736648934"
        frameborder="0"
        allow="autoplay; fullscreen; picture-in-picture"
        allowfullscreen>
    </iframe>
	</div>
	
</figure>

<p>We can also set up individual flows, making them nice and tidy to navigate and test.</p>


<figure class="video-embed-container break-out">
  <div class="video-embed-container--wrapper"
	
  >
    <iframe class="video-embed-container--wrapper-iframe" src="https://player.vimeo.com/video/736649450"
        frameborder="0"
        allow="autoplay; fullscreen; picture-in-picture"
        allowfullscreen>
    </iframe>
	</div>
	
</figure>

<h2 id="10-we-will-invite-you-to-view-only-rights-giving-you-access-to-everything-you-need-as-a-developer">10. We Will Invite You To ‘View Only’ Rights, Giving You Access To Everything You Need As A Developer</h2>

<p>As a developer, you will probably receive an invite to “view only” a Figma file, team, or project. You can have a look at a file I set up in <a href="https://www.figma.com/file/4Yp6P5bn2x6RTRfWSMkvxf/Day-07-moonlearning-BookApp-Full?node-id=134%3A11758">view mode here</a> (make to sign up for a free Figma account beforehand).</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7ddacc5f-ca2b-4843-900e-cfa9629511d1/40-everything-developers-must-know-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="284"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7ddacc5f-ca2b-4843-900e-cfa9629511d1/40-everything-developers-must-know-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7ddacc5f-ca2b-4843-900e-cfa9629511d1/40-everything-developers-must-know-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7ddacc5f-ca2b-4843-900e-cfa9629511d1/40-everything-developers-must-know-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7ddacc5f-ca2b-4843-900e-cfa9629511d1/40-everything-developers-must-know-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7ddacc5f-ca2b-4843-900e-cfa9629511d1/40-everything-developers-must-know-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7ddacc5f-ca2b-4843-900e-cfa9629511d1/40-everything-developers-must-know-figma.png"
			
			sizes="100vw"
			alt="view only mode"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7ddacc5f-ca2b-4843-900e-cfa9629511d1/40-everything-developers-must-know-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h3 id="opportunities-between-design-and-code-5">Opportunities Between Design And Code</h3>

<p>As a developer, you will be able to navigate the file and pull out all information you need:</p>

<h4 id="pages">Pages</h4>

<p>You can navigate the different frames on the canvas but note how there are different pages above the layers menu on the left. Every team uses pages differently, some for versions and sprints, some to structure the file into the design, components, and testing. In any case, ensure not to overlook the pages as they are the file’s structure.</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8e68e967-1eda-41e1-a5b5-fa0bb3aefbaf/41-everything-developers-must-know-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="414"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8e68e967-1eda-41e1-a5b5-fa0bb3aefbaf/41-everything-developers-must-know-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8e68e967-1eda-41e1-a5b5-fa0bb3aefbaf/41-everything-developers-must-know-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8e68e967-1eda-41e1-a5b5-fa0bb3aefbaf/41-everything-developers-must-know-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8e68e967-1eda-41e1-a5b5-fa0bb3aefbaf/41-everything-developers-must-know-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8e68e967-1eda-41e1-a5b5-fa0bb3aefbaf/41-everything-developers-must-know-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8e68e967-1eda-41e1-a5b5-fa0bb3aefbaf/41-everything-developers-must-know-figma.png"
			
			sizes="100vw"
			alt="Visualization of pages and the layer menu on the canvas"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8e68e967-1eda-41e1-a5b5-fa0bb3aefbaf/41-everything-developers-must-know-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h4 id="inspect-mode">Inspect Mode</h4>

<p>When entering a file with view mode, you will see the <strong>inspect menu</strong> open per default. Click on an element, and you will be shown the <strong>distance</strong> to the nearest objects and the <strong>specs on the right-hand side menu.</strong></p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/26ee52f0-364e-41dd-b9c5-9f1457158d9e/42-everything-developers-must-know-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="415"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/26ee52f0-364e-41dd-b9c5-9f1457158d9e/42-everything-developers-must-know-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/26ee52f0-364e-41dd-b9c5-9f1457158d9e/42-everything-developers-must-know-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/26ee52f0-364e-41dd-b9c5-9f1457158d9e/42-everything-developers-must-know-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/26ee52f0-364e-41dd-b9c5-9f1457158d9e/42-everything-developers-must-know-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/26ee52f0-364e-41dd-b9c5-9f1457158d9e/42-everything-developers-must-know-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/26ee52f0-364e-41dd-b9c5-9f1457158d9e/42-everything-developers-must-know-figma.png"
			
			sizes="100vw"
			alt="inspect menu"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/26ee52f0-364e-41dd-b9c5-9f1457158d9e/42-everything-developers-must-know-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>You can switch between CSS, iOS, and Android.</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/424ea34e-4f4b-4a60-82ff-177a220c07a0/43-everything-developers-must-know-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="245"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/424ea34e-4f4b-4a60-82ff-177a220c07a0/43-everything-developers-must-know-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/424ea34e-4f4b-4a60-82ff-177a220c07a0/43-everything-developers-must-know-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/424ea34e-4f4b-4a60-82ff-177a220c07a0/43-everything-developers-must-know-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/424ea34e-4f4b-4a60-82ff-177a220c07a0/43-everything-developers-must-know-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/424ea34e-4f4b-4a60-82ff-177a220c07a0/43-everything-developers-must-know-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/424ea34e-4f4b-4a60-82ff-177a220c07a0/43-everything-developers-must-know-figma.png"
			
			sizes="100vw"
			alt=" CSS, iOS, and Android options on the menu"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/424ea34e-4f4b-4a60-82ff-177a220c07a0/43-everything-developers-must-know-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>When clicking on the main component, you will see the link to the code documentation (if applicable) and any comments in inspect mode.</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3d2c7bbe-4341-49eb-a1c9-fbe4ee8af9e0/44-everything-developers-must-know-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="343"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3d2c7bbe-4341-49eb-a1c9-fbe4ee8af9e0/44-everything-developers-must-know-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3d2c7bbe-4341-49eb-a1c9-fbe4ee8af9e0/44-everything-developers-must-know-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3d2c7bbe-4341-49eb-a1c9-fbe4ee8af9e0/44-everything-developers-must-know-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3d2c7bbe-4341-49eb-a1c9-fbe4ee8af9e0/44-everything-developers-must-know-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3d2c7bbe-4341-49eb-a1c9-fbe4ee8af9e0/44-everything-developers-must-know-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3d2c7bbe-4341-49eb-a1c9-fbe4ee8af9e0/44-everything-developers-must-know-figma.png"
			
			sizes="100vw"
			alt="the link to Github and some comments in inspect mode"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3d2c7bbe-4341-49eb-a1c9-fbe4ee8af9e0/44-everything-developers-must-know-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>This only shows up if it was added to the design tab’s component documentation. And you obviously only need this if you want to align UI and code components.</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/154d9e50-f09a-440b-aafb-f15869aeab02/45-everything-developers-must-know-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="245"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/154d9e50-f09a-440b-aafb-f15869aeab02/45-everything-developers-must-know-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/154d9e50-f09a-440b-aafb-f15869aeab02/45-everything-developers-must-know-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/154d9e50-f09a-440b-aafb-f15869aeab02/45-everything-developers-must-know-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/154d9e50-f09a-440b-aafb-f15869aeab02/45-everything-developers-must-know-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/154d9e50-f09a-440b-aafb-f15869aeab02/45-everything-developers-must-know-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/154d9e50-f09a-440b-aafb-f15869aeab02/45-everything-developers-must-know-figma.png"
			
			sizes="100vw"
			alt="Visualization of the inspect mode with the link to Github added to the design tab’s component documentation"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/154d9e50-f09a-440b-aafb-f15869aeab02/45-everything-developers-must-know-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>By the way, it works with any link. However, some such Github links create a nice custom button.</p>

<h4 id="styles-overview">Styles Overview</h4>

<p>Click on the canvas to get an overview of all styles in the file. Note that this only shows local styles; some might be pulled in from an external library. So the best is to check for style documentation (every design team should set this up for you) to make sure you have all information.</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d58e781b-9523-4a6d-9696-1d0b2cf1f941/46-everything-developers-must-know-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="343"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d58e781b-9523-4a6d-9696-1d0b2cf1f941/46-everything-developers-must-know-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d58e781b-9523-4a6d-9696-1d0b2cf1f941/46-everything-developers-must-know-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d58e781b-9523-4a6d-9696-1d0b2cf1f941/46-everything-developers-must-know-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d58e781b-9523-4a6d-9696-1d0b2cf1f941/46-everything-developers-must-know-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d58e781b-9523-4a6d-9696-1d0b2cf1f941/46-everything-developers-must-know-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d58e781b-9523-4a6d-9696-1d0b2cf1f941/46-everything-developers-must-know-figma.png"
			
			sizes="100vw"
			alt="Styles overview"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d58e781b-9523-4a6d-9696-1d0b2cf1f941/46-everything-developers-must-know-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>You should, however, still receive a general overview of all styles from your design team, including internal and external styles used now or in the future.</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d3c87cbf-8102-45e4-b886-5c805b46b301/47-everything-developers-must-know-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="586"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d3c87cbf-8102-45e4-b886-5c805b46b301/47-everything-developers-must-know-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d3c87cbf-8102-45e4-b886-5c805b46b301/47-everything-developers-must-know-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d3c87cbf-8102-45e4-b886-5c805b46b301/47-everything-developers-must-know-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d3c87cbf-8102-45e4-b886-5c805b46b301/47-everything-developers-must-know-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d3c87cbf-8102-45e4-b886-5c805b46b301/47-everything-developers-must-know-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d3c87cbf-8102-45e4-b886-5c805b46b301/47-everything-developers-must-know-figma.png"
			
			sizes="100vw"
			alt="a general overview of all styles including internal and external styles"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d3c87cbf-8102-45e4-b886-5c805b46b301/47-everything-developers-must-know-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h4 id="jump-to-the-main-component">Jump To The Main Component</h4>

<p>This is really important yet a bit hidden. Click on any instance on the canvas and then click on the diamond-shaped symbol sign, and you will jump to the main component and documentation. This is where you can get all information and measurements.</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/61fdeda4-bc93-4409-b364-d9c983921965/48-everything-developers-must-know-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="163"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/61fdeda4-bc93-4409-b364-d9c983921965/48-everything-developers-must-know-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/61fdeda4-bc93-4409-b364-d9c983921965/48-everything-developers-must-know-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/61fdeda4-bc93-4409-b364-d9c983921965/48-everything-developers-must-know-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/61fdeda4-bc93-4409-b364-d9c983921965/48-everything-developers-must-know-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/61fdeda4-bc93-4409-b364-d9c983921965/48-everything-developers-must-know-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/61fdeda4-bc93-4409-b364-d9c983921965/48-everything-developers-must-know-figma.png"
			
			sizes="100vw"
			alt="A diamond-shaped symbol with a sign &#39;jump to the main component&#39;"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/61fdeda4-bc93-4409-b364-d9c983921965/48-everything-developers-must-know-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>You should then be led to the <strong>Figma UI component library.</strong> This might be a local page or an external UI component document giving you all the necessary information and specs defined by the UI team. If you do not find such an overview, kindly ask your design team to set this up for you.</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/857bf36a-016d-41e1-a000-40f387aa182c/49-everything-developers-must-know-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="418"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/857bf36a-016d-41e1-a000-40f387aa182c/49-everything-developers-must-know-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/857bf36a-016d-41e1-a000-40f387aa182c/49-everything-developers-must-know-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/857bf36a-016d-41e1-a000-40f387aa182c/49-everything-developers-must-know-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/857bf36a-016d-41e1-a000-40f387aa182c/49-everything-developers-must-know-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/857bf36a-016d-41e1-a000-40f387aa182c/49-everything-developers-must-know-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/857bf36a-016d-41e1-a000-40f387aa182c/49-everything-developers-must-know-figma.png"
			
			sizes="100vw"
			alt="Figma UI component library"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/857bf36a-016d-41e1-a000-40f387aa182c/49-everything-developers-must-know-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<blockquote>There is no magic automation for style and component overview in Figma. This needs to be set up and documented by the design team, and the format may vary.</blockquote>

<h4 id="export-assets-of-any-size-and-form">Export Assets Of Any Size And Form</h4>

<p>Assets can be exported to any asset in the format (JPG, PNG, SVG) and @size from the “view only” mode, so no bulk export by the design team is needed anymore.</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/271ef2d7-00e9-4c87-9329-ef610fb3d323/50-everything-developers-must-know-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="461"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/271ef2d7-00e9-4c87-9329-ef610fb3d323/50-everything-developers-must-know-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/271ef2d7-00e9-4c87-9329-ef610fb3d323/50-everything-developers-must-know-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/271ef2d7-00e9-4c87-9329-ef610fb3d323/50-everything-developers-must-know-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/271ef2d7-00e9-4c87-9329-ef610fb3d323/50-everything-developers-must-know-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/271ef2d7-00e9-4c87-9329-ef610fb3d323/50-everything-developers-must-know-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/271ef2d7-00e9-4c87-9329-ef610fb3d323/50-everything-developers-must-know-figma.png"
			
			sizes="100vw"
			alt="Different formats (JPG, PNG, SVG) of how assets can be exported"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/271ef2d7-00e9-4c87-9329-ef610fb3d323/50-everything-developers-must-know-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p><strong>Tip:</strong> <em>For a specific height or width, instead of <code>3x</code>, <code>2x</code>, just enter the width followed by <code>w</code> (e.g., <code>300w</code>), and it will export it, keeping the image proportions. It also works for height (<code>h</code>).</em></p>

<h4 id="comment">Comment</h4>

<p>Leave comments and discuss within your team.</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/622ffb65-5658-4fd5-9993-141829a3afe3/51-everything-developers-must-know-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="343"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/622ffb65-5658-4fd5-9993-141829a3afe3/51-everything-developers-must-know-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/622ffb65-5658-4fd5-9993-141829a3afe3/51-everything-developers-must-know-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/622ffb65-5658-4fd5-9993-141829a3afe3/51-everything-developers-must-know-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/622ffb65-5658-4fd5-9993-141829a3afe3/51-everything-developers-must-know-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/622ffb65-5658-4fd5-9993-141829a3afe3/51-everything-developers-must-know-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/622ffb65-5658-4fd5-9993-141829a3afe3/51-everything-developers-must-know-figma.png"
			
			sizes="100vw"
			alt="Visualization of a comments window"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/622ffb65-5658-4fd5-9993-141829a3afe3/51-everything-developers-must-know-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h4 id="prototype">Prototype</h4>

<p>Hit the play button (top right corner of your design file), and you will jump to the presentation mode seeing your prototype in action. Usually, the designer was nice enough to add some flows and structure the prototype, so you get a good idea of different flows.</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/597f7b4c-5b1c-431c-ba11-4d57ac2e402b/52-everything-developers-must-know-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="290"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/597f7b4c-5b1c-431c-ba11-4d57ac2e402b/52-everything-developers-must-know-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/597f7b4c-5b1c-431c-ba11-4d57ac2e402b/52-everything-developers-must-know-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/597f7b4c-5b1c-431c-ba11-4d57ac2e402b/52-everything-developers-must-know-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/597f7b4c-5b1c-431c-ba11-4d57ac2e402b/52-everything-developers-must-know-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/597f7b4c-5b1c-431c-ba11-4d57ac2e402b/52-everything-developers-must-know-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/597f7b4c-5b1c-431c-ba11-4d57ac2e402b/52-everything-developers-must-know-figma.png"
			
			sizes="100vw"
			alt="the play button at the corner of a design file and Prototype on the right"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/597f7b4c-5b1c-431c-ba11-4d57ac2e402b/52-everything-developers-must-know-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p><strong>Tip:</strong> <em>Individual links can be created from every flow of the prototype menu. I like using this to set up an overview of the design and testing stages. You can also link to any other team planning file here.</em></p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3dd9d451-fe34-4696-bc8a-0bbbf7a13ebf/53-everything-developers-must-know-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="335"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3dd9d451-fe34-4696-bc8a-0bbbf7a13ebf/53-everything-developers-must-know-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3dd9d451-fe34-4696-bc8a-0bbbf7a13ebf/53-everything-developers-must-know-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3dd9d451-fe34-4696-bc8a-0bbbf7a13ebf/53-everything-developers-must-know-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3dd9d451-fe34-4696-bc8a-0bbbf7a13ebf/53-everything-developers-must-know-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3dd9d451-fe34-4696-bc8a-0bbbf7a13ebf/53-everything-developers-must-know-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3dd9d451-fe34-4696-bc8a-0bbbf7a13ebf/53-everything-developers-must-know-figma.png"
			
			sizes="100vw"
			alt="Individual links for different design and testing stages"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3dd9d451-fe34-4696-bc8a-0bbbf7a13ebf/53-everything-developers-must-know-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h2 id="stay-in-touch">Stay In Touch!</h2>

<p>If you liked this article, make sure to subscribe and visit me on <a href="https://www.moonlearning.io/">moonlearning.io</a>, where I teach about UX/UI Design+Figma. This article is also the base of my talk and workshop during the <a href="https://smashingconf.com/ny-2022/">Smashing Conference New York, the 10th to the 13th of October 2022</a>. See you there!</p>

<div class="signature">
  <img src="https://www.smashingmagazine.com/images/logo/logo--red.png" alt="Smashing Editorial" width="35" height="46" loading="lazy" decoding="async" />
  <span>(mb, vf, yk, il)</span>
</div>


              </article>
            </body>
          </html>
        ]]></content:encoded></item><item><author>Andrii Zhdan</author><title>How To Easily Build And Support Tables In Figma</title><link>https://www.smashingmagazine.com/2022/06/easy-build-support-tables-figma/</link><pubDate>Fri, 17 Jun 2022 09:00:00 +0000</pubDate><guid>https://www.smashingmagazine.com/2022/06/easy-build-support-tables-figma/</guid><description>User interface designers work with tables on a daily basis. The table is often a complex combination of text components, lines, rectangles, and icons which could be very difficult to work with, especially if you also need to support different screen resolutions, change the order of columns, and use real-life content. In this article, Andrii shares his approach to managing tables in Figma with a bit less pain.</description><content:encoded><![CDATA[
          <html>
            <head>
              <meta charset="utf-8">
              <link rel="canonical" href="https://www.smashingmagazine.com/2022/06/easy-build-support-tables-figma/" />
              <title>How To Easily Build And Support Tables In Figma</title>
            </head>
            <body>
              <article>
                <header>
                  <h1>How To Easily Build And Support Tables In Figma</h1>
                  
                    
                    <address>Andrii Zhdan</address>
                  
                  <time datetime="2022-06-17T09:00:00&#43;00:00" class="op-published">2022-06-17T09:00:00+00:00</time>
                  <time datetime="2022-06-17T09:00:00&#43;00:00" class="op-modified">2026-02-09T03:03:08+00:00</time>
                </header>
                
                

<p>The table is one of the most painful components designers have to deal with in their daily design lives. The table element is often a complex combination of text components, lines, rectangles, icons, and more. It soon may become a nightmare to work with, especially if you also want to support different screen resolutions, change the order of columns, and use real-life content.</p>

<p>In my projects, approximately half of the user interface designs I am working on are <strong>tables</strong>. This is why in this article, I’d like to share my approach to managing tables in Figma in an easier, more streamlined way.</p>

<p>I’m not a fan of long reads with too many unnecessary details, so I’ll “jump” into the subject right away. My guide consists of several parts; thus, you can stop reading at any point when you understand that what you have learned so far covers your needs at the moment, and you can go back/or jump forward to any section when you want to refresh your memory or learn about the more complex workflows. Let’s go!</p>

<p><strong>Table of Contents</strong></p>

<ul>
<li><a href="#cells-and-table-structure">Cells and Table Structure</a></li>
<li><a href="#real-data-and-column-size-corrections">Real Data and Column Size Corrections</a></li>
<li><a href="#responsive-tables">Responsive Tables</a></li>
<li><a href="#basic-table-kit-and-states">Basic Table Kit and States</a></li>
<li><a href="#figma-design-file">Figma Design file</a></li>
<li><a href="#conclusion">Conclusion</a></li>
</ul>

<p><strong>Note:</strong> <em>This article is aimed at people with some experience using Figma Design. If you are an absolute beginner in the Figma field, I would suggest first checking some basic Figma tutorials. To make things easier for you, near the end of the article (check</em> <strong><em><a href="#figma-design-file">Figma Design File</a></em></strong> section)<em>, I have provided my Figma Design which you can use for deconstruction and learning purposes.</em></p>

<div data-audience="non-subscriber" data-remove="true" class="feature-panel-container">

<aside class="feature-panel" style="">
<div class="feature-panel-left-col">

<div class="feature-panel-description"><p>Meet <strong><a data-instant href="https://www.smashingconf.com/online-workshops/">Smashing Workshops</a></strong> on <strong>front-end, design &amp; UX</strong>, with practical takeaways, live sessions, <strong>video recordings</strong> and a friendly Q&amp;A. With Brad Frost, Stéph Walter and <a href="https://smashingconf.com/online-workshops/workshops">so many others</a>.</p>
<a data-instant href="smashing-workshops" class="btn btn--green btn--large" style="">Jump to the workshops&nbsp;↬</a></div>
</div>
<div class="feature-panel-right-col"><a data-instant href="smashing-workshops" class="feature-panel-image-link">
<div class="feature-panel-image">
<img
    loading="lazy"
    decoding="async"
    class="feature-panel-image-img"
    src="/images/smashing-cat/cat-scubadiving-panel.svg"
    alt="Feature Panel"
    width="257"
    height="355"
/>

</div>
</a>
</div>
</aside>
</div>

<h2 id="cells-and-table-structure">Cells And Table Structure</h2>

<p>I often use the <a href="https://ant.design/">Ant Design System</a> in my projects. Let’s take their table components as an example.</p>

<p>To start, we need to make only <strong>two</strong> simple components in Figma:</p>

<ul>
<li>a head cell,</li>
<li>a row cell.</li>
</ul>

<p>Use <code>Left</code> and <code>Center</code> in <code>Constraints</code> to align the text.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0b67cf31-0f93-45e1-b865-b0788751b01d/1-how-build-support-tables-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="311"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0b67cf31-0f93-45e1-b865-b0788751b01d/1-how-build-support-tables-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0b67cf31-0f93-45e1-b865-b0788751b01d/1-how-build-support-tables-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0b67cf31-0f93-45e1-b865-b0788751b01d/1-how-build-support-tables-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0b67cf31-0f93-45e1-b865-b0788751b01d/1-how-build-support-tables-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0b67cf31-0f93-45e1-b865-b0788751b01d/1-how-build-support-tables-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0b67cf31-0f93-45e1-b865-b0788751b01d/1-how-build-support-tables-figma.png"
			
			sizes="100vw"
			alt="A screenshot of two components in Figma: a head cell, and a row cell"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Create two components: a <strong>head</strong> cell, and a <strong>row</strong> cell. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0b67cf31-0f93-45e1-b865-b0788751b01d/1-how-build-support-tables-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<blockquote><strong>Aside on keyboard shortcuts:</strong><br /><br /><span style="font-style: normal"><kbd>Ctrl</kbd>/<kbd>Cmd</kbd> &mdash; Win/Mac<br /><kbd>Alt</kbd>/<kbd>Option</kbd> &mdash; Win/Mac<br /><kbd>Shift</kbd> &mdash; Win and Mac<br /><br />Figma is a tool that works on both Windows and Mac. For example, the following keyboard shortcut combo <kbd>Ctrl</kbd>/<kbd>Cmd</kbd> + <kbd>D</kbd> means, “Press <kbd>Ctrl</kbd> + <kbd>D</kbd> on Windows, or press <kbd>Cmd</kbd> + <kbd>D</kbd> on Mac.”</span></blockquote>

<p>Then we need to copy the components for our future table:</p>

<ul>
<li>hold <kbd>Alt</kbd>/<kbd>Option</kbd> + <kbd>Shift</kbd> + left mouse button for copying</li>
<li>and <kbd>Ctrl</kbd>/<kbd>Cmd</kbd> + <kbd>D</kbd> to repeat the last action in Figma.</li>
</ul>


<figure class="video-embed-container break-out">
  <div class="video-embed-container--wrapper"
	
  >
    <iframe class="video-embed-container--wrapper-iframe" src="https://player.vimeo.com/video/720634901"
        frameborder="0"
        allow="autoplay; fullscreen; picture-in-picture"
        allowfullscreen>
    </iframe>
	</div>
	
		<figcaption>Let’s copy the components for our future table.</figcaption>
	
</figure>

<p>Now we have to set the space between the cells and create the components: <kbd>Alt</kbd>/<kbd>Option</kbd> + <kbd>Ctrl</kbd>/<kbd>Cmd</kbd> + <kbd>K</kbd>.</p>

<p><strong>Useful tip:</strong> <em>I have used zero spacing in the example below, but if you need vertical lines, use 1 <code>px</code>.</em></p>


<figure class="video-embed-container break-out">
  <div class="video-embed-container--wrapper"
	
  >
    <iframe class="video-embed-container--wrapper-iframe" src="https://player.vimeo.com/video/720636315"
        frameborder="0"
        allow="autoplay; fullscreen; picture-in-picture"
        allowfullscreen>
    </iframe>
	</div>
	
		<figcaption>Create the table head and the table row components.</figcaption>
	
</figure>

<p><strong>Useful tip:</strong> <em>I recommend naming the components on every level. Organise everything early, organise everything thoroughly!</em></p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2fef7d90-888e-496b-884a-4e8cca16e250/4-how-build-support-tables-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="302"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2fef7d90-888e-496b-884a-4e8cca16e250/4-how-build-support-tables-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2fef7d90-888e-496b-884a-4e8cca16e250/4-how-build-support-tables-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2fef7d90-888e-496b-884a-4e8cca16e250/4-how-build-support-tables-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2fef7d90-888e-496b-884a-4e8cca16e250/4-how-build-support-tables-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2fef7d90-888e-496b-884a-4e8cca16e250/4-how-build-support-tables-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2fef7d90-888e-496b-884a-4e8cca16e250/4-how-build-support-tables-figma.png"
			
			sizes="100vw"
			alt="A screenshot showing the naming of the components."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Naming the components. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2fef7d90-888e-496b-884a-4e8cca16e250/4-how-build-support-tables-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>How to create the table lines? Start here:</p>

<ul>
<li>press and hold <kbd>Alt</kbd>/<kbd>Option</kbd> + <kbd>Shift</kbd> + mouse left for copying,</li>
<li>and <kbd>Ctrl</kbd>/<kbd>Cmd</kbd>+ <kbd>D</kbd> to repeat the last action in Figma.</li>
</ul>


<figure class="video-embed-container break-out">
  <div class="video-embed-container--wrapper"
	
  >
    <iframe class="video-embed-container--wrapper-iframe" src="https://player.vimeo.com/video/720640927"
        frameborder="0"
        allow="autoplay; fullscreen; picture-in-picture"
        allowfullscreen>
    </iframe>
	</div>
	
		<figcaption>Copying and arranging the table rows.</figcaption>
	
</figure>

<p>And now, let’s say that we need a table with the following parameters:</p>

<ul>
<li>horizontal lines between the rows: 1 <code>px</code>, blue color;</li>
<li>green colored stroke (table border);</li>
<li>corner radius: 15 <code>px</code>.</li>
</ul>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/27da4225-7ba9-4ff9-8d1e-ee5ab122e4c3/6-how-build-support-tables-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="561"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/27da4225-7ba9-4ff9-8d1e-ee5ab122e4c3/6-how-build-support-tables-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/27da4225-7ba9-4ff9-8d1e-ee5ab122e4c3/6-how-build-support-tables-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/27da4225-7ba9-4ff9-8d1e-ee5ab122e4c3/6-how-build-support-tables-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/27da4225-7ba9-4ff9-8d1e-ee5ab122e4c3/6-how-build-support-tables-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/27da4225-7ba9-4ff9-8d1e-ee5ab122e4c3/6-how-build-support-tables-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/27da4225-7ba9-4ff9-8d1e-ee5ab122e4c3/6-how-build-support-tables-figma.png"
			
			sizes="100vw"
			alt="A screenshot showing the process of styling the table border, the row lines, and setting the table corner radius"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Styling the table border, the row lines, and the table corner radius. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/27da4225-7ba9-4ff9-8d1e-ee5ab122e4c3/6-how-build-support-tables-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>How did I do it? Here are the steps:</p>

<ol>
<li>group the table row elements into a single frame;</li>
<li>set corners’ radius to 15 <code>px</code>;</li>
<li>set outline stroke to 1 <code>px</code>, <code>#49E36B</code>;</li>
<li>set frame fill color to <code>#278EEE</code>.</li>
</ol>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/00ca485b-c3c1-4929-8665-8fed4e4ed39b/7-how-build-support-tables-figma.jpeg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="480"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/00ca485b-c3c1-4929-8665-8fed4e4ed39b/7-how-build-support-tables-figma.jpeg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/00ca485b-c3c1-4929-8665-8fed4e4ed39b/7-how-build-support-tables-figma.jpeg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/00ca485b-c3c1-4929-8665-8fed4e4ed39b/7-how-build-support-tables-figma.jpeg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/00ca485b-c3c1-4929-8665-8fed4e4ed39b/7-how-build-support-tables-figma.jpeg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/00ca485b-c3c1-4929-8665-8fed4e4ed39b/7-how-build-support-tables-figma.jpeg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/00ca485b-c3c1-4929-8665-8fed4e4ed39b/7-how-build-support-tables-figma.jpeg"
			
			sizes="100vw"
			alt="A screenshot showing how to group the table row elements into a single frame and then adjust the parameters."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Group the table row elements into a single frame and adjust the parameters. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/00ca485b-c3c1-4929-8665-8fed4e4ed39b/7-how-build-support-tables-figma.jpeg'>Large preview</a>)
    </figcaption>
  
</figure>

<p>To help you better imagine how it works, here is a quick illustration that I made:</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/03bbb5f6-56ae-432a-b74d-26cbb4e77516/8-how-build-support-tables-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="537"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/03bbb5f6-56ae-432a-b74d-26cbb4e77516/8-how-build-support-tables-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/03bbb5f6-56ae-432a-b74d-26cbb4e77516/8-how-build-support-tables-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/03bbb5f6-56ae-432a-b74d-26cbb4e77516/8-how-build-support-tables-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/03bbb5f6-56ae-432a-b74d-26cbb4e77516/8-how-build-support-tables-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/03bbb5f6-56ae-432a-b74d-26cbb4e77516/8-how-build-support-tables-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/03bbb5f6-56ae-432a-b74d-26cbb4e77516/8-how-build-support-tables-figma.png"
			
			sizes="100vw"
			alt="A screenshot showing the table elements, highlighted in different colors"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      The table elements. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/03bbb5f6-56ae-432a-b74d-26cbb4e77516/8-how-build-support-tables-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>The frame is for coloring the table lines between the rows and the table stroke (the outside table border). And you will need to add “crop frame content” and “corner radius” to shape the table.</p>

<p>If you add “Auto layout,” it would work like this:</p>


<figure class="video-embed-container break-out">
  <div class="video-embed-container--wrapper"
	
  >
    <iframe class="video-embed-container--wrapper-iframe" src="https://player.vimeo.com/video/720644043"
        frameborder="0"
        allow="autoplay; fullscreen; picture-in-picture"
        allowfullscreen>
    </iframe>
	</div>
	
		<figcaption>Add “Auto layout.”</figcaption>
	
</figure>

<p>Use <kbd>Ctrl</kbd>/<kbd>Cmd</kbd> + <kbd>C</kbd> and <kbd>Ctrl</kbd>/<kbd>Cmd</kbd> + <kbd>V</kbd> to add lines, and <kbd>Delete</kbd> to remove some of them.</p>

<h2 id="real-data-and-column-size-corrections">Real Data And Column Size Corrections</h2>

<p>Now let’s fill the table with some data. Hold <kbd>Ctrl</kbd>/<kbd>Cmd</kbd> to highlight text layers in the frame.</p>

<p>I use the <a href="https://www.figma.com/community/plugin/731627216655469013/Content-Reel">Content reel</a> plugin for this purpose.</p>


<figure class="video-embed-container break-out">
  <div class="video-embed-container--wrapper"
	
  >
    <iframe class="video-embed-container--wrapper-iframe" src="https://player.vimeo.com/video/720646239"
        frameborder="0"
        allow="autoplay; fullscreen; picture-in-picture"
        allowfullscreen>
    </iframe>
	</div>
	
		<figcaption>Using the Content Reel plugin for adding data to our table.</figcaption>
	
</figure>

<p>You can use “Auto layout” to change the columns’ order and size:</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4ef3d701-0596-45ac-a051-fe5174a0ec66/11-how-build-support-tables-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="239"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4ef3d701-0596-45ac-a051-fe5174a0ec66/11-how-build-support-tables-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4ef3d701-0596-45ac-a051-fe5174a0ec66/11-how-build-support-tables-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4ef3d701-0596-45ac-a051-fe5174a0ec66/11-how-build-support-tables-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4ef3d701-0596-45ac-a051-fe5174a0ec66/11-how-build-support-tables-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4ef3d701-0596-45ac-a051-fe5174a0ec66/11-how-build-support-tables-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4ef3d701-0596-45ac-a051-fe5174a0ec66/11-how-build-support-tables-figma.png"
			
			sizes="100vw"
			alt="A screenshot showing how to set the Frame to Fixed size (for the row)"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Frame → Horizontal → Fixed (for the row). (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4ef3d701-0596-45ac-a051-fe5174a0ec66/11-how-build-support-tables-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4f299511-298c-4a71-ab58-0409572335e2/12-how-build-support-tables-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="284"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4f299511-298c-4a71-ab58-0409572335e2/12-how-build-support-tables-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4f299511-298c-4a71-ab58-0409572335e2/12-how-build-support-tables-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4f299511-298c-4a71-ab58-0409572335e2/12-how-build-support-tables-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4f299511-298c-4a71-ab58-0409572335e2/12-how-build-support-tables-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4f299511-298c-4a71-ab58-0409572335e2/12-how-build-support-tables-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4f299511-298c-4a71-ab58-0409572335e2/12-how-build-support-tables-figma.png"
			
			sizes="100vw"
			alt="A screenshot showing how to set the Frame to Fill option (for the cell)"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Frame → Horizontal → Fill (for the cell). (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4f299511-298c-4a71-ab58-0409572335e2/12-how-build-support-tables-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>As a result, you would get this behavior. Hold <kbd>Shift</kbd> and double-click to highlight it, then resize the column.</p>


<figure class="video-embed-container break-out">
  <div class="video-embed-container--wrapper"
	
  >
    <iframe class="video-embed-container--wrapper-iframe" src="https://player.vimeo.com/video/720648603"
        frameborder="0"
        allow="autoplay; fullscreen; picture-in-picture"
        allowfullscreen>
    </iframe>
	</div>
	
		<figcaption>How to change the columns’ order and size.</figcaption>
	
</figure>

<h2 id="responsive-tables">Responsive Tables</h2>

<p>Now I want to make this table <strong>responsive</strong> for different screens.</p>

<p>The expected results:</p>

<ul>
<li>head cell (140): fixed 140 <code>px</code> size,</li>
<li>row cell (140): fixed 140 <code>px</code> size,</li>
<li>head cell (~): responsive,</li>
<li>row cell (~): responsive.</li>
</ul>

<p>For this, we need <code>Auto layout</code> and to use a horizontal frame <code>Fixed</code> size option for the rows:</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8231abeb-46e2-44cf-96f9-4a474456af06/14-how-build-support-tables-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="229"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8231abeb-46e2-44cf-96f9-4a474456af06/14-how-build-support-tables-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8231abeb-46e2-44cf-96f9-4a474456af06/14-how-build-support-tables-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8231abeb-46e2-44cf-96f9-4a474456af06/14-how-build-support-tables-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8231abeb-46e2-44cf-96f9-4a474456af06/14-how-build-support-tables-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8231abeb-46e2-44cf-96f9-4a474456af06/14-how-build-support-tables-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8231abeb-46e2-44cf-96f9-4a474456af06/14-how-build-support-tables-figma.png"
			
			sizes="100vw"
			alt="A screenshot showing how to set the Frame to Fixed size (for the rows)"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Frame → Horizontal → <code>Fixed</code> (for the rows). (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8231abeb-46e2-44cf-96f9-4a474456af06/14-how-build-support-tables-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>For fixed-size cells, we apply <code>Fixed</code> horizontally:</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/27e8459e-f303-47b9-a249-9aed5ff68cee/15-how-build-support-tables-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="242"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/27e8459e-f303-47b9-a249-9aed5ff68cee/15-how-build-support-tables-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/27e8459e-f303-47b9-a249-9aed5ff68cee/15-how-build-support-tables-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/27e8459e-f303-47b9-a249-9aed5ff68cee/15-how-build-support-tables-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/27e8459e-f303-47b9-a249-9aed5ff68cee/15-how-build-support-tables-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/27e8459e-f303-47b9-a249-9aed5ff68cee/15-how-build-support-tables-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/27e8459e-f303-47b9-a249-9aed5ff68cee/15-how-build-support-tables-figma.png"
			
			sizes="100vw"
			alt="A screenshot showing how to set the Frame to Fixed size (for the fixed size cells)"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Frame → Horizontal → <code>Fixed</code> (for the fixed-size cells). (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/27e8459e-f303-47b9-a249-9aed5ff68cee/15-how-build-support-tables-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>For the responsive cells, we need to set <code>Fill</code> horizontally:</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/69cdcfd2-621c-43d3-b8ae-269c13ad5ca6/16-how-build-support-tables-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="241"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/69cdcfd2-621c-43d3-b8ae-269c13ad5ca6/16-how-build-support-tables-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/69cdcfd2-621c-43d3-b8ae-269c13ad5ca6/16-how-build-support-tables-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/69cdcfd2-621c-43d3-b8ae-269c13ad5ca6/16-how-build-support-tables-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/69cdcfd2-621c-43d3-b8ae-269c13ad5ca6/16-how-build-support-tables-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/69cdcfd2-621c-43d3-b8ae-269c13ad5ca6/16-how-build-support-tables-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/69cdcfd2-621c-43d3-b8ae-269c13ad5ca6/16-how-build-support-tables-figma.png"
			
			sizes="100vw"
			alt="A screenshot showing how to set the Frame to Fill option (for the responsive cells)"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Frame → Horizontal → <code>Fill</code> (for the responsive cells). (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/69cdcfd2-621c-43d3-b8ae-269c13ad5ca6/16-how-build-support-tables-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Then we turn this table into a <code>Frame</code>, and every row inside the <code>Frame</code> should have horizontal <code>Constraints</code> set as <code>Left and right</code>:</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/46fb80a2-2971-4f4c-9fb6-1f20350e5442/17-how-build-support-tables-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="300"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/46fb80a2-2971-4f4c-9fb6-1f20350e5442/17-how-build-support-tables-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/46fb80a2-2971-4f4c-9fb6-1f20350e5442/17-how-build-support-tables-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/46fb80a2-2971-4f4c-9fb6-1f20350e5442/17-how-build-support-tables-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/46fb80a2-2971-4f4c-9fb6-1f20350e5442/17-how-build-support-tables-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/46fb80a2-2971-4f4c-9fb6-1f20350e5442/17-how-build-support-tables-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/46fb80a2-2971-4f4c-9fb6-1f20350e5442/17-how-build-support-tables-figma.png"
			
			sizes="100vw"
			alt="A screenshot showing how to set Constraints (Horizontal) to Left and right (for all rows)."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Constrains → Horizontal → <code>Left and right</code> (for all rows in the table). (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/46fb80a2-2971-4f4c-9fb6-1f20350e5442/17-how-build-support-tables-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Voilà, we’re fully responsive now!</p>


<figure class="video-embed-container break-out">
  <div class="video-embed-container--wrapper"
	
  >
    <iframe class="video-embed-container--wrapper-iframe" src="https://player.vimeo.com/video/720674193"
        frameborder="0"
        allow="autoplay; fullscreen; picture-in-picture"
        allowfullscreen>
    </iframe>
	</div>
	
		<figcaption>The table is responsive now!</figcaption>
	
</figure>

<div class="partners__lead-place"></div>

<h2 id="basic-table-kit-and-states">Basic Table Kit And States</h2>

<p>Even for a simple project, you need more states.</p>

<p>Let’s build a basic kit for a table and link new combinations to the two primary components as <code>variants</code>.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0ae461fe-06d2-4b4c-a7aa-6d73294c3b30/19-how-build-support-tables-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="480"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0ae461fe-06d2-4b4c-a7aa-6d73294c3b30/19-how-build-support-tables-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0ae461fe-06d2-4b4c-a7aa-6d73294c3b30/19-how-build-support-tables-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0ae461fe-06d2-4b4c-a7aa-6d73294c3b30/19-how-build-support-tables-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0ae461fe-06d2-4b4c-a7aa-6d73294c3b30/19-how-build-support-tables-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0ae461fe-06d2-4b4c-a7aa-6d73294c3b30/19-how-build-support-tables-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0ae461fe-06d2-4b4c-a7aa-6d73294c3b30/19-how-build-support-tables-figma.png"
			
			sizes="100vw"
			alt="A screenshot of building a basic table kit in Figma"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Building a basic table kit. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0ae461fe-06d2-4b4c-a7aa-6d73294c3b30/19-how-build-support-tables-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p><strong>The kit structure:</strong></p>

<ul>
<li>icons we use in the table,</li>
<li>basic header states,</li>
<li>basic cell states.</li>
</ul>

<h3 id="icons">Icons</h3>

<p>Using any icon library, you can have a few hundred icons. As a result, this can push you to inconsistency (using different icons for the same goals, for example), especially if you have more than one designer on your team. Table icons as a separate library will help you manage and support consistency on big projects.</p>

<h3 id="combinations">Combinations</h3>

<p>There are a few main combinations we have:</p>

<ul>
<li>just text in a cell,</li>
<li>just an icon or a set of icons in a cell,</li>
<li>a variety of text, icons, and other objects (checkbox, toggle, action, select, and so on) in a different order within a cell.</li>
</ul>

<p>Avoid hidden layers! You will know that you used them while building a design system, and you will certainly forget about them later. In addition, people who will use your design system may not know about these hidden layers at all.</p>

<p>You will have an idea of how to create them based on the illustration above (<strong>Building a basic table kit</strong>), but I’ll specify a few more complex components for beginner designers.</p>


<figure class="video-embed-container break-out">
  <div class="video-embed-container--wrapper"
	
  >
    <iframe class="video-embed-container--wrapper-iframe" src="https://player.vimeo.com/video/720677473"
        frameborder="0"
        allow="autoplay; fullscreen; picture-in-picture"
        allowfullscreen>
    </iframe>
	</div>
	
		<figcaption>An example of components’ behavior that we need.</figcaption>
	
</figure>

<p>The first one is simple:</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e838ae84-9967-41a6-a37b-b3568216811a/21-how-build-support-tables-figma.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="285"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e838ae84-9967-41a6-a37b-b3568216811a/21-how-build-support-tables-figma.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e838ae84-9967-41a6-a37b-b3568216811a/21-how-build-support-tables-figma.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e838ae84-9967-41a6-a37b-b3568216811a/21-how-build-support-tables-figma.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e838ae84-9967-41a6-a37b-b3568216811a/21-how-build-support-tables-figma.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e838ae84-9967-41a6-a37b-b3568216811a/21-how-build-support-tables-figma.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e838ae84-9967-41a6-a37b-b3568216811a/21-how-build-support-tables-figma.jpg"
			
			sizes="100vw"
			alt="A screenshot showing specific constraints options"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Set the following constraints options. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e838ae84-9967-41a6-a37b-b3568216811a/21-how-build-support-tables-figma.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<p>And we use <code>Auto layout</code> with the following parameters in the second component example:</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8cb2ab41-9de7-4a12-b3ce-d222ad42036a/22-how-build-support-tables-figma.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="535"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8cb2ab41-9de7-4a12-b3ce-d222ad42036a/22-how-build-support-tables-figma.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8cb2ab41-9de7-4a12-b3ce-d222ad42036a/22-how-build-support-tables-figma.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8cb2ab41-9de7-4a12-b3ce-d222ad42036a/22-how-build-support-tables-figma.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8cb2ab41-9de7-4a12-b3ce-d222ad42036a/22-how-build-support-tables-figma.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8cb2ab41-9de7-4a12-b3ce-d222ad42036a/22-how-build-support-tables-figma.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8cb2ab41-9de7-4a12-b3ce-d222ad42036a/22-how-build-support-tables-figma.jpg"
			
			sizes="100vw"
			alt="A screenshot which shows how the text can change the Frame size, and where the icon should always be on the right side"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      The text can change the Frame size, and the icon should always be on the right side. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8cb2ab41-9de7-4a12-b3ce-d222ad42036a/22-how-build-support-tables-figma.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<p>So, remember the table that we built using only two components? It’s time to update it!</p>


<figure class="video-embed-container break-out">
  <div class="video-embed-container--wrapper"
	
  >
    <iframe class="video-embed-container--wrapper-iframe" src="https://player.vimeo.com/video/720681115"
        frameborder="0"
        allow="autoplay; fullscreen; picture-in-picture"
        allowfullscreen>
    </iframe>
	</div>
	
		<figcaption>Applying the new cell types to the initial table created from two components.</figcaption>
	
</figure>

<p>The main idea of this article was to learn how to be more flexible with tables in Figma. And as I have demonstrated, in the beginning, you need to create only two simple components, then do some wire-framing, and finally, when you need to breathe more “life” into your table, just add more states.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0b324946-e254-43fb-b579-5e7193e305a0/24-how-build-support-tables-figma.jpeg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="799"
			height="394"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0b324946-e254-43fb-b579-5e7193e305a0/24-how-build-support-tables-figma.jpeg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0b324946-e254-43fb-b579-5e7193e305a0/24-how-build-support-tables-figma.jpeg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0b324946-e254-43fb-b579-5e7193e305a0/24-how-build-support-tables-figma.jpeg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0b324946-e254-43fb-b579-5e7193e305a0/24-how-build-support-tables-figma.jpeg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0b324946-e254-43fb-b579-5e7193e305a0/24-how-build-support-tables-figma.jpeg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0b324946-e254-43fb-b579-5e7193e305a0/24-how-build-support-tables-figma.jpeg"
			
			sizes="100vw"
			alt="A screenshot showing the table kit that we made in Figma"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      The basic table kit that we made in Figma. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0b324946-e254-43fb-b579-5e7193e305a0/24-how-build-support-tables-figma.jpeg'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Also, you can use “Figma Properties” to make it compact. All the instructions you can find in the following tutorial video created by the Figma team during <a href="https://www.figma.com/blog/config-2022-thinking-big-and-acting-with-urgency/">Figma Config 2022</a>: “Jumping into component properties.”</p>


<figure class="video-embed-container break-out">
  <div
  
  class="video-embed-container--wrapper">
		<lite-youtube
			videoid="hobK6JqADio"
      
			
		></lite-youtube>
	</div>
	
</figure>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f761a45b-8829-4f7f-ba69-906dc63dd2a6/25-how-build-support-tables-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="535"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f761a45b-8829-4f7f-ba69-906dc63dd2a6/25-how-build-support-tables-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f761a45b-8829-4f7f-ba69-906dc63dd2a6/25-how-build-support-tables-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f761a45b-8829-4f7f-ba69-906dc63dd2a6/25-how-build-support-tables-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f761a45b-8829-4f7f-ba69-906dc63dd2a6/25-how-build-support-tables-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f761a45b-8829-4f7f-ba69-906dc63dd2a6/25-how-build-support-tables-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f761a45b-8829-4f7f-ba69-906dc63dd2a6/25-how-build-support-tables-figma.png"
			
			sizes="100vw"
			alt="A screenshot showing an example of the structure using Figma Properties"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Example of the structure using ‘Figma Properties’. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f761a45b-8829-4f7f-ba69-906dc63dd2a6/25-how-build-support-tables-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>It’s only one example of how I structured the basic table kit in this article. You can use a similar workflow or create your own. In my projects, kits are much more complex, so I’ll leave this choice to you.</p>

<h3 id="figma-design-file">Figma Design File</h3>

<p>I have prepared a <strong><a href="https://www.figma.com/file/UTy6ZCJ7MAnFz5udAZp2gB/SM?node-id=0%3A1">Figma Design file</a></strong> that may help you go through some of the steps of my tutorial. If you have questions or need help, do post your questions in the comments section at the end of the article.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4ea18d2c-e663-40d2-9774-8b8a5f4d1415/26-how-build-support-tables-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="419"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4ea18d2c-e663-40d2-9774-8b8a5f4d1415/26-how-build-support-tables-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4ea18d2c-e663-40d2-9774-8b8a5f4d1415/26-how-build-support-tables-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4ea18d2c-e663-40d2-9774-8b8a5f4d1415/26-how-build-support-tables-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4ea18d2c-e663-40d2-9774-8b8a5f4d1415/26-how-build-support-tables-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4ea18d2c-e663-40d2-9774-8b8a5f4d1415/26-how-build-support-tables-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4ea18d2c-e663-40d2-9774-8b8a5f4d1415/26-how-build-support-tables-figma.png"
			
			sizes="100vw"
			alt="A screenshot of the table that I have created in Figma Design for the purposes of this tutorial"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      The table that I have created (<a href='https://www.figma.com/file/UTy6ZCJ7MAnFz5udAZp2gB/SM?node-id=0%3A1'>Figma Design file</a>) for the purposes of this tutorial. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4ea18d2c-e663-40d2-9774-8b8a5f4d1415/26-how-build-support-tables-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h2 id="conclusion">Conclusion</h2>

<p>The way I am working with tables in Figma is not as black and white. The approach mainly depends on the product you’re designing and, of course, there are a few possible ways you could achieve the same goals.</p>

<p>Here are a few general recommendations I can make from my own practice:</p>

<ul>
<li>Keeping the line components on the design system side provides a chance to update tables for the whole project from one place. But every time you want to make an update, you will need to publish changes on the <strong>design system-level</strong>.</li>
<li>If you keep tasks in different documents, don’t forget to <strong>disconnect that file from the design system</strong>. This would help avoid uncontrolled updates that you will miss.</li>
<li>At first, using resizable components seems too tempting… until you need to begin supporting different styles in every size. If you have tables with varying line heights, <strong>it’s better to create individual components for each one of them.</strong></li>
<li>There is an approach that consists of using <em>as few components</em> as possible. But most of the time, you don’t look at your components — instead, you use “variants” to switch between them. So, it’s <strong>better to have enough separate components and, as a result, “variants”</strong> than to use hidden layers, the “Auto layout” option, and components inside other components that would be hard to manage later on.</li>
<li>Check that all table cells support <strong>at least</strong> two lines of text. You can use 16 <code>px</code> line spacing to make it happen.</li>
<li>I recommend using the <strong>minimum width for parent components</strong> (minimum width for each column). But these default minimum sizes have to be discussed with the front-end developers as they may sometimes have their own limitations. Therefore you need to ensure that everything in the design can be implemented in the later development stages.</li>
<li><strong>Create a color palette in your Design System for the tables</strong>, so you would be able to control all the colors from one place. Of course, you can use shared colors from the palette, but once you need to change text color in the tables, background, or something else, you will get into trouble.</li>
<li><strong>Create different text styles for the tables.</strong> For example, we use smaller line spacing in tables than in news feeds or articles. Having separate text settings would help you avoid future conflicts.</li>
</ul>

<p>Thank you for following me along! As I already said, tables are a complex component, and I can talk about this topic for days. But maybe better to stop here and give you a chance to try this approach for yourself. Then, if you have questions, I’d be happy to reply and help! Or I could write another article: “Working With Tables in Figma: The Pro Level.” ;-)</p>

<h3 id="other-resources">Other Resources</h3>

<p>I have collected a few links to resources (tutorials, plugins, discussions, etc.) related to working with tables in Figma:</p>

<ul>
<li>“<a href="https://www.smashingmagazine.com/2019/09/creating-tables-in-figma/">Creating Tables In Figma</a>,” Sasha Belichenko<br />
<em>A guide about one possible way of working with tables in Figma: how to create a table using components and Atomic Design methodology, and then how to integrate the table into your design system.</em></li>
<li>“<a href="https://spin.atomicobject.com/2022/02/15/google-sheets-sync/">Create a Figma Prototype with Data from Google Sheets</a>,” Bryan Elkus<br />
<em>The article covers in detail a plugin for Figma called</em> <strong><em>Google Sheets Sync.</em></strong> <em>It allows a user to pull in content directly from Google Sheets which is super-useful if you want to use this to populate your designs with more realistic data.</em></li>
<li>“<a href="https://www.figma.com/community/file/809752704119681183">Creating Tables in Figma with Auto Layout</a>”, Gavin McFarland<br />
<em>In this tutorial, Gavin explains how to modify tables in Figma which are completely fluid (with the Auto Layout feature). You can inspect the components in Figma Design to see how they were created.</em></li>
</ul>

<h4 id="tweets">Tweets</h4>

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">I spend my whole Figma life designing tables. I imagine other designers too. <a href="https://twitter.com/figma?ref_src=twsrc%5Etfw">@figma</a> can you please give us more features, like draggable horizontal rows AND vertical columns? Moving data around should be super easy, like Google Sheets.</p>&mdash; Joshua Sortino (@sortino) <a href="https://twitter.com/sortino/status/1513577995407179784?ref_src=twsrc%5Etfw">April 11, 2022</a></blockquote> 

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">I have a love/hate relationship with tables, so here&#39;s how I set up my design system to make things easier. Rows vs. columns, cell variants, and a &quot;module&quot; component with a variable toolbar and variable pagination.<a href="https://t.co/0MbCROJAmp">https://t.co/0MbCROJAmp</a> <a href="https://t.co/xztjdwoVeL">pic.twitter.com/xztjdwoVeL</a></p>&mdash; Jon Moore (@TheJMoore) <a href="https://twitter.com/TheJMoore/status/1513844779431387151?ref_src=twsrc%5Etfw">April 12, 2022</a></blockquote> 

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">We hear tables in <a href="https://twitter.com/figma?ref_src=twsrc%5Etfw">@figma</a> are hard, and we agree.<br><br>Here&#39;s how we leveraged our internal design tools to create a more seamless workflow for designers across the <a href="https://twitter.com/DesigningUber?ref_src=twsrc%5Etfw">@DesigningUber</a> team ➡️ <a href="https://t.co/R8PwiYdebK">pic.twitter.com/R8PwiYdebK</a></p>&mdash; Vincent van der Meulen (@vincentmvdm) <a href="https://twitter.com/vincentmvdm/status/1513630608274051074?ref_src=twsrc%5Etfw">April 11, 2022</a></blockquote> 

<p><em>A short Twitter thread on this topic, also mentioning the Configurator plugin that Vincent’s team made.</em></p>

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">"I found a pretty reliable way to create flexible, responsive custom tables in Figma. I’ll do a video walkthrough at some point, but if you want to play… <a href="https://t.co/cibZI3Uk4g">https://t.co/cibZI3Uk4g</a>"</p>&mdash; Buzz Usborne (@buzzusborne) <a href="https://twitter.com/buzzusborne/status/1511604883748622343?ref_src=twsrc%5Etfw">April 6, 2022</a></blockquote> 

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">"Did I make a full video about building tables in Figma? Yes. Do I regret going down this rabbit hole? Also yes. 📺🕳️"</p>&mdash; Buzz Usborne (@buzzusborne) <a href="https://twitter.com/buzzusborne/status/1514098048796065798?ref_src=twsrc%5Etfw">April 13, 2022</a></blockquote> 

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Tips time!<br><br>Using component props, we can create &quot;infinite tables&quot;<br><br>So we can toggle on however many columns / rows we need in designs<br><br>This prevents us maintaining large variant sets for every permutation of table 🍽<br><br>Community file to play with: <a href="https://t.co/WqNM5SMjSE">https://t.co/WqNM5SMjSE</a> <a href="https://t.co/yhefqrNImC">pic.twitter.com/yhefqrNImC</a></p>&mdash; luis. (@disco_lu) <a href="https://twitter.com/disco_lu/status/1531278254723567616?ref_src=twsrc%5Etfw">May 30, 2022</a></blockquote>

<p><em>Note: This technique is interesting if you have just a few tables in the product design. Otherwise it would be a problem to scale the system.</em></p>

<p>As you can see, dealing with tables is a “hot topic” 🔥 in the Figma design community! I hope that you could find something useful here, too.</p>

<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<div class="partners__lead-place"></div>

<h3 id="further-reading">Further Reading</h3>

<ul>
<li><a href="https://www.smashingmagazine.com/2025/01/navigating-challenges-modern-open-source-authoring/">Navigating The Challenges Of Modern Open-Source Authoring: Lessons Learned</a></li>
<li><a href="https://www.smashingmagazine.com/2023/05/designing-better-design-handoff-file-figma/">Designing A Better Design Handoff File In Figma</a></li>
<li><a href="https://www.smashingmagazine.com/2024/07/how-design-effective-conversational-ai-experiences-guide/">How To Design Effective Conversational AI Experiences: A Comprehensive Guide</a></li>
<li><a href="https://www.smashingmagazine.com/2025/03/case-minimal-wordpress-setups-contrarian-view-theme-frameworks/">The Case For Minimal WordPress Setups: A Contrarian View On Theme Frameworks</a></li>
</ul>

<div class="signature">
  <img src="https://www.smashingmagazine.com/images/logo/logo--red.png" alt="Smashing Editorial" width="35" height="46" loading="lazy" decoding="async" />
  <span>(mb, yk, il, mrn)</span>
</div>


              </article>
            </body>
          </html>
        ]]></content:encoded></item><item><author>Aleksandra Nagornaia</author><title>Composition-Based Design System In Figma</title><link>https://www.smashingmagazine.com/2022/01/composition-based-design-system-figma/</link><pubDate>Mon, 03 Jan 2022 13:00:00 +0000</pubDate><guid>https://www.smashingmagazine.com/2022/01/composition-based-design-system-figma/</guid><description>Figma has advanced enough where it now supports some powerful concepts that can help with the flexibility and maintainability of a design system. In this article, Sasha explains why she finds the Systems Designer position so rewarding — and it’s not only because of how fast certain tools have developed to help her master challenges she faces in her work projects.&lt;br />&lt;br />&lt;strong>Editor’s Note&lt;/strong>: This article comes with a &lt;a href="https://www.figma.com/community/file/1052482110625940513/Composable-components">Figma-playground file&lt;/a>, so feel free to jump in and explore the concept.</description><content:encoded><![CDATA[
          <html>
            <head>
              <meta charset="utf-8">
              <link rel="canonical" href="https://www.smashingmagazine.com/2022/01/composition-based-design-system-figma/" />
              <title>Composition-Based Design System In Figma</title>
            </head>
            <body>
              <article>
                <header>
                  <h1>Composition-Based Design System In Figma</h1>
                  
                    
                    <address>Aleksandra Nagornaia</address>
                  
                  <time datetime="2022-01-03T13:00:00&#43;00:00" class="op-published">2022-01-03T13:00:00+00:00</time>
                  <time datetime="2022-01-03T13:00:00&#43;00:00" class="op-modified">2026-02-09T03:03:08+00:00</time>
                </header>
                
                

<p>Working as a designer on a design system for a large product has taught me how precious the time you spend on a single task/component is. Things advance fast, and I try to keep up making it work for both designers and developers. It is no easy task.</p>

<p>I’ve noticed that a good chunk of team members’ productivity goes into <strong>endless conversations</strong> such as:</p>

<blockquote>“Should this be a separate component?”<br /><br />“Should it be a variant?”<br /><br />“What should the configuration options look like?”<br /><br />...and so on.</blockquote>

<p>These types of conversations are very repetitive, and even when a decision is made, they don’t feel like time with the team is well spent. There are so many questions to be answered.</p>

<p><strong>What do you optimize for?</strong> Is it for consistency, scalability, creativity or maintainability? You can optimize for so many things — and choosing only one often sacrifices another.</p>

<p>It’s difficult to define a set of rules that would put an end to these meetings in the future. What topped this problem up was one interface element that stood out due to its huge reusability and variations: <strong>list item</strong>.</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/34489310-200b-4db2-b963-c4a919f908cc/8-composable-design-architecture.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="310"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/34489310-200b-4db2-b963-c4a919f908cc/8-composable-design-architecture.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/34489310-200b-4db2-b963-c4a919f908cc/8-composable-design-architecture.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/34489310-200b-4db2-b963-c4a919f908cc/8-composable-design-architecture.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/34489310-200b-4db2-b963-c4a919f908cc/8-composable-design-architecture.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/34489310-200b-4db2-b963-c4a919f908cc/8-composable-design-architecture.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/34489310-200b-4db2-b963-c4a919f908cc/8-composable-design-architecture.png"
			
			sizes="100vw"
			alt="Title-Subtitle list item"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Four list items: all same, but different. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/34489310-200b-4db2-b963-c4a919f908cc/8-composable-design-architecture.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>If the <strong>Title-Subtitle</strong> list item is a component, then:</p>

<ul>
<li>Is the image (chevron) indicating a new component or a variant of one?</li>
<li>What if it’s not a navigation chevron at the end but an (info) icon instead?</li>
<li>What if it has a leading image in front?</li>
<li>What if it has a switch?</li>
</ul>

<p>Aaand at the same time, <strong>they share states</strong> (selected, pressed, disabled, and so on). Try to get the team iOS, Android and designers in a call to make a decision on it. 🤯</p>

<p>Thankfully, I’ve been surrounded by people that are open to collaboration across teams. After teaming up with developers, I started recognizing developer terms and patterns in the designer tool.</p>

<p>At the same time, Figma has been peeking over developers&rsquo; shoulders for <strong>layout building tools</strong> (like auto-layout, variants with properties, constraints, and so on), so now it allows designers to approach component building closer to how things look in code.</p>

<p>Observing developers in how they build and think about the components gives you a perspective on its structure. Soaking those patterns allowed me to build the components with <em>almost</em> the same rules in Figma (looking at you, min and max-width/height setting).</p>

<div data-audience="non-subscriber" data-remove="true" class="feature-panel-container">

<aside class="feature-panel" style="">
<div class="feature-panel-left-col">

<div class="feature-panel-description"><p>Roll up your sleeves and <strong>boost your UX skills</strong>! Meet <strong><a data-instant href="https://smart-interface-design-patterns.com/">Smart Interface Design Patterns</a></strong>&nbsp;🍣, a 10h video library by Vitaly Friedman. <strong>100s of real-life examples</strong> and live UX training. <a href="https://www.youtube.com/watch?v=3mwZztmGgbE">Free preview</a>.</p>
<a data-instant href="https://smart-interface-design-patterns.com/" class="btn btn--green btn--large" style="">Jump to table of contents&nbsp;↬</a></div>
</div>
<div class="feature-panel-right-col"><a data-instant href="https://smart-interface-design-patterns.com/" class="feature-panel-image-link">
<div class="feature-panel-image"><picture><source type="image/avif" srcSet="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3155f571-450d-42f9-81b4-494aa9b52841/video-course-smart-interface-design-patterns-vitaly-friedman.avif" />
<img
    loading="lazy"
    decoding="async"
    class="feature-panel-image-img"
    src="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8c98e7f9-8e62-4c43-b833-fc6bf9fea0a9/video-course-smart-interface-design-patterns-vitaly-friedman.jpg"
    alt="Feature Panel"
    width="690"
    height="790"
/>
</picture>
</div>
</a>
</div>
</aside>
</div>

<h2 id="introducing-composition-for-design-systems-composable-content-and-containers">Introducing “Composition” For Design Systems: Composable Content And Containers</h2>

<p>Let’s take a look at this <strong>list item</strong> component:</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d9930b4b-bf64-43d9-9ee9-69ee7f3f0db7/13-composable-design-architecture.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="503"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d9930b4b-bf64-43d9-9ee9-69ee7f3f0db7/13-composable-design-architecture.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d9930b4b-bf64-43d9-9ee9-69ee7f3f0db7/13-composable-design-architecture.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d9930b4b-bf64-43d9-9ee9-69ee7f3f0db7/13-composable-design-architecture.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d9930b4b-bf64-43d9-9ee9-69ee7f3f0db7/13-composable-design-architecture.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d9930b4b-bf64-43d9-9ee9-69ee7f3f0db7/13-composable-design-architecture.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d9930b4b-bf64-43d9-9ee9-69ee7f3f0db7/13-composable-design-architecture.png"
			
			sizes="100vw"
			alt="List item with primary, secondary and accent state"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      We always have a background that (in our case) could change depending on its state: primary, secondary, accent (plus its custom interaction and animation). (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d9930b4b-bf64-43d9-9ee9-69ee7f3f0db7/13-composable-design-architecture.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>The way we had them in our project was just a collection of all the possible <em>list items</em>, i.e. with a large icon, small icon, subtitle, toggle, trailing text, and so on. They were all separately defined with their backgrounds and named numerically (starting from list item 1 to 8).</p>

<p>So, we had no semantics in place defining our <em>list items</em> in a more meaningful way, as well as no optimized way of maintaining updates to the defined background styling and layout. What started happening was that <strong>new inconsistent states started appearing</strong> in some files:</p>

<ol>
<li>A <strong>choice-list item</strong> would have a tinted background in one design file (indicating selection), but just a checkmark on the right side in another;</li>
<li>The <strong>paddings</strong> would be different across design files.</li>
</ol>

<p>Reasonably, the backgrounds of <em>list items</em> should stay consistent throughout all screens and be flexible to fit different content inside. So, how do we enforce that through a design system <em>across all teams</em>?</p>

<p>There are a couple of ways, so let’s get a bit technical here. One approach is <strong>Variation</strong>.</p>

<h3 id="variation">Variation</h3>

<p>First, define all <em>list items</em> that exist in the interface and identify their variants:</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/668070d5-a060-4beb-abfe-381e84f22917/16-composable-design-architecture.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="531"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/668070d5-a060-4beb-abfe-381e84f22917/16-composable-design-architecture.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/668070d5-a060-4beb-abfe-381e84f22917/16-composable-design-architecture.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/668070d5-a060-4beb-abfe-381e84f22917/16-composable-design-architecture.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/668070d5-a060-4beb-abfe-381e84f22917/16-composable-design-architecture.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/668070d5-a060-4beb-abfe-381e84f22917/16-composable-design-architecture.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/668070d5-a060-4beb-abfe-381e84f22917/16-composable-design-architecture.png"
			
			sizes="100vw"
			alt="Different list items in the interface."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/668070d5-a060-4beb-abfe-381e84f22917/16-composable-design-architecture.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Then, add all the defined <em>list items</em> states (secondary, accent, and so on) as variants per each list item. This will double each original component/variant per state and you’ll be able to account for all possible states that a <em>list item</em> might have.</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d7cb4cd0-693f-486f-b34e-0cb09118337d/15-composable-design-architecture.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="507"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d7cb4cd0-693f-486f-b34e-0cb09118337d/15-composable-design-architecture.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d7cb4cd0-693f-486f-b34e-0cb09118337d/15-composable-design-architecture.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d7cb4cd0-693f-486f-b34e-0cb09118337d/15-composable-design-architecture.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d7cb4cd0-693f-486f-b34e-0cb09118337d/15-composable-design-architecture.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d7cb4cd0-693f-486f-b34e-0cb09118337d/15-composable-design-architecture.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d7cb4cd0-693f-486f-b34e-0cb09118337d/15-composable-design-architecture.png"
			
			sizes="100vw"
			alt="Defined list items states."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Example: One-sided List item has 3 original variants. If they have 2 additional states, we add them to each variant — 9 variants in total. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d7cb4cd0-693f-486f-b34e-0cb09118337d/15-composable-design-architecture.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>This is how we first thought to approach the problem, but you can clearly see the issues with it: bloating the number of variants that need to be maintained where you have an unnecessary repetition of background and other elements.</p>

<p>Now, imagine this. Let’s try changing the following:</p>

<ul>
<li>Secondary background (grey) to have a different color/corner radius;</li>
<li>Or font style of the Title;</li>
<li>Or spacing between Title and Subtitle;</li>
<li>Or image size.</li>
</ul>

<p>You would have to go to every variant (32 in total in our case) and update each one manually in order to align these changes. 😨 This becomes a quite inefficient way to maintain these components, lightly speaking.</p>

<p>Let’s then move on to a better approach: <strong>Composition</strong>.</p>

<h3 id="composition">Composition</h3>

<p>We’ll start with composing a <em>container</em> 🔴. Here we define the background styling and padding (can also include corner radius, shadows, and so on), and nest the instance of a <em>Generic content placeholder</em> 🔷 that will allow us to swap it with any other component.</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d78f2663-0596-4504-8327-dc87ab89d181/14-composable-design-architecture.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="297"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d78f2663-0596-4504-8327-dc87ab89d181/14-composable-design-architecture.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d78f2663-0596-4504-8327-dc87ab89d181/14-composable-design-architecture.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d78f2663-0596-4504-8327-dc87ab89d181/14-composable-design-architecture.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d78f2663-0596-4504-8327-dc87ab89d181/14-composable-design-architecture.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d78f2663-0596-4504-8327-dc87ab89d181/14-composable-design-architecture.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d78f2663-0596-4504-8327-dc87ab89d181/14-composable-design-architecture.png"
			
			sizes="100vw"
			alt="Container basically defines the background look and a placeholder area for any content to be hosted in."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Container basically defines the background look and a placeholder area for any content to be hosted in. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d78f2663-0596-4504-8327-dc87ab89d181/14-composable-design-architecture.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Our list items will have a few <em>Enhancing elements</em> 🔶 in them, such as s checkmark, navigation chevron, switch or button. Since they might apply to any defined background and to all generic content, we would need to compose another container for those elements.</p>

<ul>
<li>The <em>container</em> defines the element and its location with paddings;</li>
<li>Same <em>placeholder</em> instance is nested inside again for content.</li>
</ul>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6968053c-5757-4fff-968c-29c5d7842ace/2-composable-design-architecture.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="391"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6968053c-5757-4fff-968c-29c5d7842ace/2-composable-design-architecture.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6968053c-5757-4fff-968c-29c5d7842ace/2-composable-design-architecture.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6968053c-5757-4fff-968c-29c5d7842ace/2-composable-design-architecture.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6968053c-5757-4fff-968c-29c5d7842ace/2-composable-design-architecture.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6968053c-5757-4fff-968c-29c5d7842ace/2-composable-design-architecture.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6968053c-5757-4fff-968c-29c5d7842ace/2-composable-design-architecture.png"
			
			sizes="100vw"
			alt="Notice how these don’t have neither background color nor padding, these come from what they’ll be nested in."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Notice how these don’t have neither background color nor padding, these come from what they’ll be nested in. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6968053c-5757-4fff-968c-29c5d7842ace/2-composable-design-architecture.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Next, let’s define the list items <em>content</em> ⚫️ (e.g. <em>Multiline list item</em>) that your interface has without background (only text and images):</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7f944b83-f779-4791-ac4d-f39a8280fd53/3-composable-design-architecture.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="310"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7f944b83-f779-4791-ac4d-f39a8280fd53/3-composable-design-architecture.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7f944b83-f779-4791-ac4d-f39a8280fd53/3-composable-design-architecture.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7f944b83-f779-4791-ac4d-f39a8280fd53/3-composable-design-architecture.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7f944b83-f779-4791-ac4d-f39a8280fd53/3-composable-design-architecture.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7f944b83-f779-4791-ac4d-f39a8280fd53/3-composable-design-architecture.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7f944b83-f779-4791-ac4d-f39a8280fd53/3-composable-design-architecture.png"
			
			sizes="100vw"
			alt="This one can be easily split into multiple components with less variants and nothing would change in our approach."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      This one can be easily split into multiple components with less variants and nothing would change in our approach. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7f944b83-f779-4791-ac4d-f39a8280fd53/3-composable-design-architecture.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Now, in order for us to assemble the needed <em>list item</em>, we need to think from the ground up (Z-axis first):</p>

<ul>
<li>Take the <em>container</em> 🔴 and select a needed state;</li>
<li>Swap the <em>placeholder</em> 🔷 inside with the list item <em>content</em> ⚫️ you defined &gt;&gt; ☑️</li>
<li>Or if you have an <em>enhancing element</em> in a list item (like a switch, button, and so on):

<ul>
<li>Swap the <em>placeholder</em> 🔷 with the <em>element container</em> 🔶,</li>
<li>Then swap inside the <em>placeholder</em> 🔷 with a list item <em>content</em> ⚫️ &gt;&gt; ☑️.</li>
</ul></li>
</ul>


<figure class="video-embed-container">
  <div class="video-embed-container--wrapper"
	
  >
    <iframe class="video-embed-container--wrapper-iframe" src="https://player.vimeo.com/video/660077544"
        frameborder="0"
        allow="autoplay; fullscreen; picture-in-picture"
        allowfullscreen>
    </iframe>
	</div>
	
</figure>

<p>In the end, it is not only that we align design and development approaches by using composition, but in addition, it would be <em>the</em> most optimized way to build such components in design and code for consistency and maintainability. Now our design component has become almost like a pseudo code for developers.</p>

<p>Talking about code&hellip;</p>

<p>Let’s see how things look like in development. Here is some code and a rendered iOS preview for a few SwiftUI composition components:</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/accccf37-1e78-43c6-9b73-d7b78a27d0bb/4-composable-design-architecture.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="543"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/accccf37-1e78-43c6-9b73-d7b78a27d0bb/4-composable-design-architecture.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/accccf37-1e78-43c6-9b73-d7b78a27d0bb/4-composable-design-architecture.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/accccf37-1e78-43c6-9b73-d7b78a27d0bb/4-composable-design-architecture.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/accccf37-1e78-43c6-9b73-d7b78a27d0bb/4-composable-design-architecture.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/accccf37-1e78-43c6-9b73-d7b78a27d0bb/4-composable-design-architecture.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/accccf37-1e78-43c6-9b73-d7b78a27d0bb/4-composable-design-architecture.png"
			
			sizes="100vw"
			alt="Some code and a rendered iOS preview for a few SwiftUI composition components."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/accccf37-1e78-43c6-9b73-d7b78a27d0bb/4-composable-design-architecture.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Some of these combinations are silly, but they do showcase the power of the approach. Notice how the switch (toggle) component is actually native/system for iOS and how it plugs into our composition with our custom components completely seamlessly, both in code and visually.</p>

<p>This is because modern front-end frameworks such as SwiftU for iOS and Jetpack Compose for Android (no kidding it literally has “Compose” in its name 😉) rely on the same composition approach that we are describing — and what Figma now allows, too.</p>

<div class="partners__lead-place"></div>

<h2 id="why-even-build-composable-components">Why Even Build Composable Components?</h2>

<p>Well, there are at least five good reasons why we’d want to build composable components:</p>

<ul>
<li><a href="#1-consistency">Consistency</a></li>
<li><a href="#2-error-proof-design">Error-Proof Design</a></li>
<li><a href="#3-absolute-flexibility">Absolute Flexibility</a></li>
<li><a href="#4-reduces-variants">Reduces Variants</a></li>
<li><a href="#5-brings-the-teams-together">Better Teamwork</a></li>
</ul>

<h3 id="1-consistency">1. Consistency</h3>

<p>By putting all the background patterns in one place to be reused, we ensure that those background states are represented consistently across the features and teams, as a single source of truth. When these states are not really defined, you get visually different designs for these states across the screens — the more designers on the team, the more inconsistencies there will be.</p>

<h3 id="2-error-proof-design">2. Error-Proof Design</h3>

<p>We completely eliminate an opportunity for a designer to misuse the states, mistaken the paddings, introduce something that already exists, etc. Unless you detach the instance&hellip;</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c0a16c7f-1dff-4413-b674-0dd5db2f9207/1-composable-design-architecture.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="384"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c0a16c7f-1dff-4413-b674-0dd5db2f9207/1-composable-design-architecture.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c0a16c7f-1dff-4413-b674-0dd5db2f9207/1-composable-design-architecture.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c0a16c7f-1dff-4413-b674-0dd5db2f9207/1-composable-design-architecture.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c0a16c7f-1dff-4413-b674-0dd5db2f9207/1-composable-design-architecture.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c0a16c7f-1dff-4413-b674-0dd5db2f9207/1-composable-design-architecture.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c0a16c7f-1dff-4413-b674-0dd5db2f9207/1-composable-design-architecture.png"
			
			sizes="100vw"
			alt="The text in the picture: you wouldn’t detach an instance, would you?"
		/>
    
    </a>
  

  
</figure>

<h3 id="3-absolute-flexibility">3. Absolute Flexibility</h3>

<p>Do you need to nest some other component inside your <em>list item</em>? Voilà! We don’t need to limit a <em>list item</em> to host specific content only. You can put any content inside. Usually, consistency is achieved at the expense of flexibility, but not in this case.</p>

<h3 id="4-reduces-variants">4. Reduces Variants</h3>

<p>There is no longer a need to include <em>list item</em> states in every <em>list item</em> component. You have it defined in one place and reused as a <em>container</em>, same for the <em>elements</em> that <em>list item</em> can host, like switches, buttons, icons, and so on. Helps for maintainability and scalability of the components.</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/64841e41-d33f-427a-976b-0eed70882af3/10-composable-design-architecture.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="471"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/64841e41-d33f-427a-976b-0eed70882af3/10-composable-design-architecture.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/64841e41-d33f-427a-976b-0eed70882af3/10-composable-design-architecture.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/64841e41-d33f-427a-976b-0eed70882af3/10-composable-design-architecture.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/64841e41-d33f-427a-976b-0eed70882af3/10-composable-design-architecture.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/64841e41-d33f-427a-976b-0eed70882af3/10-composable-design-architecture.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/64841e41-d33f-427a-976b-0eed70882af3/10-composable-design-architecture.png"
			
			sizes="100vw"
			alt="Variation approach vs. Composition approach."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/64841e41-d33f-427a-976b-0eed70882af3/10-composable-design-architecture.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Now scale this to a whole design system. You can see why I consider the <em>variation</em> approach unmaintainable.</p>

<h3 id="5-brings-the-teams-together">5. Brings The Teams Together</h3>

<p>Building components in design the same as in code removes the friction in documentation and specs, as well as allows sharing the same process and language between designers and developers.</p>

<p>And guess what, this can be applied to many other components that share a similar composable structure. The most obvious components that we put as candidates for this upgrade are:</p>

<ul>
<li><strong>cards</strong>: reusing backgrounds like active, highlighted, disabled,</li>
<li>custom <strong>bottom sheets</strong>: reusing container and putting any content inside.</li>
</ul>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/b2f0c9ec-4aaa-496c-a6dd-e273e03c19f4/9-composable-design-architecture.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="347"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/b2f0c9ec-4aaa-496c-a6dd-e273e03c19f4/9-composable-design-architecture.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/b2f0c9ec-4aaa-496c-a6dd-e273e03c19f4/9-composable-design-architecture.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/b2f0c9ec-4aaa-496c-a6dd-e273e03c19f4/9-composable-design-architecture.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/b2f0c9ec-4aaa-496c-a6dd-e273e03c19f4/9-composable-design-architecture.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/b2f0c9ec-4aaa-496c-a6dd-e273e03c19f4/9-composable-design-architecture.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/b2f0c9ec-4aaa-496c-a6dd-e273e03c19f4/9-composable-design-architecture.png"
			
			sizes="100vw"
			alt="Cards and bottom sheets."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/b2f0c9ec-4aaa-496c-a6dd-e273e03c19f4/9-composable-design-architecture.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h2 id="when-to-use-it-and-when-not">When To Use It And When Not?</h2>

<p>You can probably already see that this structure optimizes consistent reuse and maintainability the most, but don’t go overboard with it. Here is <strong>a general rule</strong> of when you can go with composition:</p>

<blockquote>You use composition when you can (reasonably) slice a component (on X/Y/Z axis) into 2 parts “Generic content” and “Enhancing elements” where:<br />
  <ul><li><strong>“Generic content”</strong> is the slice (area) of a component that hosts any UI content.</li>
    <li><strong>“Enhancing elements”</strong> include the constant UI elements (like switch, chevron, background) and interaction behaviour (animations) of a component.</li></ul></blockquote>

<p>This rule leaves a lot of room for interpretation because slices can be seen differently by different people, but that’s fine because it demonstrates the flexibility and power of this approach where you have multiple ways to achieve your goal.</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4a67364c-3243-44a0-a515-7c025937f693/6-composable-design-architecture.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="435"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4a67364c-3243-44a0-a515-7c025937f693/6-composable-design-architecture.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4a67364c-3243-44a0-a515-7c025937f693/6-composable-design-architecture.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4a67364c-3243-44a0-a515-7c025937f693/6-composable-design-architecture.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4a67364c-3243-44a0-a515-7c025937f693/6-composable-design-architecture.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4a67364c-3243-44a0-a515-7c025937f693/6-composable-design-architecture.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4a67364c-3243-44a0-a515-7c025937f693/6-composable-design-architecture.png"
			
			sizes="100vw"
			alt="Generic content and Enhancing elements"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Not only you want to reuse the generic content because it contains quite a bit of logic (icon colors, IBAN formatting), but also there are other possibilities of generic content for the Radio group and Choice list components. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4a67364c-3243-44a0-a515-7c025937f693/6-composable-design-architecture.png'>Large preview</a>)
    </figcaption>
  
</figure>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e0cf4ac8-afc0-49a1-a075-3da2cd1b3d55/5-composable-design-architecture.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="478"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e0cf4ac8-afc0-49a1-a075-3da2cd1b3d55/5-composable-design-architecture.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e0cf4ac8-afc0-49a1-a075-3da2cd1b3d55/5-composable-design-architecture.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e0cf4ac8-afc0-49a1-a075-3da2cd1b3d55/5-composable-design-architecture.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e0cf4ac8-afc0-49a1-a075-3da2cd1b3d55/5-composable-design-architecture.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e0cf4ac8-afc0-49a1-a075-3da2cd1b3d55/5-composable-design-architecture.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e0cf4ac8-afc0-49a1-a075-3da2cd1b3d55/5-composable-design-architecture.png"
			
			sizes="100vw"
			alt="Background here looks reusable but actually reacts to the input state, which creates coupling between the text field and the background, meaning they are not agnostic of each other."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Background here looks reusable but actually reacts to the input state, which creates coupling between the text field and the background, meaning they are not agnostic of each other. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e0cf4ac8-afc0-49a1-a075-3da2cd1b3d55/5-composable-design-architecture.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h2 id="managing-the-power">Managing The Power</h2>

<p>If you decide to embrace the composable structure in your design system, I would recommend splitting your components into layers of hierarchy in Figma:</p>

<ol>
<li><strong>Container-backgrounds</strong><br />
These compose on the Z-axis and only define:

<ul>
<li><strong>styling</strong>: background color, corner radius, shadow, and so on.</li>
<li><strong>general layout</strong>: paddings, the position of the content.</li>
</ul></li>
<li><strong>Enhancing-elements containers</strong><br />
Containers that might include additional elements like chevron, switch, button, icon, etc.</li>
<li><strong>Content</strong><br />
Components that are actual generic content implementations. They are the final node of the composition tree.</li>
</ol>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d15939de-f136-4a76-9715-b19bb4cc56d3/12-composable-design-architecture.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="337"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d15939de-f136-4a76-9715-b19bb4cc56d3/12-composable-design-architecture.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d15939de-f136-4a76-9715-b19bb4cc56d3/12-composable-design-architecture.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d15939de-f136-4a76-9715-b19bb4cc56d3/12-composable-design-architecture.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d15939de-f136-4a76-9715-b19bb4cc56d3/12-composable-design-architecture.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d15939de-f136-4a76-9715-b19bb4cc56d3/12-composable-design-architecture.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d15939de-f136-4a76-9715-b19bb4cc56d3/12-composable-design-architecture.png"
			
			sizes="100vw"
			alt="Three layers of hierarchy in Figma: Container-backgrounds, Enhancing-elements containers, Content."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d15939de-f136-4a76-9715-b19bb4cc56d3/12-composable-design-architecture.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>You can see how you now have the power to compose anything. And just like lego pieces, your components are capable of infinite combinations that might actually be silly in practice, like in the example below.</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3de4c50b-65e4-4a4e-994a-38019c16d379/11-composable-design-architecture.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="206"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3de4c50b-65e4-4a4e-994a-38019c16d379/11-composable-design-architecture.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3de4c50b-65e4-4a4e-994a-38019c16d379/11-composable-design-architecture.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3de4c50b-65e4-4a4e-994a-38019c16d379/11-composable-design-architecture.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3de4c50b-65e4-4a4e-994a-38019c16d379/11-composable-design-architecture.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3de4c50b-65e4-4a4e-994a-38019c16d379/11-composable-design-architecture.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3de4c50b-65e4-4a4e-994a-38019c16d379/11-composable-design-architecture.png"
			
			sizes="100vw"
			alt="An example of components which are capable of infinite combinations."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3de4c50b-65e4-4a4e-994a-38019c16d379/11-composable-design-architecture.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>So, you might decide that you want to limit the usage combinations of your composable components. As in the example of combining checkmark and switch, we clearly don’t want to nest both of these elements in one <em>list item</em>, so what we can do instead is to couple <em>enhancing-container</em> with applicable <em>container-backgrounds</em> as a new component.</p>

<p>In the <em>Navigation list item</em>, you couple <em>container-background</em> (with 2 variants, default and pressed) with <em>enhancing-container</em> (chevron). That way, you define all of the possible variations of this component. Also, even though you can still put any content inside, you cannot use another state (like highlighted) or add other elements like toggles to it.</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c9bc4c74-9ed8-43dc-9a58-2f66406f451b/7-composable-design-architecture.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="326"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c9bc4c74-9ed8-43dc-9a58-2f66406f451b/7-composable-design-architecture.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c9bc4c74-9ed8-43dc-9a58-2f66406f451b/7-composable-design-architecture.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c9bc4c74-9ed8-43dc-9a58-2f66406f451b/7-composable-design-architecture.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c9bc4c74-9ed8-43dc-9a58-2f66406f451b/7-composable-design-architecture.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c9bc4c74-9ed8-43dc-9a58-2f66406f451b/7-composable-design-architecture.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c9bc4c74-9ed8-43dc-9a58-2f66406f451b/7-composable-design-architecture.png"
			
			sizes="100vw"
			alt="Three columns: Navigation list item, Switch list item and Selectable list item."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c9bc4c74-9ed8-43dc-9a58-2f66406f451b/7-composable-design-architecture.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h2 id="final-notes">Final Notes</h2>

<p>So far, my team and I have adopted composable components for <em>cards</em> and <em>list items</em> for both mobile platforms, iOS and Android — and we love it.</p>

<p>Developers and designers quickly grew very fond of this approach. Although the component building is becoming more complex, everyone sees that it makes our design system more elaborate and elegant.</p>

<p>Generally, if you leave it to live only in a design system without syncing it in code, it will already be beneficial enough. You do need to put effort into building it, but then it pays off well with less maintenance — just as much as it does for design systems.</p>

<p><em>This article was written in collaboration with my iOS developer husband. Thank you, Petar Kanev.</em></p>

<div class="partners__lead-place"></div>

<h3 id="further-reading">Further Reading</h3>

<ul>
<li><a href="https://www.smashingmagazine.com/2025/01/role-illustration-style-visual-storytelling/">The Role Of Illustration Style In Visual Storytelling</a></li>
<li><a href="https://www.smashingmagazine.com/2025/01/navigating-challenges-modern-open-source-authoring/">Navigating The Challenges Of Modern Open-Source Authoring: Lessons Learned</a></li>
<li><a href="https://www.smashingmagazine.com/2023/11/design-to-code-handoff-process-uno-platform-figma/">An Efficient Design-to-Code Handoff Process Using Uno Platform For Figma</a></li>
<li><a href="https://www.smashingmagazine.com/2022/08/everything-developers-must-know-about-figma/">Everything Developers Must Know About Figma</a></li>
</ul>

<div class="signature">
  <img src="https://www.smashingmagazine.com/images/logo/logo--red.png" alt="Smashing Editorial" width="35" height="46" loading="lazy" decoding="async" />
  <span>(vf, yk, il, mrn)</span>
</div>


              </article>
            </body>
          </html>
        ]]></content:encoded></item><item><author>Janet John</author><title>Useful Figma Plugins And Tools</title><link>https://www.smashingmagazine.com/2021/08/figma-tools-plugins-resources/</link><pubDate>Thu, 12 Aug 2021 13:30:00 +0000</pubDate><guid>https://www.smashingmagazine.com/2021/08/figma-tools-plugins-resources/</guid><description>Useful Figma plugins that will help you fix all the little slowdowns and boost your productivity. From color management and image assets to SVG shapes and animation. Whether you’re just starting out with Figma or have been using it for a good while now, this post will give you just enough pointers to make your design process faster and smoother.</description><content:encoded><![CDATA[
          <html>
            <head>
              <meta charset="utf-8">
              <link rel="canonical" href="https://www.smashingmagazine.com/2021/08/figma-tools-plugins-resources/" />
              <title>Useful Figma Plugins And Tools</title>
            </head>
            <body>
              <article>
                <header>
                  <h1>Useful Figma Plugins And Tools</h1>
                  
                    
                    <address>Janet John</address>
                  
                  <time datetime="2021-08-12T13:30:00&#43;00:00" class="op-published">2021-08-12T13:30:00+00:00</time>
                  <time datetime="2021-08-12T13:30:00&#43;00:00" class="op-modified">2026-02-09T03:03:08+00:00</time>
                </header>
                
                

<p>There are literally <a href="https://www.figma.com/community/explore?tab=plugins&amp;fuid=481297175489226426">thousands</a> of <strong>Figma plugins</strong> out there. Which ones do you use? How often do you use them? We’ve scouted for some of the <strong>useful ones</strong>, and we hope that the ones listed below will help you improve your workflow. Whether you’re just starting out with <a href="https://www.smashingmagazine.com/category/figma">Figma</a> or have been using it for a good while now, this post will give you just enough pointers to make your design process faster and smoother.</p>

<div data-audience="non-subscriber" data-remove="true" class="feature-panel-container">

<aside class="feature-panel" style="">
<div class="feature-panel-left-col">

<div class="feature-panel-description"><p>Meet <strong><a data-instant href="/printed-books/image-optimization/">Image Optimization</a></strong>, Addy Osmani’s new practical guide to optimizing and delivering <strong>high-quality images</strong> on the web. Everything in one single <strong>528-pages</strong> book.</p>
<a data-instant href="https://www.smashingmagazine.com/printed-books/image-optimization/" class="btn btn--green btn--large" style="">Jump to table of contents&nbsp;↬</a></div>
</div>
<div class="feature-panel-right-col"><a data-instant href="https://www.smashingmagazine.com/printed-books/image-optimization/" class="feature-panel-image-link">
<div class="feature-panel-image"><picture><source type="image/avif" srcSet="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2c669cf1-c6ef-4c87-9901-018b04f7871f/image-optimization-shop-cover-opt.avif" />
<img
    loading="lazy"
    decoding="async"
    class="feature-panel-image-img"
    src="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/87fd0cfa-692e-459c-b2f3-15209a1f6aa7/image-optimization-shop-cover-opt.png"
    alt="Feature Panel"
    width="480"
    height="697"
/>
</picture>
</div>
</a>
</div>
</aside>
</div>

<h3 id="table-of-contents">Table Of Contents</h3>

<p>Below you’ll find quick jumps to specific plugins and guides you may need. Scroll down for a general overview or <a href="#3d-views-and-perspectives-in-figma">skip the table of contents</a>. Also, take a look at the other</p>

<ul class="toc-components">
<li><a href="#3d-views-and-perspectives-in-figma">3D views</a></li>
<li><a href="#accessibility-in-figma">accessibility</a></li>
<li><a href="#animation-editor-in-figma">animation</a></li>
<li><a href="#annotations-made-easy-in-figma">annotations</a></li>
<li><a href="#auto-rename-frames-and-layers-in-figma">auto renaming</a></li>
<li><a href="#avatars-for-design-mockups-in-figma">avatars</a></li>
<li><a href="#brand-logos-embedding-in-figma">brand logos</a></li>
<li><a href="#charts-embedding-in-figma">charts</a></li>
<li><a href="#clean-figma-projects-before-handoff">clean up before handoff</a></li>
<li><a href="#clean-up-a-messy-frame-in-figma">group in a grid</a></li>
<li><a href="#content-placeholders-in-figma">content placeholders</a></li>
<li><a href="#color-palettes-in-figma">color palettes</a></li>
<li><a href="#curve-your-text-in-figma">curve your text</a></li>
<li><a href="#design-tokens-in-figma">design tokens</a></li>
<li><a href="#design-systems-with-figma">design systems</a></li>
<li><a href="#device-mockups-in-figma">device mock-ups</a></li>
<li><a href="#exporting-figma-to-html-css-react">exporting</a>, <a href="#exporting-figma-to-vue-js">exporting 2</a></li>
<li><a href="#perfect-file-structure-in-figma">file structure</a></li>
<li><a href="#fonts-preview-in-figma">fonts preview</a></li>
<li><a href="#google-fonts-pairings-for-figma">Google Fonts</a></li>
<li><a href="#copy-paste-and-sync-google-sheets-in-figma">Google Sheets sync</a></li>
<li><a href="#email-templates-in-figma">HTML email templates</a></li>
<li><a href="#icons-embedding-in-figma">icons</a></li>
<li><a href="#illustrations-embedding-in-figma">illustrations</a></li>
<li><a href="#interactive-components-and-variants-in-figma">interactive components</a></li>
<li><a href="#layout-grid-in-figma">grid</a></li>
<li><a href="#maps-embedding-in-figma">maps</a></li>
<li><a href="#name-conventions-in-figma">name conventions</a></li>
<li><a href="#notepad-for-quick-notes-in-figma">note-taking</a></li>
<li><a href="#patterns-in-your-figma-designs">patterns</a></li>
<li><a href="#photos-embedding-in-figma">photos</a></li>
<li><a href="#remove-backgrounds-in-figma">remove backgrounds</a></li>
<li><a href="#annotations-with-redlines-in-figma">redlines</a></li>
<li><a href="#responsive-design-and-testing-in-figma">responsive design and testing</a></li>
<li><a href="#reverse-the-order-of-layers">reverse the order</a></li>
<li><a href="#shapes-and-svg-in-figma">shapes and SVG</a></li>
<li><a href="#turn-your-designs-into-a-slide-deck">slide deck</a></li>
<li><a href="#table-generator-in-figma">table generator</a></li>
<li><a href="#templates-for-wayfinding-in-figma">wayfinding template</a></li>
<li><a href="#text-replacement-in-figma">text replacement</a></li>
<li><a href="#tracing-images-in-figma">tracing images</a></li>
<li><a href="#typographic-scale-in-figma">type scale</a></li>
<li><a href="#upload-images-from-mobile-in-figma">upload images from mobile</a></li>
<li><a href="#utility-plugins-in-figma">utilities</a></li>
<li><a href="#wireframing-and-prototyping-in-figma">wireframing and prototyping</a></li>
</ul>

<h2 id="3d-views-and-perspectives-in-figma">3D Views And Perspectives In Figma</h2>

<p><a href="https://www.figma.com/community/plugin/769588393361258724/Vectary-3D-Elements">Vectary 3D Elements</a> makes eveything just a little bit more spatial. It’s one of the easier ways of adding 3D mockups to your designs, as well as add layers, wrapping and transforms. You can place your Figma design into a preferred 3D mockup or create your custom 3D element. You can take a closer look at the <a href="https://www.figma.com/community/plugin/769588393361258724/vectary-3d-studio-lite">thorough guide and video about the plugin</a> to get started.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/769588393361258724/Vectary-3D-Elements">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="397"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/db231a5e-a52d-4976-bd42-6088cdd21ff5/40-vectary-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/db231a5e-a52d-4976-bd42-6088cdd21ff5/40-vectary-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/db231a5e-a52d-4976-bd42-6088cdd21ff5/40-vectary-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/db231a5e-a52d-4976-bd42-6088cdd21ff5/40-vectary-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/db231a5e-a52d-4976-bd42-6088cdd21ff5/40-vectary-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/db231a5e-a52d-4976-bd42-6088cdd21ff5/40-vectary-opt.png"
			
			sizes="100vw"
			alt="Vectary 3D Elements"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      3D perspectives in all kinds and shapes. With <a href='https://www.figma.com/community/plugin/769588393361258724/Vectary-3D-Elements'>Vectary 3D Elements</a>.
    </figcaption>
  
</figure>

<p>Additionally, <a href="https://www.figma.com/community/plugin/908688914070762787/Figmockups">Figmockups</a> and <a href="https://www.figma.com/community/plugin/819335598581469537/Clay-Mockups-3D">Clay Mockups 3D</a> include a larger repository of 3D mock-ups, and <a href="https://www.figma.com/community/plugin/946020080871644950/Fig3D">Fig3D</a> converts objects into 3D models, and you can even group shapes and move them to 3D models together.</p>

<h2 id="accessibility-in-figma">Accessibility In Figma</h2>

<p>We all want to design better and inclusive experiences, but sometimes we might be forgetting about just the right color contrast, or a proper tab order. Luckily, there are plenty of <a href="https://www.figma.com/community/search?model_type=public_plugins&amp;q=accessibility">Figma plugins for accessibility</a>.</p>

<p><a href="https://www.figma.com/community/plugin/732603254453395948/Stark">Stark</a> is a full powerhouse on everything accessibility. It includes contrast checking and vision simulators, and it also allows you to <strong>reorder your sequences in focus order</strong>. It also displays the contrast ratio for any two objects that you select. Alternatively, you can also use <a href="https://www.figma.com/community/plugin/748533339900865323/Contrast">Contrast</a> as well.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/732603254453395948/Stark">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="401"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3d2fe7fe-ef8b-4b56-9d31-75cf660855bd/16-stark-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3d2fe7fe-ef8b-4b56-9d31-75cf660855bd/16-stark-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3d2fe7fe-ef8b-4b56-9d31-75cf660855bd/16-stark-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3d2fe7fe-ef8b-4b56-9d31-75cf660855bd/16-stark-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3d2fe7fe-ef8b-4b56-9d31-75cf660855bd/16-stark-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3d2fe7fe-ef8b-4b56-9d31-75cf660855bd/16-stark-opt.png"
			
			sizes="100vw"
			alt="Stark"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Meet <a href='https://www.figma.com/community/plugin/732603254453395948/Stark'>Stark</a>, an accessibility powerhouse in Figma: with tools for contrast check and vision simulators.
    </figcaption>
  
</figure>

<p>For accessible color palettes, <a href="https://www.figma.com/community/plugin/887066243068431786/Geenes">Geenes.app</a> is a reliable and sophisticated tool that allows you to create, maintain, sync and test color palettes and their variations. It’s really difficult to imagine any Figma setup that doesn’t have this plugin installed!</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/887066243068431786/Geenes">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="398"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/970c4841-4dc7-4e4e-a340-dc82d99b9be0/geenes.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/970c4841-4dc7-4e4e-a340-dc82d99b9be0/geenes.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/970c4841-4dc7-4e4e-a340-dc82d99b9be0/geenes.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/970c4841-4dc7-4e4e-a340-dc82d99b9be0/geenes.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/970c4841-4dc7-4e4e-a340-dc82d99b9be0/geenes.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/970c4841-4dc7-4e4e-a340-dc82d99b9be0/geenes.jpg"
			
			sizes="100vw"
			alt="Geenes"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Meet <a href='https://www.figma.com/community/plugin/887066243068431786/Geenes'>Geenes</a>, a reliable and sophisticated tool that allows you to create, maintain, sync and test color palettes and their variations.
    </figcaption>
  
</figure>

<p>If you need to test how a different font size will impact your layout, <a href="https://www.figma.com/community/plugin/892114953056389734/Text-Resizer---Accessibility-Checker">Text Resizer</a> helps you to see what exactly happens with increased or decreased font sizes.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/892114953056389734/Text-Resizer---Accessibility-Checker">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="398"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c3631cae-aead-4263-83e3-7900d10cf3be/15-text-resizer-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c3631cae-aead-4263-83e3-7900d10cf3be/15-text-resizer-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c3631cae-aead-4263-83e3-7900d10cf3be/15-text-resizer-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c3631cae-aead-4263-83e3-7900d10cf3be/15-text-resizer-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c3631cae-aead-4263-83e3-7900d10cf3be/15-text-resizer-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c3631cae-aead-4263-83e3-7900d10cf3be/15-text-resizer-opt.png"
			
			sizes="100vw"
			alt="Text Resizer"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      <a href='https://www.figma.com/community/plugin/892114953056389734/Text-Resizer---Accessibility-Checker'>Text Resizer</a> helps you see what exactly happens with increased or decreased font sizes.
    </figcaption>
  
</figure>

<h2 id="animation-editor-in-figma">Animation Editor In Figma</h2>

<p>It shouldn’t be a big revelation that creating animations in Figma doesn’t really require sophisticated external tools like Adobe After Effects. With <a href="https://www.figma.com/community/plugin/733025261168520714/Figmotion">Figmotion</a>, you have an advanced animation tool right at your fingertips. You select a frame, add an animation, and then navigate the timeframe via a time handle — with the option to update easing, keyframes and anchor points.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/733025261168520714/Figmotion">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="398"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/789e5167-9690-45a9-9b70-f69f881ac90d/22-figmotion-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/789e5167-9690-45a9-9b70-f69f881ac90d/22-figmotion-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/789e5167-9690-45a9-9b70-f69f881ac90d/22-figmotion-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/789e5167-9690-45a9-9b70-f69f881ac90d/22-figmotion-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/789e5167-9690-45a9-9b70-f69f881ac90d/22-figmotion-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/789e5167-9690-45a9-9b70-f69f881ac90d/22-figmotion-opt.png"
			
			sizes="100vw"
			alt="Figmotion"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      <a href='https://www.figma.com/community/plugin/733025261168520714/Figmotion'>Figmotion</a>, an advanced animation tool right at your fingertips in Figma.
    </figcaption>
  
</figure>

<p>If you’d like to dive a bit deeper into animation with Figma, a <a href="https://uxdesign.cc/figma-5-ways-to-add-animation-to-your-designs-e3c521aa8902">guide to adding animation to your designs in Figma</a> shows the entire workshop, and various options you have, step-by-step.</p>

<h2 id="annotations-made-easy-in-figma">Annotations Made Easy In Figma</h2>

<p>How do you usually handle annotations when working with Figma? We came across two annotation kits that make communication on a design a lot smoother and less prone to misunderstandings.</p>
<figure><a title="Accessibility Annotation Kit" href="https://www.figma.com/community/file/953682768192596304"><img src="https://mcusercontent.com/16b832d9ad4b28edf261f34df/images/24e2c8c1-9a47-c41b-739d-701721a17dfb.png" width="500" height="352" alt="Accessibility Annotation Kit" border="0"></a></figure>
<p>One of them is <a href="https://www.figma.com/community/file/806626024182535168">Annotation Kit 2.0</a>: A variety of sticky notes and measuring lines and tools make it easy to add context and annotations for your team members as you’re working.</p>
<p>The <a href="https://www.figma.com/community/file/953682768192596304">A11y Annotation Kit</a> focuses on accessibility considerations that designers might want to share with developers when handing off a design. Whether it’s <strong>adding callouts for elements</strong>, indicating focus order, or specifying keyboard interactions, the kit translates some of the often cryptic WCAG wording into easy-to-use stickers that you can use to highlight key parts of the page. All components are pre-filled with the correct CSS or HTML elements.</p>

<h2 id="annotations-with-redlines-in-figma">Annotations With Redlines In Figma</h2>

<p>Annotating a design with detailed measurements and specs to help the developers in charge make sense of it all can be a time-consuming process. <a href="https://www.figma.com/community/plugin/781354942292031141/Redlines">Redlines</a> is here to change that. The plugin helps you quickly measure and plot dimensions of any selected object. All you need to do is select one or more layers, customize the redline settings, and choose a redline option to plot.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/781354942292031141/Redlines">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="397"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/caae7843-3675-471a-883e-b016c43aa7f4/redlines-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/caae7843-3675-471a-883e-b016c43aa7f4/redlines-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/caae7843-3675-471a-883e-b016c43aa7f4/redlines-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/caae7843-3675-471a-883e-b016c43aa7f4/redlines-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/caae7843-3675-471a-883e-b016c43aa7f4/redlines-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/caae7843-3675-471a-883e-b016c43aa7f4/redlines-opt.png"
			
			sizes="100vw"
			alt="Redlines"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/caae7843-3675-471a-883e-b016c43aa7f4/redlines-opt.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h2 id="auto-rename-frames-and-layers-in-figma">Auto Rename Frames And Layers In Figma</h2>

<p>When it comes to organizing your design files, <a href="https://www.figma.com/community/plugin/731271836271143349/Rename-It">Rename it</a> has got your back. You can batch rename your frames and layers. You can also rename multiple layers at once by applying custom filters. If you want to convert the layer name case from uppercase to lowercase or even camel case, you can use <code>%*</code> with a combination of letters to convert.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/731271836271143349/Rename-It">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="398"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/358f925a-e904-4f61-8362-4c4b8207ebf3/28-rename-it-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/358f925a-e904-4f61-8362-4c4b8207ebf3/28-rename-it-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/358f925a-e904-4f61-8362-4c4b8207ebf3/28-rename-it-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/358f925a-e904-4f61-8362-4c4b8207ebf3/28-rename-it-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/358f925a-e904-4f61-8362-4c4b8207ebf3/28-rename-it-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/358f925a-e904-4f61-8362-4c4b8207ebf3/28-rename-it-opt.png"
			
			sizes="100vw"
			alt="Rename it"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      <a href='https://www.figma.com/community/plugin/731271836271143349/Rename-It'>Rename-It</a> is quite self-explanatory, allowing you to rename multiple layers and frames at once.
    </figcaption>
  
</figure>

<h2 id="avatars-for-design-mockups-in-figma">Avatars For Design Mockups In Figma</h2>

<p>Sometimes we need to plug in a bit more than just text strings, and perhaps we need a few more options for our avatars. That’s where <a href="https://www.figma.com/community/plugin/769664006254845172/UI-Faces">UI Faces</a> can help.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/769664006254845172/UI-Faces">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="396"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/762370a7-e9f9-4181-b1f1-5d49386e86d7/38eccf33-9957-4732-a7dd-a9fc62330587-cover-1.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/762370a7-e9f9-4181-b1f1-5d49386e86d7/38eccf33-9957-4732-a7dd-a9fc62330587-cover-1.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/762370a7-e9f9-4181-b1f1-5d49386e86d7/38eccf33-9957-4732-a7dd-a9fc62330587-cover-1.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/762370a7-e9f9-4181-b1f1-5d49386e86d7/38eccf33-9957-4732-a7dd-a9fc62330587-cover-1.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/762370a7-e9f9-4181-b1f1-5d49386e86d7/38eccf33-9957-4732-a7dd-a9fc62330587-cover-1.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/762370a7-e9f9-4181-b1f1-5d49386e86d7/38eccf33-9957-4732-a7dd-a9fc62330587-cover-1.jpg"
			
			sizes="100vw"
			alt="UI Faces"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Thousands of avatars available straight from Figma: <a href='https://www.figma.com/community/plugin/769664006254845172/UI-Faces'>UI Faces</a>.
    </figcaption>
  
</figure>

<p>All avatars are collected from various sources (they are always provided), and they can be filtered by age, gender and emotion, but of course you need to check the source and the license before actually using it. Additionally, take a look at <a href="https://www.figma.com/community/plugin/749945157855564842/User-Profile">User Profiles</a>.</p>

<h2 id="brand-logos-embedding-in-figma">Brand Logos Embedding In Figma</h2>

<p>Perhaps you’d like to display some brand logos in reviews or testimonials, so how would you go around finding all the right logos? <a href="https://www.figma.com/community/plugin/733590967040604714/Brandfetch">BrandFetch</a> helps you easily insert brand assets into your design without leaving your Figma window. The plugin has a large library of (literally) millions of logos available at your fingertips. There is also a <a href="https://brandfetch.com/">searchable database</a> for you to find what you are looking for.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/733590967040604714/Brandfetch">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="422"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d769afdb-7373-4ba4-95d2-019431bc7678/33-brandfetch-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d769afdb-7373-4ba4-95d2-019431bc7678/33-brandfetch-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d769afdb-7373-4ba4-95d2-019431bc7678/33-brandfetch-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d769afdb-7373-4ba4-95d2-019431bc7678/33-brandfetch-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d769afdb-7373-4ba4-95d2-019431bc7678/33-brandfetch-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d769afdb-7373-4ba4-95d2-019431bc7678/33-brandfetch-opt.png"
			
			sizes="100vw"
			alt="BrandFetch"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      An encyclopedia for brand logos, <a href='https://www.figma.com/community/plugin/733590967040604714/Brandfetch'>Brandfetch</a>.
    </figcaption>
  
</figure>

<h2 id="charts-embedding-in-figma">Charts Embedding In Figma</h2>

<p>Your design process just got a bit less stressful. With <a href="https://www.figma.com/community/plugin/734590934750866002/Chart">Chart</a>, you can create various charts using real or random data easily. The plugin supports copy and paste from Excel, Google sheet, Numbers and it also can sync with Google Sheets and remote JSON. Alternatively, you can also import CSV and JSON files.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/734590934750866002/Chart">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="466"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3672a742-0351-4339-9a44-76cdc2a7d645/34-chart-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3672a742-0351-4339-9a44-76cdc2a7d645/34-chart-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3672a742-0351-4339-9a44-76cdc2a7d645/34-chart-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3672a742-0351-4339-9a44-76cdc2a7d645/34-chart-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3672a742-0351-4339-9a44-76cdc2a7d645/34-chart-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3672a742-0351-4339-9a44-76cdc2a7d645/34-chart-opt.png"
			
			sizes="100vw"
			alt="Chart"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Embedding charts is quite effortless with <a href='https://www.figma.com/community/plugin/734590934750866002/Chart'>Chart</a>.
    </figcaption>
  
</figure>

<p>Another plugin with a similar but slightly different title is the <a href="https://www.figma.com/community/plugin/731451122947612104/Charts">Charts Figma plugin</a>. With it, you can create dashboards and presentations or pretty much any other type of data visualization. The plugin generates editable charts in your Figma design from simple bar charts to more complex heatmaps. You can also find <a href="https://morioh.com/p/ca295bf3269e">a detailed guide on how to use the plugin</a>.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/731451122947612104/Charts">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="416"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e924b3a8-05b4-48de-b519-cfd3131d73f6/35-charts-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e924b3a8-05b4-48de-b519-cfd3131d73f6/35-charts-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e924b3a8-05b4-48de-b519-cfd3131d73f6/35-charts-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e924b3a8-05b4-48de-b519-cfd3131d73f6/35-charts-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e924b3a8-05b4-48de-b519-cfd3131d73f6/35-charts-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e924b3a8-05b4-48de-b519-cfd3131d73f6/35-charts-opt.png"
			
			sizes="100vw"
			alt="Charts"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Design and embed charts into your Figma with <a href='https://www.figma.com/community/plugin/731451122947612104/Charts'>Charts Figma plugin</a>.
    </figcaption>
  
</figure>

<h2 id="clean-up-a-messy-frame-in-figma">Clean Up A Messy Frame In Figma</h2>

<p>Perhaps you’ve dropped a few dozens of icons in a frame, so how would you arrange them in a sensible order? Obviously, we wouldn’t do such a task manually. That’s where <a href="https://www.figma.com/community/plugin/795397421598343178/LilGrid">LilGrid</a> can help.</p>














<figure class="
  
  
  ">
  
    <a href="#ZgotmplZ">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="456"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/af77e9a0-51dc-463e-8c3c-b2bade6fc494/lilgrid.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/af77e9a0-51dc-463e-8c3c-b2bade6fc494/lilgrid.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/af77e9a0-51dc-463e-8c3c-b2bade6fc494/lilgrid.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/af77e9a0-51dc-463e-8c3c-b2bade6fc494/lilgrid.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/af77e9a0-51dc-463e-8c3c-b2bade6fc494/lilgrid.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/af77e9a0-51dc-463e-8c3c-b2bade6fc494/lilgrid.jpg"
			
			sizes="100vw"
			alt="Creating order out of chaos."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Creating order out of chaos: <a href='https://www.figma.com/community/plugin/795397421598343178/'>LilGrid</a> organzes items in a grid.
    </figcaption>
  
</figure>

<p>The little helper takes elements and arranges them into a grid automatically. You just need to select what you’d like to organize, hit &ldquo;Organize to Grid&rdquo; and the tool takes care of the rest, rearranging only top-level elements on your page. Obviously, there is a one-step undo if you need to restore the initial state.</p>

<h2 id="clean-figma-projects-before-handoff">Clean Figma Projects Before Handoff</h2>

<p>Hidden layers, single-layer groups, X and Y positions that aren’t quite pixel-perfect — the <a href="https://www.figma.com/community/plugin/767379019764649932/Clean-Document">Clean Document</a> plugin takes care of little flaws like these so you don’t have to. A great little helper to polish up your Figma project before handoff.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/767379019764649932/Clean-Document">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="397"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c3267a43-28df-4337-9dfc-33b0a28e3c2e/clean-document-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c3267a43-28df-4337-9dfc-33b0a28e3c2e/clean-document-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c3267a43-28df-4337-9dfc-33b0a28e3c2e/clean-document-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c3267a43-28df-4337-9dfc-33b0a28e3c2e/clean-document-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c3267a43-28df-4337-9dfc-33b0a28e3c2e/clean-document-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c3267a43-28df-4337-9dfc-33b0a28e3c2e/clean-document-opt.png"
			
			sizes="100vw"
			alt="Clean Document"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c3267a43-28df-4337-9dfc-33b0a28e3c2e/clean-document-opt.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h2 id="content-placeholders-in-figma">Content Placeholders In Figma</h2>

<p>With the <a href="https://www.figma.com/community/plugin/731627216655469013">Content Reel</a> plugin, you can design layouts quickly and easily by using text strings, images, icons and avatars from the same tool. You can search or browse through the already provided set of data, then add them to your designs or create from scratch.</p>

<p>The plugin also lets you create your own text strings, upload up to 20 images, and make your workflow easier and smoother by pinning your frequently used content on your home screen.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/731627216655469013">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="399"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0aca40a5-6298-4252-98c1-1ff02d88110d/43-content-reel-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0aca40a5-6298-4252-98c1-1ff02d88110d/43-content-reel-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0aca40a5-6298-4252-98c1-1ff02d88110d/43-content-reel-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0aca40a5-6298-4252-98c1-1ff02d88110d/43-content-reel-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0aca40a5-6298-4252-98c1-1ff02d88110d/43-content-reel-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0aca40a5-6298-4252-98c1-1ff02d88110d/43-content-reel-opt.png"
			
			sizes="100vw"
			alt="Content Reel"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      <a href='https://www.figma.com/community/plugin/731627216655469013'>Content Reel</a> helps when you need to plug in content into your designs.
    </figcaption>
  
</figure>

<p>You can also run a <a href="https://www.figma.com/community/plugin/742770131320902341/Random-Name-Generator">Random Name Generator</a> to populate random names into your mock-up.</p>

<h2 id="color-palettes-in-figma">Color Palettes In Figma</h2>

<p>Understanding gradients, palettes, color theory and psychology are essential to creating pleasant visual designs. Figma has plenty of plugins that take a bulk of this work off your shoulders.</p>

<p><a href="https://www.figma.com/community/plugin/740832935938649295">Color Palette</a> provides you with a perfect color palette for your projects. You can choose from a huge library of palettes or search for a specific color code, name or number to apply to your design.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/740832935938649295">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="423"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/bf94b005-dc32-4a37-a207-8873e5d6e4dd/46-color-palettes-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/bf94b005-dc32-4a37-a207-8873e5d6e4dd/46-color-palettes-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/bf94b005-dc32-4a37-a207-8873e5d6e4dd/46-color-palettes-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/bf94b005-dc32-4a37-a207-8873e5d6e4dd/46-color-palettes-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/bf94b005-dc32-4a37-a207-8873e5d6e4dd/46-color-palettes-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/bf94b005-dc32-4a37-a207-8873e5d6e4dd/46-color-palettes-opt.png"
			
			sizes="100vw"
			alt="Color Palette"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/bf94b005-dc32-4a37-a207-8873e5d6e4dd/46-color-palettes-opt.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p><a href="https://www.figma.com/community/plugin/742549221432366731/Palette">Palette</a> by Dustin Mierau is useful when you want to generate a color palette from images. This plugin uses machine learning to help you generate a color palette that will best fit your project. You can select <strong>up to five shapes</strong> and the plugin will help fill in the shapes with colors fitting for your palette.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/742549221432366731/Palette">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="399"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/50cd23fd-5f88-468c-93b9-ff85d43a624d/47-palette-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/50cd23fd-5f88-468c-93b9-ff85d43a624d/47-palette-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/50cd23fd-5f88-468c-93b9-ff85d43a624d/47-palette-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/50cd23fd-5f88-468c-93b9-ff85d43a624d/47-palette-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/50cd23fd-5f88-468c-93b9-ff85d43a624d/47-palette-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/50cd23fd-5f88-468c-93b9-ff85d43a624d/47-palette-opt.png"
			
			sizes="100vw"
			alt="Palette"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/50cd23fd-5f88-468c-93b9-ff85d43a624d/47-palette-opt.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>When designing around an image, making the right color choice is easier with the <a href="https://www.figma.com/community/plugin/731841207668879837">Image Palette plugin</a>. It uses any image that you select and generates a color palette from it by selecting the five most prominent colors from the image using a median cut algorithm with a high level of accuracy.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/731841207668879837">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="260"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3406d40e-a6bc-442b-bf53-97d882e66a8f/64-image-palette-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3406d40e-a6bc-442b-bf53-97d882e66a8f/64-image-palette-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3406d40e-a6bc-442b-bf53-97d882e66a8f/64-image-palette-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3406d40e-a6bc-442b-bf53-97d882e66a8f/64-image-palette-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3406d40e-a6bc-442b-bf53-97d882e66a8f/64-image-palette-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3406d40e-a6bc-442b-bf53-97d882e66a8f/64-image-palette-opt.png"
			
			sizes="100vw"
			alt="Image Palette"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3406d40e-a6bc-442b-bf53-97d882e66a8f/64-image-palette-opt.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>With <a href="https://www.figma.com/community/plugin/744909029427810418">UI Gradients</a> and <a href="https://www.figma.com/community/plugin/802147585857776440">Web Gradients</a>, you do not have to create or select gradients one at a time, but instead, you can add several gradients to groups, texts and frames with just a single click.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/744909029427810418">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="410"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/055a4b27-5b6e-462a-b2f0-95a955dc4156/48-ui-gradients-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/055a4b27-5b6e-462a-b2f0-95a955dc4156/48-ui-gradients-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/055a4b27-5b6e-462a-b2f0-95a955dc4156/48-ui-gradients-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/055a4b27-5b6e-462a-b2f0-95a955dc4156/48-ui-gradients-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/055a4b27-5b6e-462a-b2f0-95a955dc4156/48-ui-gradients-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/055a4b27-5b6e-462a-b2f0-95a955dc4156/48-ui-gradients-opt.png"
			
			sizes="100vw"
			alt="UI Gradients"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/055a4b27-5b6e-462a-b2f0-95a955dc4156/48-ui-gradients-opt.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h2 id="curve-your-text-in-figma">Curve Your Text In Figma</h2>

<p>With the <a href="https://www.figma.com/community/plugin/762070688792833472">Arc plugin</a>, you can curve your text upwards, downwards, or even into a circle. The plugin adds an additional toolbar for controlling the bending — it’s another question though how developers would implement it.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/762070688792833472">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="398"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/07eef7ec-5a9b-49eb-ad8b-680b584ec8db/65-arc-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/07eef7ec-5a9b-49eb-ad8b-680b584ec8db/65-arc-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/07eef7ec-5a9b-49eb-ad8b-680b584ec8db/65-arc-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/07eef7ec-5a9b-49eb-ad8b-680b584ec8db/65-arc-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/07eef7ec-5a9b-49eb-ad8b-680b584ec8db/65-arc-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/07eef7ec-5a9b-49eb-ad8b-680b584ec8db/65-arc-opt.png"
			
			sizes="100vw"
			alt="Arc"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      <a href='https://www.figma.com/community/plugin/762070688792833472'>Arc plugin</a> allows you to curve your text.
    </figcaption>
  
</figure>

<h2 id="design-tokens-in-figma">Design Tokens In Figma</h2>

<p>Another Figma plugin you might want to add to your toolkit comes from Lukas Oppermann. If you’re tired of the hassle that working with design tokens usually brings along, the <a href="https://www.figma.com/community/plugin/888356646278934516/Design-Tokens">Design Token</a> plugin does the job for you: styles and tokens are exported and sent to a GitHub repository and tokens are automatically converted using style dictionary. No need for you to leave Figma. A real timesaver.</p>

<figure><a title="Figma Design Tokens" href="https://www.figma.com/community/plugin/888356646278934516/Design-Tokens"><img src="https://mcusercontent.com/16b832d9ad4b28edf261f34df/images/4c41ca56-32a3-fa63-a013-8dad5d9f4798.png" width="500" height="348" alt="Figma Design Tokens" border="0"></a></figure>

<h2 id="design-systems-with-figma">Design Systems With Figma</h2>

<p>Imagine you’re making a change in your project’s design system, and it’s immediately cascading through your Figma project. The <a href="https://www.toolabs.com/plugins/figma/">Design System Manager</a> plugin for Figma makes it possible.</p>
<figure><a title="Design System Manager" href="https://www.toolabs.com/plugins/figma/"><img src="https://mcusercontent.com/16b832d9ad4b28edf261f34df/images/03206b53-80cd-7920-9037-8fa7cfdb47ca.png" width="500" height="331" alt="Design System Manager" border="0"></a></figure>
<p>The plugin lets you define or update <strong>themeable design tokens</strong> in one single panel, manage selected layers grouped by style, and populate a design with real text or image content. To bring your project to life, you can programatically access the design tokens from the GraphQL API or you export them in the format of your choice (CSS, Less, Sass, JSON, YAML, Js, Swift, and Android are supported). A smart solution that makes dealing with design systems a lot more practical.</p>

<h2 id="device-mockups-in-figma">Device Mockups In Figma</h2>

<p>The quality of your presentation as a designer is almost as important as the design itself. With over 700 device mock-ups scenes, <a href="https://www.figma.com/community/plugin/786250770157843670/Mockuuups-Studio">Mockuuups Studio</a> helps you create mockups for products, visual content, or marketing materials with ease and efficiency. You can watch a thorough <a href="https://www.youtube.com/watch?v=EwUk6NeHkMA">walkthrough video on how to use it</a>.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/786250770157843670/Mockuuups-Studio">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="396"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2a8feca0-20e4-45cc-858b-8d5384a8f8af/44-mockuuups-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2a8feca0-20e4-45cc-858b-8d5384a8f8af/44-mockuuups-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2a8feca0-20e4-45cc-858b-8d5384a8f8af/44-mockuuups-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2a8feca0-20e4-45cc-858b-8d5384a8f8af/44-mockuuups-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2a8feca0-20e4-45cc-858b-8d5384a8f8af/44-mockuuups-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2a8feca0-20e4-45cc-858b-8d5384a8f8af/44-mockuuups-opt.png"
			
			sizes="100vw"
			alt="Mockuuups Studio"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      With <a href='https://www.figma.com/community/plugin/786250770157843670/Mockuuups-Studio'>Mockuuups</a>, you can place your frames into 700+ device mock-ups, without leaving Figma.
    </figcaption>
  
</figure>

<p>Usually mock-ups only look nicer when a device is displayed in a human&rsquo;s hand, and that&rsquo;s where <a href="https://www.figma.com/community/plugin/951652764251042235/All-Hands-Mockup-Generator-%7C-MetaLab-x-Nappy">All hands mockup generator</a> can help. It includes a large and diverse collection of hands of all shades, shapes and sizes. Select a frame, choose a hand and your designs will be imported into the mockup, all within Figma. You can review the <a href="https://nappy.co/all-hands">full collection of hands</a> as well.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/951652764251042235/All-Hands-Mockup-Generator-%7C-MetaLab-x-Nappy">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="399"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5c94e9c0-7f72-4504-8068-66ec94c185a7/70-hands-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5c94e9c0-7f72-4504-8068-66ec94c185a7/70-hands-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5c94e9c0-7f72-4504-8068-66ec94c185a7/70-hands-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5c94e9c0-7f72-4504-8068-66ec94c185a7/70-hands-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5c94e9c0-7f72-4504-8068-66ec94c185a7/70-hands-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5c94e9c0-7f72-4504-8068-66ec94c185a7/70-hands-opt.png"
			
			sizes="100vw"
			alt="All hands mockup generator"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Human hands are usually better than plain device mock-ups: <a href='https://www.figma.com/community/plugin/951652764251042235/All-Hands-Mockup-Generator-%7C-MetaLab-x-Nappy'>All Hands Mock-up Generator</a> gets the job done well.
    </figcaption>
  
</figure>

<h2 id="exporting-figma-to-html-css-react">Exporting Figma To HTML, CSS, React</h2>

<p><a href="https://www.figma.com/community/plugin/747985167520967365/Figma-to-HTML%2C-CSS%2C-React-%26-more!">HTML &lt;&gt; Figma</a> allows you to export your Figma designs to an HTML prototype. You can select individual layers, or enter an URL you&rsquo;d like to import, and the plugin will import actual styles immediately. There’s also a <a href="https://chrome.google.com/webstore/detail/html-to-figma/efjcmgblfpkhbjpkpopkgeomfkokpaim/related">Chrome extension</a> that captures a web page and imports it as editable Figma layers. In the background, it generates a <code>page.builder.json</code> file which has all the CSS properties of the current page.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/747985167520967365/Figma-to-HTML%2C-CSS%2C-React-%26-more!">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="446"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/62ff4e5a-41ba-41d3-9ff1-7be3726b31d5/2-figma-to-html-css-react-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/62ff4e5a-41ba-41d3-9ff1-7be3726b31d5/2-figma-to-html-css-react-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/62ff4e5a-41ba-41d3-9ff1-7be3726b31d5/2-figma-to-html-css-react-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/62ff4e5a-41ba-41d3-9ff1-7be3726b31d5/2-figma-to-html-css-react-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/62ff4e5a-41ba-41d3-9ff1-7be3726b31d5/2-figma-to-html-css-react-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/62ff4e5a-41ba-41d3-9ff1-7be3726b31d5/2-figma-to-html-css-react-opt.png"
			
			sizes="100vw"
			alt="web page to design illustration"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Mostly quite reliable: <a href='https://www.figma.com/community/plugin/747985167520967365/Figma-to-HTML%2C-CSS%2C-React-%26-more!'>HTML < > Figma</a> allows you to export your Figma designs to an HTML prototype.
    </figcaption>
  
</figure>

<p>There are some limitations though as not all element types and CSS properties are supported. Also, it&rsquo;s worth keeping in mind that all fonts have to be uploaded to Figma or fallback fonts will be used. Still, the plugin is open-source, has a large community around it, and the creators are actively maintaining it.</p>

<p>Alternatively, there is also an <a href="https://www.figma.com/community/plugin/753195897635985866/HtmlGenerator">HTML Generator</a> that supports Google Fonts, has dedicated export options and generates HTML, CSS, image assets and SCSS code and <a href="https://www.figma.com/community/plugin/851183094275736358/Figma-to-HTML">Figma To HTML</a>. And if you need something more sophisticated, <a href="https://www.figma.com/community/plugin/857346721138427857/Anima---Prototype-%26-export-HTML-%26-React-code">Anima</a> creates prototypes and converts them to HTML, CSS and React code — without any dependencies. In fact, you can create interactive prototypes, responsive designs and reusable React components out of the box. (The plugin has a free tier, but you will need to sign up for the <strong>$31</strong> tier to export the code).</p>

<h2 id="exporting-figma-to-vue-js">Exporting Figma To Vue.js</h2>

<p>If you want to remove some of the friction that turning a Figma prototype into a working application can bring along, Klaus Schaefer’s open-source plugin <a href="https://github.com/KlausSchaefers/figma-low-code">Figma-Low-Code</a> is for you. It lets you use Figma designs directly in <strong>Vue.js applications</strong>.</p>
<figure><a title="Figma-Low-Code" href="https://github.com/KlausSchaefers/figma-low-code"><img src="https://mcusercontent.com/16b832d9ad4b28edf261f34df/images/154d7e25-472b-c9a7-1a3a-dbc060f548cf.png" width="500" height="266" alt="Figma-Low-Code" border="0"></a></figure>
<p>This low-code approach does not only <strong>reduce the hand-off time</strong> between designers and developers as well as the amount of front-end code, but also ensures that the Figma design stays the single source of truth. The idea is that you design the prototype in Figma, then use the plugin to add data and method binding. Once you’ve done that, you can use your favorite code editor to implement business logic, and &mdash; ta-daa! &mdash; your application is ready for deployment. Changes you make to the Figma file are automatically propagated to the web app.</p>

<h2 id="email-templates-in-figma">Email Templates In Figma</h2>

<p>There aren&rsquo;t many people who are very fond of building HTML Emails, but when designing one, we better use some handy little plugins to make the developer&rsquo;s work a little bit easier. In fact, there is a <a href="https://blog.prototypr.io/designing-emails-for-unacademy-using-figma-power-of-nocode-eceee9daf5c6">detailed guide on designing emails in Figma</a> that covers the entire workflow of shipping brand new email designs from scratch.</p>














<figure class="
  
  
  ">
  
    <a href="https://blog.prototypr.io/designing-emails-for-unacademy-using-figma-power-of-nocode-eceee9daf5c6">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="399"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/eee9c20b-25c3-4dec-8257-e6a29fa001d4/emails-example-1.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/eee9c20b-25c3-4dec-8257-e6a29fa001d4/emails-example-1.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/eee9c20b-25c3-4dec-8257-e6a29fa001d4/emails-example-1.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/eee9c20b-25c3-4dec-8257-e6a29fa001d4/emails-example-1.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/eee9c20b-25c3-4dec-8257-e6a29fa001d4/emails-example-1.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/eee9c20b-25c3-4dec-8257-e6a29fa001d4/emails-example-1.jpg"
			
			sizes="100vw"
			alt="HTML Email in Figma"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      <a href='https://blog.prototypr.io/designing-emails-for-unacademy-using-figma-power-of-nocode-eceee9daf5c6'>HTML Email Workflow</a>, from start to finish — a thorough guide to designing emails with Figma.
    </figcaption>
  
</figure>

<p>If you are looking for <strong>responsive, production-ready HTML emails</strong> for Figma, <a href="https://www.figma.com/community/plugin/910671699871076601/Emailify-HTML-Email-Builder">Emailify</a> will give you dozens of configurable content modules, allow you to customize your text, images, styles and auto-layout settings amongst other features, with no other APIs, apps, or websites required.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/910671699871076601/Emailify-HTML-Email-Builder">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="399"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/dee43091-9ae4-4e00-8ec0-f8d4f4330275/20-emailify-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/dee43091-9ae4-4e00-8ec0-f8d4f4330275/20-emailify-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/dee43091-9ae4-4e00-8ec0-f8d4f4330275/20-emailify-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/dee43091-9ae4-4e00-8ec0-f8d4f4330275/20-emailify-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/dee43091-9ae4-4e00-8ec0-f8d4f4330275/20-emailify-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/dee43091-9ae4-4e00-8ec0-f8d4f4330275/20-emailify-opt.png"
			
			sizes="100vw"
			alt="Emailify"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      <a href='https://www.figma.com/community/plugin/910671699871076601/Emailify-HTML-Email-Builder'>Emailify</a> includes dozens of configurable content modules for HTML Emails.
    </figcaption>
  
</figure>

<p>If you aren’t frightened of the idea of HTML Email code being generated for you, <a href="https://www.figma.com/community/file/975054125642915558">Email Templates &amp; Code</a> works with the <a href="https://www.figma.com/community/plugin/751436700152214815/Marka-Email-Generator">Marka plugin</a> to actually produce HTML code. You can have customizable emails with designs for newsletters, marketing email and blog-style templates. Also, there are plenty of customizable designs there as well.</p>

<h2 id="perfect-file-structure-in-figma">Perfect File Structure In Figma</h2>

<p>We all know that it can be hard to think of Figma file structure when you’re completely absorbed in getting all those little UI details right in the design you’re currently working on. However, if you keep file structure in mind right from the very beginning, you can ensure that handoff will be buttery smooth. And you’ll save yourself a lot of cleaning up work once the deadline comes closer. Luis Ouriach published a helpful <a href="https://www.figma.com/community/file/1004041613962064465">best-practice guide for structuring your frames in Figma</a> — with consistent naming conventions, descriptive components, and consistent spacing.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/file/1004041613962064465">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="406"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/013a76cf-6973-4d28-819d-11f8ec8eb285/figma-file-structure-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/013a76cf-6973-4d28-819d-11f8ec8eb285/figma-file-structure-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/013a76cf-6973-4d28-819d-11f8ec8eb285/figma-file-structure-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/013a76cf-6973-4d28-819d-11f8ec8eb285/figma-file-structure-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/013a76cf-6973-4d28-819d-11f8ec8eb285/figma-file-structure-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/013a76cf-6973-4d28-819d-11f8ec8eb285/figma-file-structure-opt.png"
			
			sizes="100vw"
			alt="File structure best practice guide"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/013a76cf-6973-4d28-819d-11f8ec8eb285/figma-file-structure-opt.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h2 id="fonts-preview-in-figma">Fonts Preview In Figma</h2>

<p>Switching between typefaces manually can be a little bit tiring, so obviously there are Figma helpers for that. <a href="https://www.figma.com/community/plugin/739922281164562258/Better-Font-Picker">Better Font Picker</a> and <a href="https://www.figma.com/community/plugin/890494567122693015">Font Preview</a> help you select fonts with a preview.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/890494567122693015">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="398"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2fdc7191-324c-4a75-9c9a-64de903027d5/68-font-preview-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2fdc7191-324c-4a75-9c9a-64de903027d5/68-font-preview-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2fdc7191-324c-4a75-9c9a-64de903027d5/68-font-preview-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2fdc7191-324c-4a75-9c9a-64de903027d5/68-font-preview-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2fdc7191-324c-4a75-9c9a-64de903027d5/68-font-preview-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2fdc7191-324c-4a75-9c9a-64de903027d5/68-font-preview-opt.png"
			
			sizes="100vw"
			alt="Font Preview"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      <a href='https://www.figma.com/community/plugin/890494567122693015'>Font Preview</a> allows you to preview fonts in Figma. No big revelation, but helpful nevertheless.
    </figcaption>
  
</figure>

<h2 id="google-fonts-pairings-for-figma">Google Fonts Pairings for Figma</h2>

<p>If you use Google Fonts, <a href="https://www.figma.com/community/file/843916328104333682">Google Font Pairings</a> can come in handy, too. You can get started at <a href="https://www.figma.com/google-fonts/">Figma’s Google Fonts page</a>. Each of the fonts comes with a tiny type specimen to get a decent preview of the style and feel of the typefaces used.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/file/843916328104333682">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="425"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ab53c751-f000-4926-a942-a57aaa139b85/69-google-fonts-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ab53c751-f000-4926-a942-a57aaa139b85/69-google-fonts-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ab53c751-f000-4926-a942-a57aaa139b85/69-google-fonts-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ab53c751-f000-4926-a942-a57aaa139b85/69-google-fonts-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ab53c751-f000-4926-a942-a57aaa139b85/69-google-fonts-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ab53c751-f000-4926-a942-a57aaa139b85/69-google-fonts-opt.png"
			
			sizes="100vw"
			alt="A Selection of Google Fonts"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      <a href='https://www.figma.com/community/file/843916328104333682'>Google Fonts Pairings</a> with some lovely type combinations with Google Fonts.
    </figcaption>
  
</figure>

<div class="partners__lead-place"></div>

<h2 id="icons-embedding-in-figma">Icons Embedding In Figma</h2>

<p>Having a wide collection of every possible icon out there in one place is arguably one of the best plugin ideas ever. Figma has plugins that contain icon sets in several styles for any type of design project.</p>

<p><a href="https://www.figma.com/community/plugin/791103617505812222">Icons8</a> provides you with a large collection of consistent icons without having to leave your Figma board. It has a library of 120,000+ icons with over 32 popular design styles, searchable and categorized collection, all available in PNG or SVG.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/791103617505812222">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="397"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c01d1855-2ad5-4d51-ab3e-5f9a9d29517f/54-icons8-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c01d1855-2ad5-4d51-ab3e-5f9a9d29517f/54-icons8-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c01d1855-2ad5-4d51-ab3e-5f9a9d29517f/54-icons8-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c01d1855-2ad5-4d51-ab3e-5f9a9d29517f/54-icons8-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c01d1855-2ad5-4d51-ab3e-5f9a9d29517f/54-icons8-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c01d1855-2ad5-4d51-ab3e-5f9a9d29517f/54-icons8-opt.png"
			
			sizes="100vw"
			alt="Icons8"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c01d1855-2ad5-4d51-ab3e-5f9a9d29517f/54-icons8-opt.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p><a href="https://www.figma.com/community/plugin/744098704933821409/Iconscout">Iconscout</a> allows you to insert millions of high-quality icons, illustrations, and 3D into Figma. In a designer mode, you can pick your favorite designer and photographer and access their resources directly without searching in the entire library.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/744098704933821409/Iconscout">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="397"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/559a9343-3259-471b-a09f-fe650b2cd1d7/60-iconscout-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/559a9343-3259-471b-a09f-fe650b2cd1d7/60-iconscout-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/559a9343-3259-471b-a09f-fe650b2cd1d7/60-iconscout-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/559a9343-3259-471b-a09f-fe650b2cd1d7/60-iconscout-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/559a9343-3259-471b-a09f-fe650b2cd1d7/60-iconscout-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/559a9343-3259-471b-a09f-fe650b2cd1d7/60-iconscout-opt.png"
			
			sizes="100vw"
			alt="Iconsout"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/559a9343-3259-471b-a09f-fe650b2cd1d7/60-iconscout-opt.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h2 id="illustrations-embedding-in-figma">Illustrations Embedding In Figma</h2>

<p>Illustrate with a vector software, then import it into your design, right? You don’t have to do it all the time as Figma comes with plenty of illustration plugins.</p>

<p>With <a href="https://www.figma.com/community/plugin/838959511417581040">Blush</a>, you can create or <strong>mix-and-match illustrations</strong> customized to your projects. You can also generate random compositions; plus, new illustrations are being added every week. SVGs and high-resolution images are available on a paid plan.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/838959511417581040">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="400"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/b3770c92-56c8-4b11-b9a6-7572f5d5f560/51-blush-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/b3770c92-56c8-4b11-b9a6-7572f5d5f560/51-blush-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/b3770c92-56c8-4b11-b9a6-7572f5d5f560/51-blush-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/b3770c92-56c8-4b11-b9a6-7572f5d5f560/51-blush-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/b3770c92-56c8-4b11-b9a6-7572f5d5f560/51-blush-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/b3770c92-56c8-4b11-b9a6-7572f5d5f560/51-blush-opt.png"
			
			sizes="100vw"
			alt="Blush"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Mix-and-match illustrations to meet your needs, with <a href='https://www.figma.com/community/plugin/838959511417581040'>Blush</a>.
    </figcaption>
  
</figure>

<p>For lovely icons and illustrations, take a closer look at the <a href="https://www.figma.com/community/plugin/781441863578182316/Illustrations">Free Popular Illustration library</a>, which includes high quality free illustrations released under a Creative Commons license.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/838959511417581040">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="400"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/b5847c69-f0eb-4c64-8808-6725a5dd327e/87f2b2c5-ea2f-4d8f-9bf8-e6d6cf749603-cover.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/b5847c69-f0eb-4c64-8808-6725a5dd327e/87f2b2c5-ea2f-4d8f-9bf8-e6d6cf749603-cover.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/b5847c69-f0eb-4c64-8808-6725a5dd327e/87f2b2c5-ea2f-4d8f-9bf8-e6d6cf749603-cover.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/b5847c69-f0eb-4c64-8808-6725a5dd327e/87f2b2c5-ea2f-4d8f-9bf8-e6d6cf749603-cover.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/b5847c69-f0eb-4c64-8808-6725a5dd327e/87f2b2c5-ea2f-4d8f-9bf8-e6d6cf749603-cover.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/b5847c69-f0eb-4c64-8808-6725a5dd327e/87f2b2c5-ea2f-4d8f-9bf8-e6d6cf749603-cover.jpg"
			
			sizes="100vw"
			alt="Free Illustrations Library for Figma"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Free illustrations for everyone, with the <a href='https://www.figma.com/community/plugin/781441863578182316/Illustrations'>Free Illustrations Library</a>.
    </figcaption>
  
</figure>

<p>If you want to add a human illustration to your website, <a href="https://www.figma.com/community/plugin/739503328703046360">Humaaans</a> provides you with already pre-made illustrations of funky and hip people. You can browse from a gallery or search for a specific niche or category.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/739503328703046360">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="410"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/60fdf543-356f-4cae-901b-c4b17a3783aa/52-humaaans-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/60fdf543-356f-4cae-901b-c4b17a3783aa/52-humaaans-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/60fdf543-356f-4cae-901b-c4b17a3783aa/52-humaaans-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/60fdf543-356f-4cae-901b-c4b17a3783aa/52-humaaans-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/60fdf543-356f-4cae-901b-c4b17a3783aa/52-humaaans-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/60fdf543-356f-4cae-901b-c4b17a3783aa/52-humaaans-opt.png"
			
			sizes="100vw"
			alt="Humaaans"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      <a href='https://www.figma.com/community/plugin/739503328703046360'>Humaaans</a> features a large library of pre-made illustrations of people.
    </figcaption>
  
</figure>

<p>Additionally, you can use <a href="https://www.figma.com/community/plugin/865232148477039928">Storyset</a> with 100s of illustrated concepts available as off-the-shelf illustrations. You can also edit the styles, colors, and background. Plus, you can also animate the illustrations.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/865232148477039928">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="402"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d5a24a2b-1f1a-4cac-a3fb-0ead4c1f0db0/53-storyset-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d5a24a2b-1f1a-4cac-a3fb-0ead4c1f0db0/53-storyset-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d5a24a2b-1f1a-4cac-a3fb-0ead4c1f0db0/53-storyset-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d5a24a2b-1f1a-4cac-a3fb-0ead4c1f0db0/53-storyset-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d5a24a2b-1f1a-4cac-a3fb-0ead4c1f0db0/53-storyset-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d5a24a2b-1f1a-4cac-a3fb-0ead4c1f0db0/53-storyset-opt.png"
			
			sizes="100vw"
			alt="Storyset"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d5a24a2b-1f1a-4cac-a3fb-0ead4c1f0db0/53-storyset-opt.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h2 id="copy-paste-and-sync-google-sheets-in-figma">Copy-Paste And Sync Google Sheets In Figma</h2>

<p>Quite often, copy-pasting data from Google Docs into Figma is quite time-consuming and frustrating. <a href="https://www.figma.com/community/plugin/735770583268406934/Google-Sheets-Sync">Google Sheet</a> is a handy plugin that speeds up the import of your Google Sheets to Figma. Once you install it, you can fetch and sync data from your Google Sheets. There is also a <a href="https://www.figma.com/community/plugin/735770583268406934/Google-Sheets-Sync">documentation</a> with all the fine details on how to set up a proper sheet structure and how Figma layers should be named to avoid extra work — as well as some examples for you to get started.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/735770583268406934/Google-Sheets-Sync">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="397"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/373a5098-ba19-434a-9907-aea38c7b8e4f/27-google-sheet-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/373a5098-ba19-434a-9907-aea38c7b8e4f/27-google-sheet-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/373a5098-ba19-434a-9907-aea38c7b8e4f/27-google-sheet-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/373a5098-ba19-434a-9907-aea38c7b8e4f/27-google-sheet-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/373a5098-ba19-434a-9907-aea38c7b8e4f/27-google-sheet-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/373a5098-ba19-434a-9907-aea38c7b8e4f/27-google-sheet-opt.png"
			
			sizes="100vw"
			alt="Google Sheet"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Less hassle with the <a href='https://www.figma.com/community/plugin/735770583268406934/Google-Sheets-Sync'>Google Sheets plug-in</a> — plus, you can fetch and sync data from it as well.
    </figcaption>
  
</figure>

<h2 id="interactive-components-and-variants-in-figma">Interactive Components And Variants In Figma</h2>

<p>A few weeks ago, Figma launched a beta version of their <strong>Interactive Components</strong> feature that allows you to create interactive elements that automatically switch between variants (a button changing from hover to a pressed state, for example). What might seem like a little detail, turns out to reduce the amount of frames and connections you usually need to prototype input fields like checkboxes or toggles tremendously.</p>
<figure><a title="Interactive Components" href="https://www.steveruiz.me/posts/it-wasnt-made-to-do-that"><img src="https://mcusercontent.com/16b832d9ad4b28edf261f34df/images/9a3b6740-e49b-4522-aea6-6bcc4e40de42.png" width="500" height="306" alt="Interactive Components" border="0"></a></figure>
<p>To dive in deeper into the new feature, Steve Ruiz summarized <a href="https://www.steveruiz.me/posts/it-wasnt-made-to-do-that">what it is capable of</a> and what can be achieved with it if you think outside the box (a Minesweeper or Battleship game running in Figma, anyone?). Another great read: Rodrigo Osornio <a href="https://bootcamp.uxdesign.cc/designing-micro-interactions-with-figma-interactive-components-23a02d10be6b">explored the advantages and possibilities</a> which Interactive Components brings along for <strong>micro interactions</strong> such as input fields, loaders, different kinds of buttons, dropdowns, and subscribe components.</p>
<p>Speaking of components: Luke Cardoni shows how he managed to create a single, content-adaptable, fully customizable, and easily maintainable <a href="https://uxdesign.cc/one-variant-to-rule-them-all-92e685bae918">component with 3,360 variants</a> that serves every possible combination of settings for text input. A mammoth project that illustrates the benefits of Figma’s Variants feature.</p>

<h2 id="layout-grid-in-figma">Layout Grid In Figma</h2>

<p>We often rely on grids to create design systems where every single interface component is properly aligned. So it shouldn’t come as a big surprise that there is no shortage in layout grid plugins for Figma. <a href="https://www.figma.com/community/plugin/841313026689642442/Grids-Generator">Grids Generator</a> allows you to apply a family of various grid style configurations to layouts. <a href="https://www.figma.com/community/plugin/739342962452731553/Guide-Mate">Guide Mate</a> is slightly more flexible: it provides <strong>shortcuts for commonly used grids</strong> and a way to add a custom grid should you need it.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/739342962452731553/Guide-Mate">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="420"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c550238f-25d2-4e03-966c-67315c843ef4/screenshot-2021-08-11-at-16.22 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c550238f-25d2-4e03-966c-67315c843ef4/screenshot-2021-08-11-at-16.22 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c550238f-25d2-4e03-966c-67315c843ef4/screenshot-2021-08-11-at-16.22 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c550238f-25d2-4e03-966c-67315c843ef4/screenshot-2021-08-11-at-16.22 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c550238f-25d2-4e03-966c-67315c843ef4/screenshot-2021-08-11-at-16.22 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c550238f-25d2-4e03-966c-67315c843ef4/screenshot-2021-08-11-at-16.22"
			
			sizes="100vw"
			alt="Grid generator"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      <a href='https://www.figma.com/community/plugin/739342962452731553/Guide-Mate'>Guide-Mate</a> provides shortcuts for commonly used guides and a way to add custom guides.
    </figcaption>
  
</figure>

<p>Once you have a grid in place, you might want to snap your components to it. <a href="https://www.figma.com/community/plugin/773875667263247070/Snap-to-Grid">Snap to Grid</a> not only creates a custom grid, but also <strong>arranges elements on the grid</strong> by organizing each object automatically. When the plugin is running, the canvas elements will snap to the grid when moving and scaling. Andreslav Koslov shows how this plugin works <a href="https://twitter.com/AndreslavKozlov/status/1198003232137764864">in a 3-min video</a>. You can also use keyboard shortcuts <kbd>Alt</kbd> + <kbd>Cmd</kbd> + <kbd>P</kbd> to snap all objects to grid when Figma is online.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/773875667263247070/Snap-to-Grid">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="298"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/58371a48-421f-47bf-9464-58878ec9aa90/11-snap-to-grid-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/58371a48-421f-47bf-9464-58878ec9aa90/11-snap-to-grid-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/58371a48-421f-47bf-9464-58878ec9aa90/11-snap-to-grid-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/58371a48-421f-47bf-9464-58878ec9aa90/11-snap-to-grid-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/58371a48-421f-47bf-9464-58878ec9aa90/11-snap-to-grid-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/58371a48-421f-47bf-9464-58878ec9aa90/11-snap-to-grid-opt.png"
			
			sizes="100vw"
			alt="Snap to Grid"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      <a href='https://www.figma.com/community/plugin/773875667263247070/Snap-to-Grid'>Snap To Grid</a> not only creates a custom grid, but also arranges elements on the grid by organizing each object automatically.
    </figcaption>
  
</figure>

<h2 id="maps-embedding-in-figma">Maps Embedding In Figma</h2>

<p>Downloading maps for your project does not have to be a long process because <a href="https://www.figma.com/community/plugin/736458162635847353/Mapsicle">Mapsicle</a> by Chris Arvin can help you to easily insert maps into your Figma designs. The plugin allows you to set your map to a particular location, latitude and longitude which you want for your designs, and voilà, it adds just the right snapshot into your design.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/736458162635847353/Mapsicle">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="397"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/21b68eaa-e117-41c8-b04a-194ad6fdfe52/32-mapsicle-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/21b68eaa-e117-41c8-b04a-194ad6fdfe52/32-mapsicle-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/21b68eaa-e117-41c8-b04a-194ad6fdfe52/32-mapsicle-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/21b68eaa-e117-41c8-b04a-194ad6fdfe52/32-mapsicle-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/21b68eaa-e117-41c8-b04a-194ad6fdfe52/32-mapsicle-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/21b68eaa-e117-41c8-b04a-194ad6fdfe52/32-mapsicle-opt.png"
			
			sizes="100vw"
			alt="Mapsicle"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      <a href='https://www.figma.com/community/plugin/736458162635847353/Mapsicle'>Mapsicle</a> allows you to embed actual maps into your design.
    </figcaption>
  
</figure>

<p>However, if you needed a SVG map of a particular country or region for your design, the <a href="https://www.figma.com/community/plugin/777954172157933782">Vector Maps Plugin</a> can turn out to be very helpful. You can literally browse for countries or regions and insert them directly into your Figma design with  single click. The maps can also be downloaded as SVG or PDF via <a href="https://vector.mapcraft.biz/constructor/">https://vector.mapcraft.biz/constructor/</a>.</p>

<h2 id="name-conventions-in-figma">Name Conventions In Figma</h2>

<p>We’ve all been there: When you’re in a rush, naming conventions are a detail that often doesn’t get the attention it deserves. And before you notice it, you end up with a mess of different formatting styles for your page, frame, component, and layer names.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/739106292828562948/namespaces">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="397"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f3a1193d-b4cb-4250-9c86-3f96721b8a17/namespaces-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f3a1193d-b4cb-4250-9c86-3f96721b8a17/namespaces-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f3a1193d-b4cb-4250-9c86-3f96721b8a17/namespaces-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f3a1193d-b4cb-4250-9c86-3f96721b8a17/namespaces-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f3a1193d-b4cb-4250-9c86-3f96721b8a17/namespaces-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f3a1193d-b4cb-4250-9c86-3f96721b8a17/namespaces-opt.png"
			
			sizes="100vw"
			alt="Namespaces"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f3a1193d-b4cb-4250-9c86-3f96721b8a17/namespaces-opt.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>The <a href="https://www.figma.com/community/plugin/739106292828562948/namespaces">Namespaces</a> plugin puts an end to the chaos and neatly names your assets following a scheme that makes sense. Also great to unify different naming conventions when working on a shared file together with others.</p>

<p>Of course we all want to be well-organized, but sometimes we might be just a little bit distracting when naming our frames. That&rsquo;s when <a href="https://www.figma.com/community/plugin/818724242728722680/Figma-Exporter">Figma Exporter</a> can help. It lets you select the naming convention you want for your exported files: kebab-case, snake_case or camelCase. The rest will be done automatically!</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/818724242728722680/Figma-Exporter">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="397"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5218e7c7-a61f-4695-936a-37b10090e4a0/5864f0d5-42fa-4f0b-bc80-c3fabcee7b01-cover.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5218e7c7-a61f-4695-936a-37b10090e4a0/5864f0d5-42fa-4f0b-bc80-c3fabcee7b01-cover.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5218e7c7-a61f-4695-936a-37b10090e4a0/5864f0d5-42fa-4f0b-bc80-c3fabcee7b01-cover.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5218e7c7-a61f-4695-936a-37b10090e4a0/5864f0d5-42fa-4f0b-bc80-c3fabcee7b01-cover.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5218e7c7-a61f-4695-936a-37b10090e4a0/5864f0d5-42fa-4f0b-bc80-c3fabcee7b01-cover.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5218e7c7-a61f-4695-936a-37b10090e4a0/5864f0d5-42fa-4f0b-bc80-c3fabcee7b01-cover.jpg"
			
			sizes="100vw"
			alt="Figma Exporter"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      <a href='https://www.figma.com/community/plugin/818724242728722680/Figma-Exporter'>Figma Exporter</a> takes good care of the names for your frames.
    </figcaption>
  
</figure>

<h2 id="notepad-for-quick-notes-in-figma">Notepad For Quick Notes In Figma</h2>

<p>If you ever wanted to have a dedicated space in Figma to take notes, ideas and comments while working, <a href="https://www.figma.com/community/file/1264645516241470053/notepad">Notepad</a> by Dustin Mierau is probably what you were looking for. Notes are automatically saved with your documents and are available to other editors. In a way, you can use Notepad as a shared space for documenting your project with your team. As a side note, you need to reopen Notes to see changes made by other editors if you are working collaboratively.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/file/1264645516241470053/notepad">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="398"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7383896a-bcf9-4a82-b58b-15bc88f30bc4/29-notepad-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7383896a-bcf9-4a82-b58b-15bc88f30bc4/29-notepad-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7383896a-bcf9-4a82-b58b-15bc88f30bc4/29-notepad-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7383896a-bcf9-4a82-b58b-15bc88f30bc4/29-notepad-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7383896a-bcf9-4a82-b58b-15bc88f30bc4/29-notepad-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7383896a-bcf9-4a82-b58b-15bc88f30bc4/29-notepad-opt.png"
			
			sizes="100vw"
			alt="Notepad"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Taking notes for Figma projects, in Figma, with the <a href='https://www.figma.com/community/file/1264645516241470053/notepad'>Notepad Figma plugin</a>.
    </figcaption>
  
</figure>

<h2 id="patterns-in-your-figma-designs">Patterns In Your Figma Designs</h2>

<p>Everything is slightly better with patterns! While creating basic patterns is usually quite straightforward, creating custom patterns might be a tricky and intense process, and that’s where Figma’s patterns plug-ins save the day.</p>

<p>The <a href="https://www.figma.com/community/plugin/740556241021336678">Pattern Hero</a> plugin makes inserts your custom elements into a grid and repeats them to form a pattern. You can repeat or shuffle the patterns, create instances and also work with several templates. If you need to make a pattern, this is a good option to use.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/740556241021336678">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="398"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/cc4cdf79-d99b-4b74-8619-fccaf116466a/41-pattern-hero-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/cc4cdf79-d99b-4b74-8619-fccaf116466a/41-pattern-hero-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/cc4cdf79-d99b-4b74-8619-fccaf116466a/41-pattern-hero-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/cc4cdf79-d99b-4b74-8619-fccaf116466a/41-pattern-hero-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/cc4cdf79-d99b-4b74-8619-fccaf116466a/41-pattern-hero-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/cc4cdf79-d99b-4b74-8619-fccaf116466a/41-pattern-hero-opt.png"
			
			sizes="100vw"
			alt="Pattern Hero"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Simple patterns are quite easy to create <a href='https://www.figma.com/community/plugin/740556241021336678'>Pattern-Hero</a>.
    </figcaption>
  
</figure>

<p>Alternatively, <a href="https://www.figma.com/community/plugin/743134103711120154">Hero Patterns</a> is a collection of SVG background patterns. To create a unique set for yourself, you can mix and match different patterns to come up with a desirable pattern.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/743134103711120154">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="398"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/af942f92-9027-4ed9-a370-c62c71941be6/42-hero-patterns-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/af942f92-9027-4ed9-a370-c62c71941be6/42-hero-patterns-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/af942f92-9027-4ed9-a370-c62c71941be6/42-hero-patterns-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/af942f92-9027-4ed9-a370-c62c71941be6/42-hero-patterns-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/af942f92-9027-4ed9-a370-c62c71941be6/42-hero-patterns-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/af942f92-9027-4ed9-a370-c62c71941be6/42-hero-patterns-opt.png"
			
			sizes="100vw"
			alt="Hero Patterns"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      You can create more custom patterns by mixing and matching <a href='https://www.figma.com/community/plugin/743134103711120154'>Hero Patterns</a>.
    </figcaption>
  
</figure>

<p>There are <a href="https://www.figma.com/community/search?model_type=public_plugins&amp;q=pattern">way more patterns plugins in Figma</a>, so you can get anything from <a href="https://www.figma.com/community/plugin/732876968584257019/Confetti">confetti patterns</a> to <a href="https://www.figma.com/community/plugin/754418010908848797/Looper">trippy generated graphics</a> and <a href="https://www.figma.com/community/file/1004401302553479867/1300-geometric-shapes">geometric shapes</a>.</p>

<p>If you need to set up some sort of a dot grid pattern in your mock-up, <a href="https://www.figma.com/community/plugin/795474715778185230/Dot-Grid">Dot Grid</a> will automate the task for you. With the tool, you can easily generate beautiful dot grids to serve as guides throughout your design process on Figma with customizable grid width, grid height, dot size, gap, and dot colors.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/795474715778185230/Dot-Grid">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="402"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e02bffd9-c31e-43f9-8e3b-167578e62303/10-dot-grid-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e02bffd9-c31e-43f9-8e3b-167578e62303/10-dot-grid-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e02bffd9-c31e-43f9-8e3b-167578e62303/10-dot-grid-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e02bffd9-c31e-43f9-8e3b-167578e62303/10-dot-grid-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e02bffd9-c31e-43f9-8e3b-167578e62303/10-dot-grid-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e02bffd9-c31e-43f9-8e3b-167578e62303/10-dot-grid-opt.png"
			
			sizes="100vw"
			alt="Dot Grid"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      <a href='https://www.figma.com/community/plugin/795474715778185230/Dot-Grid'>Dot-Grid</a> generates dot grids (how surprising!) based on your choice of grid width, height, dot size, gap and dot colors.
    </figcaption>
  
</figure>

<h2 id="photos-embedding-in-figma">Photos Embedding In Figma</h2>

<p>You don’t have to leave Figma to get custom photographic assets for your project. Of course, <a href="https://www.figma.com/community/plugin/738454987945972471">Unsplash</a> is everyone’s go-to page for high-res images and now it is a plugin on Figma.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/738454987945972471">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="397"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d3d8430f-4c43-4484-8293-3f77033749df/61-unsplash-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d3d8430f-4c43-4484-8293-3f77033749df/61-unsplash-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d3d8430f-4c43-4484-8293-3f77033749df/61-unsplash-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d3d8430f-4c43-4484-8293-3f77033749df/61-unsplash-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d3d8430f-4c43-4484-8293-3f77033749df/61-unsplash-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d3d8430f-4c43-4484-8293-3f77033749df/61-unsplash-opt.png"
			
			sizes="100vw"
			alt="Unsplash"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d3d8430f-4c43-4484-8293-3f77033749df/61-unsplash-opt.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h2 id="remove-backgrounds-in-figma">Remove Backgrounds In Figma</h2>

<p><a href="https://www.figma.com/community/plugin/738992712906748191">Remove backgrounds</a> allows you to pretty much do just that: remove backgrounds of images easily. No need to manually edit the background of images before adding them to your design. A caveat: you will need a <a href="https://www.remove.bg/">remove.bg</a> account to use the plugin.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/738992712906748191">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="398"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/93952d7b-e474-43d4-9e07-53d877a06196/62-removebg-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/93952d7b-e474-43d4-9e07-53d877a06196/62-removebg-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/93952d7b-e474-43d4-9e07-53d877a06196/62-removebg-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/93952d7b-e474-43d4-9e07-53d877a06196/62-removebg-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/93952d7b-e474-43d4-9e07-53d877a06196/62-removebg-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/93952d7b-e474-43d4-9e07-53d877a06196/62-removebg-opt.png"
			
			sizes="100vw"
			alt="Remove BG"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/93952d7b-e474-43d4-9e07-53d877a06196/62-removebg-opt.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h2 id="responsive-design-and-testing-in-figma">Responsive Design And Testing In Figma</h2>

<p>Not many people resize boxes for living, but as designers, that’s pretty much what we have to do every now and again. In Figma, <a href="https://www.figma.com/community/plugin/824289601590456356/Breakpoints">Breakpoints</a> is one of the many plugins for testing responsive design. It provides a resizable instance of a frame, and works without the plugin window — so everyone on your team can explore the responsive behavior of the frame without having the plugin installed.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/824289601590456356/Breakpoints">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="398"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d6d3ec0a-687c-48b1-9c8b-6cd37e4d9c6f/8-breakpoints-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d6d3ec0a-687c-48b1-9c8b-6cd37e4d9c6f/8-breakpoints-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d6d3ec0a-687c-48b1-9c8b-6cd37e4d9c6f/8-breakpoints-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d6d3ec0a-687c-48b1-9c8b-6cd37e4d9c6f/8-breakpoints-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d6d3ec0a-687c-48b1-9c8b-6cd37e4d9c6f/8-breakpoints-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d6d3ec0a-687c-48b1-9c8b-6cd37e4d9c6f/8-breakpoints-opt.png"
			
			sizes="100vw"
			alt="Breakpoints"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      <a href='https://www.figma.com/community/plugin/824289601590456356/Breakpoints'>Breakpoints</a> is one of the many plugins that create a resizable instance of a frame.
    </figcaption>
  
</figure>

<p>Alternatively, you can also use <a href="https://www.figma.com/community/plugin/743654854885744527/Responsify">Responsify</a>, which allows you to select any frame and set custom device sizes, so you can preview what the website or app will look in that particular view.  <a href="https://www.figma.com/community/plugin/840727678445998968/Responsive">Responsive</a> is similar, and it allows you to test specific edge cases of your responsive layout by clicking on the input frames in the plugin. Nothing groundbreaking, but handy!</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/743654854885744527/Responsify">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="400"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d8797e1a-3a94-441d-a66d-cac214d48868/5-responsify-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d8797e1a-3a94-441d-a66d-cac214d48868/5-responsify-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d8797e1a-3a94-441d-a66d-cac214d48868/5-responsify-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d8797e1a-3a94-441d-a66d-cac214d48868/5-responsify-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d8797e1a-3a94-441d-a66d-cac214d48868/5-responsify-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d8797e1a-3a94-441d-a66d-cac214d48868/5-responsify-opt.png"
			
			sizes="100vw"
			alt="Responsify"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      <a href='https://www.figma.com/community/plugin/743654854885744527/Responsify'>Responsify</a> allows you to select any frame and set custom device sizes.
    </figcaption>
  
</figure>

<h2 id="reverse-the-order-of-layers">Reverse The Order Of Layers</h2>

<p>Automating small, tedious actions is always a good thing to save you precious time and stay focused on what really matters. When it comes to reversing the order of multiple layers, the <a href="https://www.figma.com/community/plugin/738853407874474111/Reverse-Layer-Order">Reverse Layer Order</a> plugin could become your new best friend. Just as its name implies, it will reverse the order of two or more layers within the same parent. All you need to do is select them and run the plugin.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/738853407874474111/Reverse-Layer-Order">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="398"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/665728c1-299b-4eb1-8931-db829b112d5e/reverse-layer-order-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/665728c1-299b-4eb1-8931-db829b112d5e/reverse-layer-order-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/665728c1-299b-4eb1-8931-db829b112d5e/reverse-layer-order-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/665728c1-299b-4eb1-8931-db829b112d5e/reverse-layer-order-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/665728c1-299b-4eb1-8931-db829b112d5e/reverse-layer-order-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/665728c1-299b-4eb1-8931-db829b112d5e/reverse-layer-order-opt.png"
			
			sizes="100vw"
			alt="Reverse Layer Order"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/665728c1-299b-4eb1-8931-db829b112d5e/reverse-layer-order-opt.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h2 id="shapes-and-svg-in-figma">Shapes And SVG In Figma</h2>

<p>Creating basic shapes is easy. However, creating complex shapes might take valuable time that you can’t really afford to lose when working on a project. Figma’s plugins all around shapes and SVG can make your work easier, with a variety of shapes to choose from.</p>

<p><a href="https://www.figma.com/community/plugin/739208439270091369/Blobs">Blobs</a> helps you improve the aesthetics of your design. With blobs, you can create and add organic shapes into your Figma designs using two parameters: complexity and contrast. You can also control how unique a shape is as well as the number of points it has.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/739208439270091369/Blobs">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="398"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/db9d348b-c791-4287-8d29-6b5a3fcad712/36-blobs-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/db9d348b-c791-4287-8d29-6b5a3fcad712/36-blobs-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/db9d348b-c791-4287-8d29-6b5a3fcad712/36-blobs-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/db9d348b-c791-4287-8d29-6b5a3fcad712/36-blobs-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/db9d348b-c791-4287-8d29-6b5a3fcad712/36-blobs-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/db9d348b-c791-4287-8d29-6b5a3fcad712/36-blobs-opt.png"
			
			sizes="100vw"
			alt="Blobs"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      <a href='https://www.figma.com/community/plugin/739208439270091369/Blobs'>Blobs</a> generates organic shapes, and plugs them right into Figma.
    </figcaption>
  
</figure>

<p>Need waves? The <a href="https://www.figma.com/community/plugin/745619465174154496/Get-Waves">Get Waves</a> plugin helps you generate SVG wave patterns for your designs. It can be quite useful when working with charts, graphs or designs with crests and troughs. You just have to choose a curve, adjust the complexity and randomize.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/745619465174154496/Get-Waves">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="399"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/eecae64f-430a-4e46-a3a2-5bfe468360f8/37-get-waves-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/eecae64f-430a-4e46-a3a2-5bfe468360f8/37-get-waves-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/eecae64f-430a-4e46-a3a2-5bfe468360f8/37-get-waves-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/eecae64f-430a-4e46-a3a2-5bfe468360f8/37-get-waves-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/eecae64f-430a-4e46-a3a2-5bfe468360f8/37-get-waves-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/eecae64f-430a-4e46-a3a2-5bfe468360f8/37-get-waves-opt.png"
			
			sizes="100vw"
			alt="Get Waves"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Getting waves into your design with <a href='https://www.figma.com/community/plugin/745619465174154496/Get-Waves'>Get Waves Figma Plugin</a>.
    </figcaption>
  
</figure>

<p>If you are trying to create a wave and curve pattern for your design, the <a href="https://www.figma.com/community/plugin/745971189153303901/Wave-%26-%D0%A1urve">Wave &amp; Curve</a> plugin by Andreslav Kozlov can help you generate waves in various patterns. You can also choose the direction of the waves either <code>Top</code> and <code>Bottom</code>, <code>Top</code>, or <code>Bottom</code>.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/745971189153303901/Wave-%26-%D0%A1urve">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="398"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9f234639-34c8-4fa8-93f8-bfe3e399d93f/38-wave-curve-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9f234639-34c8-4fa8-93f8-bfe3e399d93f/38-wave-curve-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9f234639-34c8-4fa8-93f8-bfe3e399d93f/38-wave-curve-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9f234639-34c8-4fa8-93f8-bfe3e399d93f/38-wave-curve-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9f234639-34c8-4fa8-93f8-bfe3e399d93f/38-wave-curve-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9f234639-34c8-4fa8-93f8-bfe3e399d93f/38-wave-curve-opt.png"
			
			sizes="100vw"
			alt="Wave &amp; Curve"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      <a href='https://www.figma.com/community/plugin/745971189153303901/Wave-%26-%D0%A1urve'>Wave & Curve</a> generates waves in various patterns.
    </figcaption>
  
</figure>

<p>Finally, <a href="https://www.figma.com/community/plugin/751576264585242935/To-Path">To Path</a> helps you put things on a path and can work with texts, shapes, objects, and components. To curve text around a path (a circle, for example), you can install the plugin, then remove circle opacity, select text, and circle, and then use the plugin to link both objects and watch the magic happen.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/751576264585242935/To-Path">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="399"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7490582a-fa4a-4f09-815c-94588989ca38/39-to-path-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7490582a-fa4a-4f09-815c-94588989ca38/39-to-path-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7490582a-fa4a-4f09-815c-94588989ca38/39-to-path-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7490582a-fa4a-4f09-815c-94588989ca38/39-to-path-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7490582a-fa4a-4f09-815c-94588989ca38/39-to-path-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7490582a-fa4a-4f09-815c-94588989ca38/39-to-path-opt.png"
			
			sizes="100vw"
			alt="To Path"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      When you need to place objects on a path, <a href='https://www.figma.com/community/plugin/751576264585242935/To-Path'>To Path</a> can feel quite magical.
    </figcaption>
  
</figure>

<p>Some other features of the plugin include repeating shapes along any path, editing the original shape or text and reflecting changes in real-time (while the plugin is open), and editing the path afterwards, and again, watch the linked objects change.</p>

<h2 id="turn-your-designs-into-a-slide-deck">Turn Your Designs Into A Slide Deck</h2>

<p>So you have a Figma design that you want to present to a client, your boss, or your team? <a href="https://www.figma.com/community/plugin/838925615018625519/Pitchdeck-Presentation-Studio">Pitchdeck</a> is here to help you do just that. The plugin turns your design into animated slide decks or, if you prefer, exports it for PowerPoint, Keynote, or Google. PDF export is also supported, as well as a number of handy features like webcam overlay, video embeds, speaker notes, and more. It’s even possible to record your presentation as a video with microphone audio.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/838925615018625519/Pitchdeck-Presentation-Studio">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="398"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e252f8c8-de66-4746-b367-b3b08968df92/pitchdeck-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e252f8c8-de66-4746-b367-b3b08968df92/pitchdeck-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e252f8c8-de66-4746-b367-b3b08968df92/pitchdeck-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e252f8c8-de66-4746-b367-b3b08968df92/pitchdeck-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e252f8c8-de66-4746-b367-b3b08968df92/pitchdeck-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e252f8c8-de66-4746-b367-b3b08968df92/pitchdeck-opt.png"
			
			sizes="100vw"
			alt="Pitchdeck"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e252f8c8-de66-4746-b367-b3b08968df92/pitchdeck-opt.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h2 id="table-generator-in-figma">Table Generator In Figma</h2>

<p>Although designing data tables can be quite time-consuming, the <a href="https://www.figma.com/community/plugin/735922920471082658/Table-Generator">Table Generator</a> plugin makes this easier by helping you automate dealing with tabular data. All you need for table generation is to copy and paste the data (currently in CSV format).</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/885838970710285271/Table-Creator">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="391"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2a4221c8-35b1-4545-9561-12fe84087ae6/6681a4b9-c319-4421-8364-6d2654cf6e53-cover.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2a4221c8-35b1-4545-9561-12fe84087ae6/6681a4b9-c319-4421-8364-6d2654cf6e53-cover.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2a4221c8-35b1-4545-9561-12fe84087ae6/6681a4b9-c319-4421-8364-6d2654cf6e53-cover.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2a4221c8-35b1-4545-9561-12fe84087ae6/6681a4b9-c319-4421-8364-6d2654cf6e53-cover.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2a4221c8-35b1-4545-9561-12fe84087ae6/6681a4b9-c319-4421-8364-6d2654cf6e53-cover.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2a4221c8-35b1-4545-9561-12fe84087ae6/6681a4b9-c319-4421-8364-6d2654cf6e53-cover.jpg"
			
			sizes="100vw"
			alt="Table Generator"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      If you need to deal with table, <a href='https://www.figma.com/community/plugin/885838970710285271/Table-Creator'>Table Creator Plugin</a> might be quite a helper.
    </figcaption>
  
</figure>

<p>Alternatively, you can also use <a href="https://www.figma.com/community/plugin/1196444588254898329/table-to-figma">Table-Paste</a> to paste data from an Excel spreadsheets into styled table rows, or <a href="https://www.figma.com/community/plugin/885838970710285271/Table-Creator">Table-Creator</a> to create resizabled custom-styled tables. A little bonus: you can also update all tables anytime your design changes.</p>

<h2 id="templates-for-wayfinding-in-figma">Templates For Wayfinding In Figma</h2>

<p>First, there’s only one person on the Figma project board, then another one joins in, and soon you’ll see the cursors of designers, developers, project managers, content designers, researchers, and many others spread across the screen. You’ve probably experienced this scenario before. But did all of these people actually <strong>find the information they needed</strong>? Did they have to dig around or was it easily discoverable?</p>
<figure><a title="A Template For Figma Wayfinding" href="https://ux.shopify.com/a-template-for-figma-wayfinding-2b3d393f9771"><img src="https://mcusercontent.com/16b832d9ad4b28edf261f34df/images/9eda3e8c-f17e-c80a-d200-40a7778fa08e.png" width="500" height="289" alt="A Template For Figma Wayfinding" border="0"></a></figure>
<p>The team at Shopify took these questions as an occasion to rethink the structure of their Figma playground and ensure it meets the diverse needs of teams across the company. Apart from sharing the process in an article, they distilled their findings into a <a href="https://www.figma.com/community/file/938084055059390892">project index template</a> that you can download and use right away. A handy little helper to give everyone involved in <em>your</em> project the context they need, when they need it.</p>

<h2 id="text-replacement-in-figma">Text Replacement In Figma</h2>

<p>Sometimes you’re in a situation where you need to replace a piece of text in your Figma mockup. No big deal — well, unless that piece of text appears in multiple instances across the design. A fantastic little time-saver for those occasions is <a href="https://www.figma.com/community/plugin/731260490045684148/Content-Buddy">Content Buddy</a>.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/731260490045684148/Content-Buddy">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="399"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/178395d2-a8e0-4a69-898e-4488dff4e9d5/content-buddy-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/178395d2-a8e0-4a69-898e-4488dff4e9d5/content-buddy-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/178395d2-a8e0-4a69-898e-4488dff4e9d5/content-buddy-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/178395d2-a8e0-4a69-898e-4488dff4e9d5/content-buddy-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/178395d2-a8e0-4a69-898e-4488dff4e9d5/content-buddy-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/178395d2-a8e0-4a69-898e-4488dff4e9d5/content-buddy-opt.png"
			
			sizes="100vw"
			alt="Content Buddy"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/178395d2-a8e0-4a69-898e-4488dff4e9d5/content-buddy-opt.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Instead of having to look up all instances, components, frames, and groups one by one and changing the text manually, Content Buddy does the heavy lifting for you: It provides you with a list of each unique text content in your design so that you only need to select the items you want to replace and enter the new replacement text — once.</p>

<h2 id="tracing-images-in-figma">Tracing Images In Figma</h2>

<p>Convert any white and black bitmap images to vectors using the <a href="https://www.figma.com/community/plugin/735707089415755407">Image Tracer plugin</a>. This plugin saves you the time you’d manually trace with the pen tool or use Illustrator to convert to vectors. On running the plugin, you will see a console on the window with options to help you make edits to your taste.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/735707089415755407">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="398"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2408ff8f-89fd-4c15-8f3f-b6821460dd71/63-image-tracer-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2408ff8f-89fd-4c15-8f3f-b6821460dd71/63-image-tracer-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2408ff8f-89fd-4c15-8f3f-b6821460dd71/63-image-tracer-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2408ff8f-89fd-4c15-8f3f-b6821460dd71/63-image-tracer-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2408ff8f-89fd-4c15-8f3f-b6821460dd71/63-image-tracer-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2408ff8f-89fd-4c15-8f3f-b6821460dd71/63-image-tracer-opt.png"
			
			sizes="100vw"
			alt="Image Tracer"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2408ff8f-89fd-4c15-8f3f-b6821460dd71/63-image-tracer-opt.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h2 id="typographic-scale-in-figma">Typographic Scale In Figma</h2>

<p>You’ve been there before. You need to look up the right values for a typographic scale of your design, but you don&rsquo;t have them at hand? Marvin Bruns’ <a href="https://www.figma.com/community/plugin/739825414752646970">Typescales</a> and <a href="https://www.figma.com/community/plugin/892543384437155629/Scaaale">Scaale</a> allow you to generate harmonious, <strong>responsive typographic scales</strong>, based on your choice of ratio — without leaving Figma. As always, you start with a <code>base-value</code>, font-size increments and decrements from that size, and a multiplier.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/967802396210455992/Typescale">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="401"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/abd3f3dd-74a2-4192-9dcb-76110ec9fb63/typescale-opt.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/abd3f3dd-74a2-4192-9dcb-76110ec9fb63/typescale-opt.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/abd3f3dd-74a2-4192-9dcb-76110ec9fb63/typescale-opt.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/abd3f3dd-74a2-4192-9dcb-76110ec9fb63/typescale-opt.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/abd3f3dd-74a2-4192-9dcb-76110ec9fb63/typescale-opt.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/abd3f3dd-74a2-4192-9dcb-76110ec9fb63/typescale-opt.jpg"
			
			sizes="100vw"
			alt="Responsive typographic scale"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Better typography with reliable typographic scale: <a href='https://www.figma.com/community/plugin/967802396210455992/Typescale'>Typescale</a> helps you out when you need it.
    </figcaption>
  
</figure>

<p>Ah, you need to be able to set a custom scale, too? Sam Smith’s <a href="https://www.figma.com/community/plugin/967802396210455992/Typescale">Typescale</a> does that for you (yep, it’s a different plugin with a similar name). Also, <a href="https://www.figma.com/community/plugin/804843548882105498/Textyles">Textyles</a> generates text styles with a font preview, and if you need to generate vertical rhythm by using a modular type scale, grid, and auto-layout, <a href="https://www.figma.com/community/plugin/946636305972061170/Heading-Helper">Heading-Helper</a> has got your back, too.</p>

<p>Finally, <a href="https://www.figma.com/community/plugin/739825414752646970/typescales">Font Scale</a> is helpful when you want to keep the proportions between your body text and headings the same, whether it’s on-screen or paper. Jeremy Church’s <a href="https://www.type-scale.com/">Type-Scale</a> is an inspiration for this plugin.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/739825414752646970/typescales">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="397"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3459400b-6a77-44a4-b408-18f2f9848713/66-font-scale-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3459400b-6a77-44a4-b408-18f2f9848713/66-font-scale-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3459400b-6a77-44a4-b408-18f2f9848713/66-font-scale-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3459400b-6a77-44a4-b408-18f2f9848713/66-font-scale-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3459400b-6a77-44a4-b408-18f2f9848713/66-font-scale-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3459400b-6a77-44a4-b408-18f2f9848713/66-font-scale-opt.png"
			
			sizes="100vw"
			alt="Font Scale"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3459400b-6a77-44a4-b408-18f2f9848713/66-font-scale-opt.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h2 id="upload-images-from-mobile-in-figma">Upload Images From Mobile In Figma</h2>

<p>We all have been in the situation before where you need to place something on Figma, perhaps just as a sketch or brainstorming session, so you would take a picture, send it to yourself via email, and then paste it in.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/775445260035815307/Mobile-Upload">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="398"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d7832c4d-939e-49ab-a0d3-2dc2c14970b8/31-mobile-upload-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d7832c4d-939e-49ab-a0d3-2dc2c14970b8/31-mobile-upload-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d7832c4d-939e-49ab-a0d3-2dc2c14970b8/31-mobile-upload-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d7832c4d-939e-49ab-a0d3-2dc2c14970b8/31-mobile-upload-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d7832c4d-939e-49ab-a0d3-2dc2c14970b8/31-mobile-upload-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d7832c4d-939e-49ab-a0d3-2dc2c14970b8/31-mobile-upload-opt.png"
			
			sizes="100vw"
			alt="Mobile upload"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      <a href='https://www.figma.com/community/plugin/775445260035815307/Mobile-Upload'>Mobile-Upload</a> allows you to upload photos straight into Figma.
    </figcaption>
  
</figure>

<p>With <a href="https://www.figma.com/community/plugin/775445260035815307/Mobile-Upload">Mobile upload</a> it’s no longer necessary. With the plugin, you can take a picture with your phone upload it directly to Figma. This is quite useful for notebook sketches and brainstorming sessions.</p>

<h2 id="utility-plugins-in-figma">Utility Plugins In Figma</h2>

<p>Have you ever lost resolution when bringing a large image into Figma? Or been frustrated at not being able to input a <strong>spacing value for your layers</strong>? Or maybe you’ve been unable to resize a frame independently of its contents? Here you have <a href="https://www.protopie.io/blog/best-figma-plugins">twenty useful plugins</a> that solve issues like these.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.protopie.io/blog/best-figma-plugins">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="398"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c73a2ac2-e2e7-477f-a76b-96b05dd93c46/1-axeq9x0eu0ety9cxdpsr9a.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c73a2ac2-e2e7-477f-a76b-96b05dd93c46/1-axeq9x0eu0ety9cxdpsr9a.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c73a2ac2-e2e7-477f-a76b-96b05dd93c46/1-axeq9x0eu0ety9cxdpsr9a.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c73a2ac2-e2e7-477f-a76b-96b05dd93c46/1-axeq9x0eu0ety9cxdpsr9a.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c73a2ac2-e2e7-477f-a76b-96b05dd93c46/1-axeq9x0eu0ety9cxdpsr9a.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c73a2ac2-e2e7-477f-a76b-96b05dd93c46/1-axeq9x0eu0ety9cxdpsr9a.jpg"
			
			sizes="100vw"
			alt="Arc"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      <a href='https://www.protopie.io/blog/best-figma-plugins'>Utility Plugins</a> for more effective work in Figma.
    </figcaption>
  
</figure>

<p>With the plugins, you can move layers with pixel precision, reisze frames without also resizing their contents, copy a component, insert unblurred large images (beyond the 4096 pixels limitation) and make quick and precise selections.</p>

<p>And if you need a bit more guidance or inspiration, Louis Ouriach has created a <a href="https://www.figma.com/community/file/1004041613962064465">best practice advice</a> on how to structure frames in your files to ensure handoff is as smooth as butter.</p>

<h2 id="wireframing-and-prototyping-in-figma">Wireframing And Prototyping In Figma</h2>

<p>When you are just planning your design, it might come in handy to use wireframing tools to just get a sense of what you are going to design in the first place.</p>

<p>For wireframing in Figma, no conversation will escape the mention of <a href="https://www.figma.com/community/plugin/733902567457592893/Autoflow">AutoFlow</a>. The plugin allows you to select objects and it will automatically draw an arrow to connect them. A great little helper to display and explain ideas!</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/733902567457592893/Autoflow">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="401"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/426585cf-1a53-43da-80c2-ebd26471247d/25-autoflow-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/426585cf-1a53-43da-80c2-ebd26471247d/25-autoflow-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/426585cf-1a53-43da-80c2-ebd26471247d/25-autoflow-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/426585cf-1a53-43da-80c2-ebd26471247d/25-autoflow-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/426585cf-1a53-43da-80c2-ebd26471247d/25-autoflow-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/426585cf-1a53-43da-80c2-ebd26471247d/25-autoflow-opt.png"
			
			sizes="100vw"
			alt="AutoFlow"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      <a href='https://www.figma.com/community/plugin/733902567457592893/Autoflow'>Autoflow</a> makes it easy to draw user flows.
    </figcaption>
  
</figure>

<p><a href="https://www.figma.com/community/plugin/742764242781786818/Wireframe">Wireframe</a> provides a large set of wireframes, for user flow, prototypes and basic structures. The wireframe components are divided into categories. All files are SVGs, so you can easily edit them for your needs.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/742764242781786818/Wireframe">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="398"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/251d723c-da08-4c4e-8eed-b6fab7c0ef89/23-wireframe-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/251d723c-da08-4c4e-8eed-b6fab7c0ef89/23-wireframe-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/251d723c-da08-4c4e-8eed-b6fab7c0ef89/23-wireframe-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/251d723c-da08-4c4e-8eed-b6fab7c0ef89/23-wireframe-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/251d723c-da08-4c4e-8eed-b6fab7c0ef89/23-wireframe-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/251d723c-da08-4c4e-8eed-b6fab7c0ef89/23-wireframe-opt.png"
			
			sizes="100vw"
			alt="Wireframe"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Everything for wireframing: <a href='https://www.figma.com/community/plugin/742764242781786818/Wireframe'>Wireframe</a> Figma plugin.
    </figcaption>
  
</figure>

<p>However, sometimes after creating a design, you might want to go back to the wireframe to iterate a bit more, or perhaps create a slightly different flow for your design. <a href="https://www.figma.com/community/plugin/764471577604277919/Wire-Box">Wire Box</a> can be useful for these situtions. It converts your designs from high-fidelity mock-ups to low-fidelity mock-ups, so you can then focus on the overall architecture rather than the fine details of the UI.</p>














<figure class="
  
  
  ">
  
    <a href="https://www.figma.com/community/plugin/764471577604277919/Wire-Box">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="397"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9f24ca29-7df2-4e88-a22b-9004bbfb063e/24-wirebox-opt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9f24ca29-7df2-4e88-a22b-9004bbfb063e/24-wirebox-opt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9f24ca29-7df2-4e88-a22b-9004bbfb063e/24-wirebox-opt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9f24ca29-7df2-4e88-a22b-9004bbfb063e/24-wirebox-opt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9f24ca29-7df2-4e88-a22b-9004bbfb063e/24-wirebox-opt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9f24ca29-7df2-4e88-a22b-9004bbfb063e/24-wirebox-opt.png"
			
			sizes="100vw"
			alt="Wire Box"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      When you need to go back to the wireframing whiteboard: <a href='https://www.figma.com/community/plugin/764471577604277919/Wire-Box'>Wire-Box</a>.
    </figcaption>
  
</figure>

<p>Finally, you can also use <a href="https://www.figma.com/community/plugin/876352455198080607/oblique">oblique</a> for creating quick shadows, 3D depth and visual perspective, and <a href="https://www.figma.com/community/plugin/787660853629435276/Wireframer">Wireframer Figma plugin</a> to generate placeholder text for wireframes with just one click.</p>

<h2 id="conclusion">Conclusion</h2>

<p>In this article, we explored a myriad of Figma tools, plugins and resources that you can use to make your design process easier. There is still a lot that we have not covered but you can explore them on the Figma community <a href="https://www.figma.com/community/explore">here</a> or share your favorite ones in the comments below!</p>

<h2 id="other-resources">Other Resources</h2>

<ul>
<li><a href="https://figmaelements.com/">Free Figma Resources, Tools and Templates</a></li>
<li><a href="https://www.smashingmagazine.com/2020/10/speed-up-workflow-figma-plugins/">Speed Up Workflow With Figma Plugins</a></li>
<li><a href="https://twitter.com/smashingmag/status/1315643381372997634">Community recommendations for Figma Plugins</a></li>
</ul>

<h2 id="other-smashing-guides">Other Smashing Guides</h2>

<p>Wow, you’ve made it so far! Well, if you are looking for similar posts, please check other round-ups we’ve published earlier:</p>

<ul>
<li><a href="https://www.smashingmagazine.com/2021/06/useful-frontend-boilerplates-starter-kits/">Front-end Boilerplates</a></li>
<li><a href="https://www.smashingmagazine.com/2021/03/css-auditing-tools/">CSS Auditing Tools</a></li>
<li><a href="https://www.smashingmagazine.com/2021/03/css-generators/">CSS Generators</a></li>
<li><a href="https://www.smashingmagazine.com/2021/03/complete-guide-accessible-front-end-components/">Accessible Front-end Components</a></li>
<li><a href="https://www.smashingmagazine.com/2021/05/useful-vs-code-extensions-web-developers/">VS Code Extensions</a></li>
</ul>

<p>And if that’s not enough, you can always <a href="https://www.smashingmagazine.com/the-smashing-newsletter/">subscribe to our newsletter</a> so you don’t miss the next ones. Thanks for being&hellip; <em>smashing</em>, of course! ;-)</p>

<div class="partners__lead-place"></div>

<h3 id="further-reading">Further Reading</h3>

<ul>
<li><a href="https://www.smashingmagazine.com/2023/11/design-to-code-handoff-process-uno-platform-figma/">An Efficient Design-to-Code Handoff Process Using Uno Platform For Figma</a></li>
<li><a href="https://www.smashingmagazine.com/2024/09/timeless-power-of-spreadsheets/">The Timeless Power Of Spreadsheets</a></li>
<li><a href="https://www.smashingmagazine.com/2020/06/internationalization-vue-i18n/">Internationalization In Vue With The Vue I18n Plugin</a></li>
<li><a href="https://www.smashingmagazine.com/2023/07/sustainable-design-toolkits-and-resources/">Sustainable Design Toolkits And Frameworks</a></li>
</ul>

<div class="signature">
  <img src="https://www.smashingmagazine.com/images/logo/logo--red.png" alt="Smashing Editorial" width="35" height="46" loading="lazy" decoding="async" />
  <span>(vf, yk, il, cm, mrn)</span>
</div>


              </article>
            </body>
          </html>
        ]]></content:encoded></item><item><author>Emiliano Cicero</author><title>An Introduction To Figma Interactive Components</title><link>https://www.smashingmagazine.com/2021/07/introduction-figma-interactive-components/</link><pubDate>Wed, 07 Jul 2021 11:00:00 +0000</pubDate><guid>https://www.smashingmagazine.com/2021/07/introduction-figma-interactive-components/</guid><description>In this article, Emiliano explains why Figma Interactive Components (now in beta) will improve how we create prototypes. The new feature reduces the time and effort needed to create interactions by bringing down the cost of design exploration. There’s no need for previous Figma knowledge and experience — all you’ll need is a free Figma account if you’d like to try it out for yourself.</description><content:encoded><![CDATA[
          <html>
            <head>
              <meta charset="utf-8">
              <link rel="canonical" href="https://www.smashingmagazine.com/2021/07/introduction-figma-interactive-components/" />
              <title>An Introduction To Figma Interactive Components</title>
            </head>
            <body>
              <article>
                <header>
                  <h1>An Introduction To Figma Interactive Components</h1>
                  
                    
                    <address>Emiliano Cicero</address>
                  
                  <time datetime="2021-07-07T11:00:00&#43;00:00" class="op-published">2021-07-07T11:00:00+00:00</time>
                  <time datetime="2021-07-07T11:00:00&#43;00:00" class="op-modified">2026-02-09T03:03:08+00:00</time>
                </header>
                
                

<p>Recently, Figma rolled out the beta for the newest interactive components feature that allows defining interactions and animations directly into the variants and propagates them to every component instance. This means that it is now possible to create a component with states (hover, active, clicked, focus) and make it interactive so that every copy of the component will inherit those same interactions by default, helping a lot in the prototyping phase.</p>

<p>Here’s a comparison example of how the workflow will change:</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4ba82d49-8dd6-4949-91eb-6e15f15a824d/28-introduction-figma-interactive-components.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="339"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4ba82d49-8dd6-4949-91eb-6e15f15a824d/28-introduction-figma-interactive-components.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4ba82d49-8dd6-4949-91eb-6e15f15a824d/28-introduction-figma-interactive-components.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4ba82d49-8dd6-4949-91eb-6e15f15a824d/28-introduction-figma-interactive-components.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4ba82d49-8dd6-4949-91eb-6e15f15a824d/28-introduction-figma-interactive-components.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4ba82d49-8dd6-4949-91eb-6e15f15a824d/28-introduction-figma-interactive-components.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4ba82d49-8dd6-4949-91eb-6e15f15a824d/28-introduction-figma-interactive-components.png"
			
			sizes="100vw"
			alt="Four devices connected with eight arrows showing that eight different interactions were needed to create a simple off and on effect."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Four screens and eight different interactions. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4ba82d49-8dd6-4949-91eb-6e15f15a824d/28-introduction-figma-interactive-components.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>As you can see in the example above, it requires four screens and eight interactions to make the prototype work as a real product. And if I wanted to use three switches, I would have to add even more screens and interactions.</p>

<p>In the next example, it only requires one screen and one component with two variants for the interactions, and the switch is the same so it can be duplicated as many times as needed:</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/72d2bd25-8cb7-429c-9ccf-c4bbb54812ae/24-introduction-figma-interactive-components.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="450"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/72d2bd25-8cb7-429c-9ccf-c4bbb54812ae/24-introduction-figma-interactive-components.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/72d2bd25-8cb7-429c-9ccf-c4bbb54812ae/24-introduction-figma-interactive-components.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/72d2bd25-8cb7-429c-9ccf-c4bbb54812ae/24-introduction-figma-interactive-components.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/72d2bd25-8cb7-429c-9ccf-c4bbb54812ae/24-introduction-figma-interactive-components.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/72d2bd25-8cb7-429c-9ccf-c4bbb54812ae/24-introduction-figma-interactive-components.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/72d2bd25-8cb7-429c-9ccf-c4bbb54812ae/24-introduction-figma-interactive-components.png"
			
			sizes="100vw"
			alt="There’s an iPhone at the left and a group of two variants at the right, the variants are connected with two arrows to show that only one component is needed to reproduce the same off and on effect as before."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      One single interactive component used twice inside a screen. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/72d2bd25-8cb7-429c-9ccf-c4bbb54812ae/24-introduction-figma-interactive-components.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Using Interactive Components simplifies not only the final prototype but also the <em>logic</em> behind it, making it easier to learn how to build, maintain and update the prototypes.</p>

<p>Now, before we start:</p>

<div data-audience="non-subscriber" data-remove="true" class="feature-panel-container">

<aside class="feature-panel" style="">
<div class="feature-panel-left-col">

<div class="feature-panel-description"><p>Meet <strong><a data-instant href="https://www.smashingconf.com/online-workshops/">Smashing Workshops</a></strong> on <strong>front-end, design &amp; UX</strong>, with practical takeaways, live sessions, <strong>video recordings</strong> and a friendly Q&amp;A. With Brad Frost, Stéph Walter and <a href="https://smashingconf.com/online-workshops/workshops">so many others</a>.</p>
<a data-instant href="smashing-workshops" class="btn btn--green btn--large" style="">Jump to the workshops&nbsp;↬</a></div>
</div>
<div class="feature-panel-right-col"><a data-instant href="smashing-workshops" class="feature-panel-image-link">
<div class="feature-panel-image">
<img
    loading="lazy"
    decoding="async"
    class="feature-panel-image-img"
    src="/images/smashing-cat/cat-scubadiving-panel.svg"
    alt="Feature Panel"
    width="257"
    height="355"
/>

</div>
</a>
</div>
</aside>
</div>

<h3 id="interactive-components-beta-access">Interactive Components (Beta Access)</h3>

<p>You need to <strong><a href="https://docs.google.com/forms/d/e/1FAIpQLSctELo9clvK0uP-0zDAxMqrgtCNyK0OB2hff6O7SnK9y4jo5g/viewform">sign up</a></strong> for the Interactive Components Beta program to start experimenting with this new feature as it is not yet available in the current stable release. Joining the Beta is free and once you submit the form, it should not take more than two or three days before you see Interactive Components appear in your Figma design tool.</p>

<h3 id="freebie">Freebie</h3>

<p>I have created a Figma design file with the examples from this article. Once you join the Beta, you can duplicate my design and follow along more easily.</p>

<ul>
<li><a href="https://www.figma.com/community/file/949638648436079728">Download the Figma design file →</a></li>
</ul>

<h2 id="before-starting">Before Starting</h2>

<p>It’s necessary to understand some key Figma elements that we are going to use, if you’re already familiar with them you can skip this part and start directly with the first tutorial (section: “Create your first Interactive Component”).</p>

<h3 id="components">Components</h3>

<p>Think of these as items that, when duplicated, create a connection with its copy (called <strong>instance</strong>) and when the component is changed, the instance receives the same changes. You can also apply overrides to instances (which are basically style changes to the component properties which allow for some customization).</p>

<ul>
<li>Learn more about <a href="https://help.figma.com/hc/en-us/articles/360038662654-Guide-to-Components-in-Figma"><strong>Components</strong> →</a></li>
<li>Learn more about <a href="https://help.figma.com/hc/en-us/articles/360039150733"><strong>Overrides</strong> →</a></li>
</ul>

<h3 id="variants">Variants</h3>

<p>These are the different styles a component can have and are usually used to apply different properties such as size or states.</p>

<ul>
<li>Learn more about <a href="https://help.figma.com/hc/en-us/articles/360056440594-Create-and-use-variants"><strong>Variants</strong> →</a></li>
</ul>

<h3 id="interaction-details-panel">Interaction Details Panel</h3>

<p>It’s important to understand the Interaction Details panel because it allows us to define the different interactions and animations for our interactive components. Figma has a lot of information on their site so I will include links for those of you that want to dig deeper.</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/64cea099-45ca-428f-a5ec-26b06a31d521/12-introduction-figma-interactive-components.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="497"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/64cea099-45ca-428f-a5ec-26b06a31d521/12-introduction-figma-interactive-components.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/64cea099-45ca-428f-a5ec-26b06a31d521/12-introduction-figma-interactive-components.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/64cea099-45ca-428f-a5ec-26b06a31d521/12-introduction-figma-interactive-components.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/64cea099-45ca-428f-a5ec-26b06a31d521/12-introduction-figma-interactive-components.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/64cea099-45ca-428f-a5ec-26b06a31d521/12-introduction-figma-interactive-components.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/64cea099-45ca-428f-a5ec-26b06a31d521/12-introduction-figma-interactive-components.png"
			
			sizes="100vw"
			alt="The Figma interaction details panel with notes to identify the triggers, actions, destination and animations."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Interaction Details panel (annotated). (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/64cea099-45ca-428f-a5ec-26b06a31d521/12-introduction-figma-interactive-components.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h4 id="hotspot">Hotspot</h4>

<p>Even though this is not inside the panel, the hotspot is the element where the interaction will happen, in our case, each variant will be an interactive hotspot for which you can define triggers and actions.</p>

<h4 id="triggers">Triggers</h4>

<p>These are known in development as <strong>Events</strong> and are the different ways we the user can activate an interaction.</p>

<ul>
<li>On Click,</li>
<li>On Drag,</li>
<li>While Hovering,</li>
<li>While Pressing,</li>
<li>Key/gamepad,</li>
<li>Mouse Enter,</li>
<li>Mouse Leave,</li>
<li>Mouse Down,</li>
<li>Mouse Up,</li>
<li>After Delay.</li>
<li>More information about <a href="https://help.figma.com/hc/en-us/articles/360040035834-Prototype-triggers"><strong>Triggers</strong> →</a>.</li>
</ul>

<h4 id="actions">Actions</h4>

<p>In this setting, you can define what will happen when the interaction is activated; for interactive components, we will use <strong>Change To</strong> which allows swapping the variants inside a component.</p>

<ul>
<li>Change To,</li>
<li>Navigate To,</li>
<li>Open Overlay,</li>
<li>Scroll To,</li>
<li>Swap With (overlay),</li>
<li>Back,</li>
<li>Close Overlay,</li>
<li>Open URL.</li>
</ul>

<h4 id="destination">Destination</h4>

<p>This is the final target of the action. In my examples, I will use a variant as the destination to swap it from Switch OFF to Switch ON.</p>

<h4 id="animations">Animations</h4>

<p>Figma comes with a set of pre-defined transitions that can be useful for some cases (move in, push, slide-in) but I always prefer to go with <strong>Smart Animate</strong> and define my own transitions as it’s really easy to use — it basically checks the layer names and if there are changes between the selected frame and the destination frame, it will animate those layers.</p>

<ul>
<li>More information about Figma <strong><a href="https://help.figma.com/hc/en-us/articles/360040522373-Prototype-animations">Transitions</a></strong> and <strong><a href="https://help.figma.com/hc/en-us/articles/360039818874-Create-advanced-animations-with-Smart-Animate">Smart Animate</a></strong> →</li>
</ul>

<h4 id="easing">Easing</h4>

<p>Easing refers to the way the animation moves, it’s basically how the element accelerates and decelerates. I’m going to use two settings for this tutorial: <strong>Ease In and Out</strong> for the switch, and <strong>Linear</strong> for the loops, but have in mind that it’s also possible to define a custom easing so you might want to learn more about <strong><a href="https://help.figma.com/hc/en-us/articles/360051748654-Prototype-easing-curves">Easing</a></strong>.</p>

<h2 id="creating-your-first-interactive-component">Creating Your First Interactive Component</h2>

<p>Now that you have all the information you can start making your first interactive component. I’ll show you a very common case by creating a simple switch that has two states (Off and On) and use the variants to replicate those states.</p>

<figure><a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/74698650-1de3-4868-848d-c85eea085a58/21-introduction-figma-interactive-components.gif"><img src="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/74698650-1de3-4868-848d-c85eea085a58/21-introduction-figma-interactive-components.gif" width="400" height="280" alt="A switch component that is being activated by the pointer." /></a><figcaption>We’ll start by creating a simple switch.</figcaption></figure>

<h3 id="create-a-component">Create A Component</h3>

<p>The first step is to create a component.</p>

<ul>
<li>Using the Rectangle tool (<code>R</code>), create a grey rectangle (#A7A9BC) <code>56x32</code> pixels in size and apply a corner radius of <code>16</code> px.</li>
<li>Using the Ellipse tool (<code>O</code>) create a white circle (<code>#FFF</code>) <code>24x24</code> pixels in size and place it over the rectangle in the left part, leaving <code>4</code> px of spacing. This is how it should look:</li>
</ul>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0804cfbb-d848-43cf-a289-241525056079/20-introduction-figma-interactive-components.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="251"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0804cfbb-d848-43cf-a289-241525056079/20-introduction-figma-interactive-components.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0804cfbb-d848-43cf-a289-241525056079/20-introduction-figma-interactive-components.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0804cfbb-d848-43cf-a289-241525056079/20-introduction-figma-interactive-components.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0804cfbb-d848-43cf-a289-241525056079/20-introduction-figma-interactive-components.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0804cfbb-d848-43cf-a289-241525056079/20-introduction-figma-interactive-components.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0804cfbb-d848-43cf-a289-241525056079/20-introduction-figma-interactive-components.png"
			
			sizes="100vw"
			alt="A simple switch component in the off state."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      The switch component. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0804cfbb-d848-43cf-a289-241525056079/20-introduction-figma-interactive-components.png'>Large preview</a>)
    </figcaption>
  
</figure>

<ul>
<li>Combine these two elements into a single component using <kbd>Ctrl/Cmd</kbd> + <kbd>Alt</kbd> + <kbd>K</kbd> (or using the Component icon from the top bar in Figma):</li>
</ul>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3193dbae-c024-4593-8c91-737760b3fffc/3-introduction-figma-interactive-components.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="600"
			height="192"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3193dbae-c024-4593-8c91-737760b3fffc/3-introduction-figma-interactive-components.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3193dbae-c024-4593-8c91-737760b3fffc/3-introduction-figma-interactive-components.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3193dbae-c024-4593-8c91-737760b3fffc/3-introduction-figma-interactive-components.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3193dbae-c024-4593-8c91-737760b3fffc/3-introduction-figma-interactive-components.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3193dbae-c024-4593-8c91-737760b3fffc/3-introduction-figma-interactive-components.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3193dbae-c024-4593-8c91-737760b3fffc/3-introduction-figma-interactive-components.png"
			
			sizes="100vw"
			alt="The Figma component icon, it’s composed by four squares rotated at 45 degrees."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      The Component icon in the top bar. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3193dbae-c024-4593-8c91-737760b3fffc/3-introduction-figma-interactive-components.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p><strong>Note:</strong> Here and in other places, I will use the Windows/Mac universal key notation, where the <kbd>Ctrl</kbd> key in Windows corresponds to the <kbd>Cmd</kbd> key on the Mac; <kbd>Alt</kbd> in Windows is the equivalent of <kbd>Alt/Option</kbd> on the Mac, so I’ll use <kbd>Alt</kbd> for short, and <kbd>Shift</kbd> is the same on both platforms.</p>

<h3 id="add-a-variant">Add A Variant</h3>

<ul>
<li>Select the component you’ve just created and, in the right panel (inside the Design tab), click on the plus button near <strong>Variants</strong>:</li>
</ul>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/59d2db9f-6031-48f1-b70b-462f860eadae/6-introduction-figma-interactive-components.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="470"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/59d2db9f-6031-48f1-b70b-462f860eadae/6-introduction-figma-interactive-components.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/59d2db9f-6031-48f1-b70b-462f860eadae/6-introduction-figma-interactive-components.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/59d2db9f-6031-48f1-b70b-462f860eadae/6-introduction-figma-interactive-components.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/59d2db9f-6031-48f1-b70b-462f860eadae/6-introduction-figma-interactive-components.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/59d2db9f-6031-48f1-b70b-462f860eadae/6-introduction-figma-interactive-components.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/59d2db9f-6031-48f1-b70b-462f860eadae/6-introduction-figma-interactive-components.png"
			
			sizes="100vw"
			alt="Part of the design sidebar panel showing the position of the button to add variants."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Part of the Design sidebar panel. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/59d2db9f-6031-48f1-b70b-462f860eadae/6-introduction-figma-interactive-components.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>It will generate a purple frame with a dashed border that represents the group of variants you have.</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/74c7e4e7-b853-4a1f-ad20-34038d7708c0/26-introduction-figma-interactive-components.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="367"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/74c7e4e7-b853-4a1f-ad20-34038d7708c0/26-introduction-figma-interactive-components.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/74c7e4e7-b853-4a1f-ad20-34038d7708c0/26-introduction-figma-interactive-components.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/74c7e4e7-b853-4a1f-ad20-34038d7708c0/26-introduction-figma-interactive-components.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/74c7e4e7-b853-4a1f-ad20-34038d7708c0/26-introduction-figma-interactive-components.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/74c7e4e7-b853-4a1f-ad20-34038d7708c0/26-introduction-figma-interactive-components.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/74c7e4e7-b853-4a1f-ad20-34038d7708c0/26-introduction-figma-interactive-components.png"
			
			sizes="100vw"
			alt="Two switch components with the off state inside a variant group."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      The group of variants. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/74c7e4e7-b853-4a1f-ad20-34038d7708c0/26-introduction-figma-interactive-components.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>You should have two variants by now, use the first one for the <strong>Off</strong> <strong>state</strong> and the second one for the <strong>On</strong> <strong>state</strong>.</p>

<ul>
<li>Apply a different style to the <strong>On</strong> <strong>state</strong> to make it the active option, I recommend using a blue background (#0B5FFF) and move the circle to the right.</li>
</ul>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/a3a0f3ed-d446-4ded-b9fb-e68111adde0d/27-introduction-figma-interactive-components.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="680"
			height="396"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/a3a0f3ed-d446-4ded-b9fb-e68111adde0d/27-introduction-figma-interactive-components.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/a3a0f3ed-d446-4ded-b9fb-e68111adde0d/27-introduction-figma-interactive-components.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/a3a0f3ed-d446-4ded-b9fb-e68111adde0d/27-introduction-figma-interactive-components.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/a3a0f3ed-d446-4ded-b9fb-e68111adde0d/27-introduction-figma-interactive-components.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/a3a0f3ed-d446-4ded-b9fb-e68111adde0d/27-introduction-figma-interactive-components.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/a3a0f3ed-d446-4ded-b9fb-e68111adde0d/27-introduction-figma-interactive-components.png"
			
			sizes="100vw"
			alt="Two switch components inside the variant group, one turned on and the other one turned off."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Now the two styles are defined for the Off and On states. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/a3a0f3ed-d446-4ded-b9fb-e68111adde0d/27-introduction-figma-interactive-components.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>These are the states of the switch that are going to change from <strong>Off</strong> to <strong>On</strong> (and vice-versa) when the user clicks on the switch.</p>

<p><strong>Useful tip:</strong> For this case it is <em>not</em> necessary but if you need to add <em>more variants</em> you can select a component inside the box and click the purple plus button, it will add a copy of the selected component and resize the box automatically. (It’s also possible to resize the box manually as if it was a frame and freely duplicate and arrange the variants inside it.)</p>

<h4 id="alternative-approach">Alternative Approach</h4>

<p>As you’ve seen, we’ve created these components by duplicating them inside the variant group but <strong>it&rsquo;s also possible to create them individually and combine them as variants</strong>, the final result will be exactly the same. If you want to try this method just create and select two components, the right panel will then have another action called “Combine as variants,” click it and done — you will now have the same two variants.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/61803bd4-11c5-4852-b7b2-0033b19d167f/2-introduction-figma-interactive-components.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="246"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/61803bd4-11c5-4852-b7b2-0033b19d167f/2-introduction-figma-interactive-components.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/61803bd4-11c5-4852-b7b2-0033b19d167f/2-introduction-figma-interactive-components.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/61803bd4-11c5-4852-b7b2-0033b19d167f/2-introduction-figma-interactive-components.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/61803bd4-11c5-4852-b7b2-0033b19d167f/2-introduction-figma-interactive-components.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/61803bd4-11c5-4852-b7b2-0033b19d167f/2-introduction-figma-interactive-components.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/61803bd4-11c5-4852-b7b2-0033b19d167f/2-introduction-figma-interactive-components.png"
			
			sizes="100vw"
			alt="Two separated switch components at the left with an arrow pointing to the right, to a button with the action combine as variants. Next to the button there is another arrow pointing at the right to a variant box with the two switch components inside it."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Select the components and combine them as variants. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/61803bd4-11c5-4852-b7b2-0033b19d167f/2-introduction-figma-interactive-components.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>This alternative is really useful when you already have different components and only need to define the variants, if you&rsquo;re working on a library it will help you update it without having to recreate everything from scratch.</p>

<h3 id="name-your-variants">Name Your Variants</h3>

<p>Naming the variants won’t have a direct effect over the final result <em>(unless you use the same name more than once)</em>, but defining the names and hierarchies will help you have everything better organized and understandable for other colleagues that might need to use the prototype for other projects.</p>

<p>By default the main group of variants is named “Property 1”, you can change this from the sidebar when selecting the entire group. I suggest renaming this to “State” since we’re going to use Off and On states.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2ff2e8cc-eeb1-4389-9d02-58c44d1bdfba/14-introduction-figma-interactive-components.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="255"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2ff2e8cc-eeb1-4389-9d02-58c44d1bdfba/14-introduction-figma-interactive-components.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2ff2e8cc-eeb1-4389-9d02-58c44d1bdfba/14-introduction-figma-interactive-components.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2ff2e8cc-eeb1-4389-9d02-58c44d1bdfba/14-introduction-figma-interactive-components.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2ff2e8cc-eeb1-4389-9d02-58c44d1bdfba/14-introduction-figma-interactive-components.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2ff2e8cc-eeb1-4389-9d02-58c44d1bdfba/14-introduction-figma-interactive-components.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2ff2e8cc-eeb1-4389-9d02-58c44d1bdfba/14-introduction-figma-interactive-components.png"
			
			sizes="100vw"
			alt="Two copies of the same panel that has one input for the variant name, the first panel at the left has the input filled with the word &#39;Property 1&#39;, and the second panel at the right has the input filled with the word &#39;State&#39;. Between the panels there is an arrow pointing to the right to show the change from &#39;Property 1&#39; to &#39;State&#39;. "
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Rename the variants from 'Property 1' to 'State'. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2ff2e8cc-eeb1-4389-9d02-58c44d1bdfba/14-introduction-figma-interactive-components.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Renaming a single variant is done by using the same process but you need to select the single variant inside the group and in the same panel you’ll find the names “Default” and “Variant 2” that you can overwrite, for the switch name these should be “Off” and “On”.</p>

<p>As a result, the layer names of the variants will be automatically changed to “State=Off” and “State=On”.</p>

<p><strong>Fun fact:</strong> If your component only has two variants and you use the names “Off” and “On”, it will show a switch instead of a dropdown in the destination!</p>

<h3 id="let-s-make-it-interactive">Let’s Make It Interactive!</h3>

<p>Now that you have the component and the variants it’s time to apply the <strong>interactions</strong>.</p>

<ul>
<li>Click on the Prototype tab (at the top-right side of the screen) to open the Prototype panel and activate its features.</li>
<li>Select the <strong>Off</strong> variant (it should have a blue dot) and drag it over the <strong>On</strong> variant to connect it.</li>
</ul>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/550657cb-d00a-4206-be1a-3e686c96073a/4-introduction-figma-interactive-components.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="363"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/550657cb-d00a-4206-be1a-3e686c96073a/4-introduction-figma-interactive-components.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/550657cb-d00a-4206-be1a-3e686c96073a/4-introduction-figma-interactive-components.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/550657cb-d00a-4206-be1a-3e686c96073a/4-introduction-figma-interactive-components.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/550657cb-d00a-4206-be1a-3e686c96073a/4-introduction-figma-interactive-components.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/550657cb-d00a-4206-be1a-3e686c96073a/4-introduction-figma-interactive-components.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/550657cb-d00a-4206-be1a-3e686c96073a/4-introduction-figma-interactive-components.png"
			
			sizes="100vw"
			alt="Two switch components inside a variant group, the first one is turned off and connected to the second one that is turned on."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      The On state connected to the Off state. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/550657cb-d00a-4206-be1a-3e686c96073a/4-introduction-figma-interactive-components.png'>Large preview</a>)
    </figcaption>
  
</figure>

<ul>
<li>Double-check that you have selected the whole variant and not just the background layer, this will make the interaction work even when the user clicks on the circle element.</li>
<li>In the Interaction Details panel set the trigger to <strong>On Click</strong>.</li>
<li>Make sure the action is set to <strong>Change To</strong>.</li>
<li>Change the animation to <strong>Smart Animate</strong> and use Ease In And Out for a natural feeling.</li>
</ul>

<p>I&rsquo;ll translate these settings into a single sentence to explain what will happen: when the user <strong>Clicks</strong> on <strong><em>Off</em></strong> <strong>State</strong> then <strong>Change to</strong> <strong><em>On</em></strong> <strong>State</strong> using <strong>Smart Animate</strong> with <strong>Ease In And Out</strong> at <strong>300 milliseconds.</strong></p>

<ul>
<li>Apply the same settings to the <strong>On State</strong> variant so that when clicked again it, will turn off the switch. (<strong>Note:</strong> Figma will remember the interaction settings applied to the elements inside the group and will apply the same settings when dragging a new interaction so in this case, you would only need to double-check.)</li>
</ul>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/286d5aa0-5e13-4993-b0ea-9a00a48580b4/25-introduction-figma-interactive-components.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="323"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/286d5aa0-5e13-4993-b0ea-9a00a48580b4/25-introduction-figma-interactive-components.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/286d5aa0-5e13-4993-b0ea-9a00a48580b4/25-introduction-figma-interactive-components.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/286d5aa0-5e13-4993-b0ea-9a00a48580b4/25-introduction-figma-interactive-components.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/286d5aa0-5e13-4993-b0ea-9a00a48580b4/25-introduction-figma-interactive-components.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/286d5aa0-5e13-4993-b0ea-9a00a48580b4/25-introduction-figma-interactive-components.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/286d5aa0-5e13-4993-b0ea-9a00a48580b4/25-introduction-figma-interactive-components.png"
			
			sizes="100vw"
			alt="Two switch components connected to each other."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Both states are now connected. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/286d5aa0-5e13-4993-b0ea-9a00a48580b4/25-introduction-figma-interactive-components.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Done! If you want to check if it works you need to include one of the variants into a frame, select the frame and then click on the presentation button (represented by the play icon) that is placed over the tabs.</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d71e63cd-948e-4ddd-8162-713deb2e2bd5/17-introduction-figma-interactive-components.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="478"
			height="238"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d71e63cd-948e-4ddd-8162-713deb2e2bd5/17-introduction-figma-interactive-components.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d71e63cd-948e-4ddd-8162-713deb2e2bd5/17-introduction-figma-interactive-components.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d71e63cd-948e-4ddd-8162-713deb2e2bd5/17-introduction-figma-interactive-components.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d71e63cd-948e-4ddd-8162-713deb2e2bd5/17-introduction-figma-interactive-components.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d71e63cd-948e-4ddd-8162-713deb2e2bd5/17-introduction-figma-interactive-components.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d71e63cd-948e-4ddd-8162-713deb2e2bd5/17-introduction-figma-interactive-components.png"
			
			sizes="100vw"
			alt="Part of the Figma interface with focus on the Play icon used for prototypes"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      The 'Play' icon. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d71e63cd-948e-4ddd-8162-713deb2e2bd5/17-introduction-figma-interactive-components.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>It should allow you to turn On/Off every switch individually.</p>

<p>However, if you want to see the real power of this feature, duplicate the component in the frame multiple times (at least three or more) and activate them individually in the presentation.</p>

<figure><a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/df848f72-3f4b-4425-b691-8c4147c548f1/22-introduction-figma-interactive-components.gif"><img src="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/df848f72-3f4b-4425-b691-8c4147c548f1/22-introduction-figma-interactive-components.gif" width="400" height="440" alt="Three switch interactive components being pressed randomly and multiple times with the mouse cursor." /></a><figcaption>The switch interactive components in action.</figcaption></figure>

<div class="partners__lead-place"></div>

<h3 id="using-more-than-two-variants">Using More Than Two Variants</h3>

<p>This feature becomes very powerful when you add multiple variants and connect them individually to make a realistic component. Here is an example where I’ve connected a total of <strong>six</strong> <strong>variants</strong> with small changes to the background color to recreate the multiple states of a button, a classic in the web design industry nowadays.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1f241146-f537-4bc1-bf42-0273a645460c/7-introduction-figma-interactive-components.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="349"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1f241146-f537-4bc1-bf42-0273a645460c/7-introduction-figma-interactive-components.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1f241146-f537-4bc1-bf42-0273a645460c/7-introduction-figma-interactive-components.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1f241146-f537-4bc1-bf42-0273a645460c/7-introduction-figma-interactive-components.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1f241146-f537-4bc1-bf42-0273a645460c/7-introduction-figma-interactive-components.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1f241146-f537-4bc1-bf42-0273a645460c/7-introduction-figma-interactive-components.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1f241146-f537-4bc1-bf42-0273a645460c/7-introduction-figma-interactive-components.png"
			
			sizes="100vw"
			alt="Six different dropdown buttons showing the color changes for each state."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      A dropdown button with six different states as variants. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1f241146-f537-4bc1-bf42-0273a645460c/7-introduction-figma-interactive-components.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h4 id="component-states">Component States</h4>

<p>This is the list of the different states for this component, including also the triggers we’re going to use to change from one variant to another.</p>

<ol>
<li>Default — Default,</li>
<li>Hover — WhileHover,</li>
<li>Pressed — MouseDown,</li>
<li>Active — MouseUp (It could be possible to use On Click for the same result),</li>
<li>Hover while Active — WhileHover,</li>
<li>Pressed while Active — MouseDown.</li>
</ol>

<p><strong>Useful tip:</strong> It’s possible to use <strong>MouseDown</strong> to simulate the button being <em>pressed</em> but not released and then use <strong>MouseUp</strong> to activate a transition, it’s a nice interaction detail that makes the button feel more real.</p>

<figure><a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/193b1539-0945-4c03-b91c-ee20cad2bbb6/8-introduction-figma-interactive-components.gif"><img src="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/193b1539-0945-4c03-b91c-ee20cad2bbb6/8-introduction-figma-interactive-components.gif" width="600" height="300" alt="One single dropdown button animated with its six different states." /></a><figcaption>Use the MouseDown trigger before the Click trigger.</figcaption></figure>

<h3 id="nested-interactive-components">Nested Interactive Components</h3>

<p>As for the regular components, you can also create <strong>nested</strong> interactive components.</p>

<p>Using the same example of the dropdown it would be possible to create a single interactive component called <em>Dropdown</em> with two interactive components inside it: the <em>Dropdown Button</em> and the <em>Dropdown Menu.</em> This will help you control how the button and the menu interact with each other, allowing you to define which variant of the button will trigger the opening of the menu.</p>

<p><strong>Note:</strong> It would be possible to create another nested component for the dropdown menu options and use the override to change the different texts.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/45458569-40d5-4658-8823-b25ca4668fd5/15-introduction-figma-interactive-components.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="248"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/45458569-40d5-4658-8823-b25ca4668fd5/15-introduction-figma-interactive-components.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/45458569-40d5-4658-8823-b25ca4668fd5/15-introduction-figma-interactive-components.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/45458569-40d5-4658-8823-b25ca4668fd5/15-introduction-figma-interactive-components.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/45458569-40d5-4658-8823-b25ca4668fd5/15-introduction-figma-interactive-components.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/45458569-40d5-4658-8823-b25ca4668fd5/15-introduction-figma-interactive-components.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/45458569-40d5-4658-8823-b25ca4668fd5/15-introduction-figma-interactive-components.png"
			
			sizes="100vw"
			alt="A variant group with six variants composed by a dropdown button and a dropdown menu, the image is showing that it is possible to hide the menu in some states of the button."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      The same dropdown button with a dropdown menu that only appears in the On Click and While Hover variants. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/45458569-40d5-4658-8823-b25ca4668fd5/15-introduction-figma-interactive-components.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>The main benefit of using nested interactive components is the new level of modularity that it provides for prototypes, you could define the interactions individually and mix them into infinite interactive components. The <em>Dropdown Menu</em> could be included in other components (a card, for example) without having to prototype how it works every single time.</p>

<figure><a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8e7b8fe9-a988-4711-bd15-ad8ccd7301ae/10-introduction-figma-interactive-components.gif"><img src="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/90c6fce3-989c-4bed-8a17-3188d989e1dc/10-introduction-figma-interactive-components-800w.gif" width="800" height="355" alt="Three dropdown buttons and a cursor showing how hover and click work, each dropdown opens and closes a menu." /></a><figcaption>It’s possible to simulate real Hover and Click effects. (<a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8e7b8fe9-a988-4711-bd15-ad8ccd7301ae/10-introduction-figma-interactive-components.gif">Large preview</a>)</figcaption></figure>

<h3 id="navigation">Navigation</h3>

<p>We can go even further, it’s also possible to navigate from a variant to an external frame, you can connect the single variant to the frame by using the <strong>On Click</strong> trigger and <strong>Navigate To</strong> action. In this example I’ve connected each one of the actions from the <em>Dropdown Menu</em> component to an external frame with a grey rectangle in the same position as the menu (Right, Top, Left, Bottom).</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/90711a09-4a37-403d-8e5b-dbc3f559bb34/16-introduction-figma-interactive-components.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="306"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/90711a09-4a37-403d-8e5b-dbc3f559bb34/16-introduction-figma-interactive-components.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/90711a09-4a37-403d-8e5b-dbc3f559bb34/16-introduction-figma-interactive-components.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/90711a09-4a37-403d-8e5b-dbc3f559bb34/16-introduction-figma-interactive-components.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/90711a09-4a37-403d-8e5b-dbc3f559bb34/16-introduction-figma-interactive-components.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/90711a09-4a37-403d-8e5b-dbc3f559bb34/16-introduction-figma-interactive-components.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/90711a09-4a37-403d-8e5b-dbc3f559bb34/16-introduction-figma-interactive-components.png"
			
			sizes="100vw"
			alt="A diagram showing a group of five variants of a dropdown menu with four options: right, top, left, bottom. Each option is connected to an external artboard using the OnClick trigger."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Prototype destinations can be connected outside the variant frame. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/90711a09-4a37-403d-8e5b-dbc3f559bb34/16-introduction-figma-interactive-components.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>When one of these actions is clicked, it will navigate to the connected frame as it happens with regular prototypes, the real magic happens when you need to reuse the <em>Dropdown Menu</em> for another component, it will have all the interactions inside already done, so you don’t have to connect it over and over again.</p>

<figure><a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e1a75579-a4f9-4b75-814e-e86f20009c11/9-introduction-figma-interactive-components.gif"><img src="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0b39f389-bdb1-4fca-aee1-7957d9994eaf/9-introduction-figma-interactive-components-800w.gif" width="800" height="497" alt="A dropdown button opens a menu with four different options: right, top, left, bottom. When clicking one of these, a panel shows up from the same direction as the options." /></a><figcaption>This dropdown menu is a great example of how real an interactive component can get. (<a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e1a75579-a4f9-4b75-814e-e86f20009c11/9-introduction-figma-interactive-components.gif">Large preview</a>)</figcaption></figure>

<p>This workflow and the features of the nested components are amazing for product design cases where you have tons of frames to connect as they will reduce the amount of work required to create a high-fidelity prototype for testing, or even if you want to create a components library for prototypes.</p>

<h2 id="special-effects">Special Effects</h2>

<p>That was all for the introduction to Figma <strong>interactive components</strong>. As you can see, it’s pretty easy to use this feature to create and connect interactions inside a prototype. But it’s also possible to create various kinds of special effects using <strong>variants</strong>.</p>

<p>In the following section, I will take a close look at these!</p>

<h3 id="loops">Loops</h3>

<p>It’s finally possible to make infinity loops inside Figma without too much effort and also you can create various spinners and loading indicators.</p>

<figure><a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7726525c-3a0e-4e7b-a277-1b65d134ca92/18-introduction-figma-interactive-components.gif"><img src="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/93c5191e-0041-437c-b1f6-b24ef37d8af8/18-introduction-figma-interactive-components-500w.gif" width="500" height="470" alt="Two different sets with three animated rectangles. In the first set, the rectangles resize randomly while in the second set the rectangles are aligned and simulate a carousel movement." /></a><figcaption>Elements can be resized to create infinite loops. (<a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7726525c-3a0e-4e7b-a277-1b65d134ca92/18-introduction-figma-interactive-components.gif">Large preview</a>)</figcaption></figure>

<p>To create a loop, use the <strong>After Delay</strong> trigger set to <code>1</code> ms to swap the variants automatically and connect at least two of them.</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/722f4dec-52d2-42ec-8616-b17b443128fb/5-introduction-figma-interactive-components.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="539"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/722f4dec-52d2-42ec-8616-b17b443128fb/5-introduction-figma-interactive-components.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/722f4dec-52d2-42ec-8616-b17b443128fb/5-introduction-figma-interactive-components.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/722f4dec-52d2-42ec-8616-b17b443128fb/5-introduction-figma-interactive-components.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/722f4dec-52d2-42ec-8616-b17b443128fb/5-introduction-figma-interactive-components.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/722f4dec-52d2-42ec-8616-b17b443128fb/5-introduction-figma-interactive-components.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/722f4dec-52d2-42ec-8616-b17b443128fb/5-introduction-figma-interactive-components.png"
			
			sizes="100vw"
			alt="A diagram with instructions to create a loop. There are three variants and arrows, the first variant is connected to the second variant, the second variant to the third, and the third variant to the first variant to create an infinite loop."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Use the After Delay trigger set to 1 ms and connect the variants. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/722f4dec-52d2-42ec-8616-b17b443128fb/5-introduction-figma-interactive-components.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p><strong>Note:</strong> <code>1</code> ms is the <strong>minimum</strong> amount of time we can set in Figma to change from a variant to another and make it an almost instantaneous change; and, thanks to the AfterDelay trigger, it will happen automatically. It’s possible to use a higher delay time if you need the loop to look like it has a pause between the variants.</p>

<h3 id="rotation">Rotation</h3>

<p>Let me start the next part of the article with a note about how strangely Figma handles rotation.</p>

<p>Figma has a weird way to rotate elements, it seems to be limited from <code>-179</code>º to a maximum of <code>180</code>º and does not allow to go further than these values. In addition, there is no way to define a rotation direction so if you try to rotate from <code>0</code>º to <code>180</code>º and vice-versa, instead of doing a <code>360</code>º turn, it will first rotate to <code>180</code>º and then come back to <code>0</code>º (like a swing).</p>

<p>So, to let the system identify correctly the rotation you will need to use at least <strong>three</strong> variants.</p>

<p>Here’s how you can do it:</p>

<ul>
<li>Create a component with three variants: VariantA, VariantB, VariantC (for this example I modified an ellipse to make the triangle shape).</li>
<li>Apply the following rotation to the elements <strong>inside</strong> the variants (<strong>not</strong> the variants themselves).

<ul>
<li><strong>VariantA:</strong> set the element to <code>0</code>º and connect the variant to <strong>VariantB</strong>.</li>
<li><strong>VariantB:</strong> set the element to <code>-120</code>º and connect the variant to <strong>VariantC</strong>.</li>
<li><strong>VariantC:</strong> set the element to <code>120</code>º and connect the variant to <strong>VariantA</strong> to complete the loop.</li>
</ul></li>
<li>All the interactions should have <strong>After Delay (1ms)</strong> as a trigger and a <strong>Linear</strong> easing.</li>
</ul>

<p>The result will be a neutral spinner that will have three small pauses of <code>1</code> ms each because of the variant swap, not perfect but fast and for a prototype, it’s good enough — and you will be probably the only one that will notice the pauses anyway.</p>

<p><strong>Useful tip</strong>: You can either use the same animation time for each variant to make a linear loop, or you can play with the animation using a faster time for some variants and a slower time for others, this will simulate a curved easing.</p>

<figure><a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8cc57af1-e8c7-41eb-bf40-c3add3232315/19-introduction-figma-interactive-components.gif"><img src="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/cc11b95e-c702-4149-bf81-f26f3b6b2938/19-introduction-figma-interactive-components-800w.gif" width="800" height="404" alt="Two circular shapes similar to a pie missing a piece, the shapes are rotating with different timings, the first one is linear and the second one uses a combination of slow and fast times." /></a><figcaption>The rotation is the same but the animation times are different. (<a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8cc57af1-e8c7-41eb-bf40-c3add3232315/19-introduction-figma-interactive-components.gif">Large preview</a>)</figcaption></figure>

<h4 id="complex-spinners">Complex Spinners</h4>

<p>I wouldn’t suggest using Figma interactive components for complex spinners, for such cases it might be better to create the spinner with a dedicated animation app (such as After Effects) and import it into the prototype as a GIF.</p>

<h3 id="micro-interactions">Micro Interactions</h3>

<p>Interactive components allow you to include more delightful details into prototypes. I’ll go back to the switch example to show you how to add micro-interactions to this component using <strong>MouseDown</strong> and <strong>On Click</strong>.</p>

<figure><a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/21775d66-5c50-435d-aba3-075595de86cb/23-introduction-figma-interactive-components.gif"><img src="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/21775d66-5c50-435d-aba3-075595de86cb/23-introduction-figma-interactive-components.gif" width="388" height="212" alt="This is the same switch as before, with two states, but with the difference that when clicked the circle inside the switch will deform in the opposite direction, creating a nice visual effect, as if the circle was magnetically attracted to the other side of the switch." /></a><figcaption>Do you want to turn a simple switch into an amazing switch?</figcaption></figure>

<h4 id="component">Component</h4>

<p>To recreate this example you need to apply some changes to the structure of the switch:</p>

<ul>
<li>Make a copy of the <strong>Off</strong> state switch that you already created.</li>
<li>Create another ellipse shape of <code>16*24</code> px, place it over the previous ellipse (the circle).</li>
<li>Unify the two ellipses as a boolean group using <strong>Union</strong>.</li>
<li>Learn more about <a href="https://help.figma.com/hc/en-us/articles/360039957534-Boolean-Operations"><strong>Boolean groups</strong> →</a>.</li>
</ul>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0880468c-9b60-4d74-83b5-22e65bcd3e68/1-introduction-figma-interactive-components.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="275"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0880468c-9b60-4d74-83b5-22e65bcd3e68/1-introduction-figma-interactive-components.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0880468c-9b60-4d74-83b5-22e65bcd3e68/1-introduction-figma-interactive-components.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0880468c-9b60-4d74-83b5-22e65bcd3e68/1-introduction-figma-interactive-components.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0880468c-9b60-4d74-83b5-22e65bcd3e68/1-introduction-figma-interactive-components.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0880468c-9b60-4d74-83b5-22e65bcd3e68/1-introduction-figma-interactive-components.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0880468c-9b60-4d74-83b5-22e65bcd3e68/1-introduction-figma-interactive-components.png"
			
			sizes="100vw"
			alt="A diagram showing how a boolean union works using two ellipses, one big and another one small."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      The boolean group will combine these two shapes into a single circle. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0880468c-9b60-4d74-83b5-22e65bcd3e68/1-introduction-figma-interactive-components.png'>Large preview</a>)
    </figcaption>
  
</figure>

<ul>
<li>Apply <code>32</code> px of border-radius to the Union layer, this will create the distortion effect you can see in the example.</li>
<li>Create the component (<kbd>Ctrl/Cmd</kbd> + <kbd>Alt</kbd> + <kbd>K</kbd>).</li>
</ul>

<h4 id="variants-and-prototype">Variants And Prototype</h4>

<p>You’ll need a total of four variants to make this work: <code>OffState</code>, <code>OffStatePressed</code>, <code>OnState</code>, and <code>OnStatePressed</code>.</p>

<ul>
<li>Use the <strong>Mouse Down</strong> trigger to simulate the mouse being pressed and activate the distortion by moving the bigger ellipse <code>8</code> px to the other side.</li>
<li>Use the <strong>On Click</strong> trigger to change states from Off to On.</li>
</ul>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1f0c2836-1fed-4ef4-9c28-e589ea1de8a7/13-introduction-figma-interactive-components.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="599"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1f0c2836-1fed-4ef4-9c28-e589ea1de8a7/13-introduction-figma-interactive-components.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1f0c2836-1fed-4ef4-9c28-e589ea1de8a7/13-introduction-figma-interactive-components.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1f0c2836-1fed-4ef4-9c28-e589ea1de8a7/13-introduction-figma-interactive-components.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1f0c2836-1fed-4ef4-9c28-e589ea1de8a7/13-introduction-figma-interactive-components.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1f0c2836-1fed-4ef4-9c28-e589ea1de8a7/13-introduction-figma-interactive-components.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1f0c2836-1fed-4ef4-9c28-e589ea1de8a7/13-introduction-figma-interactive-components.png"
			
			sizes="100vw"
			alt="A diagram showing how to connect four variants to recreate the micro interaction. The first one uses MouseDown to activate the second variant, the second variant uses OnClick to activate the third variant, the third variant uses MouseDown to activate the fourth variant, and the fourth variant uses OnClick to activate the first variant."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Here’s another fun diagram showing how to construct the interactive component! (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1f0c2836-1fed-4ef4-9c28-e589ea1de8a7/13-introduction-figma-interactive-components.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h3 id="3d-animation-with-a-sequence-of-images">3D Animation With A Sequence Of Images</h3>

<p>Before we continue, I want to thank <strong><a href="https://twitter.com/aerdna_c">Andrea Cau</a></strong>, the author of this cool 3D sequence that I’m going to use as an example.</p>

<p>This is more of a hack to integrate 3D animations into a Figma prototype, you could also use GIFs but this way you gain full control over the images, not just play/stop, allowing you to create a prototype that simulates an interface to rotate objects, commonly seen in car websites where you can rotate the car.</p>

<figure><a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/57b98cb4-3803-4af7-9b72-b307c221e513/11-introduction-figma-interactive-components.gif"><img src="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ebd3177a-c9dc-4905-bc76-9a048767e4ed/11-introduction-figma-interactive-components-500w.gif" width="500" height="500" alt="The main object is a glass square with inside a porcelain sphere, it is a 3D composition and the object is positioned in a 45 degrees view. There are two arrows, one to the right and another one to the left. The animation shows the mouse clicking on the arrows and the object rotates to the same direction." /></a><figcaption>Imagine an e-commerce website with a 3D model that you can turn around. (<a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/57b98cb4-3803-4af7-9b72-b307c221e513/11-introduction-figma-interactive-components.gif">Large preview</a>)</figcaption></figure>

<p>In this case, I’ve used nine images (you could use more, or less, depending on the rotation you need), the important steps to reproduce this interaction are:</p>

<ul>
<li>Create one variant per image (in this case 9 variants will be needed) and include one image in each one, following the sequence order.</li>
<li>Create the arrow button, it will be the Hotspot.</li>
<li>Connect the right arrow to the next variant (repeat for every variant).</li>
<li>Connect the left arrow to the previous variant (repeat for every variant).</li>
<li>Use the <strong>Instant</strong> animation instead of Smart Animate to avoid the fade in/out effect and create the illusion of movement.</li>
</ul>

<h2 id="conclusion">Conclusion</h2>

<p>The more I use this feature the more I think it will be a game-changer for companies working in the areas of web and product design. Mastering interactive components and variants will allow designers to produce better, more advanced, and realistic prototypes with less effort, giving you the freedom to work on the actual designs and focus less on the design tool itself.</p>

<p>As mentioned earlier, I’ve created a Figma community file with the examples from this article (and a few more experiments that I’ve been doing during the testing of the new feature). Once you <a href="https://docs.google.com/forms/d/e/1FAIpQLSctELo9clvK0uP-0zDAxMqrgtCNyK0OB2hff6O7SnK9y4jo5g/viewform">join the Beta</a>, feel free to duplicate my design, follow along or start experimenting, and <strong>share your results!</strong> Play with the animation times, change the easing, try to rotate, scale elements, try to nest different interactive components.</p>

<ul>
<li><a href="https://www.figma.com/community/file/949638648436079728">Download the Figma design file →</a></li>
</ul>

<p>If you have questions or something is not entirely clear, leave a question in the Comments section below, or ping me on Twitter (<a href="https://twitter.com/emi_cicero">@emi_cicero</a>) — I’d be glad to help! :)</p>

<h3 id="other-resources">Other Resources</h3>

<ul>
<li><a href="https://help.figma.com/hc/en-us/articles/360038662654-Guide-to-Components-in-Figma">Components</a></li>
<li><a href="https://help.figma.com/hc/en-us/articles/360039150733">Overrides</a></li>
<li><a href="https://help.figma.com/hc/en-us/articles/360056440594-Create-and-use-variants">Variants</a></li>
<li><a href="https://help.figma.com/hc/en-us/articles/360040035834-Prototype-triggers">Triggers</a></li>
<li><a href="https://help.figma.com/hc/en-us/articles/360039818874-Create-advanced-animations-with-Smart-Animate">Smart Animate</a></li>
<li><a href="https://help.figma.com/hc/en-us/articles/360051748654-Prototype-easing-curves">Easing</a></li>
<li><a href="https://www.figma.com/community/file/1033456279024883078/interactive-components-playground-file">Figma interactive components playground</a></li>
<li><a href="https://www.youtube.com/watch?v=slmLyaolF50">Interactive Components in Figma</a> (video by <a href="https://twitter.com/mds">@mds</a>)</li>
<li><a href="https://www.youtube.com/watch?v=ChAyF6JeANw&amp;ab_channel=MDSMDS">Advanced Interactive Components in Figma</a> (video by <a href="https://twitter.com/mds">@mds</a>)</li>
<li><a href="https://www.youtube.com/watch?v=plD2XRrK7hw&amp;ab_channel=SketchTogether">SketchTogether interactive components video</a></li>
</ul>

<div class="partners__lead-place"></div>

<h3 id="further-reading">Further Reading</h3>

<ul>
<li><a href="https://www.smashingmagazine.com/2024/12/creating-effective-multistep-form-better-user-experience/">Creating An Effective Multistep Form For Better User Experience</a></li>
<li><a href="https://www.smashingmagazine.com/2023/11/design-to-code-handoff-process-uno-platform-figma/">An Efficient Design-to-Code Handoff Process Using Uno Platform For Figma</a></li>
<li><a href="https://www.smashingmagazine.com/2024/08/best-pro-scheduler-libraries/">Best Of Pro Scheduler Libraries</a></li>
<li><a href="https://www.smashingmagazine.com/2024/09/how-create-weekly-google-analytics-report-posts-slack/">How To Create A Weekly Google Analytics Report That Posts To Slack</a></li>
</ul>

<div class="signature">
  <img src="https://www.smashingmagazine.com/images/logo/logo--red.png" alt="Smashing Editorial" width="35" height="46" loading="lazy" decoding="async" />
  <span>(mb, vf, yk, il, mrn)</span>
</div>


              </article>
            </body>
          </html>
        ]]></content:encoded></item><item><author>Abel Hancock</author><title>Speed Up Your Workflow With Figma Plugins</title><link>https://www.smashingmagazine.com/2020/10/speed-up-workflow-figma-plugins/</link><pubDate>Wed, 21 Oct 2020 09:00:00 +0000</pubDate><guid>https://www.smashingmagazine.com/2020/10/speed-up-workflow-figma-plugins/</guid><description>There are hundreds of Figma plugins available as of today, yet the Figma plugin search functionality is pretty basic and at times it can be very difficult to find the right plugin for a certain task. Today, Abel Hancock will take you into an in-depth look at several plugins that can speed up your design workflow.&lt;br />&lt;br />&lt;strong>Note&lt;/strong>: &lt;em>This article is aimed at user interface designers who use Figma on a daily basis.&lt;/em></description><content:encoded><![CDATA[
          <html>
            <head>
              <meta charset="utf-8">
              <link rel="canonical" href="https://www.smashingmagazine.com/2020/10/speed-up-workflow-figma-plugins/" />
              <title>Speed Up Your Workflow With Figma Plugins</title>
            </head>
            <body>
              <article>
                <header>
                  <h1>Speed Up Your Workflow With Figma Plugins</h1>
                  
                    
                    <address>Abel Hancock</address>
                  
                  <time datetime="2020-10-21T09:00:00&#43;00:00" class="op-published">2020-10-21T09:00:00+00:00</time>
                  <time datetime="2020-10-21T09:00:00&#43;00:00" class="op-modified">2026-02-09T03:03:08+00:00</time>
                </header>
                
                

<p>One of the best ways to reduce time spent pushing pixels in Figma is to use some of the countless plugins that can do the work for you. Figma has added some amazing functionality recently to help with our workflows but plugins still fill in the gap for many tedious, repetitive daily tasks. This practical article is an attempt to highlight the most useful plugins that I use often to make my design process faster and more smooth.</p>

<div data-audience="non-subscriber" data-remove="true" class="feature-panel-container">

<aside class="feature-panel" style="">
<div class="feature-panel-left-col">

<div class="feature-panel-description"><p><p>Meet <a data-instant href="/the-smashing-newsletter/"><strong>Smashing Email Newsletter</strong></a> with useful tips on front-end, design &amp; UX. Subscribe and <strong>get “Smart Interface Design Checklists”</strong> &mdash; a <strong>free PDF deck</strong> with 150+ questions to ask yourself when designing and building almost <em>anything</em>.</p><div><section class="nlbf"><form action="//smashingmagazine.us1.list-manage.com/subscribe/post?u=16b832d9ad4b28edf261f34df&amp;id=a1666656e0" method="post"><div class="nlbwrapper"><label for="mce-EMAIL-hp" class="sr-only">Your (smashing) email</label><div class="nlbgroup"><input type="email" name="EMAIL" class="nlbf-email" id="mce-EMAIL-hp" placeholder="Your email">
<input type="submit" value="Meow!" name="subscribe" class="nlbf-button"></div></div></form><style>.c-garfield-the-cat .nlbwrapper{margin-bottom: 0;}.nlbf{display:flex;padding-bottom:.25em;padding-top:.5em;text-align:center;letter-spacing:-.5px;color:#fff;font-size:1.15em}.nlbgroup:hover{box-shadow:0 1px 7px -5px rgba(50,50,93,.25),0 3px 16px -8px rgba(0,0,0,.3),0 -6px 16px -6px rgba(0,0,0,.025)}.nlbf .nlbf-button,.nlbf .nlbf-email{flex-grow:1;flex-shrink:0;width:auto;margin:0;padding:.75em 1em;border:0;border-radius:11px;background:#fff;font-size:1em;box-shadow:none}.promo-box .nlbf-button:focus,.promo-box input.nlbf-email:active,.promo-box input.nlbf-email:focus{box-shadow:none}.nlbf-button:-ms-input-placeholder,.nlbf-email:-ms-input-placeholder{color:#777;font-style:italic}.nlbf-button::-webkit-input-placeholder,.nlbf-email::-webkit-input-placeholder{color:#777;font-style:italic}.nlbf-button:-ms-input-placeholder,.nlbf-button::-moz-placeholder,.nlbf-button::placeholder,.nlbf-email:-ms-input-placeholder,.nlbf-email::-moz-placeholder,.nlbf-email::placeholder{color:#777;font-style:italic}.nlbf .nlbf-button{transition:all .2s ease-in-out;color:#fff;background-color:#0168b8;font-weight:700;box-shadow:0 1px 1px rgba(0,0,0,.3);width:100%;border:0;border-left:1px solid #ddd;flex:2;border-top-left-radius:0;border-bottom-left-radius:0}.nlbf .nlbf-email{border-top-right-radius:0;border-bottom-right-radius:0;width:100%;flex:4;min-width:150px}@media all and (max-width:650px){.nlbf .nlbgroup{flex-wrap:wrap;box-shadow:none}.nlbf .nlbf-button,.nlbf .nlbf-email{border-radius:11px;border-left:none}.nlbf .nlbf-email{box-shadow:0 13px 27px -5px rgba(50,50,93,.25),0 8px 16px -8px rgba(0,0,0,.3),0 -6px 16px -6px rgba(0,0,0,.025);min-width:100%}.nlbf .nlbf-button{margin-top:1em;box-shadow:0 1px 1px rgba(0,0,0,.5)}}.nlbf .nlbf-button:active,.nlbf .nlbf-button:focus,.nlbf .nlbf-button:hover{cursor:pointer;color:#fff;background-color:#0168b8;border-color:#dadada;box-shadow:0 1px 1px rgba(0,0,0,.3)}.nlbf .nlbf-button:active,.nlbf .nlbf-button:focus{outline:0!important;text-shadow:1px 1px 1px rgba(0,0,0,.3);box-shadow:inset 0 3px 3px rgba(0,0,0,.3)}.nlbgroup{display:flex;box-shadow:0 13px 27px -5px rgba(50,50,93,.25),0 8px 16px -8px rgba(0,0,0,.3),0 -6px 16px -6px rgba(0,0,0,.025);border-radius:11px;transition:box-shadow .2s ease-in-out}.nlbwrapper{display:flex;flex-direction:column;justify-content:center}.nlbf form{width:100%}.nlbf .nlbgroup{margin:0}.nlbcaption{font-size:.9em;line-height:1.5em;color:#fff;border-radius:11px;padding:.5em 1em;display:inline-block;background-color:#0067b859;text-shadow:1px 1px 1px rgba(0,0,0,.3)}.wf-loaded-stage2 .nlbf .nlbf-button{font-family:Mija}.mts{margin-top: 5px !important;}.mbn{margin-bottom: 0 !important;}</style></section><p class="mts mbn"><small class="promo-box__footer mtm block grey"><em>Once a week. Useful tips on <a href="https://www.smashingmagazine.com/the-smashing-newsletter/">front-end &amp; UX</a>. Trusted by 207.000 friendly folks.</em></small></p></div></p>
</div>
</div>
<div class="feature-panel-right-col">
<div class="feature-panel-image">
<img
    loading="lazy"
    decoding="async"
    class="feature-panel-image-img"
    src="/images/smashing-cat/cat-firechat.svg"
    alt="Feature Panel"
    width="310"
    height="400"
/>

</div>

<p></div>
</aside>
</div></p>

<h2 id="finding-figma-plugins">Finding Figma Plugins</h2>

<p>The amount of time we, as interface designers, spend clicking, selecting, renaming, moving, updating, and otherwise tweaking our designs in 2020 is surprising (and often frustrating). This is an unavoidable part of our jobs, even with all the AI design generating magic available today. However, any minutes or hours that we are able to save on moving pixels can be spent improving the design quality, growing as designers, or just enjoying life outside of design (I know, design is life, but&hellip;).</p>

<p>Enter Figma plugins! Members of the community have developed hundreds of plugins since their first introduction to Figma last year, many of which help us speed up design tasks (and some that <a href="https://www.figma.com/community/plugin/749261072790710247/Multiplayer-Pong-Game">will definitely slow you down</a>). But, as the current Figma plugin search functionality is pretty basic, for me (and for many other plugin users) it means that we need to search Google first, find a detailed article or a blog post about a plugin that does something, read about it, then go to Figma to install and try it. This article will focus on a number of plugins for speeding up our workflows and it is also intended to contribute to the community and collective knowledge around what plugins to use for some tasks.</p>

<p>Hopefully one of the plugins listed below is what you are looking for, or maybe what you didn’t know you are looking for but still desperately need! <em>(“There is nothing like looking, if you want to find something. You certainly usually find something, if you look, but it is <a href="https://www.goodreads.com/work/quotes/1540236-the-hobbit-or-there-and-back-again">not always quite the something you were after</a>.”)</em></p>

<p>The plugins highlighted here aren’t necessarily the most flashy or exciting but they have improved my workflow drastically. Broadly speaking, I find that the most useful plugins:</p>

<ul>
<li>Generate placeholder content <strong>in bulk</strong>.</li>
<li>Organize components and elements <strong>in bulk</strong>.</li>
<li>Change elements and styles <strong>in bulk</strong>.</li>
</ul>

<p>So without further ado, let’s dive into the five plugins that I use every day (and some bonus keyboard shortcuts at the end of the article).</p>

<h2 id="five-plugins-to-help-you-enhance-your-workflow">Five Plugins To Help You Enhance Your Workflow</h2>

<ol>
<li><a href="#1-similayer">Similayer</a></li>
<li><a href="#2-content-reel">Content Reel</a></li>
<li><a href="#3-change-text">Change Text</a></li>
<li><a href="#4-lorem-ipsum">Lorem ipsum</a></li>
<li><a href="#5-design-system-organizer">Design System Organizer</a></li>
<li><a href="#6-bonus-plugin-shortcuts">Bonus: Plugin Shortcuts</a></li>
</ol>

<h2 id="1-similayer">1. Similayer</h2>

<h3 id="when-to-use-it">When To Use It</h3>

<p>Use Similayer when you need to select more than four or five elements with the same styles (images, components, text, frames, and so on).</p>

<ul>
<li><a href="https://www.figma.com/community/plugin/735733267883397781/Similayer">View in Figma →</a></li>
</ul>

<h3 id="highlights">Highlights</h3>

<ul>
<li>Select similar layers with a few clicks.</li>
<li>Use extremely specific properties/conditions to define which elements to select.</li>
<li>Select similar elements from only within a specific frame or the entire page.</li>
</ul>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/88fa0e4d-d4c6-40e4-871c-907fb20ab953/similayer-markup.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			
			
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/88fa0e4d-d4c6-40e4-871c-907fb20ab953/similayer-markup.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/88fa0e4d-d4c6-40e4-871c-907fb20ab953/similayer-markup.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/88fa0e4d-d4c6-40e4-871c-907fb20ab953/similayer-markup.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/88fa0e4d-d4c6-40e4-871c-907fb20ab953/similayer-markup.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/88fa0e4d-d4c6-40e4-871c-907fb20ab953/similayer-markup.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/88fa0e4d-d4c6-40e4-871c-907fb20ab953/similayer-markup.png"
			
			sizes="100vw"
			alt="Similayer plugin UI"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Select multiple elements with Similayer. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/88fa0e4d-d4c6-40e4-871c-907fb20ab953/similayer-markup.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h3 id="the-details">The Details</h3>

<p>Selecting multiple elements while holding <kbd>Shift</kbd> and double or triple-clicking into multiple groups is time-consuming and difficult. This is especially true when there are many nested layers or when trying to select elements from inside many groups. In such cases, your attempts to multi-select a few elements will more often be a miss, instead of a hit.</p>

<p>Selecting only a couple of elements can be quick enough when using <kbd>Shift</kbd> and the mouse cursor. If it takes more than five seconds to select the elements though, Similayer will save you time. Becoming familiar with this Similayer will expedite your workflows significantly and change how you work with Figma. During an average working day, I will use this plugin twice as often as all other plugins, combined. Of course, as with any plugin, Figma may add core functionality that eventually will make this plugin obsolete, but for the time being, it is a real life-saver.</p>

<p>I most often use Similayer to:</p>

<ul>
<li>Select all instances of a component within a frame;</li>
<li>Select all text with a specific style (weight, family, size) within a frame;</li>
<li>Select all layers with the same name on a page.</li>
</ul>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7c80d490-516d-46be-ab78-ba8fe7ce72a4/similayer-example-a.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			
			
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7c80d490-516d-46be-ab78-ba8fe7ce72a4/similayer-example-a.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7c80d490-516d-46be-ab78-ba8fe7ce72a4/similayer-example-a.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7c80d490-516d-46be-ab78-ba8fe7ce72a4/similayer-example-a.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7c80d490-516d-46be-ab78-ba8fe7ce72a4/similayer-example-a.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7c80d490-516d-46be-ab78-ba8fe7ce72a4/similayer-example-a.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7c80d490-516d-46be-ab78-ba8fe7ce72a4/similayer-example-a.png"
			
			sizes="100vw"
			alt="Example of selecting all instances of a component within a frame with Similayer"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Select all instances of a component within a frame with Similayer. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7c80d490-516d-46be-ab78-ba8fe7ce72a4/similayer-example-a.png'>Large preview</a>)
    </figcaption>
  
</figure>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7febc23f-20b3-4243-bc90-4765ff1622d6/similayer-example-b.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			
			
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7febc23f-20b3-4243-bc90-4765ff1622d6/similayer-example-b.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7febc23f-20b3-4243-bc90-4765ff1622d6/similayer-example-b.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7febc23f-20b3-4243-bc90-4765ff1622d6/similayer-example-b.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7febc23f-20b3-4243-bc90-4765ff1622d6/similayer-example-b.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7febc23f-20b3-4243-bc90-4765ff1622d6/similayer-example-b.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7febc23f-20b3-4243-bc90-4765ff1622d6/similayer-example-b.png"
			
			sizes="100vw"
			alt="Example of select all text with a specific style (weight, family, size) within a frame with Similayer"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Select all text with a specific style (weight, family, size) within a frame with Similayer. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7febc23f-20b3-4243-bc90-4765ff1622d6/similayer-example-b.png'>Large preview</a>)
    </figcaption>
  
</figure>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3bd93c29-2588-4f27-8a9e-84e95f6151c7/similayer-example-c.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			
			
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3bd93c29-2588-4f27-8a9e-84e95f6151c7/similayer-example-c.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3bd93c29-2588-4f27-8a9e-84e95f6151c7/similayer-example-c.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3bd93c29-2588-4f27-8a9e-84e95f6151c7/similayer-example-c.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3bd93c29-2588-4f27-8a9e-84e95f6151c7/similayer-example-c.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3bd93c29-2588-4f27-8a9e-84e95f6151c7/similayer-example-c.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3bd93c29-2588-4f27-8a9e-84e95f6151c7/similayer-example-c.png"
			
			sizes="100vw"
			alt="Example of select all layers with the same name on a page"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Select all layers with the same name on a page. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3bd93c29-2588-4f27-8a9e-84e95f6151c7/similayer-example-c.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>This is just a glimpse of what the plugin can do — the options are almost limitless! Similayer can select any elements with definitive granularity. Because of this I usually select elements with Similayer before running any of the next three plugins.</p>

<h3 id="tip">Tip</h3>

<p>To <strong>select elements in multiple top-level frames</strong> (e.g., let’s say there are five designs on a page but you only want to select elements in Design One and Design Two), temporarily add a frame around all the top-level frames you want to select elements in. Then use the “Limit selection within root frame” option to select elements from those specific screens/frames but not the entire page.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5f43c080-ed69-40d7-a126-53b15010ce7c/similayer-example-d.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			
			
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5f43c080-ed69-40d7-a126-53b15010ce7c/similayer-example-d.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5f43c080-ed69-40d7-a126-53b15010ce7c/similayer-example-d.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5f43c080-ed69-40d7-a126-53b15010ce7c/similayer-example-d.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5f43c080-ed69-40d7-a126-53b15010ce7c/similayer-example-d.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5f43c080-ed69-40d7-a126-53b15010ce7c/similayer-example-d.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5f43c080-ed69-40d7-a126-53b15010ce7c/similayer-example-d.png"
			
			sizes="100vw"
			alt="Example of selecting elements from within multiple root frames with Similayer"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Select elements from within multiple root frames with Similayer. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5f43c080-ed69-40d7-a126-53b15010ce7c/similayer-example-d.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h2 id="2-content-reel">2. Content Reel</h2>

<h3 id="when-to-use-it-1">When To Use It</h3>

<p>Use Content Reel any time you need to generate more than a couple of items of placeholder content. It could be addresses, phone numbers, names, order numbers, profile images, or almost any type of text string or image.</p>

<ul>
<li><a href="https://www.figma.com/community/plugin/731627216655469013/Content-Reel">View in Figma →</a></li>
</ul>

<h3 id="highlights-1">Highlights</h3>

<ul>
<li>Quickly generate structured placeholder content.</li>
<li>Supports images and text strings.</li>
<li>Create your own content sets for personal use or publish them publicly.</li>
</ul>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8b6f47fe-492a-4a61-a58a-cf8662f88e09/content-reel-markup.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			
			
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8b6f47fe-492a-4a61-a58a-cf8662f88e09/content-reel-markup.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8b6f47fe-492a-4a61-a58a-cf8662f88e09/content-reel-markup.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8b6f47fe-492a-4a61-a58a-cf8662f88e09/content-reel-markup.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8b6f47fe-492a-4a61-a58a-cf8662f88e09/content-reel-markup.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8b6f47fe-492a-4a61-a58a-cf8662f88e09/content-reel-markup.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8b6f47fe-492a-4a61-a58a-cf8662f88e09/content-reel-markup.png"
			
			sizes="100vw"
			alt="Content Reel plugin UI"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Quickly generate placeholder text and images for designs with Content Reel. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8b6f47fe-492a-4a61-a58a-cf8662f88e09/content-reel-markup.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h3 id="the-details-1">The Details</h3>

<p>If you are tired of making up names, avatars, phone numbers, emails, position titles, addresses, or any other type of text to make your designs look realistic, this plugin is for you. Content Reel inserts structured placeholder content from data sets into designs. A great use case for this plugin is filling out tables with realistic content. Using (555) 555-5555 down an entire column will cut it when you’re in a pinch but doesn’t look very realistic. Aside from creating visually realistic designs, this plugin can help test the constraints of a design by using realistically looking “dummy” content.</p>

<p>When opening the plugin for the first time, different content sets will be available on your “home” page that will cover most of the basic use cases. For more unique cases or customized content, try searching the Content Library for more existing options or creating your own content sets!</p>

<p>As a practical example, I recently helped design a conference room booking app. For that project, I ended up creating a set of Amenities (WiFi, TV, outlets, coffee maker, and so on) to insert at random into different room listings.</p>

<p>Image sets can also be useful for cases such as avatars. The plugin also provides a default avatar set which works great but I ended up adding a custom set of more “professional” images for avatars. (<a href="https://unsplash.com/collections/2186669/provisional-personas">Unsplash.com</a> is a great website where you can find fitting photos for this purpose.)</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/08fd77a8-8dc1-4194-b1f6-90bf405758f4/content-reel-custom-content.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			
			
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/08fd77a8-8dc1-4194-b1f6-90bf405758f4/content-reel-custom-content.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/08fd77a8-8dc1-4194-b1f6-90bf405758f4/content-reel-custom-content.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/08fd77a8-8dc1-4194-b1f6-90bf405758f4/content-reel-custom-content.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/08fd77a8-8dc1-4194-b1f6-90bf405758f4/content-reel-custom-content.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/08fd77a8-8dc1-4194-b1f6-90bf405758f4/content-reel-custom-content.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/08fd77a8-8dc1-4194-b1f6-90bf405758f4/content-reel-custom-content.png"
			
			sizes="100vw"
			alt="Example of creating custom content in Content Reel."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Create custom content in Content Reel. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/08fd77a8-8dc1-4194-b1f6-90bf405758f4/content-reel-custom-content.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h3 id="tip-1">Tip</h3>

<p>When you create your own content set in the plugin, there is an option to keep it private for personal use or publish them directly in the plugin for your team or other users to find and utilize later.</p>

<h2 id="3-change-text">3. Change Text</h2>

<h3 id="when-to-use-it-2">When To Use It</h3>

<p>Use Change Text anytime you need to find &amp; replace a word in multiple places or update multiple text layers simultaneously.</p>

<ul>
<li><a href="https://www.figma.com/community/plugin/735148445325474400/Change-Text">View in Figma →</a></li>
</ul>

<div class="partners__lead-place"></div>

<h3 id="highlights-2">Highlights</h3>

<ul>
<li>Easily find and replace existing text from the current selection.</li>
<li>Use $&amp; to insert current text like the Figma native batch rename tool.</li>
<li>Plugin only updates selected text layers (both a pro &amp; con, depending on the use case).</li>
</ul>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8d7ed237-b598-441c-8918-1043aaf3f0fc/change-text-markup.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			
			
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8d7ed237-b598-441c-8918-1043aaf3f0fc/change-text-markup.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8d7ed237-b598-441c-8918-1043aaf3f0fc/change-text-markup.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8d7ed237-b598-441c-8918-1043aaf3f0fc/change-text-markup.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8d7ed237-b598-441c-8918-1043aaf3f0fc/change-text-markup.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8d7ed237-b598-441c-8918-1043aaf3f0fc/change-text-markup.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8d7ed237-b598-441c-8918-1043aaf3f0fc/change-text-markup.png"
			
			sizes="100vw"
			alt="Change Text plugin UI"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Find and replace text with Change Text. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8d7ed237-b598-441c-8918-1043aaf3f0fc/change-text-markup.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h3 id="the-details-2">The Details</h3>

<p>This plugin makes fixing a <del>typeo</del> typo that was copy/pasted 25 times into a 5-second task. It’s similar to Figma’s <a href="https://help.figma.com/hc/en-us/articles/360039958934-Rename-Layers">native batch rename tool</a> but for text! You can find and replace words or strings of text in multiple text layers simultaneously.</p>

<p>I love this plugin for client work. It’s a quick and thorough way to find and replace a company’s name in all existing designs or change everywhere a button label that says <em>“Create”</em> with a button label that says <em>“Add”</em>, based on a client’s request. There are so many more cases where this is useful though! The more you have a solid component architecture the less this plugin is needed but we all know how difficult it is to create components from the get-go.</p>

<h3 id="tip-2">Tip</h3>

<p>First, use Similayer to quickly select all the text layers you want to change. Then, use Change Text to edit the text. If the text characters in all the target layers are all the same (e.g., all are “typeo”) you can easily select all the elements using the “Text characters” option in Similayer.</p>

<h2 id="4-lorem-ipsum">4. Lorem Ipsum</h2>

<h3 id="when-to-use-it-3">When To Use It</h3>

<p>Use Lorem ipsum any time you need dummy text. Whether you need a quick 10-minute placeholder text or are waiting for a client to finish the final copy, lorem ipsum text is always handy.</p>

<ul>
<li><a href="https://www.figma.com/community/plugin/736000994034548392/Lorem-ipsum">View in Figma →</a></li>
</ul>

<h3 id="highlights-3">Highlights</h3>

<ul>
<li>Generate multiple text boxes at the same time.</li>
<li>Content doesn’t have to begin with “Lorem ipsum” and will generate unique content for each instance.</li>
<li>Auto-generate fills a text area perfectly based on its size.</li>
</ul>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ef0f3570-dcdb-4f13-b486-74e443f8eb1b/lorem-ipsum-markup.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			
			
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ef0f3570-dcdb-4f13-b486-74e443f8eb1b/lorem-ipsum-markup.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ef0f3570-dcdb-4f13-b486-74e443f8eb1b/lorem-ipsum-markup.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ef0f3570-dcdb-4f13-b486-74e443f8eb1b/lorem-ipsum-markup.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ef0f3570-dcdb-4f13-b486-74e443f8eb1b/lorem-ipsum-markup.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ef0f3570-dcdb-4f13-b486-74e443f8eb1b/lorem-ipsum-markup.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ef0f3570-dcdb-4f13-b486-74e443f8eb1b/lorem-ipsum-markup.png"
			
			sizes="100vw"
			alt="Lorem ipsum plugin UI"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Generate placeholder text with Lorem ipsum. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ef0f3570-dcdb-4f13-b486-74e443f8eb1b/lorem-ipsum-markup.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h3 id="the-details-3">The Details</h3>

<p>Lorem ipsum is one of those not-so-flashy but really vital plugins. I think every designer can probably read Latin these days without realizing it! The entire purpose of this plugin is to save you time by not having to write “real” placeholder content. All the more reason to only spend a couple of seconds generating the dummy text.</p>

<p>There are plenty of Figma plugins specifically for generating dummy content with various settings. If you don’t use this one specifically, make sure to grab one of the <a href="https://www.figma.com/community/explore?tab=plugins">other 5+ options</a> (just search “lorem ipsum). With this plugin, <a href="https://www.figma.com/community/plugin/736000994034548392/Lorem-ipsum">@Dave</a> found the perfect balance of flexibility and simplicity with the ability to quickly choose the number of words, sentences, or paragraphs to generate. The added ability to automatically fill a text layer with the perfect fit of content sets this plugin apart. Especially when working with auto layout components that will resize based on content (when you don’t necessarily want them to).</p>

<h3 id="tip-3">Tip</h3>

<p>Use the auto-generate option to perfectly fill any text layer with the dummy text when you don’t want layers to resize. For more abstract dummy text, try using a font family like <a href="https://github.com/christiannaths/Redacted-Font">Redacted</a> (<a href="https://github.com/christiannaths/Redacted-Font/archive/old-sources.zip">download</a>) in combination with the Lorem ipsum plugin.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/cf0ede04-3c31-471c-96d3-8c126f29a6cc/lorem-ipsum-with-redacted.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			
			
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/cf0ede04-3c31-471c-96d3-8c126f29a6cc/lorem-ipsum-with-redacted.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/cf0ede04-3c31-471c-96d3-8c126f29a6cc/lorem-ipsum-with-redacted.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/cf0ede04-3c31-471c-96d3-8c126f29a6cc/lorem-ipsum-with-redacted.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/cf0ede04-3c31-471c-96d3-8c126f29a6cc/lorem-ipsum-with-redacted.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/cf0ede04-3c31-471c-96d3-8c126f29a6cc/lorem-ipsum-with-redacted.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/cf0ede04-3c31-471c-96d3-8c126f29a6cc/lorem-ipsum-with-redacted.png"
			
			sizes="100vw"
			alt="Example of Redacted font generated text"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Use <a href='https://github.com/christiannaths/Redacted-Font'>Redacted font</a> on generated text for a more abstract approach to placeholder content. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/cf0ede04-3c31-471c-96d3-8c126f29a6cc/lorem-ipsum-with-redacted.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h2 id="5-design-system-organizer">5. Design System Organizer</h2>

<h3 id="when-to-use-it-4">When To Use It</h3>

<p>Use Design System Organizer if you are creating a new component library! It can also be helpful with customizing copied component libraries or in files with a large number of local styles or components.</p>

<ul>
<li><a href="https://www.figma.com/community/plugin/802579985985331070/Design-System-Organizer">View in Figma →</a></li>
</ul>

<h3 id="highlights-4">Highlights</h3>

<ul>
<li>Rename, delete, reorganize components in bulk.</li>
<li>Works with all styles (text, color, fill, effect, grid).</li>
<li>Style names with multiple /’s are sorted into subfolders in the plugin.</li>
</ul>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/aa078217-039f-4ece-bb31-8aff2b5d867f/design-system-organizer-markup.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			
			
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/aa078217-039f-4ece-bb31-8aff2b5d867f/design-system-organizer-markup.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/aa078217-039f-4ece-bb31-8aff2b5d867f/design-system-organizer-markup.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/aa078217-039f-4ece-bb31-8aff2b5d867f/design-system-organizer-markup.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/aa078217-039f-4ece-bb31-8aff2b5d867f/design-system-organizer-markup.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/aa078217-039f-4ece-bb31-8aff2b5d867f/design-system-organizer-markup.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/aa078217-039f-4ece-bb31-8aff2b5d867f/design-system-organizer-markup.png"
			
			sizes="100vw"
			alt="Design System Organizer UI"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Organize components and styles in bulk with Design System Organizer. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/aa078217-039f-4ece-bb31-8aff2b5d867f/design-system-organizer-markup.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h3 id="the-details-4">The Details</h3>

<p>This is one of those plugins that I don’t use every day (you probably won’t either) but it is still such a massive time saver that it needs to be included in the list. Depending on the task or file, this plugin can save hours of time that would be otherwise spent renaming and organizing. If you work with clients or new design systems often, this plugin will help you stay organized. The plugin costs $2.99 for a lifetime license (but there is a 30 day free trial for each file the plugin is used in). Even if you only set up a design system once it is well worth the cost, as the plugin will help you reorganize and clean up things as you go.</p>

<p>One great use for the Design System Organizer is to clean up or rename components in a library that you cloned from the <a href="https://www.figma.com/community/explore">Figma Community</a>. Most community files are already well organized and easy to use out-of-the-box. Sometimes, if you’re like me,  it can be more difficult to understand how new components are named than to just rename and re-categorize them in a method you are already familiar with.</p>

<h3 id="tip-4">Tip</h3>

<p>This is a great plugin to use if you just need to delete styles in bulk. Unlike components, Figma doesn’t allow multi-selecting styles so deleting more than a few is time-consuming. Use this plugin to multi-select and remove styles from a file.</p>

<h2 id="6-bonus-plugin-shortcuts">6. Bonus: Plugin Shortcuts</h2>

<p>No matter which plugins you use or how often you use them, opening a plugin can be cumbersome. Plenty of right-clicks, nested dropdown menus, no thanks. Here are a couple of shortcuts to open Figma plugins.</p>

<h3 id="open-a-plugin-fast">Open A Plugin Fast</h3>

<p>Use <kbd>Cmd + /</kbd> (or <kbd>Ctrl + /</kbd> on Windows) to open the Search menu. Quickly search a plugin by name and open it with <kbd>Enter</kbd>.</p>

<h3 id="open-a-plugin-even-faster">Open A Plugin Even Faster</h3>

<p>Use <kbd>Cmd + Opt + P</kbd> (or <kbd>Ctrl + Alt + P</kbd> on Windows) to reopen the last used plugin. This is especially nice if you use the same plugin often (for me this shortcut will almost always open Similayer).</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c2e3571b-28e6-4c49-a8ac-2db6dd03bc50/shortcuts.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			
			
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c2e3571b-28e6-4c49-a8ac-2db6dd03bc50/shortcuts.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c2e3571b-28e6-4c49-a8ac-2db6dd03bc50/shortcuts.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c2e3571b-28e6-4c49-a8ac-2db6dd03bc50/shortcuts.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c2e3571b-28e6-4c49-a8ac-2db6dd03bc50/shortcuts.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c2e3571b-28e6-4c49-a8ac-2db6dd03bc50/shortcuts.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c2e3571b-28e6-4c49-a8ac-2db6dd03bc50/shortcuts.png"
			
			sizes="100vw"
			alt="Shortcuts to open plugins."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Use keyboard shortcuts to quickly open plugins. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c2e3571b-28e6-4c49-a8ac-2db6dd03bc50/shortcuts.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h3 id="open-a-plugin-the-fastest">Open A Plugin The Fastest</h3>

<p>On a Mac, it’s easy to create custom keyboard shortcut(s) for the Figma plugin(s) that you use daily.</p>

<p><strong>Note</strong>: <em>There is probably a program for Windows that will allow you to achieve something similar, but, as I am a Mac user, I won’t be able to help you with that.</em></p>

<p>The following method can also be used for any menu item that you regularly use or for menu items with existing shortcuts that are difficult to remember. Here’s how to do it:</p>

<ol>
<li>Navigate to System Preferences → Keyboard → Shortcuts → App Shortcuts.</li>
<li>Click the “+” at the bottom left of the list to create a new shortcut.</li>
<li>Select Figma from the Applications dropdown.</li>
<li>Add the name of the plugin or menu item exactly as it appears in Figma (e.g. Similayer).</li>
<li>Create a keyboard shortcut and click “Add”.</li>
<li>Run the plugin in Figma with your custom shortcut!</li>
</ol>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/feca4c53-490a-4943-a4b4-4535594b9350/custom-keyboard-shortcuts.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			
			
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/feca4c53-490a-4943-a4b4-4535594b9350/custom-keyboard-shortcuts.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/feca4c53-490a-4943-a4b4-4535594b9350/custom-keyboard-shortcuts.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/feca4c53-490a-4943-a4b4-4535594b9350/custom-keyboard-shortcuts.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/feca4c53-490a-4943-a4b4-4535594b9350/custom-keyboard-shortcuts.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/feca4c53-490a-4943-a4b4-4535594b9350/custom-keyboard-shortcuts.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/feca4c53-490a-4943-a4b4-4535594b9350/custom-keyboard-shortcuts.png"
			
			sizes="100vw"
			alt="Example of a custom keyboard shortcut for a Figma plugin."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Create custom keyboard shortcuts for Figma plugins. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/feca4c53-490a-4943-a4b4-4535594b9350/custom-keyboard-shortcuts.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h2 id="conclusion">Conclusion</h2>

<p>Figma has added some amazing native functionality lately to make repetitive actions less repetitive. At the <a href="https://config.figma.com/">Config Europe</a> event they announced more <a href="https://www.figma.com/blog/config-europe-2020-new-feature-announcements/">features releasing in 2020</a> that will save designers significant effort but plugins still fill in the gap where native features fall short. There are countless useful and fun plugins available in the Figma Community! If you invest a bit of time learning to use these five (and any other workflow-related plugins), your Figma productivity will benefit from it.</p>

<p>Make sure to also browse the <a href="https://www.figma.com/community/explore">Figma Community Files</a> if you haven’t already! There are new resources every day to jumpstart your next project, improve processes, or be inspired by.</p>

<p>Until next time, meet me in the <a href="https://www.figma.com/@abelhancock">Figma community</a>.</p>

<p>Happy designing!</p>

<div class="partners__lead-place"></div>

<h3 id="further-reading">Further Reading</h3>

<ul>
<li><a href="https://www.smashingmagazine.com/2024/09/creating-custom-lottie-animations-svgator/">Creating Custom Lottie Animations With SVGator</a></li>
<li><a href="https://www.smashingmagazine.com/2024/06/what-are-css-container-style-queries-good-for/">What Are CSS Container Style Queries Good For?</a></li>
<li><a href="https://www.smashingmagazine.com/2024/08/how-defend-your-design-process/">How To Defend Your Design Process</a></li>
<li><a href="https://www.smashingmagazine.com/2020/12/wordpress-eleventy-static-site-generator/">How To Migrate From WordPress To The Eleventy Static Site Generator</a></li>
</ul>

<div class="signature">
  <img src="https://www.smashingmagazine.com/images/logo/logo--red.png" alt="Smashing Editorial" width="35" height="46" loading="lazy" decoding="async" />
  <span>(mb, ra, yk, il, mrn)</span>
</div>


              </article>
            </body>
          </html>
        ]]></content:encoded></item><item><author>Jurn van Wissen</author><title>Everything Developers Need To Know About Figma</title><link>https://www.smashingmagazine.com/2020/09/figma-developers-guide/</link><pubDate>Wed, 02 Sep 2020 11:00:00 +0000</pubDate><guid>https://www.smashingmagazine.com/2020/09/figma-developers-guide/</guid><description>Figma is a design tool that is rapidly gaining popularity and becoming more common in companies around the world. Unlike most design software, Figma is free and browser-based so developers can easily access the full design files making the developer handoff process significantly smoother. With article, Jurn van Wissen teaches developers who have nothing but a basic understanding of design tools everything they need to know to work with Figma.</description><content:encoded><![CDATA[
          <html>
            <head>
              <meta charset="utf-8">
              <link rel="canonical" href="https://www.smashingmagazine.com/2020/09/figma-developers-guide/" />
              <title>Everything Developers Need To Know About Figma</title>
            </head>
            <body>
              <article>
                <header>
                  <h1>Everything Developers Need To Know About Figma</h1>
                  
                    
                    <address>Jurn van Wissen</address>
                  
                  <time datetime="2020-09-02T11:00:00&#43;00:00" class="op-published">2020-09-02T11:00:00+00:00</time>
                  <time datetime="2020-09-02T11:00:00&#43;00:00" class="op-modified">2026-02-09T03:03:08+00:00</time>
                </header>
                
                

<p>If you aren’t using it yet the name Figma is surely a name that you’ve heard more and more over the last few years.</p>

<p>Figma is a relatively new design tool that is browser-based. This means you don’t need to install it locally or buy expensive licenses to give team members access to design files. This has made design more accessible than ever and that’s why many developers now find themselves needing to learn how to work with design tools.</p>

<p>Since many developers don’t have a lot of experience playing around in design tools we’ll cover all the basics developers need to know about so you can confidently navigate around Figma and extract any information you might need when working with the designs sent to you by a designer.</p>

<p>I’ll also cover some specific Figma features that make it easier for developers such as providing CSS information about elements used within the design.</p>

<div data-audience="non-subscriber" data-remove="true" class="feature-panel-container">

<aside class="feature-panel" style="">
<div class="feature-panel-left-col">

<div class="feature-panel-description"><p>Roll up your sleeves and <strong>boost your UX skills</strong>! Meet <strong><a data-instant href="https://smart-interface-design-patterns.com/">Smart Interface Design Patterns</a></strong>&nbsp;🍣, a 10h video library by Vitaly Friedman. <strong>100s of real-life examples</strong> and live UX training. <a href="https://www.youtube.com/watch?v=3mwZztmGgbE">Free preview</a>.</p>
<a data-instant href="https://smart-interface-design-patterns.com/" class="btn btn--green btn--large" style="">Jump to table of contents&nbsp;↬</a></div>
</div>
<div class="feature-panel-right-col"><a data-instant href="https://smart-interface-design-patterns.com/" class="feature-panel-image-link">
<div class="feature-panel-image"><picture><source type="image/avif" srcSet="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3155f571-450d-42f9-81b4-494aa9b52841/video-course-smart-interface-design-patterns-vitaly-friedman.avif" />
<img
    loading="lazy"
    decoding="async"
    class="feature-panel-image-img"
    src="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8c98e7f9-8e62-4c43-b833-fc6bf9fea0a9/video-course-smart-interface-design-patterns-vitaly-friedman.jpg"
    alt="Feature Panel"
    width="690"
    height="790"
/>
</picture>
</div>
</a>
</div>
</aside>
</div>

<h3 id="a-quick-note-about-shortcuts">A Quick Note About Shortcuts</h3>

<p>Most shortcuts are written for both Windows and Mac, where the <kbd>Ctrl</kbd> key on Windows corresponds to the <kbd>Cmd</kbd> key on the Mac, and <kbd>Alt</kbd> is used for both <kbd>Alt</kbd> (Windows) and <kbd>Option/Alt</kbd> (Mac).</p>

<p>For example, <kbd>Ctrl/Cmd + Alt + C</kbd> is <kbd>Ctrl + Alt + C</kbd> on Windows and <kbd>Cmd + Alt/Option + C</kbd> on the Mac.</p>

<h2 id="developer-handoff">Developer Handoff</h2>

<p>To understand the hype around Figma and why you suddenly find yourself needing to learn how design tools work as a developer, it’s helpful to look back on the developer handoff process before Figma was around as it has changed significantly.</p>

<p>Design teams used to send an email to the development team with dozens of attachments containing static images of the design, exported assets, and even word documents with the page copy. Developers usually didn’t have access to the full design files as licenses for design software were expensive and not strictly necessary. Communication and feedback were scattered across email, project management tools, and meeting notes. Everyone was struggling with keeping track of changes to the design; every time the design was updated, it needed to be sent to everyone involved — yet again.</p>

<p>As design tools modernized, this process got more streamlined. Designers would often use separate tools like Zeplin or Invision to handoff the designs to developers. Developers now had better access to the designs and had more tools available to extract information about typography, colors, and measurements. Although it was easier to find the latest version of a design for everyone, designers needed to work in separate tools and keep them in sync. A big improvement but still not perfect.</p>

<p>Figma is a design tool that is rapidly gaining in popularity and shakes up the design handoff process once again. Figma is browser-based so everyone can use it regardless of their operating system and without installing anything. It’s also completely cloud-based so everyone is always looking at the latest version of the design and has built-in collaboration tools making collaborating and communicating easier than ever.</p>

<p>If you want to follow along with this article (or just play around with Figma), I’ll be using this file to explain everything in this tutorial:</p>

<ul>
<li><a href="https://www.figma.com/community/file/827488004796756851">Figma startup landing page dark</a> (download)</li>
</ul>

<h2 id="the-basics">The Basics</h2>

<p>When you are added as a collaborator on a Figma design you can choose to open it in the browser or you can <a href="https://www.figma.com/downloads/">download the desktop app</a> (available on Windows and macOS). The desktop app is not a native app but a cross-platform electron app like Slack and Visual Studio Code. The functionality of the browser and desktop versions is largely the same. The desktop app does have built-in support for using local fonts whereas the browser version requires installing the Figma Font Helper before you can use local fonts.</p>

<p>Figma’s interface is split into three major parts. In the middle, you’ll find a big canvas where all the designs are located. On the left side, there is a sidebar that contains the layers, assets, and pages of a file. The right toolbar contains all information about elements in the file.</p>

<p>A file can have multiple pages and every page has one canvas. Designers often use pages to separate and organize different parts of the file with separate pages for the design system, icons, or other file assets.</p>

<p>When opening up a new file for the first time, make sure to familiarize yourself with the different pages within the file. If the designer you are working with has made a separate page for all colors, typography, and icons it can save you time while building out the design.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/bc464a52-92e4-4e3d-a224-0c5f9f8626fc/figma-interface.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			
			
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/bc464a52-92e4-4e3d-a224-0c5f9f8626fc/figma-interface.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/bc464a52-92e4-4e3d-a224-0c5f9f8626fc/figma-interface.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/bc464a52-92e4-4e3d-a224-0c5f9f8626fc/figma-interface.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/bc464a52-92e4-4e3d-a224-0c5f9f8626fc/figma-interface.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/bc464a52-92e4-4e3d-a224-0c5f9f8626fc/figma-interface.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/bc464a52-92e4-4e3d-a224-0c5f9f8626fc/figma-interface.png"
			
			sizes="100vw"
			alt="Interface of Figma"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Figma’s interface. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/bc464a52-92e4-4e3d-a224-0c5f9f8626fc/figma-interface.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h2 id="navigating-figma">Navigating Figma</h2>

<p>Before we get to the good stuff, it’s important that you can quickly navigate around in Figma so you can work more efficiently.</p>

<p>When you open a file you’ll start on the largest zoom level that fits all the frames in the visible area.</p>

<ul>
<li>You can zoom in or out by holding <kbd>Cmd ⌘</kbd> and scrolling up/down or by pressing the <kbd>+</kbd> and <kbd>-</kbd> keys.</li>
<li>If you want to scroll horizontally on the canvas you hold the spacebar and drag with your mouse.</li>
<li>You can zoom in quickly on a single frame or element by selecting it and pressing <kbd>Shift</kbd> + <kbd>2</kbd>.</li>
<li>Quickly return to where all elements fit in the canvas by pressing <kbd>Shift</kbd> + <kbd>1</kbd>.</li>
</ul>

<p>Don’t worry too much about remembering these shortcuts for now, just know that they are available and you can always view these and other available shortcuts by pressing <kbd>Cmd</kbd> + <kbd>Shift</kbd> + <kbd>?</kbd>.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e91b57b7-dadf-4f5e-8cce-fdadd634a357/shortcuts-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			
			
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e91b57b7-dadf-4f5e-8cce-fdadd634a357/shortcuts-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e91b57b7-dadf-4f5e-8cce-fdadd634a357/shortcuts-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e91b57b7-dadf-4f5e-8cce-fdadd634a357/shortcuts-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e91b57b7-dadf-4f5e-8cce-fdadd634a357/shortcuts-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e91b57b7-dadf-4f5e-8cce-fdadd634a357/shortcuts-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e91b57b7-dadf-4f5e-8cce-fdadd634a357/shortcuts-figma.png"
			
			sizes="100vw"
			alt="available shortcuts in Figma"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e91b57b7-dadf-4f5e-8cce-fdadd634a357/shortcuts-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Once you have used a shortcut it will be colored blue so you can easily see which ones you still need to learn.</p>

<h2 id="project-styles">Project Styles</h2>

<p>When you’re opening a brand new project it’s helpful to set up all the basic styles first. Figma displays all the project styles in the right sidebar. Here you can easily find all the typography, colors, grids, and other styles used in the design.</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/622087b6-9284-45c6-9fba-23488aad9c61/project-styles-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			
			
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/622087b6-9284-45c6-9fba-23488aad9c61/project-styles-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/622087b6-9284-45c6-9fba-23488aad9c61/project-styles-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/622087b6-9284-45c6-9fba-23488aad9c61/project-styles-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/622087b6-9284-45c6-9fba-23488aad9c61/project-styles-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/622087b6-9284-45c6-9fba-23488aad9c61/project-styles-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/622087b6-9284-45c6-9fba-23488aad9c61/project-styles-figma.png"
			
			sizes="100vw"
			alt=""
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/622087b6-9284-45c6-9fba-23488aad9c61/project-styles-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Note that the project styles will only display if no element is selected. If you want to cancel your selection and view the project styles, simply click somewhere in the canvas or use the <kbd>Esc</kbd> key.</p>

<p>You can use this information to set up your layout, variables, and fonts in CSS. Simply click on the edit icon next to the style element to view all information about that style.</p>

<div class="partners__lead-place"></div>

<h2 id="selecting-elements">Selecting Elements</h2>

<p>Once you’ve set up the basics for your project it’s time to dive into the design. The most important thing in deconstructing a design is selecting elements and getting information about dimensions and styles from it.</p>

<p>Selecting a layer isn’t as simple as clicking on an element as most designs have multiple levels of nesting for elements. Clicking an element only selects the top-level element.</p>

<p>To select a specific layer you need to hold Command <code>⌘</code> while clicking or you can right-click an element to open a menu of all the nested layers and select the correct one.</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/a4eee538-f084-42b5-83e8-4a4d6dbe13ce/select-layer-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			
			
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/a4eee538-f084-42b5-83e8-4a4d6dbe13ce/select-layer-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/a4eee538-f084-42b5-83e8-4a4d6dbe13ce/select-layer-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/a4eee538-f084-42b5-83e8-4a4d6dbe13ce/select-layer-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/a4eee538-f084-42b5-83e8-4a4d6dbe13ce/select-layer-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/a4eee538-f084-42b5-83e8-4a4d6dbe13ce/select-layer-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/a4eee538-f084-42b5-83e8-4a4d6dbe13ce/select-layer-figma.png"
			
			sizes="100vw"
			alt="Secondary menu to select a layer"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/a4eee538-f084-42b5-83e8-4a4d6dbe13ce/select-layer-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>If you double click an element, it will select one nesting level lower every time you double click. This is a great way to drill down into an element until you get to the desired selection.</p>

<p><em>There are many more ways to select and navigate layers, this article just covers the basics that are used 80% of the time. Figma’s documentation teaches more ways <a href="https://help.figma.com/hc/en-us/articles/360040449873-Select-layers-and-objects">to select and navigate layers</a>.</em></p>

<p>Once you select an element, you can click the <strong>Code</strong> tab in the right sidebar to display all the CSS information about that element.</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1feae473-0c3c-42d4-abdf-a5a3b795588c/code-tab-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			
			
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1feae473-0c3c-42d4-abdf-a5a3b795588c/code-tab-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1feae473-0c3c-42d4-abdf-a5a3b795588c/code-tab-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1feae473-0c3c-42d4-abdf-a5a3b795588c/code-tab-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1feae473-0c3c-42d4-abdf-a5a3b795588c/code-tab-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1feae473-0c3c-42d4-abdf-a5a3b795588c/code-tab-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1feae473-0c3c-42d4-abdf-a5a3b795588c/code-tab-figma.png"
			
			sizes="100vw"
			alt="code tab showing CSS properties of selected element"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1feae473-0c3c-42d4-abdf-a5a3b795588c/code-tab-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>It’s important to note that the CSS is automatically generated and is not perfect, especially for positioning elements. Don’t copy all CSS 1-to-1 to your project but instead use it as a guide and a quick way to get information about elements.</p>

<h2 id="dimensions-and-measuring">Dimensions And Measuring</h2>

<p>Whenever you want to measure spaces between elements, correctly position elements, or even set the right margin or padding, all you need to do is select the element that you want to measure from, then hold the <kbd>Alt</kbd> and hover your mouse over the element you’d like to measure the distance to.</p>

<p>Figma will mark the distance between elements with a red line and show the distance in pixels. If you want to measure the distance to a specific child element in another group or frame, you can hold the <kbd>Cmd ⌘</kbd> key just like you would when selecting an element to deep select it.</p>

<h2 id="exporting-assets">Exporting Assets</h2>

<p>In the past, designers would often be responsible for exporting all assets as most developers didn’t have design software installed on their system. In Figma, you now have full access to the designs and can export everything yourself.</p>

<h3 id="prepare-for-export">Prepare For Export</h3>

<p>The first thing you need to do if you want to export an asset is that you have to mark it as exportable. You do this by selecting the element you want to export and clicking the plus icon in the right sidebar next to the <strong>Export</strong> heading.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2c85f177-b4bf-4126-a6da-ecc64c30cd81/export-settings-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			
			
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2c85f177-b4bf-4126-a6da-ecc64c30cd81/export-settings-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2c85f177-b4bf-4126-a6da-ecc64c30cd81/export-settings-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2c85f177-b4bf-4126-a6da-ecc64c30cd81/export-settings-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2c85f177-b4bf-4126-a6da-ecc64c30cd81/export-settings-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2c85f177-b4bf-4126-a6da-ecc64c30cd81/export-settings-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2c85f177-b4bf-4126-a6da-ecc64c30cd81/export-settings-figma.png"
			
			sizes="100vw"
			alt="Setting export settings for selected layer"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2c85f177-b4bf-4126-a6da-ecc64c30cd81/export-settings-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Depending on what type of file you are exporting there will be different export settings you can tweak. Images only have a scale multiplier and you can choose the file type (PNG, JPG, SVG or PDF). Figma will use the name of the layer as the file name but you can add a file name suffix. You can then export the selected element using the export button.</p>

<p><strong>Quick tip:</strong> <em>You can also quickly export an asset by right-clicking it, hovering on Copy/paste and copying the image or SVG code. This is useful if you don’t need to have custom export settings and just need a quick copy of a single element.</em></p>

<h3 id="export-all-assets">Export All Assets</h3>

<p>You can export each individual asset by selecting it and clicking the export button but you can also export all assets that are exportable at once.</p>

<p>If you want to export all the assets from the design in one go you can go to the main menu, and click <strong>Export..</strong> under the File menu. You can also use the keyboard shortcut <kbd>Shift</kbd> + <kbd>Cmd</kbd> + <kbd>E</kbd> on MacOS or <kbd>Shift</kbd> + <kbd>Ctrl</kbd> + <kbd>E</kbd> on Windows.</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c56b4370-cfd0-4cf6-b000-308dc25bf018/export-all-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			
			
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c56b4370-cfd0-4cf6-b000-308dc25bf018/export-all-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c56b4370-cfd0-4cf6-b000-308dc25bf018/export-all-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c56b4370-cfd0-4cf6-b000-308dc25bf018/export-all-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c56b4370-cfd0-4cf6-b000-308dc25bf018/export-all-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c56b4370-cfd0-4cf6-b000-308dc25bf018/export-all-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c56b4370-cfd0-4cf6-b000-308dc25bf018/export-all-figma.png"
			
			sizes="70vw"
			alt="Setting export settings for selected layer"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c56b4370-cfd0-4cf6-b000-308dc25bf018/export-all-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>This will display a list of all the items in the file that are marked for export. You can then inspect the dimensions, file type and exclude any files before making the final export. If you hover over the thumbnail of the assets it will display the file name that the asset will have when it’s exported.</p>

<p>If you need to make adjustments, clicking on the thumbnail of an asset will select that element in the canvas where you can easily adjust the export settings.</p>














<figure class="
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e98d12f0-6a0f-48a8-b620-f74a61a24528/export-all-assets-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			
			
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e98d12f0-6a0f-48a8-b620-f74a61a24528/export-all-assets-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e98d12f0-6a0f-48a8-b620-f74a61a24528/export-all-assets-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e98d12f0-6a0f-48a8-b620-f74a61a24528/export-all-assets-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e98d12f0-6a0f-48a8-b620-f74a61a24528/export-all-assets-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e98d12f0-6a0f-48a8-b620-f74a61a24528/export-all-assets-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e98d12f0-6a0f-48a8-b620-f74a61a24528/export-all-assets-figma.png"
			
			sizes="100vw"
			alt="List of all exportable assets"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e98d12f0-6a0f-48a8-b620-f74a61a24528/export-all-assets-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>If you have a lot of exportable assets in a single file, you can use a slash “/” in your layer name to mark it as a group of assets. Figma will then automatically create a folder for that group and export the assets within that group to the subfolder.</p>

<h2 id="user-flow-and-animations">User Flow And Animations</h2>

<p>Figma also supports a <a href="https://blog.jurn.io/figma-animation-examples/">variety of animations</a> for transition between states or pages, for opening modals or menus, for dragging and swiping actions on mobile and much more. You can preview these animations by clicking the play icon in the top right to open Presentation view.</p>

<p>To view the information about an animation, select the <strong>Prototype</strong> tab in the right sidebar and you’ll see the user flow displayed in blue arrows in the canvas.</p>

<p>Clicking on the arrow shows you all the information about that specific animation. Each animation consists of a trigger, an action, and a transition.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/063a4696-1b9a-4cbb-8915-19024c627968/animation-tab-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			
			
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/063a4696-1b9a-4cbb-8915-19024c627968/animation-tab-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/063a4696-1b9a-4cbb-8915-19024c627968/animation-tab-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/063a4696-1b9a-4cbb-8915-19024c627968/animation-tab-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/063a4696-1b9a-4cbb-8915-19024c627968/animation-tab-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/063a4696-1b9a-4cbb-8915-19024c627968/animation-tab-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/063a4696-1b9a-4cbb-8915-19024c627968/animation-tab-figma.png"
			
			sizes="100vw"
			alt="Animation settings tab"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      A simple hamburger menu animation (Source: <a href='https://www.figma.com/community/file/866532393298219995'>figma.com</a>) (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/063a4696-1b9a-4cbb-8915-19024c627968/animation-tab-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>This simple animation opens a hamburger menu. You can see that the hamburger icon has an <strong>On Tap</strong> trigger, once it is triggered it will <strong>Navigate To</strong> the screen where the mobile menu is in an opened state. The transition type is a <strong>Smart Animate</strong> transition which means Figma automatically interpolates between these two states. It does this using an <strong>Ease Out</strong> animation function with a duration of <strong>300ms</strong>.</p>

<p>This information is necessary to exactly replicate the animations in CSS but unlike all other element information, animations can not be found in the Code tab!</p>

<h2 id="communication">Communication</h2>

<p>If anything isn’t clear and you’d like to ask someone else on the project for clarification. All you have to do is click on the chat bubble icon in the top toolbar or hit the <kbd>C</kbd> key to switch to the Comment tool.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ad26699d-eb3a-4d00-8ec3-61a58bd259af/comment-tool-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			
			
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ad26699d-eb3a-4d00-8ec3-61a58bd259af/comment-tool-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ad26699d-eb3a-4d00-8ec3-61a58bd259af/comment-tool-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ad26699d-eb3a-4d00-8ec3-61a58bd259af/comment-tool-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ad26699d-eb3a-4d00-8ec3-61a58bd259af/comment-tool-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ad26699d-eb3a-4d00-8ec3-61a58bd259af/comment-tool-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ad26699d-eb3a-4d00-8ec3-61a58bd259af/comment-tool-figma.png"
			
			sizes="100vw"
			alt="Figma toolbar with comment tool highlighted"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ad26699d-eb3a-4d00-8ec3-61a58bd259af/comment-tool-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>You can now click anywhere in the design and start typing a comment or question about that element. Once you’ve finished writing your comment, you can use the <kbd>V</kbd> key to return to the normal cursor.</p>

<p>Note that not everyone will automatically receive a notification that you left a comment. If you want to be sure someone sees your comment you should mention them using the @ symbol just like on Slack or Twitter.</p>

<p>Every comment is visible to everyone who has access to the design as there are no private comments/chats. Once the issue has been resolved it can be marked as such and the comment will gray out.</p>

<h2 id="conclusion">Conclusion</h2>

<p>We’ve covered a lot of ground so far in Figma and you should be able to navigate around and extract all the information you need from any Figma design file sent your way. Getting information about typography and colors, measuring margins, padding and position of elements, exporting assets and collaborating with other team members.</p>

<p>If you want to learn more about the tool, <a href="https://help.figma.com/hc/en-us">Figma’s documentation</a> is a great place to start or search when you want to learn more about a specific feature.</p>

<div class="partners__lead-place"></div>

<h3 id="further-reading">Further Reading</h3>

<ul>
<li><a href="https://www.smashingmagazine.com/2024/09/big-difference-between-digital-product-and-web-design/">The Big Difference Between Digital Product And Web Design</a></li>
<li><a href="https://www.smashingmagazine.com/2024/04/penpot-css-grid-layout-designing-superpowers/">Penpot’s CSS Grid Layout: Designing With Superpowers</a></li>
<li><a href="https://www.smashingmagazine.com/2024/05/transforming-relationship-between-designers-developers/">Transforming The Relationship Between Designers And Developers</a></li>
<li><a href="https://www.smashingmagazine.com/2023/11/design-to-code-handoff-process-uno-platform-figma/">An Efficient Design-to-Code Handoff Process Using Uno Platform For Figma</a></li>
</ul>

<div class="signature">
  <img src="https://www.smashingmagazine.com/images/logo/logo--red.png" alt="Smashing Editorial" width="35" height="46" loading="lazy" decoding="async" />
  <span>(ra, yk, il, mrn)</span>
</div>


              </article>
            </body>
          </html>
        ]]></content:encoded></item><item><author>Sasha Belichenko</author><title>Creating Tables In Figma</title><link>https://www.smashingmagazine.com/2019/09/creating-tables-in-figma/</link><pubDate>Wed, 25 Sep 2019 10:30:59 +0000</pubDate><guid>https://www.smashingmagazine.com/2019/09/creating-tables-in-figma/</guid><description>This is a detailed guide for those who are struggling with tables in Figma. Today, Sasha Belichenko will show you how to create a table using components, so that later on you could save a lot of time on scalability and edits. Moreover, you’ll be able to easily integrate the table into your design system. To follow along, you will need to have at least some understanding of the basic Figma concepts, its interface, and how to work with Figma components. So, without further ado, let’s dig in!</description><content:encoded><![CDATA[
          <html>
            <head>
              <meta charset="utf-8">
              <link rel="canonical" href="https://www.smashingmagazine.com/2019/09/creating-tables-in-figma/" />
              <title>Creating Tables In Figma</title>
            </head>
            <body>
              <article>
                <header>
                  <h1>Creating Tables In Figma</h1>
                  
                    
                    <address>Sasha Belichenko</address>
                  
                  <time datetime="2019-09-25T10:30:59&#43;00:00" class="op-published">2019-09-25T10:30:59+00:00</time>
                  <time datetime="2019-09-25T10:30:59&#43;00:00" class="op-modified">2026-02-09T03:03:08+00:00</time>
                </header>
                
                

<p>In this tutorial, we will talk about how tables can be created in Figma by using components and Atomic Design methodology. We will also take a look at the basic elements of the table layout and how components can be included in the component library so that they can become part of the design system you are using.</p>

<p>To make it easy for you, I’ve prepared a <a href="#figma-table-mockup-download">mockup example</a> that uses all of the components we need for this tutorial.</p>

<p>To follow along, you will need to have at least some understanding of the basic Figma concepts, its interface, and how to work with Figma components. However, if you’re new to Figma and working with table data, I recommend watching the “<a href="https://www.youtube.com/watch?v=T0kRCTOX0zY">Getting Started</a>” video to help you better understand Figma end-to-end, as well as the article “<a href="https://www.smashingmagazine.com/2019/02/complex-web-tables/">How To Architect A Complex Web Table</a>” that was published not too long ago here on Smashing Magazine.</p>

<p>To simplify the scope of this tutorial, let’s assume that the colors, fonts, and effects already exist as styles in the Figma project you’re about to begin. In terms of Atomic Design, they are <strong>atoms</strong>. (To learn more, the folks at <em>littleBits</em> wrote <a href="https://blog.prototypr.io/creating-atomic-components-in-figma-90c6128d6cbe">a great article on the topic</a>.)</p>

<p>The target audience for this tutorial are designers (UX, UI) who have either already adopted Figma into their workflows or are planning to try Figma in their next design projects but aren’t sure how to get started.</p>

<p>So, without further ado, let’s dig in!</p>

<p><strong>Quick Note</strong>: <em>While writing this article, <a href="https://www.figma.com/blog/introducing-figma-plugins/">Figma introduced plugins</a>. At the time of publishing, there weren’t any good ones for working with tables, but things might change fast. Who knows, maybe this article will actually help an aspiring Figma plugin developer to create a really neat Figma Tables plugin, or at least, I hope it will.</em> 😉</p>

<div data-audience="non-subscriber" data-remove="true" class="feature-panel-container">

<aside class="feature-panel" style="">
<div class="feature-panel-left-col">

<div class="feature-panel-description"><p>Meet <strong><a data-instant href="https://www.smashingconf.com/online-workshops/">Smashing Workshops</a></strong> on <strong>front-end, design &amp; UX</strong>, with practical takeaways, live sessions, <strong>video recordings</strong> and a friendly Q&amp;A. With Brad Frost, Stéph Walter and <a href="https://smashingconf.com/online-workshops/workshops">so many others</a>.</p>
<a data-instant href="smashing-workshops" class="btn btn--green btn--large" style="">Jump to the workshops&nbsp;↬</a></div>
</div>
<div class="feature-panel-right-col"><a data-instant href="smashing-workshops" class="feature-panel-image-link">
<div class="feature-panel-image">
<img
    loading="lazy"
    decoding="async"
    class="feature-panel-image-img"
    src="/images/smashing-cat/cat-scubadiving-panel.svg"
    alt="Feature Panel"
    width="257"
    height="355"
/>

</div>
</a>
</div>
</aside>
</div>

<h2 id="introduction">Introduction</h2>

<p>Imagine the table as an organism. The table cell is then a molecule which is comprised of individual atoms. In design terms, they’re <strong>cell properties</strong>.</p>

<p>So, let’s start with the cell. It has three properties:</p>

<ol>
    <li><a href="#background">Background</a></li>
    <li><a href="#border">Border</a></li>
    <li><a href="#content">Content</a></li>
</ol>

<p>Now we’ll take a closer look at each one of them.</p>

<h2 id="background">Background</h2>

<p>The background will be a separate component in Figma. The size doesn’t really matter since we can stretch the component as we need, but let’s begin with setting the size to 100×36 pixels.</p>

<p>In this component, add a rectangle of the same size as the component itself. It will be the only object inside the component. We need to attach the rectangle’s borders to the component’s borders by using constraints (set constraints to “Left &amp; Right” and “Top &amp; Bottom” at the right panel in the <em>Constraints</em> section), so that the rectangle stretches automatically to the size of the component.</p>

<p><em>If you’d like to see this in action, <a href="https://www.youtube.com/watch?v=rRQAQ1d9q9w">watch this tutorial</a> on how the constraints work in Figma.</em></p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1d9f3aff-354f-4617-baa1-d7bc36380613/1-tables-in-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			
			
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1d9f3aff-354f-4617-baa1-d7bc36380613/1-tables-in-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1d9f3aff-354f-4617-baa1-d7bc36380613/1-tables-in-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1d9f3aff-354f-4617-baa1-d7bc36380613/1-tables-in-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1d9f3aff-354f-4617-baa1-d7bc36380613/1-tables-in-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1d9f3aff-354f-4617-baa1-d7bc36380613/1-tables-in-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1d9f3aff-354f-4617-baa1-d7bc36380613/1-tables-in-figma.png"
			
			sizes="100vw"
			alt="The Background Component"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      The Background Component (the ‘atom’) (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1d9f3aff-354f-4617-baa1-d7bc36380613/1-tables-in-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>The fill color of the rectangle will determine the background color of the cell. Let’s pick the white color for it. I recommend choosing that color from the color styles that are configured at the beginning of the project.</p>

<figure class="break-out"><a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2308ca98-afed-435b-8e82-8cbba004eee9/samplebg.gif"><img loading="lazy" decoding="async" src="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/59a371cc-8aa0-4278-a220-785319f141c5/sample-bg-800w.gif" width="800" height="" alt="Background color" /></a><figcaption>Changing the background color (<a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2308ca98-afed-435b-8e82-8cbba004eee9/samplebg.gif">Large preview</a>)</figcaption></figure>

<h2 id="border">Border</h2>

<p>This one is a bit trickier than the background. You can’t just create one rectangle with a stroke. We may need different kinds of borders: one for the separate cells (with borders around), one for the whole row of cells with only top and bottom borders, or one for the table header that we might want to separate from the rest with a wider line. There are many options.</p>

<p>Border properties:</p>

<ul>
<li>Border line (left, right, top, bottom, or absence of any of them)</li>
<li>Line width</li>
<li>Line color</li>
<li>Line style</li>
</ul>

<p>Each line within the cell border might havea  different width, color, and style. For example, the left one could be a continuous red line, and the top one a dotted grey line.</p>

<p>Let’s create a component with a size of 100×36 pixels (the same as we did before). Inside the component, we need to add 4 lines for each border. Now pay attention to how we are going to do this.</p>

<ol>
<li>Add a line for the <strong>bottom border</strong> with the length of the component width;</li>
<li>Set its position to the bottom border and constraints to stretch horizontally and stick to the bottom border;</li>
<li>For the <strong>top border</strong>, duplicate the line for the bottom border, rotate it by 180 degrees and stick to the top of the component. (Don’t forget to change its constraints to stick to the top and stretch horizontally.);</li>
<li>Next, for the <strong>left border</strong>, simply rotate by -90 degrees and set its position and constraints to be at the left side sticking to the left border and stretching vertically;</li>
<li>Last but not least, you can create the <strong>right border</strong> by rotating it by 90 degrees and setting its position and constraints. Set stroke color and stroke width for each line to gray (select from the color styles) and 1 pixel respectively.</li>
</ol>

<p><strong>Note</strong>: <em>You may be asking yourself why we rotated the line for the bottom border. Well, when you change the stroke width for a line in Figma, it will rise. So we had to set this “rise” direction to the center of the component. Changing the line’s stroke width (in our case it is the border size) won’t expand outside the component (cell).</em></p>

<p>Now we can hide or customize the styles separately for every border in the cell.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/54b7d486-ca47-47a4-bdc4-a088de0b3539/3-tables-in-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			
			
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/54b7d486-ca47-47a4-bdc4-a088de0b3539/3-tables-in-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/54b7d486-ca47-47a4-bdc4-a088de0b3539/3-tables-in-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/54b7d486-ca47-47a4-bdc4-a088de0b3539/3-tables-in-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/54b7d486-ca47-47a4-bdc4-a088de0b3539/3-tables-in-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/54b7d486-ca47-47a4-bdc4-a088de0b3539/3-tables-in-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/54b7d486-ca47-47a4-bdc4-a088de0b3539/3-tables-in-figma.png"
			
			sizes="100vw"
			alt="The Border Component"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      A border component with 1px stroke (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/54b7d486-ca47-47a4-bdc4-a088de0b3539/3-tables-in-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>If your project has several styles for table borders (a few border examples shown below), you should create a separate component for each style. Simply create a new master component as we did before and customize it the way you need.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5ca426bd-c59a-4376-b627-d3f80b6b4e5e/2-tables-in-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			
			
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5ca426bd-c59a-4376-b627-d3f80b6b4e5e/2-tables-in-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5ca426bd-c59a-4376-b627-d3f80b6b4e5e/2-tables-in-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5ca426bd-c59a-4376-b627-d3f80b6b4e5e/2-tables-in-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5ca426bd-c59a-4376-b627-d3f80b6b4e5e/2-tables-in-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5ca426bd-c59a-4376-b627-d3f80b6b4e5e/2-tables-in-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5ca426bd-c59a-4376-b627-d3f80b6b4e5e/2-tables-in-figma.png"
			
			sizes="100vw"
			alt="Border Styles"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      A few extra examples of border styles. Note that the white background is not included in the component. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5ca426bd-c59a-4376-b627-d3f80b6b4e5e/2-tables-in-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>The separate stroke component will save up lots of your time and add <em>scalability</em>. If you change the stroke color inside the master component, the whole table will adjust. Same as with the background color above, each individual cell can have its own stroke parameters.</p>

<figure class="break-out"><a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/bbda009b-fa59-4c9f-af9e-3337707ee54c/sampleborder.gif"><img loading="lazy" decoding="async" src="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d455ecc1-fe02-4f43-9b02-ff3c6c698f1d/sampleborder-800w.gif" width="800" height="" alt="Border’s width and color" /></a><figcaption>Changing border’s width and color (<a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/bbda009b-fa59-4c9f-af9e-3337707ee54c/sampleborder.gif">Large preview</a>)</figcaption></figure>

<h2 id="content">Content</h2>

<p>This is the most complex component of all.</p>

<p>We need to create all possible variations of the table content in the project: plain text, a text with an icon (left or right, different alignment), checkboxes, switches, and any other content that a cell may possibly contain. To simplify this tutorial, please check the components in the <a href="#figma-table-mockup-download">mockup file</a>. How to create and organize components in Figma is a topic for another article.</p>

<p>However, there are a few requirements for content components:</p>

<ul>
<li>Components should stretch easily both vertically and horizontally to fit inside a cell;</li>
<li>The minimum size of the component should be less than the default cell size (especially height, keep in mind possible cell paddings);</li>
<li>Avoid any margins, so the components can align properly inside a cell;</li>
<li>Avoid unnecessary backgrounds because a cell itself has it already.</li>
</ul>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/410e6284-f976-4e1a-a6e6-98bd6745ff3e/4-tables-in-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			
			
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/410e6284-f976-4e1a-a6e6-98bd6745ff3e/4-tables-in-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/410e6284-f976-4e1a-a6e6-98bd6745ff3e/4-tables-in-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/410e6284-f976-4e1a-a6e6-98bd6745ff3e/4-tables-in-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/410e6284-f976-4e1a-a6e6-98bd6745ff3e/4-tables-in-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/410e6284-f976-4e1a-a6e6-98bd6745ff3e/4-tables-in-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/410e6284-f976-4e1a-a6e6-98bd6745ff3e/4-tables-in-figma.png"
			
			sizes="100vw"
			alt="Content components examples"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Examples of cell content in components. This is not a complete list; you can use most of the components of your design system inside a table. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/410e6284-f976-4e1a-a6e6-98bd6745ff3e/4-tables-in-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Content components can be created gradually: start with the basic ones like text components and add new ones as the project grows in size.</p>

<p>The reason we want the content to be in components is the same as with other elements — it saves uptime. To change the cell’s content, we just need to switch it in the component.</p>

<figure class="break-out"><a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/49b7a4e1-48c1-4a5f-a63b-f133462c09df/table-components.gif"><img loading="lazy" decoding="async" src="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/bb5cbc4a-fb8f-4a2e-b927-8f8cddaee391/table-components-800w.gif" width="800" height="" alt="Changing the component inside the cell" /></a><figcaption>Editing the table using cells components (<a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/49b7a4e1-48c1-4a5f-a63b-f133462c09df/table-components.gif">Large preview</a>)</figcaption></figure>

<h2 id="creating-a-cell-component">Creating A Cell Component</h2>

<p>We created all the atoms we need: background, border, content. It’s time to create a cell component, i.e. the molecule made from atoms. Let’s gather all the components in a cell.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/40f14761-70b7-40ba-85d0-5cfbcc963b5a/5-tables-in-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			
			
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/40f14761-70b7-40ba-85d0-5cfbcc963b5a/5-tables-in-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/40f14761-70b7-40ba-85d0-5cfbcc963b5a/5-tables-in-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/40f14761-70b7-40ba-85d0-5cfbcc963b5a/5-tables-in-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/40f14761-70b7-40ba-85d0-5cfbcc963b5a/5-tables-in-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/40f14761-70b7-40ba-85d0-5cfbcc963b5a/5-tables-in-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/40f14761-70b7-40ba-85d0-5cfbcc963b5a/5-tables-in-figma.png"
			
			sizes="100vw"
			alt="The cell component"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      The cell component (the ‘molecule’) (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/40f14761-70b7-40ba-85d0-5cfbcc963b5a/5-tables-in-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Set the background component as the bottom layer and stretch it to the whole cell size (set constraints to “Left &amp; Right” and “Top &amp; Bottom”).</p>

<p>Add the border component with the same constraints as the background component.</p>

<p>Now to the most complicated part — the <strong>content content</strong>.</p>

<p>The cell has paddings, so you need to make a frame with the component’s content. That frame should be stretched to the whole cell size except for the paddings. The content component should also be stretched to the whole frame size. The content itself needs to be deprived of any margins, so all paddings will be set by the cell.</p>

<p>At the end of the day, cell paddings are the only property in a component that we will set only once without an opportunity to change it later. In the example above, I made it 4px for all sides.</p>

<p><strong>Note</strong>: <em>As a fix, you can create columns with empty cells (with no content and width of 16px for example) left and right to the column where extra margin is needed. Or if your table’s design allows, you can add horizontal paddings inside the cell component. For example, cells in Google Material Design have 16px paddings by default.</em></p>

<p>Don’t forget to remove the “<strong>Clip content</strong>” option for the cell and frame (this can be done at the right-hand panel in the Properties section). The cell’s content can go out of its borders; for example, when a dropdown is inside your cell and you want to show its state with a popup.</p>

<p><strong>Note</strong>: <em>We’ll be using this cell style as the main one. Don’t worry if your table has additional styles &mdash; we’ll cover that in the <a href="#table-states">Table States</a> and <a href="#components-not-overrides">Components, Not Overrides</a> sections.</em></p>

<div class="partners__lead-place"></div>

<h2 id="cell-options-for-a-standard-table">Cell Options For A Standard Table</h2>

<p>This step could be optional but if your table needs states then you can’t go without it. And even more so if there is more than one border style in the table.</p>

<p>So let’s create additional cell components from which it’d be easier to build up a table. When working with a table, we will select the appropriate component depending on its position in the table (e.g. depending on the type of borders).</p>

<p>In order to do that, let’s take our cell component and create eight more masters from it. We also need to disable the appropriate layers responsible for borders. The result should look like the image below.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8d920eee-827a-4d44-954b-e98746099914/6-tables-in-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			
			
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8d920eee-827a-4d44-954b-e98746099914/6-tables-in-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8d920eee-827a-4d44-954b-e98746099914/6-tables-in-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8d920eee-827a-4d44-954b-e98746099914/6-tables-in-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8d920eee-827a-4d44-954b-e98746099914/6-tables-in-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8d920eee-827a-4d44-954b-e98746099914/6-tables-in-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8d920eee-827a-4d44-954b-e98746099914/6-tables-in-figma.png"
			
			sizes="100vw"
			alt="Cell options"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      The cell options we need to build a table. Note that there could be a few extra depending on your table borders styles. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8d920eee-827a-4d44-954b-e98746099914/6-tables-in-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>The top row is for the cells on top and in the middle of the table. The bottom row is only for the cells at the bottom. This way we’ll be able to put the cells one after another with no gaps and keep the same stroke width.</p>

<p>A few examples:</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/27f1d254-3322-4fdd-9611-9deeda2eaa6e/7-tables-in-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			
			
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/27f1d254-3322-4fdd-9611-9deeda2eaa6e/7-tables-in-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/27f1d254-3322-4fdd-9611-9deeda2eaa6e/7-tables-in-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/27f1d254-3322-4fdd-9611-9deeda2eaa6e/7-tables-in-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/27f1d254-3322-4fdd-9611-9deeda2eaa6e/7-tables-in-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/27f1d254-3322-4fdd-9611-9deeda2eaa6e/7-tables-in-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/27f1d254-3322-4fdd-9611-9deeda2eaa6e/7-tables-in-figma.png"
			
			sizes="100vw"
			alt="The First example"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      If each cell in the table has a border, we’d only need cells 1, 4, 5 and 8. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/27f1d254-3322-4fdd-9611-9deeda2eaa6e/7-tables-in-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/152b96b5-3fd3-4160-9515-3fec6569e2a5/8-tables-in-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			
			
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/152b96b5-3fd3-4160-9515-3fec6569e2a5/8-tables-in-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/152b96b5-3fd3-4160-9515-3fec6569e2a5/8-tables-in-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/152b96b5-3fd3-4160-9515-3fec6569e2a5/8-tables-in-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/152b96b5-3fd3-4160-9515-3fec6569e2a5/8-tables-in-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/152b96b5-3fd3-4160-9515-3fec6569e2a5/8-tables-in-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/152b96b5-3fd3-4160-9515-3fec6569e2a5/8-tables-in-figma.png"
			
			sizes="100vw"
			alt="The Second example"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      If there are merged cells or border absence, we must apply the rest 2 and 3 cells as well as 6 and 7 to the bottom row. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/152b96b5-3fd3-4160-9515-3fec6569e2a5/8-tables-in-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/19f7ea7d-8017-474b-87f6-14dab7d5e8f3/9-tables-in-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			
			
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/19f7ea7d-8017-474b-87f6-14dab7d5e8f3/9-tables-in-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/19f7ea7d-8017-474b-87f6-14dab7d5e8f3/9-tables-in-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/19f7ea7d-8017-474b-87f6-14dab7d5e8f3/9-tables-in-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/19f7ea7d-8017-474b-87f6-14dab7d5e8f3/9-tables-in-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/19f7ea7d-8017-474b-87f6-14dab7d5e8f3/9-tables-in-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/19f7ea7d-8017-474b-87f6-14dab7d5e8f3/9-tables-in-figma.png"
			
			sizes="100vw"
			alt="The Third example"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      If the table design considers the absence of vertical borders, cells 2 and 6 would be enough. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/19f7ea7d-8017-474b-87f6-14dab7d5e8f3/9-tables-in-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p><strong>Note</strong>: <em>For each border style created above, it’d be good to add master components like the ones described earlier.</em></p>

<p>So we have excluded the necessity of overriding cell’s instances (disabling the appropriate layers, to be precise). Instead of that, we use various components. Now if, for example, a column uses a different style from the default (the fill color or border), you can choose this column and simply change the relative component. And everything will be alright. On the opposite side, changing a border of each cell manually (disabling the appropriate borders) is a pain you don’t want to bother with.</p>

<p>Now we are ready to create tables (in terms of Atomic Design — organisms) from the various cell components (molecules) we made.</p>

<h2 id="customizing-the-table">Customizing The Table</h2>

<p>Changing the row’s height in the whole table is relatively easy: highlight the table, change the element height (in this case, the cell’s height, H in the right-hand panel in the Properties section), and then change the vertical margin from the element to 0. That’s it: changing the line height took two clicks!</p>

<figure class="break-out"><a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3391eda3-42c3-44c1-8b81-ec711788e8df/table-size.gif"><img loading="lazy" decoding="async" src="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ba448d33-0336-41b1-8c4a-c75582d53cdf/table-size-800w.gif" width="800" height="" alt="Changing the row height" /></a><figcaption>Changing the row height for the whole table (<a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3391eda3-42c3-44c1-8b81-ec711788e8df/table-size.gif">Large preview</a>)</figcaption></figure>

<p>Changing the column width: highlight the column and change the width size. After moving the rest of the table close up, select the whole table by using the <em>Tide Up</em> option in the <em>Alignment</em> panel as well as the first item in the dropdown list under the rightmost icon.</p>

<figure class="break-out"><a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/33c9658c-55f6-48db-849a-7890cc31b1e0/13-tables-in-figma.gif"><img loading="lazy" decoding="async" src="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9e9eed10-3054-4a56-bb14-0f4449d74f1c/13-tables-figma-800w.gif" width="800" height="" alt="Changing the column width" /></a><figcaption>Changing the column width. (<a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/33c9658c-55f6-48db-849a-7890cc31b1e0/13-tables-in-figma.gif">Large preview</a>)</figcaption></figure>

<p><strong>Note:</strong> <em>I wouldn’t recommend grouping rows and columns. If you change the column size extending the elements, you’ll get fractional values for width and height. If you don’t group them and snap to the pixel grid, the cell size will remain an integer number.</em></p>

<p>The background color, stroke type, and content data can be changed in the appropriate component or in one of the eight cells master components (cells that had different stroke styles). The only parameter that can’t be changed right away is the cell margins, e.g. <strong>content paddings</strong>. The rest are easily customizable.</p>

<h2 id="components-not-overrides">Components, Not Overrides</h2>

<p>Looking at what we got in the end, it might seem like overkill. And it is if there is only one table in your project. In this case, you can simply create one cell component and leave the background and stroke components off. Simply include them in the cell component, create the table and do the necessary customization for each separate cell.</p>

<p>But if components are included in a library that is used by a number of other files, here comes the most interesting stuff.</p>

<p><strong>Note</strong>: *I do not recommend changing the background color and stroke in components&rsquo; instances. Change them <strong>only in the master</strong>. By doing so, those instances with overrides won’t get updated. This means you would have to do that manually and that’s what we’re trying to avoid. So let’s stick to the master components.*</p>

<p>If we need to create an additional type of table cells (e.g. the table header), we add the necessary set of master components for cells with the appropriate styles (just like we did above with the eight cells that had different stroke styles), and use it. Yes, it takes longer than overriding components’ instances but this way you will avoid the case when changing the masters will apply those changes to all layouts.</p>

<h2 id="table-states">Table States</h2>

<p>Let’s talk about the states of the table’s elements. A cell can have three states: default, hover, and selected. Same for columns and rows.</p>

<p>If your project is relatively small, all states can be set by overrides inside instances of your table components. But if it’s a big one, and you’d want to be able to change the look of the states in the future, you’ll have to create separate components for everything.</p>

<p>You’ll need to add all eight cells with different stroke variants for each of the states (maybe less, depends on the stroke style). And yes, we’ll need separate components for the background color and the stroke for the states as well.</p>

<p>In the end, it’ll look similar to this:</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5360264b-077f-42c7-b8cc-a7ce88618e2a/10-tables-in-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			
			
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5360264b-077f-42c7-b8cc-a7ce88618e2a/10-tables-in-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5360264b-077f-42c7-b8cc-a7ce88618e2a/10-tables-in-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5360264b-077f-42c7-b8cc-a7ce88618e2a/10-tables-in-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5360264b-077f-42c7-b8cc-a7ce88618e2a/10-tables-in-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5360264b-077f-42c7-b8cc-a7ce88618e2a/10-tables-in-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5360264b-077f-42c7-b8cc-a7ce88618e2a/10-tables-in-figma.png"
			
			sizes="100vw"
			alt="Hover and Selected"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      The cells’ states (hover and selected) (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5360264b-077f-42c7-b8cc-a7ce88618e2a/10-tables-in-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Here’s where a bit of trouble comes in. Unfortunately, if we do everything as described above (when changing the component’s state from one to another), there is a risk of losing the cell’s content. We’ll have to update it apart from the case when the content type is the same as in the master cell. At this point, we can’t do anything about it.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/bb4b162f-c9ba-4e2d-9c04-839a3e13eb33/11-tables-in-figma.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			
			
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/bb4b162f-c9ba-4e2d-9c04-839a3e13eb33/11-tables-in-figma.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/bb4b162f-c9ba-4e2d-9c04-839a3e13eb33/11-tables-in-figma.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/bb4b162f-c9ba-4e2d-9c04-839a3e13eb33/11-tables-in-figma.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/bb4b162f-c9ba-4e2d-9c04-839a3e13eb33/11-tables-in-figma.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/bb4b162f-c9ba-4e2d-9c04-839a3e13eb33/11-tables-in-figma.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/bb4b162f-c9ba-4e2d-9c04-839a3e13eb33/11-tables-in-figma.png"
			
			sizes="100vw"
			alt="Table with rows’ states"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Table with various rows’ states. (<a href='https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/bb4b162f-c9ba-4e2d-9c04-839a3e13eb33/11-tables-in-figma.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>I added tables in the <a href="#figma-table-mockup-download">mockup file</a> that were made in a few different ways:</p>

<ul>
<li>Using this tutorial (separate components for cells’ styles);</li>
<li>Using the cell component (components for borders, background, and content);</li>
<li>Using the cell component that unites everything (with only content components in addition).</li>
</ul>

<p>Try to play around and change the cell’s styles.</p>

<figure class="break-out"><a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/aee8ffc8-8a0e-4e1f-9cda-360fa5ba9644/12-tables-in-figma.gif"><img loading="lazy" decoding="async" src="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/783ea21b-7d19-442b-945b-aa41e6bbe640/12-tables-in-figma-800w.gif" width="800" height="" alt="Changing the state" /></a><figcaption>Changing the state of the row. (<a href="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/aee8ffc8-8a0e-4e1f-9cda-360fa5ba9644/12-tables-in-figma.gif">Large preview</a>)</figcaption></figure>

<h2 id="conclusion">Conclusion</h2>

<p>If you’re using the same components library in several projects and you’ve got a reasonable number of tables in each of them, you can create a local copy of components (cells components with stroke styles and, if needed, cells components with different states), customize them, and use them in the project. The cell content can be set based on local components.</p>

<p>Also, if you’re using the table for one large project with different kinds of tables, all the above-mentioned components are easily scaled. The table components can be improved to infinity and beyond, like creating the cell states when hovering and other kinds of interactions.</p>

<p>Questions, feedback, thoughts? Leave a comment below, and I’ll do my best to help you!</p>

<h3 id="figma-table-mockup-download">Figma Table Mockup Download</h3>

<p>As promised, I created a complete version of the Figma table mockup that you’re welcome to use for learning purposes or anything else you like. Enjoy!</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://www.figma.com/file/PDmebscR4YRI42oMVjolz7j6/Table-%28Article%29?node-id=0%3A1">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			
			
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9d08b37a-9f74-4ec9-9cd9-acfdc924a4e8/tables-in-figma-mockup.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9d08b37a-9f74-4ec9-9cd9-acfdc924a4e8/tables-in-figma-mockup.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9d08b37a-9f74-4ec9-9cd9-acfdc924a4e8/tables-in-figma-mockup.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9d08b37a-9f74-4ec9-9cd9-acfdc924a4e8/tables-in-figma-mockup.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9d08b37a-9f74-4ec9-9cd9-acfdc924a4e8/tables-in-figma-mockup.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9d08b37a-9f74-4ec9-9cd9-acfdc924a4e8/tables-in-figma-mockup.png"
			
			sizes="100vw"
			alt="Tables in Figma mockup design"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Here’s a <a href='https://www.figma.com/file/PDmebscR4YRI42oMVjolz7j6/Table-(Article)?node-id=0%3A1'>Figma table mockup</a> that you can use for learning purposes — let the creativity begin!
    </figcaption>
  
</figure>

<h3 id="related-reading">Related Reading</h3>

<ul>
<li>“<a href="https://atomicdesign.bradfrost.com/table-of-contents/">Atomic Design</a>,” Brad Frost</li>
<li>“<a href="https://www.smashingmagazine.com/2019/02/complex-web-tables/">How To Architect A Complex Web Table</a>,” Slava Shestopalov, Smashing Magazine</li>
<li>“<a href="https://www.figma.com/blog/creating-atomic-components-in-figma/">Creating Atomic Components In Figma</a>,” Design &amp; Engineering team, littleBits</li>
<li>“<a href="https://setproduct.com/blog/figma-tables-data-grid-design">Figma Tables: Data Grid Design By A Single Cell-Component</a>,” Roman Kamushken, Setproduct</li>
</ul>

<h3 id="useful-resources">Useful Resources</h3>

<ul>
<li><a href="https://www.youtube.com/channel/UCQsVmhSa4X-G3lHlUtejzLA/videos">Figma YouTube Channel</a><br />
<em>The official Figma channel on YouTube — it’s the first thing to watch if you are new to Figma.</em></li>
<li><a href="https://www.figma.com/c/plugin/735770583268406934/Google-Sheets-Sync">Google Sheets Sync</a><br />
<em>A Figma plugin that helps you get data from Google Sheets into your Figma file. This should work fine with the techniques from this tutoria, but you’ll need to invest some time into renaming all the text layers for this to work properly.</em></li>
</ul>

<div class="partners__lead-place"></div>

<h3 id="further-reading">Further Reading</h3>

<ul>
<li><a href="https://www.smashingmagazine.com/2024/05/hidden-vs-disabled-ux/">Hidden vs. Disabled In UX</a></li>
<li><a href="https://www.smashingmagazine.com/2024/04/penpot-css-grid-layout-designing-superpowers/">Penpot’s CSS Grid Layout: Designing With Superpowers</a></li>
<li><a href="https://www.smashingmagazine.com/2024/05/naming-best-practices/">Best Practices For Naming Design Tokens, Components And Variables</a></li>
<li><a href="https://www.smashingmagazine.com/2024/06/scaling-success-key-insights-pratical-takeaways/">Scaling Success: Key Insights And Practical Takeaways</a></li>
</ul>

<div class="signature">
  <img src="https://www.smashingmagazine.com/images/logo/logo--red.png" alt="Smashing Editorial" width="35" height="46" loading="lazy" decoding="async" />
  <span>(mb, yk, il, mrn)</span>
</div>


              </article>
            </body>
          </html>
        ]]></content:encoded></item></channel></rss>