The Grid System in detail
Pierre Bertet
on 16 June 2015
Tags: Design
Following the article “To converge onto mobile, tablet, and desktop, think Grid Units”, here is a technical description of the way the Grid System behave. We will go through the following concepts: a Grid Unit, a Layout, a Panel, and a Multi-Column Layout.
Grid Unit
A Grid Unit (GU) is a virtual subdivision of screen space. The actual size, in pixels, of one Grid Unit is assigned by the OS depending on the device’s screen size and density, freeing the developer from worrying about these device-specific details. For more description of the system and its benefits, please see this design blog posting.
Note: There are only three target short-side screens in the grid system: 40, 50, and 90. A Grid Unit can not contain a fractional number of pixels, so if the screen width can not divide by the desired number of Grid Units (40, 50, or 90), the remainder becomes side margins.
Grid Unit Calculation
The width of a single Grid Unit is calculated as follows:
- The width of the short edge of the screen is divided by the desired number of grid units (integer division).
- The remainder, if any, gives us the size of the margins.
- The quotient gives us the size of one Grid Unit.
In pseudocode:
margins = total_width mod layout_grid_units
grid_width = total_width - margins
grid_unit_width = grid_width / layout_grid_units
Example with a 540×960 screen and a 50 GU Layout
margins = 540 mod 50 = 40
grid_width = 540 - margins = 500
grid_unit = grid_width / 50 = 10
Example with a 1600×2560 screen and a 90 GU Layout
margins = 1600 mod 90 = 70
grid_width = 1600 - margins = 1530
grid_unit = grid_width / 90 = 17
Layout
A Layout represents the desired number of Grid Units for the short edge of the screen. That number will be used to calculate the width of a single Grid Unit in pixels, using the method described in the Grid Units section. For touch devices, the available layouts are 40 GU, 50 GU (phones or phablets), and 90 GU (tablets).
Landscape Grid Units Count Calculation
The number of Grid Units in Landscape Orientation is calculated as follows:
- The width of the long edge of the screen is divided by the width of of a single grid unit (integer division).
- The remainder, if any, gives us the size of the margins.
- The quotient gives us the number of Grid Units in the Landscape Orientation.
In pseudocode:
margins = total_width mod grid_unit_width
grid_width = total_width - margins
grid_unit_count = grid_width / grid_unit_width
Example with a 540×960 screen, 50 GU Layout and 1 GU = 10px
margins = 960 mod 10 = 0
grid_width = 960 - margins = 960
grid_unit_count = grid_width / 10 = 96
Panel
A Panel is a group of Grid Units. The amount of Grid Units can be any of the Layout sizes (according that it fits in the total amount of Grid Units), or variable for the remaining part.
Examples
90 GU Layout
147 GU Layout
Try more combinations using the Grid System Tool.
Multi-Column Layout
A Multi-Column Layout is a set of columns that can be defined inside of a panel. It contains the following properties:
- Side margins (before the first column and after the last column)
- Gutters (between two columns)
- Columns
It can use from one to six columns. In 40, 50 and 90 GU Panels, the Multi-Column Layouts have been manually selected. For other widths, an algorithm tries to find the best candidate.
The margins and gutters tend to have a 2 GU width, but it can vary depending on the available possibilities.
Examples
3 Columns in a 50 GU Panel
3 Columns in a 60 GU Panel (variable)
Try more combinations using the Grid System Tool.
Talk to us today
Interested in running Ubuntu in your organisation?
Newsletter signup
Related posts
Designing Canonical’s Figma libraries for performance and structure
How Canonical’s Design team rebuilt their Figma libraries, with practical guidelines on structure, performance, and maintenance processes.
Visual Testing: GitHub Actions Migration & Test Optimisation
What is Visual Testing? Visual testing analyses the visual appearance of a user interface. Snapshots of pages are taken to create a “baseline”, or the current...
Let’s talk open design
Why aren’t there more design contributions in open source? Help us find out!