Baseline #23 – Using Constraints in Figma
Hello again! 👋 Creating a component in Figma? Easy! Creating a component that works with nearly endless screen widths and heights? Well, that’s not as easy. Within this week’s newsletter, I’d love to share one feature within Figma that can help us create responsive designs and components that feel more robust for those relying on them most. That feature is called constraints. Let’s dive in!
Constraints in Figma
Constraints in Figma help us build responsive and flexible interfaces, but most importantly, they can help us save time as we design. Constraints allow us to determine the behavior of a selected item, should its parent container ever change in size. To better understand how they work and how we can apply them, we should first talk about frames and their importance in the context of the tool.
Frames
Within Figma, we can think of frames as the screen on which we’re placing our design, just as we might think of artboards within other design tools. However, unlike those artboards, frames can be nested within one another, allowing us to create containers within containers.
When we place an object inside a frame, its coordinates and positioning are relative to that parent frame, not the entire screen (also a frame) of the design. This implementation detail in Figma helps us further organize the layer lists and lets us independently specify how an object should resize as we use it within a design.
We can create frames by tapping F
on the keyboard or navigating to the new toolbar near the bottom of Figma—just look to the far left for the frame tool. Once selected, we can either choose from a preset size from the Properties Panel on the right, or we can manually create a frame on the canvas or inside an existing frame, adjusting it to the needed size.
Oh! And here’s something great about frames within Figma. Not only can the frames we create hold all of the content of our design, but they also allow for all of the same styling properties that objects and shapes can have, such as fills, strokes, and effects. This means we can substantially simplify our layer list as we design.
For example, if I create a button without a frame, I’d first need to draw and style a rectangle, add text, center align everything, and then group the layers together so everything can remain connected. With frames, however, I’d only need to make the frame, add the proper styling to that frame, and then place the text layer within that frame. This reduces an entire layer, which may not sound like much but can add up throughout an entire component library. And because it’s no longer necessary to click into our group to find the shape if we need to adjust our button’s appearance, we can also work a little more efficiently.
Constraints
If we think of frames as containers that hold the various objects and layers of a design, constraints are the tool that lets us specify the positioning for those layers or objects if the container they sit within should ever grow or shrink in size. Constraints are only available for objects placed within a frame and won’t be accessible when using a group. A group will inherit its size based on the size of the objects within it.
With an object that’s inside of a frame selected, constraints can be found within the Properties Panel on the right-hand side of Figma, and we have several options to choose from. Figma lets us pin objects to the left, top, right, bottom, center, left + right, or top + bottom. Or, with no constraints selected, we can let the object scale and adjust its position as a percentage of the frame’s dimensions.
To show how constraints can be helpful, imagine we’re working together to recreate a Table Row from iOS, where we have an icon and label on the left side, with a toggle on the far right. This will eventually become a component for us to share with the entire team, and because it will be widely available, we want to ensure that it will work well for any iPhone screen size, from the iPhone 13 mini all the way up to the iPhone 16 Pro Max, and eventually, the iPhone 20 Pro Max Ultra Plus.
I’ll begin by selecting the frame tool and drawing a container of the size I need. Because this is a frame, I can apply a background, drop shadow, and even round the corners, too!
With our Table Row selected, if we try to resize it, we may notice that the icon and label stay over towards the left, but the toggle isn’t anchored to the right side. This frame isn’t responsive. How come?
By default, anything we place inside a frame will have a top-left constraint, meaning as the parent frame resizes, in this case, the Table Row’s container, all objects will stay pinned to the top and left side. Put another way, its X and Y positioning coordinates won’t change.
With one of the nested objects selected, Figma visually displays these constraints in the Properties Panel and on the canvas. It took years for me to notice, but the dotted blue lines we’re seeing represent the constraints that are applied. These lines head in the direction of the constraint.
Here, we have a dotted line heading towards the left side of the navigation bar and one that’s going towards the top. It’s a little silly, but what helps me understand what’s happening and why is to think of these lines as tiny ropes that are holding onto and supporting the item, and these ropes can’t change in length.
Knowing our constraints for everything inside of this frame are set to top-left, we can adjust them to help create a responsive component that works as intended for others on our team to use.
The toggle should always stay anchored to the right and centered. With the toggle selected on the right side within Figma’s Properties Panel, I’ll apply right and center constraints.
Next, I’d like for the icon to always remain on the left side but to be centered within the frame instead of pinned to the top. For this one, I’ll apply left and center constraints.
Finally, the label should remain vertically centered, but I’d prefer for it to stretch left and right to increase or decrease the space available to the label if the Table Row were to expand or narrow. For this one, I’ll hold the ⇧ Shift key and select both left and right, followed by the center constraint.
Our blue dotted lines, or our little ropes, adjust to reflect this change, and if we now resize our Table Row, we see it working as intended! Woohoo!
We can now turn this frame into a component for others on our team to use within files and designs of their own, and we now know that should it stretch or shrink, the items within will stay anchored to their respective sides.
While adding constraints may seem like a simple action combined with frames, they are an effective and easy way to ensure that components within your design system’s library will work and scale well for those using them. Perhaps the most challenging part is thinking through how they might be used, especially for more complex components, but if you’re like me, that’s often part of the fun!
In case you missed it...
For designers or teams wanting to become more comfortable with any of Figma’s newest features, such as multi-edit, typography variables, auto layout, or the world of design systems and how to structure them within the tool, I’d love to help with a personalized training session!
Recent bookmarks
- Turn your iPhone into a dumb phone. 📱
- Dive deep into Figma’s UI kit with Molly Hellmuth from UI Prep and Luis Ouriach from Figma. 🤿
- Nine beautiful Apple Park backgrounds shipped with macOS Sequoia are now scaled up to 4K, thanks to Basic Apple Guy. 🖼️
- Centaurs and Cyborgs on the Jagged Frontier 🤖✨
- Cabel Sasser from Panic. A talk worth every minute of your time. 📺
- Tim Cook shares his routine, interests, and how Steve Jobs Recruited him 🍎
Say hello!
I always love hearing from people, and if you enjoyed this, please reach out! You can find me on Threads @joeyabanks.