Layout
Updated in October 2026
Use layout grids and standard spacing units to structure content and keep digital services consistent across screen sizes.
When to use layout and spacing
Use layout and spacing to create clear, consistent page structures across responsive services, including desktop, mobile and clinical systems.
It helps users understand and scan information quickly, identify relationships between content and navigate services across different screen sizes.
When not to use standard page layouts
Do not use standard page layouts when content requires a specialised or immersive experience.
This can include:
- full-screen data dashboards
- interactive workspaces or canvas-based tools
- third-party embedded applications
In these cases, adapt the layout to support the user need while maintaining accessibility and usability principles.
How to use layout and spacing
Use the layout grid and spacing scale consistently across your service. Consistent layout patterns help create predictable experiences and establish a clear visual hierarchy.
You should:
- use responsive layouts that adapt to different screen sizes
- follow the grid system for page structure and content placement
- use consistent spacing between related content and components
- maintain appropriate line lengths for readability
- keep layouts simple and focused on user needs
Screen sizes and breakpoints
Design layouts to work across a range of screen sizes.
Screen size and responsive breakpoints:
- Mobile: 320px and above
- Tablet: 641px and above
- Desktop: 769px and above
- Large Desktop: 990px and above
Grid system
Full-width layout
Use a full-width layout for content-heavy pages and services that require maximum screen space.
You should:
- use 40px padding on the left and right of the main page container
- use 32px padding at the top and bottom of content areas
- maintain a 40px gap between major page sections, such as navigation, headings and primary content
<a class="nhsw-back-link" href="#">Back</a>
<h1 class="nhsw-h1">Full-width layout</h1>
<p class="nhsw-body">Content uses the full width of the page, with side padding from the main page container.</p>
{% from "back-link/macro.njk" import nhswBackLink %}
<main class="nhsw-main-wrapper" id="maincontent">
<div class="nhsw-fluid-container">
{{ nhswBackLink({ href: "#" }) }}
<h1 class="nhsw-h1">Full-width layout</h1>
<p class="nhsw-body">Content uses the full width of the page, with side padding from the main page container.</p>
</div>
</main>
One-half width layout
Use a one-half width layout when content is shorter or line length needs to be constrained for readability. On smaller screens, columns should automatically stack into a single-column layout.
You should:
- use 40px outer padding
- maintain a 40px gap between columns
- use standard 32px vertical padding and 40px section spacing
<a class="nhsw-back-link" href="#">Back</a>
<h1 class="nhsw-h1">One-half width layout</h1>
<div class="nhsw-grid-row">
<div class="nhsw-grid-column-one-half">
<p class="nhsw-body">Use a one-half column when content is shorter or line length needs to be constrained for readability.</p>
</div>
<div class="nhsw-grid-column-one-half">
<p class="nhsw-body">On smaller screens, columns stack into a single column.</p>
</div>
</div>
{% from "back-link/macro.njk" import nhswBackLink %}
<main class="nhsw-main-wrapper" id="maincontent">
<div class="nhsw-fluid-container">
{{ nhswBackLink({ href: "#" }) }}
<h1 class="nhsw-h1">One-half width layout</h1>
<div class="nhsw-grid-row">
<div class="nhsw-grid-column-one-half">
<p class="nhsw-body">Use a one-half column when content is shorter or line length needs to be constrained for readability.</p>
</div>
<div class="nhsw-grid-column-one-half">
<p class="nhsw-body">On smaller screens, columns stack into a single column.</p>
</div>
</div>
</div>
</main>
Patient header layout
Use the patient header layout where patient information needs to remain visible and clearly separated from page content.
You should:
- use 16px side margins and grid gutters
- apply 16px internal padding within the patient summary area
- leave 32px spacing between the patient header and page content
<a class="nhsw-back-link" href="#">Back</a>
<section class="nhsw-patient-header" aria-label="Patient details">
<div class="nhsw-patient-header__inner">
<div class="nhsw-patient-header__row nhsw-patient-header__row--identity">
<p class="nhsw-patient-header__name">ANDERSON, Mary (Ms)</p>
<dl class="nhsw-patient-header__details">
<div class="nhsw-patient-header__item">
<dt>Date of birth:</dt>
<dd>4 Apr 1990 (35y 5m)</dd>
</div>
<div class="nhsw-patient-header__item">
<dt>NHS number:</dt>
<dd>123 456 7890</dd>
</div>
<div class="nhsw-patient-header__item">
<dt>Gender:</dt>
<dd>Female</dd>
</div>
</dl>
</div>
<div class="nhsw-patient-header__row">
<dl class="nhsw-patient-header__details">
<div class="nhsw-patient-header__item">
<dt>Adverse reactions:</dt>
<dd>Peanuts, Milk, Lactose, Eggs, Shellfish</dd>
</div>
</dl>
<a class="nhsw-link" href="#">View or change</a>
</div>
</div>
</section>
<h1 class="nhsw-h1">Patient record</h1>
<p class="nhsw-body">Patient information stays visible above the page content and is clearly separated from it.</p>
{% from "back-link/macro.njk" import nhswBackLink %}
<main class="nhsw-main-wrapper" id="maincontent">
<div class="nhsw-fluid-container">
{{ nhswBackLink({ href: "#" }) }}
<section class="nhsw-patient-header" aria-label="Patient details">
<div class="nhsw-patient-header__inner">
<div class="nhsw-patient-header__row nhsw-patient-header__row--identity">
<p class="nhsw-patient-header__name">ANDERSON, Mary (Ms)</p>
<dl class="nhsw-patient-header__details">
<div class="nhsw-patient-header__item">
<dt>Date of birth:</dt>
<dd>4 Apr 1990 (35y 5m)</dd>
</div>
<div class="nhsw-patient-header__item">
<dt>NHS number:</dt>
<dd>123 456 7890</dd>
</div>
<div class="nhsw-patient-header__item">
<dt>Gender:</dt>
<dd>Female</dd>
</div>
</dl>
</div>
<div class="nhsw-patient-header__row">
<dl class="nhsw-patient-header__details">
<div class="nhsw-patient-header__item">
<dt>Adverse reactions:</dt>
<dd>Peanuts, Milk, Lactose, Eggs, Shellfish</dd>
</div>
</dl>
<a class="nhsw-link" href="#">View or change</a>
</div>
</div>
</section>
<h1 class="nhsw-h1">Patient record</h1>
<p class="nhsw-body">Patient information stays visible above the page content and is clearly separated from it.</p>
</div>
</main>
Mobile layout
Keep mobile layouts to a single column to ensure content adapts cleanly across smaller viewports.
You should:
- apply 16px side margins across mobile viewports
- leave 24px space above the back link or primary page title
- use 16px spacing between headings and supporting content
- use 4px spacing between labels and form controls
- separate form controls with 16px vertical spacing
- leave 32px to 40px spacing between content sections
- for container components like cards, use 16px internal padding with an 8px gap between titles and body details
<a class="nhsw-back-link" href="#">Back</a>
<h1 class="nhsw-h1">Mobile layout</h1>
<p class="nhsw-body">Keep mobile layouts to a single column.</p>
<div class="nhsw-form-group">
<label class="nhsw-label" for="layout-mobile-name">Full name</label>
<input id="layout-mobile-name" name="layout-mobile-name" class="nhsw-input" type="text">
</div>
<div class="nhsw-summary-card">
<div class="nhsw-summary-card__header">
<h2 class="nhsw-h3 nhsw-summary-card__title">Summary card</h2>
</div>
<div class="nhsw-summary-card__body">
<p class="nhsw-body">Container components keep their content in a single column on small screens.</p>
</div>
</div>
{% from "back-link/macro.njk" import nhswBackLink %}
<main class="nhsw-main-wrapper" id="maincontent">
<div class="nhsw-fluid-container">
{{ nhswBackLink({ href: "#" }) }}
<h1 class="nhsw-h1">Mobile layout</h1>
<p class="nhsw-body">Keep mobile layouts to a single column.</p>
<div class="nhsw-form-group">
<label class="nhsw-label" for="layout-mobile-name">Full name</label>
<input id="layout-mobile-name" name="layout-mobile-name" class="nhsw-input" type="text">
</div>
<div class="nhsw-summary-card">
<div class="nhsw-summary-card__header">
<h2 class="nhsw-h3 nhsw-summary-card__title">Summary card</h2>
</div>
<div class="nhsw-summary-card__body">
<p class="nhsw-body">Container components keep their content in a single column on small screens.</p>
</div>
</div>
</div>
</main>
Accessibility
Make sure page layouts, grids and content structures are accessible to all users.
- Present content in a logical reading order with a meaningful content sequence to ensure it can be understood when presented by assistive technologies. This supports WCAG 2.2 Success Criterion 1.3.2: Meaningful Sequence (Level A).
- Ensure layouts remain usable at different screen sizes and zoom levels without loss of information or functionality. This supports both WCAG 2.2 Success Criterion 1.4.10: Reflow (Level AA) and WCAG 2.2 Success Criterion 1.4.4: Resize Text (Level AA).
- Use spacing and visual hierarchy to help users understand relationships between content and interface elements. This supports WCAG 2.2 Success Criterion 1.3.1: Info and Relationships (Level A).
- Avoid excessively long line lengths, particularly in full-width layouts. Aim for a reading width of around 70 to 80 characters where possible. This supports WCAG 2.2 Success Criterion 1.4.8: Visual Presentation (Level AAA).
Source
Learn more about Layout in the NHS Digital Service Manual and Spacing in the GOV.UK Design System.
Follow discussions about Layout on NHS Digital Service Manual Github to see the latest updates and resolved issues.