Skip to content
Expert Guide Series

What Spacing Rules Should I Follow in App Interface Design?

Spacing in app interfaces is one of those things that nobody notices when it is right and everybody notices when it is wrong. A button that feels too close to the one above it, a label that seems to float away from the field it belongs to, a screen that looks cluttered despite having only four elements on it, these are spacing problems, and they create friction before the user has done anything. The feeling is hard to name but easy to have, and it costs you engagement before the design has had a chance to do its job.

Spacing treated as a finishing detail almost always becomes a structural problem later.

What makes spacing tricky is that it looks like a finishing detail but behaves like a structural decision. Get it right early and the rest of the layout falls into place. Get it wrong and you find yourself in review after review adjusting values by eye, with no system to return to and no shared language to hand off to developers. We have seen both outcomes, and the difference almost always traces back to whether spacing was treated as a system from the start or as something to sort out at the end.

This guide covers the core spacing concepts, how platforms handle them differently, where the human body sets the floor, and how to document spacing decisions so they survive into production.

The goal is a framework you can apply from the first screen rather than a set of corrections to make at the end.

The Core Spacing Concepts Every App Designer Needs to Know

Spacing in interface design is a family of related decisions that work at different scales and serve different purposes. Confusing them is where most problems start, so it helps to name them clearly before going further.

The first distinction is between space inside an element and space outside it. Padding sits between an element's content and its boundary. Margin sits between that boundary and whatever is next to it. Both create distance, but they belong to different parts of the layout model and are not interchangeable. Using margin where padding belongs, or the reverse, creates visual results that look approximately right but break under different content lengths or screen sizes.

Proximity and grouping

The second concept is proximity. Gestalt psychology tells us that elements close together read as a group, and elements with space between them read as separate. In an interface, this means spacing communicates structure. A tight gap between a label and its input field says they belong together. A generous gap between two form sections says they are separate. This is information, delivered without words.

Consistency as a system

The third concept is consistency. Spacing that varies by feel across a product creates visual noise even when individual values look fine in isolation. Users do not consciously compare gaps, but they sense when a layout lacks order. A consistent spacing system removes that noise and makes the product feel considered. This is why the most useful spacing decisions are not single values but rules, a scale, a grid, a set of relationships that apply across every screen.

Spacing Units, Grids, and the 8-Point System

The most widely used spacing system in app design is the 8-point grid. The principle is simple: every spacing value across the product, padding, margin, gap, component height, is a multiple of 8. So you would use 8, 16, 24, 32, 48, or 64 as your spacing values, and nothing in between.

The reason this works is partly practical and partly perceptual. On the practical side, most common screen densities divide cleanly by 8, which means 8-point values render sharply without fractional pixels. On the perceptual side, a constrained scale forces decisions into a limited set of relationships, and limited relationships produce visual rhythm. When every gap on the screen comes from the same scale, the layout feels ordered even to users who could not say why.

When to use 4-point increments

For finer control, the gap between an icon and its label, or the padding inside a small chip or tag, a 4-point system works alongside the 8-point grid. Think of it as a half-step: still systematic, still consistent, but allowing tighter relationships where 8 points would feel too loose. The key is using 4-point values only for small, contained elements, and keeping the larger structural spacing on 8-point multiples.

Units matter as much as values. iOS works in points, Android in density-independent pixels (dp), and web in pixels or rems. These units exist to keep layouts consistent across devices with different pixel densities. An 8dp gap on a low-density Android screen and an 8dp gap on a high-density one will look the same to the user, even though the actual pixel count differs. Design and development need to agree on units early, because a mismatch here is invisible in design files and disruptive in production.

UX/UI design built around real psychology

We design app interfaces around how people actually think and behave. User research, psychology-driven UX/UI design and technical specs delivered as one complete package.

See how we work Get started

No commitment

Padding vs. Margin vs. Gap: Using Each Correctly

These three terms describe different things, and using them interchangeably in a design file or a handoff document creates real problems for the developers implementing the layout.

Padding is internal. It sits between an element's content and its edge. A button with 16 points of horizontal padding has 16 points between the label text and the button's left and right boundaries. Padding affects the size of the element itself, more padding means a larger element, assuming the background and border extend to the element's edge. This is relevant for touch targets: padding is often the mechanism that makes a small-looking button large enough to tap reliably.

Padding makes a small-looking button large enough to tap reliably, without changing its apparent visual size.

