Luis shows where styles and variables can be used in the Figma UI.
Luis on the power of efficient aliasing when building typographic styles from primitives.
Luis brings up an interesting point about optical spacing and bounding boxes of icons. That’s been bugging me as well, but I don’t think there is a universal solution besides creating two sets of icons for vertical and horizontal alignment, which feels like an overkill for most systems.
A base UI kit from Advocates Luis and Jake is available in the Figma assets panel by default. It’s backed with a fully Code Connected React codebase. See Luis’ thread on how and why it was made.
A new video in Luis Ouriach’s “My First Variable” series on the typography support within variables. He explains using string and number variables to set font weights, combining weights with styles such as italics, grouping text variables, aliasing font families, naming conventions, and more.
That’s not all! Now, you can also select multiple pages by holding Shift to rename, delete, or move them in bulk.
Luis built a starter kit for system font stacks with 123 variables, including numbers and strings for font weights in CSS, SF Pro, Segoe UI, and Roboto fonts.
A starter kit from Luis Ouriach shows how to set things up with typographic variables.
Luis shared a set of recommendations on how to approach naming conventions for components, props, and values within Figma component libraries.
The new video series from Luis Ouriach on variables. The first part introduces the basic concepts and terminology — variable types, collections, modes, and aliases. The second part is “The 3 levels of variable” where Luis explains the definitions of primitive, semantic, and component-level variables. The third part focuses on creating your first variables and using modes to manage theming and densities.
In this episode of the “Tech Chat” podcast, Luis shares his journey, shedding light on how he found his path to Figma and what it’s like to serve as a design advocate.
Luis wonders whether variables scoping provides enough semantic modification to justify removing explicit “background”, “border”, and “text” color variables. “What’s stopping us from maintaining a single, primitive set of variables, named as such (e.g. red-300) to match your developer’s framework, relying on scoping alone to bridge this gap?” (See the discussion in this thread on X.)
I also like this take from Nate Baldwin — primitive color palettes are inherently semantic because every lightness stop is knowingly created to be used for specific use cases. He supports this idea with examples from his work on Adobe’s Spectrum color palette.
The Designer Advocate team recently hosted another Office Hours AMA focused on the use of variables in Figma. Watch Lauren Andres, Luis Ouriach, Chad Bergman, and Shana Hu discuss nested instance variant binding, applying boolean variables, and a few related questions.
In the second part of his monumental article, Luis covers “how to build adaptable, indexable, logical, and specific components as part of the FRAILS framework.” (The two-part series was strategically published before the Christmas break, giving you some extra time to read it.)
A new long-read from Luis Ouriach published in the Smashing Magazine: “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.”
Luis shows how to make slot components more useful by “outsourcing” the component composition to a main component, whilst still allowing for completely flexible content within.
Luis shows how to descope and unpublish primitive variables from the design system.
I rely on Luis for thought-provoking organization and design systems insights. In this thread, he discusses a way to translate brand colors into primitive and semantic color scales. At work, I use two design systems — one made by a smaller team where the same designers control the brand, design system, and product, and another from a larger organization with these are separate functions. I can see how his approach of explicitly using brand colors in primitives can work well in larger orgs.
It's pretty common when working with brand that you're provided with the "brand palette", which might not automatically translate into your token structure
— luis. (@disco_lu) October 9, 2023
To feed them into a global palette, you can still rely on the primitive / semantic relationship, but with an extra step pic.twitter.com/eZ61LLD9Ts
An interesting idea on using a composite style with an alpha channel for a hover state instead of creating variables for every variant. Won’t work in every case, but it was interesting to learn that the same overlay approach is used in Material 2.
An idea 💡
— luis. (@disco_lu) October 10, 2023
If your hover states are consistently within the same colour range e.g. adding 30% black to *anything* that is hovered, then instead of creating variables for every single variable's hover state, you create a single ––hover variable and use it within a composite style pic.twitter.com/k9QsF0xhBb
Luis is rethinking the relationship between variables and styles. The future typography tokens are a great example, but even today this applies to styles with more complicated color fills. TL;DR: “Create variables in a private space, feed them into styles, and publish only styles to consumers.”
I'm starting to (re)think variables a little bit
— luis. (@disco_lu) September 27, 2023
And looking at them more like "data sources" for our styles within systems
This means 1) locking variables away in the system 2) Maintaining styles for longer than I originally thought pic.twitter.com/VFX7JwemkK