Design Systems Hot Takes

Low inspectations

5 min read

The design hand-off process is often troublesome because of intentions lost in translation. We’ve created expertise in this space between design and engineering to help smooth the exercise but we often try to find ways to bridge the gap without human intervention. One of these ways is generating resources to use from the design tool.

I saw a great Figma for developers video shared on social media last month. This is definitely a part of the role that isn’t often taught, leaving most engineers stumbling around the interface. There’s a lot of helpful points made in the short presentation but I need to be critical about one area in particular; the inspect panel.

Proceed with caution

I consider the inspect panel to be a trap. Admittedly, calling it a trap is dramatic but it’s also meant to warn folks who accept what the panel provides verbatim; possibly believing it’s the blessed approach. I’ll be referring to Figma’s inspect panel in the following examples as the most popular tool to date but any design tool feature that claims to output code should be treated with skepticism.

Coordinate system

Figma, like many design tools, place assets on a coordinate system. Elements are added to the artboard and positioned relatively to the top-left corner. This isn’t native to web layout, which works as a document where elements added are positioned relative to each other. DOM elements are situationally-aware of their ancestors and siblings to adjust their position. Could you change the positioning strategy for web elements? Yes, but you’ll have a much harder time getting them to be accessible and responsive when you break out of the native document flow. Until design tools present the web using native alignment, developers will be left to intepret what a fixed coordinate system should do within document flow. The auto-layout concepts gets us to begin crossing this bridge but we’re not entirely on the other side yet.

💡 Shy from properties that update or declare the explicit position of an element such as position, top, and left. Consider using modern CSS techniques like display: flex; to place the element in the preferred location. Work with the designer to learn about the intentions between different user and device preferences.

Hyper local font styles

Another feature of the web is that text styles cascade down to lower elements. You don’t need to explicitly provide the text styles at every bit of copy. Especially if you limit the number of fonts to improve performance. If you set the font styles for body copy on the <body/> element, you don’t need to reduplicate the font definition at the element which contains the copy. Unfortunately, Figma provides text styles for every individual bit of copy in the artboard. While you can be sure that this bit of text will get the styles when you copy from the inspect panel; you could optimize for less CSS by setting the appropriate style higher in the cascade. This is also great for when you need to update the font styles globally.

💡 Set the font properties higher up (like at the <body/>) to allow the natural cascade to inform lower elements. Only update the property at the location where it doesn’t match with the cascade.

Missing units

Figma and other design tools that claim they are for web design do not have web units. The rem unit is particularly important on the web, but other units like percentage are also valuable when communicating layouts. Just watch out for magic numbers. The inspect panel is notorious for displaying verbose width and height values in pixels. Expert CSS authors will tell you that applying these as given in your code is bad practice. We’d rather allow the content to dictate the size of the container or base the dimensions off of some other relative proportion so every container is flexible to any content.

💡 Ignore height and width properties when found and let the content determine how large the container should be. Consider max-width or max-height for large composition constraints. Work with the designer to determine what web units would work best in areas where they are needed. Avoid using pixels units for layout properties. Using pixels for decorative elements might be appropriate (ie. border-width).


Stop, collaborate, and listen

Ultimately, your developer should be empowered to provide feedback on the design. Likewise, the developer shouldn’t depend on what the expect panel presents as perfectly appropriate. There is an expertise in translation that must occur which only comes with practice and experience. Work together towards finding the best execution of the intended design. Dare I say, even include them in the process. This can be the start of a beautiful partnership.