Margin is external. It creates space between one element and the next. Unlike padding, margin does not affect the element's own size, it affects its position relative to its neighbours. In practice, margin is less commonly used in modern app layout systems than it used to be, because component-based frameworks tend to handle spacing through gap and layout containers rather than individual margins. But the concept still applies, and designers who understand what margin does will write clearer specifications.

Gap and layout containers

Gap is the spacing between items inside a flex or grid container. It is cleaner than margin for managing the space between a list of items, because it applies uniformly without requiring each item to know about its siblings. When designing a vertical stack of cards or a row of filter chips, gap is almost always the right property to reach for. The table below maps each spacing type to its typical use.

Type Where it lives What it affects Common use
Padding Inside an element Element size and touch area Buttons, inputs, cards
Margin Outside an element Position relative to neighbours Section offsets, page edges
Gap Between items in a container Spacing within a list or grid Card stacks, chip rows, nav items

Spacing and Visual Hierarchy

Hierarchy in an interface tells users what to look at first, what belongs together, and what is secondary. Typography and colour carry a lot of that work, but spacing does too, and it does it quietly, in ways users process without reading.

The core rule is that related elements sit close together, and separate elements sit further apart. A heading followed by its descriptive paragraph should have less space between them than there is between that paragraph and the next section heading. The gap signals the relationship. When designers apply uniform spacing across a screen regardless of content relationships, the hierarchy collapses, everything looks equally related and nothing reads as grouped.

Using space to create emphasis

White space, or more accurately, empty space, since screens are rarely white, creates emphasis by contrast. An element with generous space around it draws the eye. This is why a primary call-to-action button tends to sit in its own zone with clear breathing room above and below. The space is working. It tells the user that this element is different from the ones around it without requiring any additional visual treatment.

Check your hierarchy by squinting at the screen. If you cannot tell which element is primary, the spacing is not doing enough work. Increase the gap between sections before touching colour or type size.

The practical risk is over-spacing. A layout with too much white space between everything reads as empty rather than considered, and it can make content feel disconnected. The goal is graduated spacing, tight within components, generous between sections, so the rhythm of the layout mirrors the structure of the content.

Touch Targets and Minimum Spacing for Interactive Elements

The human finger does not have pixel-level precision. A fingertip covers roughly 1 cm × 1 cm of screen surface, which means any interactive element smaller than that area will produce mistaps. This is a physical constraint that spacing and sizing decisions have to respect.

Platform guidelines formalise this. Apple's Human Interface Guidelines recommend a minimum touch target size of 44×44 points for interactive elements. Google's Material Design sets the minimum at 48dp. These are floors, not targets to aim for, elements smaller than these values will cause problems for a meaningful share of users. According to Droids on Roids, 2025, 84% of mobile apps fail to implement touch targets correctly, producing mistaps and frustration that could have been avoided with a cleaner spacing approach.

Spacing between targets matters too

A touch target of 44 points helps, but if two targets sit only 4 points apart, users will still hit the wrong one. The spacing between interactive elements matters as much as the size of each one. As a working rule, interactive elements should have at least 8 points of space between their tap areas, not their visible boundaries, their full touch areas. On screens with dense controls, the 8-point grid proves its worth: it naturally produces gaps that are large enough to separate targets reliably.

Size your touch targets by the tap area, not the visual element. A 20-point icon can still have a 44-point tap area if it sits inside a transparent container that captures the touch. This keeps the layout visually clean while meeting the minimum size requirement.

Thumb reach across the screen is a second constraint worth designing for. Controls that users need frequently should sit in the lower two-thirds of the screen, where the thumb naturally lands without repositioning the hand. Spacing elements vertically with this in mind reduces effort and errors.

Platform-Specific Spacing Conventions: iOS and Android

iOS and Android do not use identical spacing conventions, and building for one while ignoring the conventions of the other produces layouts that feel slightly wrong to users of each platform, even when those users cannot identify the source of the feeling.

iOS works with a standard horizontal margin of 16 points from the screen edge to content, with 20 points used in some contexts. Navigation bars, tab bars, and modals follow specific sizing guidelines that are part of the UIKit framework. Apple's design language favours clean white space and generous internal padding, particularly in list and card components. Deviating from these defaults requires a clear reason, because the defaults are what iOS users expect.

Android's Material Design spacing tokens

Material Design on Android uses a 16dp default margin for most content areas, with an 8dp grid underlying component spacing. Material 3 introduced a more expressive approach to spacing, including dynamic colour and shape tokens that work alongside spacing tokens as part of a unified system. Android users expect slightly denser layouts than iOS users, partly because Material Design has historically accommodated more information per screen.

