Symbols in Sketch have come a long way since I wrote about them just last year. Bohemian Coding has made symbols into powerfully reusable objects that can speed up your design flow and help you create more coherent work. Making a symbol is easy; assembling a flexible system of symbols takes planning and perseverance. Here are my recommendations to take your symbols to the next level.
Creating a symbol is simple. Select the layers you want to include in the symbol. From the
Layer menu, choose
Create Symbol. You can also right click on the selected layers in the canvas and choose from
Create Symbol from the contextual menu. If you create the symbol from a group of layers, the default symbol name will be the name of the group. If they are not grouped, then the default symbol name will be the name of the bottom-most layer. You can and should change this. I’ll cover more on naming symbols later.
When you create a symbol, a checkbox below the name asks if you want to send the symbol to the “Symbols” page. You should leave this checked. When you create your first symbol, it will create a new Page in your Sketch document called Symbols. Each symbol you create afterward will automatically appear on this page, by default to the right of the most recently added symbol. You can access your Symbols page by either a) selecting the page at the top left section of the Layer List, b) double-clicking a symbol to edit it, or c) hitting enter with the symbol layer selected. When you edit a specific symbol, a button will appear at the top left of the canvas prompting you to Return to Instance. Clicking this will take you back to the instance of the symbol you were editing.
Now that you have created your first symbol, let’s consider how to make it more organized and reusable. Here’s what I do:
Rename layers for better labels
By default, text layers are named by the text that appears inside them. In general, this helps you easily tell which layers in the layer list belong to which text. Because symbols are meant to be reusable and editable, this can become a detriment. I recommend renaming text layers in your symbol to a label that describes in one or two words what kind of text goes there. For instance, in our card example, I renamed the text layers to Title, Date, and Summary. If it helps, think of these layer names as variable names to be filled with whatever text you want. The labels should be short; Sketch only has room to show about 8 characters before it truncates the rest with an ellipse.
Change layer text for more guidance
Another way you can help provide useful guidance for using symbol overrides is to replace the actual text on layers with notes or samples. If your symbol text is a form field, show the specific format. If you want to limit the number of characters for a body of text, note the limit in the layer text. By making these part of the default, you are helping to instruct others (or remind yourself) every time you use that symbol.
Reorder layers for logical flow
You can improve the flow of editing your symbol even more by reordering the layers logically in the layer list. Moving layers up in the layer list places them higher in the override list, moving them down places them lower. I like to order mine from top to bottom, left to right in order. It’s important to note that sometimes this won’t be possible because you want one layer to appear above another layer. That’s okay. Just let it go.
One layer per text style
I often use different styles of text in the same layer, whether to add links, emphasize a word, or quickly mock up a key/value pair. When those pieces of text fall on the same line, I’ll often combine them in a single text layer by selecting different parts and changing the styles. It’s efficient when I’m designing something quickly. It’s not useful in symbols because you can only change the text of a layer and not the style of individual parts.
Instead, I recommend breaking out that single, multi-styled layer into individual layers for each style. This way, changing the text on each individual layer will retain the styles for each type. And, because Sketch is magical, it will automatically push and pull elements to the right of your text to the right or left as the text gets longer or shorter.
Lock layers to “hide” overrides
Sometimes you will have layers that you don’t want to change from instance to instance. For example, in my Card symbol, I don’t want to change the “By” before the author name. To prevent this from showing in my overrides, I lock the layer. You can lock the layer by selecting it in the layer list. Right-click on it and select Lock Layer from the context menu, or select Arrange > Lock Layer from the top menu.
Prepare to resize
Chances are you’re designing for devices or screens that won’t always be the same size. Your symbols shouldn’t be rigid, either. Sketch provides several distinct tools to help you prepare individual elements of your symbol.
First, by default every layer resizes by percentage within the symbol. If a layer is 50% of the width of the overall symbol, then it will remain 50% as you resize. If a layer goes from one edge of the artboard to the other, then it will stay edge-to-edge as it resizes. The same holds true for placement within a symbol. If a layer is 10% from the left edge, it will remain 10% from the left edge as you go up and down.
You should create your symbols at the lowest size conceivable because things are much less likely to break as you resize them larger than vice versa.
Pinning to the edge
Proportional resizing is great when you want your instance to maintain the same ratios (in dimensions and location) no matter how big or small it gets. But sometimes you may want to maintain the same margin between layers as the instance resizes. Or you may want an element to remain in the same spot as your instance gets larger. In these cases, you will want to pin the layer. You can pin to the top, bottom, left, or right sides of a symbol, and your layer will maintain the same distance to whatever sides you choose to pin. (You can also pin to multiple sides at once.)
Other times you may want to keep a layer an exact size. In particular, icons and images can get squished or fattened when resizing. You can use the
Fix Width and
Fix Height settings to lock layer dimensions in one or both directions. One important thing to note: when you fix width or height, you can only pin a layer to one of the two related sides. (So if you fix width, you can’t pin the layer to both the right AND left side.)
Text layers resize differently. Text layers will expand depending on the length of what you put in an override. If the text alignment is set to Auto, it will expand horizontally from its base alignment. So if the text is left aligned, it will expand to the right. If the text is centered, it will expand in both directions. And if the text is right aligned, it will grow to the left.
If the text alignment is set to Fixed, then the text will expand vertically. If you manually set the dimensions of a text layer, it will automatically change to a Fixed layout. With Fixed layers, you can align your text to the top, center, or bottom of the text block, and the text will expand in the opposite direction vertically. (So bottom aligned text will expand upwards, center aligned text in both directions, and top aligned text will expand downwards.)
In most cases, you should set text in your symbols to a Fixed size then use the resizing tools to hit the right placement and proportions.
Use nested symbols for more variability
Sometimes the difference between one symbol and another is a small variation or a different state. In the old world (of one year ago), we’d create a new, separate symbol, or detach the symbol to edit it, or place layers over the existing symbol to change its look. Now we have a fourth option, nested symbols!
You can place a symbol inside another symbol so that the child symbol inherits any changes made to the parent. You can add a nested instance to another symbol by going to
Insert > Symbol > and choosing the symbol you’d like to add then placing it. Doing this will allow you to add minor tweaks while maintaining overall consistency with the original symbol. You can also combine simpler symbols into more complex ones much like the concepts espoused in atomic design.
You can also use nested symbols to add variations as selectable overrides, for instance different colors or icons. When you add an instance of a symbol that is the same size as other symbols, it will automatically create a new override with a dropdown list to select any other symbols of the same size. Renaming the instance layer will rename the override label as well (and the symbol that you placed for that instance will be the default value).
Here are some recommendations for using nested symbols:
- To use nested symbols for simple visual changes like color, create a very small symbol artboard with a single rectangle filled with your first color of choice. Duplicate the symbol (on the Symbols page so you’re not duplicating the instance) and change the color to create as many color varieties as you’d like. (Don’t forget to rename each artboard with the color name so it’s easy to pick from your list of overrides.)
- By default, nested symbols that appear in an override list will be ordered alphabetically. Want a specific order? Add a number in front of each symbol's nested layer name to create the order you’d like.
- Have a symbol or layer that you don’t want to override in instances? Lock the layer and it won’t show up. With nested symbols, overrides from the locked symbol also won’t show up.
- Name your related symbols so that they are collected in the same subfolder. You won’t want to dig through multiple folders in an override dropdown to find the right variation.
Speaking of naming symbols, your symbol names are an integral part of keeping them organized and reusable. Consider these best practices for naming your symbols:
- Name your hierarchy: You can create a more organized folder structure for your symbols by placing one or more slashes
/in the name. Each slash adds a deeper folder level. I recommend an organization scheme similar to the following:
Category / Component / Variant
- Category represents an overall set of related components. For instance, you might have a Category of
Inputfor all form field related components.
- Component is an individual element of the set. In our
Inputcategory, we would probably have a
Text fieldcomponent and a
Checkboxcomponent (among other things).
- Variant can represent either different states or different style variations of the component. For instance, our
Text fieldcomponent may have
Errorstates to show what the text field would look like with placeholder text, user-filled text, when the field is currently selected, and when there’s an error.
- Category represents an overall set of related components. For instance, you might have a Category of
- Use semantic names not visual names: If you’ve developed for the web, you’ve probably already heard the semantic drumbeat before. Use names that define the function or purpose of the component as opposed to describing its visual qualities.
Button / Primarytells you that this is a button for primary actions. The style of the button could change down the road, but the purpose shouldn’t.
Button / Redsimply tells you that the button is red. But what if your important action buttons get changed to purple and buttons showing errors are changed to red. With semantic names, the styles can change and the meaning still remains.
- Rename your instances as you go: As you add and reuse instances of your symbol, make sure to update the name of the instance layer so that it conveys the exact purpose of that instance. You don’t want to design a complex form with multiple input instances all named
Input / Text Field Copy X- that makes finding the right layer in your layer list a pain.
Now that you’ve got some well-designed symbols and you’ve named them properly, you’re good to go, right? Not quite! Here are some helpful tips for actually using symbols:
- Add the Symbol button to your Sketch toolbar. Do yourself a favor. Right click on the top toolbar in Sketch and choose
Customize Toolbar. From the list of potential icons, drag the
Symbolicon up to your toolbar (I like it beside
Create Symbol). This will save you time when selecting symbols to place. (You should also check out Sketch Runner, mentioned in the plugins below, if you prefer using the keyboard.)
- Hit the spacebar for empty override content. There may be times when you want to use a symbol but one text layer should be empty. Don’t detach it or make an alternative, just put a space in the override text for that layer. The placeholder will disappear and your space will be invisible.
- Alt-enter to add a new line. Want to control where the line breaks for text in an override? Hit
Alt + Enterwhile typing to add that line break and keep typing.
- Breaking up is easy. No matter how well planned and executed your symbols are, you will run into situations where you want a one-time variation of a symbol. Whatever your reason, you can divorce a child instance from its parent symbol by right clicking on the instance and choosing
Detach from Symbol. This will copy all of the contents of the original symbol in place, remove the symbol relationship, and you can make changes to individual layers without affecting anything else.
- Reset the dimensions. What happens when you resize an instance and can’t remember what the original dimensions were? You could go to your Symbols page and check, but there’s a quicker way. Right click on the instance and in the context menu, choose
Set to Original Size. Voilà!
- Adopt a different parent. You can also switch the parent symbol for an instance. This makes it easy to swap different variations or change styles. Select an instance you want to swap and you’ll see the name of its parent symbol directly above the Overrides on the Inspector panel. Click on the symbol name there and you can choose any other symbol from the symbol library. Even better, if you’ve already set overrides for the instance, it will automatically carry those over, but only if the layers share the same label name. You can also right-click on an instance (or any selected layer or set of layers, actually) and choose
Replace withto replace them with a symbol.
If you followed the naming recommendations above, your symbols are already organized by name semantically. They are grouped in a logical structure in the
Insert Symbol tree, and your variants are grouped by related folders. But what about your Symbols page? Every time you add a new Symbol, it automatically appears to the right of the last one you added. That would be like my library putting the books I return on the top of a very tall pile (and never shelving them).
There’s got to be a better way. With a little bit of attention and care, you can create a master symbol collection that’s easy to use and organized. Some things to consider when organizing your own Symbols page include:
- Group related elements closely together. I like to group related symbols in clusters. For instance, I might have a form field group, a button group, and a navigation group (among others). Since Sketch makes it easy to align elements, I try to keep these groups to a grid.
- Reorder layers so that tabbing through them follows a logical flow. I use the keyboard a lot, and it bugs me when tabbing through artboards jumps around randomly.
- Separate unrelated sets by a generous amount of space. Let your collected sets of symbols breathe. Each page is essentially an infinite canvas, so don’t feel like everything has to be discernible in a laptop screen size.
- Place variations / nested symbols near the symbol(s) they modify. I like to place nested symbols that are related to a single parent symbol underneath and close to their parent so it’s clear that they are modifiers. For variant symbols that affect multiple symbols (especially across sets), I’ll create a separate set of modifier symbols instead.
- Add headings and descriptive text to further document your symbols. Explain what each overall set of symbols represents and give any helpful guidance that’s not covered by your specific symbols. You can also annotate individual symbols within a larger set.
- Leave room for adding symbols to each group. As your project grows in Sketch, you’ll undoubtedly think of new symbols you want to add. Leaving some space near each set for your library to grow will save you the pain of having to reshuffle everything from time to time.
- Don’t drag to select multiple symbols. If you drag to select on the canvas in Sketch, you’ll only end up selecting layers inside the artboards. If you want to select multiple symbol artboards, it’s easier to select the artboards from the layer list. Go to the
Layer List, and finally
Collapse All Groupsto collapse all the folders in your artboards to see more artboards at a time. Click the arrow next to any open artboards to collapse them further. (I miss when Collapse All closed artboards, too.) Now click the first artboard you want to select, then hold the Shift key while clicking another to select a continuous set of every artboard in between, or hold Cmd and click to select only specific dartboards.
An upcoming version of Sketch (that’s available for beta as of September 2017) introduces the ability to add and pull symbols from external libraries. This means you can share a Sketch file with a library of symbols with other designers, pull them into your own documents, and reuse them more easily. Early reviews of the beta are looking good.
Adding a library
To add a new library to Sketch, go to Preferences then the Libraries tab. At the bottom, click the
Add Library... button and navigate to any Sketch file that contains symbols. Once you’ve added a library, it will be available in all new files you create or edit.
From the Libraries preferences panel, you can preview any libraries you’ve added by clicking the Eye icon to the right of the library. You can disable a library by clicking the checkbox to the left of it. Want to edit a library at the source? Select that library, click the gear icon at the bottom, and click
Open. To remove a library, you can select it and click the gear icon at the bottom, then select
Using symbols from a library
To place a symbol from one of your libraries, go to the
Insert menu (or the Symbol tool if you’ve added it) in your toolbar. Your new libraries will appear as an option under the
Symbols submenu. Instances of library symbols are shown with an icon of two links in a chain. Instances for local symbols have an icon with two arrows in a circle.
You can change overrides or rename the instance for a library symbol. Attempting to edit the symbol (by double clicking it or pressing enter with it selected) will tell you that the symbol is part of an external library.
You have three options:
- Open in Original Document: This default action will open the original library file so you can edit the symbol directly and save your changes in the external file.
- Unlink from Library: This option lets you create a copy of the symbol in the local file. Doing so will remove the relationship to the external library so any updates to the symbol there won’t be reflected in any instances you’ve unlinked. (You can always relink it by replacing the local symbol with the symbol from the library.)
- Cancel: Or you can choose the safe route and not do anything.
If you want to see a list of all the imported symbols you’re using in a document, select a symbol, then open the symbol selector on the Inspector panel. At the bottom of your list of symbols, you’ll see
Organize Imported Symbols.... Clicking this will open a sheet that shows all of the symbols you have imported from other libraries. Selecting a symbol, you can edit it in the original library or unlink it from the library from the gear at the bottom of the list.
Updating symbols in an external library
When someone updates a symbol you are using from a shared external library, a notification will appear in the top right corner of Sketch that says
Library Update Available. Clicking the notification will open a sheet that will show you a list of the updated symbols, with both the old version and the new version side by side for each. Click
Update Symbols to update the symbols in your local document. That’s it! Don’t want to update a specific symbol? Uncheck it from the list.
Want to learn more about libraries?
- Sketch Libraries documentation
- Sketch Libraries: How they work, and the crazy stuff you can do with them
Sketch symbol glossary
- A reusable object representing a specific component. Changes to a symbol are synced to all attached instances.
- A single child copy of a parent symbol.
- Data (text, images, or nested symbols) that can be changed for an instance of a symbol to differentiate one instance from another.
- To remove the parent / child relationship between a symbol and an instance. The object may continue to look like the symbol, but any changes to the symbol are not reflected to the detached version.
- To place an instance of a symbol within another symbol. You cannot nest an instance of a symbol within itself.
Plugins to help with symbols
There are several plugins that make working with symbols even easier. These three have had a HUGE impact on my own symbol workflow; hopefully they can do the same for you.
- Sketch Runner speeds up doing all kinds of things in Sketch, especially if you’re an avid keyboard user. You can quickly insert symbols and create new ones with just a few keystrokes.
- Symbol Organizer does just what it says. It helps you organize your symbols into groups by symbol name. You can choose the nested granularity level to group by, set what size grid to group in, and even reorder the layer lists.
- InVision’s Craft plugin helps you easily duplicate and prefill a bunch of similar symbols. When combined with lists.design, it’s super easy to prefill all kinds of different data.
Suggestions for future updates
While Sketch’s symbols are incredibly powerful, there are still some areas where they could be improved. Here’s a few at the top of my list:
- Layer style overrides: Rather than creating multiple symbols and nesting those, I’d love if I could choose different layer styles directly.
- Fixed proportion/ratio: I’d love to be able to fix the proportion for an image in a symbol but otherwise allow it to scale with the symbol. This would be even more powerful if I could combine it with a masked layer and use logic similar to
- Remove folder navigation for nested symbols in the same structural location. This may be fixed in the latest beta, but I’m not sure if I’m seeing a bug. If a bunch of nested symbols in an override are located in the same “folder,” I’d like to be able to just choose them from the top level of the override dropdown instead of drilling through folders.
- Web-based libraries: Local libraries and shared network libraries are the obvious choice for the first iteration of libraries, but I’m hoping to see the choices expand outward.
A hint of what’s to come
I did a lot of this research on Sketch symbols while building out a new product, or more properly a passel of new products: the UX Compendium. There are plenty of UI kits for creating great prototypes, but I’ve long wanted a set of tools to help designers get started at every step along the UX process. Great design isn’t just about crafting beautiful interfaces. These tools will help you with the other 90%.
Interested? I’m sharing beta versions with everyone who subscribes to the UXcellence mailing list.
- Sketch symbol best practices (now that nested overrides are a thing) by Lloyd Humphreys
- Harness the power of symbols by Andrew Couldwell
- Sketch documentation on Nested Symbols
Did I miss one of your favorite tips? Let me know and I’ll happily credit you in an update to this article!