Start with rules, not individual screens

A button on one page and a card on another should feel as though they belong to the same interface. That consistency is easier to achieve when you define a small set of rules before polishing every screen. Choose a type scale, spacing increments, colors, border treatments, and corner radii that suit the project. These choices become a shared vocabulary: a card might use the same spacing increments as a form, while a button label follows the same typography rules as other controls.

Begin by reviewing the screens you already have. Look for repeated elements and small differences that do not serve a purpose, such as three nearly identical corner radii or several shades of gray used for the same kind of border. Consolidate those differences before adding more components. The aim is not to make everything look identical. It is to reserve differences for moments when they communicate a real change in purpose, importance, or behavior.

Define each component by its job

A component is more than a decorated rectangle. Before drawing variants, describe what it helps someone do. A primary button advances a key action; a secondary button offers an alternative; a card groups related information and may provide a path to more detail. Those roles should guide choices such as prominence, label wording, and placement.

Keep the number of variations manageable. A useful button set might include primary, secondary, and text styles, with sizes added only when the layout genuinely needs them. For cards, consider whether differences in content require distinct layouts or whether one flexible structure can accommodate them. If two variants have no clear use case, combine them. A smaller, well-understood set is usually easier to apply consistently than a large library of subtle options.

Set boundaries for content as well as appearance. Decide how a component handles a long button label, a card with no image, or a title that wraps onto another line. These cases often reveal whether a design is genuinely reusable or only works with the sample content used to create it.

Design states and interaction together

Components need to remain understandable when people use them. For an interactive control, consider its default, hover, focus, pressed, and disabled states where applicable. A loading state may also be needed if an action takes time. Each state should convey a meaningful change without making the control appear to be a different component.

Pay particular attention to focus indicators, readable text, and sufficiently large targets for comfortable interaction. Color alone may not be enough to explain a status or distinguish an action, so support it with a label, icon, or other visible cue when needed. A disabled button should look unavailable, but it should not become so faint that its label is difficult to read. If an action is unavailable, nearby guidance can help people understand why.

Cards deserve the same care. Make it clear whether the whole card is interactive or only a link within it. Avoid combining several competing click targets in a way that makes the next step hard to predict. Consistent interaction patterns build familiarity just as much as consistent colors and shapes do.

Build with reusable decisions

In a design file or codebase, reuse shared values rather than copying a finished component and editing each copy independently. Give colors, type styles, and spacing values names based on their roles, such as text-muted or space-small, rather than names tied only to their appearance. A role-based name makes it easier to understand when a value belongs in a component and to update it later.

Document the few decisions that someone else might otherwise have to guess. Note when to use each button style, whether card images need a fixed proportion, and what happens when content is missing. Examples showing a component with short and long content are often more useful than a perfect-looking sample alone. This documentation does not need to be elaborate; it needs to help the next person make a consistent choice.

Review the system in real layouts

A component can look balanced in isolation and still feel wrong in a page. Place buttons beside form fields, put several cards in a grid, and view both sparse and content-heavy examples. Check narrow layouts as well as wide ones. Watch for uneven spacing, awkward wrapping, crowded actions, and differences in visual weight that were not apparent in the component file.

When you find a problem, ask whether it belongs to the component or the layout around it. A card that needs consistent internal padding should be corrected at the component level. A grid that needs more space between cards is a layout decision. Keeping that distinction clear prevents one-off fixes from multiplying.

Consistency is an ongoing practice, not a final polish pass. As new needs appear, compare them with the existing rules before creating a new variant. Update the shared component when the need is broadly useful; make a deliberate exception when it is not. That habit keeps an interface coherent without preventing it from adapting.

Back to category ↗