The practical implication is that a single design that works on both platforms usually needs platform-specific adjustments rather than a single set of spacing values. Components should be built against each platform's conventions and then shared where the values genuinely align. A table mapping shared versus platform-specific values, maintained in the design system, saves time during handoff and reduces the back-and-forth between design and development during QA.

How Spacing Decisions Compound Into Rework

Spacing decisions made early without a system tend to look fine at the component level and break at the screen level. A designer might set padding on a card component, then set a different margin on the screen that contains it, and then use a third value for the gap between cards, each choice made locally, none of them coordinated. The result is a screen that looks broadly right until someone tries to build it and finds three different values doing the same job, with no rule to determine which one wins when they conflict.

The rework cost is concrete. A developer who builds a screen from inconsistent spacing specifications will ask questions, make judgment calls, or implement it incorrectly. Any of those paths costs time. If the inconsistency is found during QA, the screen goes back to design and then back to development. If it is not found and the product ships, users experience the result directly.

When spacing disagreements surface late

We worked on a football-focused social app where the client's budget was tight and the expectation was a fast path to launch. Spacing and component decisions that were left undefined early in the project became the source of repeated back-and-forth in the final stages, when there was no time to resolve them cleanly. The client's instinct was to fix things visually, one screen at a time, rather than stepping back to set shared rules. That approach cost more time than establishing a simple system would have at the start.

The pattern repeats across products of all sizes. Spacing treated as a detail to sort out later compounds into rework because every screen inherits the undefined decisions from the ones before it. A spacing system, even a simple one based on four or five values, eliminates this by giving everyone a shared reference from the start.

Responsive Spacing Across Screen Sizes and Densities

A spacing system built on fixed values works well for a single screen size. Applied to the range of devices a modern app runs on, from a compact 375-point-wide iPhone to a larger Android tablet, fixed values start to show their limits. What reads as comfortable padding on a small phone can look disproportionately large on a tablet, and tight spacing that works on a tablet can feel cramped on a small handset.

The solution is responsive spacing: values that change based on available screen width, usually through a small set of defined breakpoints. Rather than defining one padding value for a card, you define one for compact widths and one for regular or large widths. The transition can be handled in code, but it needs to be specified in the design, a handoff that only shows one breakpoint leaves developers guessing about the rest.

Density and pixel ratio

Screen density adds another layer. A 1x display renders one physical pixel per logical point. A 3x display renders nine. Spacing values defined in points or dp automatically scale with density, which is why platform units matter. If a designer specifies spacing in pixels without accounting for density, a value that looks right on their screen will look wrong on a high-density device. Keeping specifications in platform units, points for iOS, dp for Android, means the density scaling is handled automatically.

Test spacing decisions on actual devices, not just in the design tool. Simulators help but do not fully replicate the physical experience of reaching a target with a thumb. A gap that looks fine on screen can feel tight in use.

Documenting Spacing as a Design System Component

A spacing system is only as good as its documentation. Values that live in the designer's head, or scattered across individual file components, do not survive handoff or team growth. Spacing needs to be documented as a named, shared component of the design system, referenced by name, not by value, wherever it is used.

The practical form this takes is a spacing scale: a named set of values that the team agrees to use and reference consistently. Names like "spacing-sm", "spacing-md", "spacing-lg" are common. What matters is that the names are meaningful, the values are locked, and both design and development reference the same set. When a designer uses "spacing-md" and a developer reads "spacing-md" from the same token, the value is never ambiguous.

Connecting spacing to components

Each component in the design system should document its own spacing: what padding it uses internally, what minimum margin or gap it expects when placed alongside other components, and how those values change across breakpoints. This is the information a developer needs to implement the component correctly without asking. A component page that shows only the visual design and no spacing specifications creates a gap that fills with guesswork.

Version control matters here too. When spacing values change, and they do, as the product matures, the system needs to record what changed, why, and what it replaced. Without that record, teams find themselves with conflicting values in production and no clear source of truth to revert to.

Handing Spacing Specifications to Developers

The design-to-development handoff is where spacing decisions are tested against reality. A designer who has been working within a system that feels clear can produce a handoff document that still leaves a developer with open questions, because the document shows values but not rules, or shows components in isolation but not in context.

The most useful handoff for spacing specifies three things clearly. First, the spacing scale: the named tokens and their values, in the platform's units. Second, how those tokens are applied: which token is used for card padding, which for section gaps, which for button internal padding. Third, edge cases: what happens when content is longer than expected, or when a component is placed in a layout that has different constraints than the default.

