F · 6 / 26
F — Flat design
Colour and shape, nothing pretending to be real.
Nothing pretending to be real.
Flat design is older than screens. In 1950s Switzerland the International Typographic Style built posters from a grid, plain sans-serif type and flat fields of colour, and let the layout carry the meaning. Nothing pretended to be paper, leather or glass.
Software came to it late. Microsoft’s Metro design language, grown out of the Zune player and made the face of Windows Phone 7 in 2010, set large type and solid tiles where rivals drew glossy buttons. In 2013 iOS 7 took the stitched leather and green felt out of Apple’s apps, and flat became the default. A year later Google’s Material Design put a little depth back: flat sheets of colour, stacked, with shadows to show what sits above what.
The method is subtraction. No bevels, no gradients, no shadows, so shape, colour and type do all the work and have to be chosen well. A button must look pressable from its shape and place alone, and bright colours need checking: on yellow or green, white text disappears.
Money, at a glance.
Tally, a budgeting app drawn flat. Pick a month, tap a category to filter, search the list. Every state you see is a change of fill.
- Balance
- €10,922.80
- +€2,536.00 this month
- In
- €3,400.00
- Salary, on the 1st
- Out
- €864.00
- 74% of a €1,170.00 budget
Spending by category
Budgets
- Groceries€103.60 left€296.40 of €400.00
- TransportOver by €6.60€126.60 of €120.00
- Eating out€69.40 left€110.60 of €180.00
- Bills€127.60 left€192.40 of €320.00
- Fun€12.00 left€138.00 of €150.00
Transactions
17 transactions
- Concert ticketsSep 30 · Fun−€78.00
- Pizza nightSep 29 · Eating out−€38.90
- Bike repairSep 27 · Transport−€22.00
- Northside MarketSep 26 · Groceries−€102.15
- Record shopSep 24 · Fun−€36.00
- Ramen IchiSep 22 · Eating out−€27.40
- TaxiSep 20 · Transport−€18.60
- Each colour has one jobA category keeps its colour in the ring, the bars and the list.
- Shape says what you can pressFilled blocks and edged fields act. Plain text only reads.
- State is a fill, not a shadowThe chosen month and category turn ink. Nothing lifts.
- Words beside every colourOver budget says so in text, with a mark at the limit.
Thirteen parts, every state.
Each part with its states side by side, then the real thing to try. Hover is a darker fill, focus an ink ring, disabled a quiet mist. No part casts a shadow.
Button
Text field
Edges at 4.8:1 so the field shows without a shadowSelect
Switch, checkbox, radio
Slider
Progress
Segments and tabs
€864.00 out in September, 34% of it on groceries.
List rows
Chosen row: a blue edge and a tickCard and loading
Toast
Modal
A flat scrim, not a blur; the dialog is plain whiteSteps
- Done: Account
- 2Budget
- 3Goals
- 4Done
Badges and avatars
- MK, online
- JS, away
- AR, online
Pull it apart.
A flat icon is a few plain shapes on a grid, and nothing else. Drag to take one to pieces, then switch on the long shadow that every flat icon wore in 2013.
Home is one triangle, one rectangle and one rectangle cut out, on a 24-unit grid. Nothing else.
Around 2013, flat icons grew a long shadow at 45°. Switch it on to see the fad, and how much it adds to read.
Six fills and a rule.
The whole system in a page: colours with the ink that reads on them, one typeface, state fills, radii and spacing. Elevation is not a token here.
- --blue#2d6cdfPrimary actions. White text, 4.9:1
- --yellow#f2b632Highlights. Ink text, 9.5:1
- --red#e8553eAlerts and errors. Ink text, 4.8:1
- --green#2fb380Success and income. Ink text, 6.5:1
- --ink#161b26Text, 17.2:1 on white
- --ink-2#4d5566Labels and notes, 7.5:1
- --edge#6b7385Field edges, 4.8:1
- --mist#eef1f6Wells, tracks and quiet panels
- --line#dfe3eaCard borders and rules
- --red-ink#c23a24Error text on white, 5.4:1
- --green-ink#1e7a56Income text on white, 5.3:1
- --blue-ink#1f58c4Links, and blue on hover, 6.5:1
White on blue · 4.9:1Passes AA. Ink would be 3.6:1.
- 96pxDisplayBold 700, shown at 44px
- 60pxHeadingBold 700, shown at 44px
- 22pxLeadLight 300
- 18pxBodyRegular 400
- 13pxLabelMedium 500
- Default#2d6cdf
- Hover#1f58c4
- Pressed#1a4fb0
- Disabled#eef1f6
Elevation: none. A state is a fill one step darker, and the change is instant.
- 6px
- 10px
- 16px
- 24px
- Pill
- 4
- 8
- 12
- 16
- 24
- 32
- 48
:root {
--blue: #2d6cdf;
--yellow: #f2b632;
--red: #e8553e;
--green: #2fb380;
--ink: #161b26;
--ink-2: #4d5566;
--edge: #6b7385;
--mist: #eef1f6;
--line: #dfe3ea;
--red-ink: #c23a24;
--green-ink: #1e7a56;
--blue-ink: #1f58c4;
--surface: #ffffff;
/* No shadows. A state is a fill, one step darker. */
--blue-hover: #1f58c4;
--blue-pressed: #1a4fb0;
--border: 2px solid var(--line);
--focus: 3px solid var(--ink);
--radius-tag: 6px;
--radius-control: 10px;
--radius-card: 16px;
--radius-panel: 24px;
--radius-pill: 999px;
--font: 'Rubik', system-ui, sans-serif;
--ease: cubic-bezier(0.16, 1, 0.3, 1);
--swap: 0s; /* colour changes never fade */
}
Do
- Let shape, colour and type carry everything. If it needs a shadow to read, redraw it.
- Give each colour one job and keep it there, page after page.
- Check every fill for contrast. Bright colours usually want dark ink, not white.
- Label icons and make buttons look like buttons by shape and place, not colour alone.
Don’t
White on a bright fill
White on yellow is 1.8:1, far under the 4.5:1 that body text needs. Bright fills want dark ink.A word that might be a button
Bare blue text could be a link or an action, and nobody can tell which. Give every action a shape.Depth smuggled back in
Long shadows on everything, then gradients, then gloss. Each one is a step back towards the skeuomorphism flat left.
In the wild
Where the style shows up outside this page.
Munich Olympics pictograms
Otl Aicher · 1972Figures on a strict grid of angles: no depth, no outline, one colour each.Windows Phone 7
Microsoft · 2010Metro: live tiles in solid colour, type as the interface.iOS 7
Apple · 2013The year leather and felt left the iPhone: thin type, plain fills, hairline icons.Material Design
Google · 2014Flat colour on paper-like layers, with shadows kept for meaning only.