Using design tools effectively for handoff

Modern design tools, Figma being the most common, allow spacing values to be defined as variables and applied consistently across components. A developer inspecting a component in a well-structured Figma file sees named spacing tokens rather than raw numbers. This is significantly cleaner than a file where every component has spacing applied manually, because the token name communicates intent, "this is the standard card padding", while a bare number communicates only magnitude.

  1. Define spacing tokens in the design file before building components.
  2. Apply tokens by name to all component padding, margin, and gap values.
  3. Export the token set in a format the development team can consume directly.
  4. Document any platform-specific variations alongside the shared token set.
  5. Review implementations against the spec during the first QA pass and update documentation where the specification was unclear.

The fifth step matters as much as the first four. Spacing documentation improves through use, and the feedback loop between design and development is where gaps in the specification become visible.

Conclusion

Spacing is a structural decision that runs through every component, every screen, and every interaction in the product. When it is treated as a system from the start, it creates the conditions for a layout that feels considered and a handoff that developers can actually build from. When it is left to instinct and adjusted screen by screen, it accumulates inconsistency that costs time in QA and frustration for users.

The principles here are not complicated. Use a consistent scale, preferably built on multiples of 8. Distinguish between padding, margin, and gap so specifications are precise. Respect platform conventions on iOS and Android. Size touch targets to meet the physical reality of the human finger. Document the system so it survives handoff and team changes. Test on real devices.

What makes spacing decisions stick is not the values themselves but the shared agreement around them. A team that references the same spacing tokens, uses the same language, and documents the same rules produces a product that feels cohesive because the decisions behind it were. That cohesion is what users feel, even when they cannot name it.

If spacing across your app feels inconsistent, or if handoff to development keeps producing layouts that drift from the design, the problem is usually a missing system rather than wrong individual values. Let's talk about your app's design system and where it needs to go.

Frequently Asked Questions

What is the difference between padding and margin in app interface design?

Padding sits between an element's content and its boundary, whilst margin sits between that boundary and whatever is next to it. They both create distance but belong to different parts of the layout model and cannot be used interchangeably. Using one where the other belongs can produce results that look roughly correct but break under different content lengths or screen sizes.

What is the 8-point grid system and why is it so widely used?

The 8-point grid system means every spacing value across a product, including padding, margin, and component height, is a multiple of 8, such as 8, 16, 24, or 32. It works because most common screen densities divide cleanly by 8, so values render sharply without fractional pixels. It also constrains spacing decisions to a limited scale, which creates consistency across every screen.

Why does spacing feel like a finishing detail but actually behave like a structural decision?

Spacing set without a system early on tends to cause problems later, with designers adjusting values by eye in review after review and having no shared language to hand off to developers. When spacing is treated as a system from the start, the rest of the layout tends to fall into place naturally. Getting it wrong at the beginning means corrections accumulate rather than resolve.

How does spacing communicate structure to users?

Spacing uses the Gestalt principle of proximity, where elements close together read as a group and elements with space between them read as separate. In practice, a tight gap between a label and its input field signals they belong together, whilst a generous gap between form sections signals they are distinct. This is structural information delivered entirely without words.

What happens when spacing is inconsistent across an app?

Inconsistent spacing creates visual noise even when individual values look acceptable in isolation. Users do not consciously compare gaps, but they do sense when a layout lacks order, which makes the product feel unconsidered. A consistent spacing system removes that noise and gives the interface a sense of care and intention.

When should spacing decisions be made during the design process?

Spacing decisions should be made as a system from the very first screen, not left as something to sort out at the end. Treating spacing as a finishing detail almost always turns it into a structural problem that is difficult and time-consuming to resolve later. Starting with a clear scale and set of rules means every subsequent screen has something consistent to return to.

How should spacing decisions be documented so they survive into production?

Spacing decisions need to be captured as a defined system, including the scale, grid, and the relationships between components, rather than as individual one-off values. Clear documentation gives developers a shared language to work from and reduces the chance of values drifting during build. Without this, spacing that looked correct in the design file often ends up inconsistent in the finished product.

Do spacing rules differ between platforms such as iOS and Android?

Yes, different platforms handle spacing in their own ways, with each having its own conventions for things like touch targets, layout margins, and component sizing. Designers need to account for these platform differences rather than applying a single set of values across everything. Understanding how each platform behaves ensures the spacing feels native and appropriate to the context.