{"id":"l-fig-1-2","courseId":"figma-ui-design","lang":"en","kind":"lesson","summary":"Use size, weight, position and space to create visual hierarchy, align elements to shared edges, and group content with the internal-less-than-external spacing rule.","html":"<p>Here is the first draft of Steady’s Today screen, the kind almost everyone makes on day one. The title “Today” is 18 px, the habit names are 17 px, the progress text is 16 px, and the streak counts are 16 px in the same grey. Everything is technically there. Nothing tells you where to look.</p>\n<p>That is the problem visual hierarchy solves: deciding what people see first, second and third, and making the screen say so without a single word of instruction.</p>\n<h2 id=\"sec-1\" tabindex=\"-1\">Hierarchy: rank before you style</h2>\n<p>Before you touch a font size, write the ranking down. For the Today screen it is:</p>\n<ol>\n<li>The habits still to do, with their check buttons (the job).</li>\n<li>Progress for the day (“3 of 5 done”).</li>\n<li>The screen title and date.</li>\n<li>Streak counts and the tab bar.</li>\n</ol>\n<p>You might expect the title to rank first. It doesn’t: people know they opened Steady. The title orients; the habits are the work. Now you have a reason for every size decision that follows.</p>\n<p>You have five tools for expressing rank, and they stack:</p>\n<ul>\n<li><strong>Size</strong>: bigger reads first. Steps need to be big enough to look intentional, roughly 1.25× or more.</li>\n<li><strong>Weight</strong>: bold pulls the eye even at the same size.</li>\n<li><strong>Color and contrast</strong>: dark text on a light background beats grey text; one accent color beats several.</li>\n<li><strong>Position</strong>: in left-to-right languages people start top-left; the bottom of a phone screen is easiest to reach with a thumb.</li>\n<li><strong>Space</strong>: an element surrounded by space reads as more important than one crammed between neighbours.</li>\n</ul>\n<p>Use two or three of these together, not all five on every element. If the title is bigger, bolder, colored <em>and</em> boxed, it starts shouting over the habits that actually matter.</p>\n<aside class=\"callout callout-tip\" role=\"note\"><p class=\"callout-title\"><svg class=\"icon \" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5\"/><path d=\"M9 18h6\"/><path d=\"M10 22h4\"/></svg><span><span class=\"callout-kind\">Tip</span><span class=\"callout-sep\" aria-hidden=\"true\"> · </span>The squint test</span></p>\n<p>Zoom out or blur your eyes until you cannot read any text. What shape stands out? On a good Today screen it is the habit list and its check buttons. If it is a decorative header image, your hierarchy is upside down.</p>\n</aside>\n<h2 id=\"sec-2\" tabindex=\"-1\">Alignment: fewer edges, calmer screens</h2>\n<p>Every distinct left edge on a screen is something the eye has to register. Draft one of Steady had five: the title at 20 px, progress text centered, habit icons at 16 px, names at 56 px and a button centered at the bottom. It looked busy without being busy.</p>\n<p>The fix is to choose a small number of shared edges and commit to them. On Steady, everything left-aligns to a 20 px margin, text inside rows starts on one line after the icon, and right-side controls (check buttons, chevrons) share a right edge 20 px from the screen side. Two edges plus one text column. The screen goes quiet.</p>\n<p>Centered text has a place: short, single-line moments like an empty state (“No habits yet”) or a modal title. It works badly for lists and paragraphs, because each line starts somewhere new and the eye has to search for it.</p>\n<h2 id=\"sec-3\" tabindex=\"-1\">Spacing: proximity is grouping</h2>\n<p>People read things that are close together as related. This is the Gestalt principle of proximity, and it is the most powerful grouping tool you have, more powerful than boxes and divider lines.</p>\n<p>The rule that follows from it is simple to state and easy to break: <strong>space inside a group must be smaller than the space between groups</strong>.</p>\n<figure class=\"diagram\"><svg class=\"diagram-svg\" focusable=\"false\" viewBox=\"0 0 680 260\" role=\"img\" aria-labelledby=\"l-fig-1-2-t1\"><defs><marker id=\"arrow-l-fig-1-2-1\" viewBox=\"0 0 10 10\" refX=\"9\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\"><path d=\"M0 0 L10 5 L0 10 z\" class=\"d-arrowhead\"/></marker></defs>\n  <title id=\"l-fig-1-2-t1\">Left: two habit rows where the gap inside each row is larger than the gap between rows, so the streaks look attached to the wrong habit. Right: the same rows with a 4 pixel internal gap and a 16 pixel external gap, so each name and streak group clearly.</title>\n  <text class=\"d-label-strong\" x=\"20\" y=\"28\">Inverted (confusing)</text>\n  <rect class=\"d-box\" x=\"20\" y=\"44\" width=\"280\" height=\"22\" rx=\"4\"/>\n  <text class=\"d-label\" x=\"30\" y=\"60\">Read 20 pages</text>\n  <rect class=\"d-box\" x=\"20\" y=\"88\" width=\"280\" height=\"22\" rx=\"4\"/>\n  <text class=\"d-label-muted\" x=\"30\" y=\"104\">12-day streak</text>\n  <rect class=\"d-box\" x=\"20\" y=\"118\" width=\"280\" height=\"22\" rx=\"4\"/>\n  <text class=\"d-label\" x=\"30\" y=\"134\">Drink water</text>\n  <rect class=\"d-box\" x=\"20\" y=\"162\" width=\"280\" height=\"22\" rx=\"4\"/>\n  <text class=\"d-label-muted\" x=\"30\" y=\"178\">3-day streak</text>\n  <text class=\"d-label-muted\" x=\"310\" y=\"82\">22</text>\n  <text class=\"d-label-muted\" x=\"310\" y=\"118\">8</text>\n  <text class=\"d-label-strong\" x=\"380\" y=\"28\">Correct</text>\n  <rect class=\"d-box-primary\" x=\"380\" y=\"44\" width=\"280\" height=\"22\" rx=\"4\"/>\n  <text class=\"d-label\" x=\"390\" y=\"60\">Read 20 pages</text>\n  <rect class=\"d-box-primary\" x=\"380\" y=\"70\" width=\"280\" height=\"22\" rx=\"4\"/>\n  <text class=\"d-label-muted\" x=\"390\" y=\"86\">12-day streak</text>\n  <rect class=\"d-box-accent\" x=\"380\" y=\"124\" width=\"280\" height=\"22\" rx=\"4\"/>\n  <text class=\"d-label\" x=\"390\" y=\"140\">Drink water</text>\n  <rect class=\"d-box-accent\" x=\"380\" y=\"150\" width=\"280\" height=\"22\" rx=\"4\"/>\n  <text class=\"d-label-muted\" x=\"390\" y=\"166\">3-day streak</text>\n  <text class=\"d-label-muted\" x=\"670\" y=\"72\" text-anchor=\"end\">4</text>\n  <text class=\"d-label-muted\" x=\"670\" y=\"114\" text-anchor=\"end\">16+</text>\n  <text class=\"d-label-muted\" x=\"340\" y=\"230\" text-anchor=\"middle\">The numbers are gaps in px. Groups form where the gaps are small.</text>\n</svg><figcaption>Internal spacing smaller than external spacing makes groups readable</figcaption></figure>\n<p>Applied to Steady: inside a habit row, the name and streak sit 4 px apart; each row is its own card, and cards sit 8 px apart; between the progress summary and the list there are 24 px; between the header and everything else, 32 px. Each step out gets more space, so the structure is visible before you read a word.</p>\n<aside class=\"callout callout-mistake\" role=\"note\"><p class=\"callout-title\"><svg class=\"icon \" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\"/><path d=\"M12 9v4\"/><path d=\"M12 17h.01\"/></svg><span><span class=\"callout-kind\">Common mistake</span><span class=\"callout-sep\" aria-hidden=\"true\"> · </span>Equal spacing everywhere</span></p>\n<p>Setting every gap to the same value, often 16 px, feels tidy but erases grouping. When the gap between a label and its value equals the gap between two unrelated sections, the screen becomes a flat stack. Vary spacing on purpose: small inside, larger between.</p>\n</aside>\n<h2 id=\"sec-4\" tabindex=\"-1\">Draft two</h2>\n<p>With a ranking, two edges and stepped spacing, the Today screen changes shape. The title becomes a clear 34 px bold, set apart by space rather than color. The progress line sits in its own block with 24 px around it. Habit names are 17 px semibold in near-black, streaks are 13 px in a muted grey directly beneath, and the check buttons on the right are 32 px circles with a 44 px tap area, the only accent color on the screen. Squint and you see a list with a column of targets on the right. That is the job.</p>\n<p>In the exercise below you critique a draft like the first one. Then the next lesson gives you the type scale and color rules that make these sizes and greys consistent instead of guessed.</p>\n","toc":[{"id":"sec-1","text":"Hierarchy: rank before you style","level":2},{"id":"sec-2","text":"Alignment: fewer edges, calmer screens","level":2},{"id":"sec-3","text":"Spacing: proximity is grouping","level":2},{"id":"sec-4","text":"Draft two","level":2}],"takeaways":["Hierarchy comes from contrast in size, weight, color and position; if everything is emphasised, nothing is.","Give each screen one primary element and decide its rank before you style anything.","Align elements to a few shared edges; every extra edge is something the eye has to process.","Space inside a group must be smaller than the space between groups, or people read the wrong things as related.","The squint test, blurring the screen until only shapes remain, shows whether your hierarchy survives without reading."],"further":[{"title":"Visual Hierarchy in UX (Nielsen Norman Group)","url":"https://www.nngroup.com/articles/visual-hierarchy-ux-definition/"},{"title":"Proximity Principle in Visual Design (Nielsen Norman Group)","url":"https://www.nngroup.com/articles/gestalt-proximity/"}],"quiz":[{"q":"<p>In a habit row, the name “Read 20 pages” and its streak “12-day streak” sit 16 px apart, while the rows themselves are 8 px apart. What will people perceive?</p>","options":[{"text":"Each streak looks like it belongs to the habit in the row below.","why":"Correct. Proximity beats intent. The streak is closer to the next row than to its own name, so the eye pairs it with the wrong habit."},{"text":"Nothing, because the rows have separate backgrounds.","why":"Backgrounds help, but the question has no card backgrounds. Even with them, inverted spacing still weakens the grouping."},{"text":"The rows read as more spacious and easier to scan.","why":"Tight gaps between rows with loose gaps inside them do the opposite. It blurs where one row ends."},{"text":"The streak looks more important than the name.","why":"Spacing changes grouping, not rank. Importance comes from size, weight and color."}],"answer":0},{"q":"<p>Which change creates the clearest hierarchy between a screen title and the habit names below it?</p>","options":[{"text":"Make the title 1 px larger than the habit names.","why":"A 1 px difference is too small to read as intentional. Hierarchy needs a step people notice at a glance."},{"text":"Make the title larger and bolder, and add more space below it than between the rows.","why":"Correct. Size, weight and space working together make the rank unmistakable."},{"text":"Put the title in all caps at the same size.","why":"Caps alone add texture, not much rank, and long all-caps text is slower to read."},{"text":"Give every habit name a different color so the title stands out.","why":"Many colors add noise and compete with the title instead of supporting it."}],"answer":1},{"q":"<p>A screen mixes centered headings with left-aligned lists and right-aligned buttons. What is the most useful first fix?</p>","options":[{"text":"Center everything so the screen looks symmetrical.","why":"Centered lists are hard to scan because each line starts at a different place."},{"text":"Add divider lines between each block to separate the alignments.","why":"Dividers hide the symptom. The ragged edges are still there."},{"text":"Increase the font size so alignment matters less.","why":"Larger text makes misalignment more visible, not less."},{"text":"Align most content to one shared left edge and keep exceptions deliberate.","why":"Correct. One strong edge lets the eye travel down the screen without hunting for where each line starts."}],"answer":3},{"q":"<p>What does the squint test tell you?</p>","options":[{"text":"Whether your text meets the WCAG contrast ratio.","why":"Squinting is a rough check of emphasis, not a measurement. Use a contrast checker for ratios."},{"text":"Whether every element is aligned to the layout guide.","why":"Blurred shapes hide exact edges. Use guides and the inspector for alignment."},{"text":"Whether the most important element still stands out when details disappear.","why":"Correct. If the primary action vanishes into the blur, the hierarchy is too flat."}],"answer":2}],"exercise":{"kind":"choice","multiple":true,"options":["title-rank","regroup-streaks","one-edge","boxes-dividers","center-names","accent-streaks"],"correct":["title-rank","regroup-streaks","one-edge"],"title":"Critique the first Today screen","prompt":"<p>Sofia drops this draft into the team critique and asks: “Which changes fix the real problems, and what is the <em>because</em> for each?” Look at size, grouping and alignment.</p>\n<p>:::figure Draft one of Steady’s Today screen\n<svg viewBox=\"0 0 360 440\" role=\"img\" aria-labelledby=\"ex1\"></p>\n  <title id=\"ex1\">A phone screen draft: a small title Today at the same size as everything else, a centered progress line, and three habit rows where each streak label sits far below its habit name, nearly touching the next row.</title>\n  <rect class=\"d-box\" x=\"40\" y=\"10\" width=\"280\" height=\"420\" rx=\"24\"/>\n  <text class=\"d-label\" x=\"60\" y=\"52\">Today</text>\n  <text class=\"d-label-muted\" x=\"180\" y=\"80\" text-anchor=\"middle\">3 of 5 done</text>\n  <text class=\"d-label\" x=\"60\" y=\"122\">Read 20 pages</text>\n  <circle class=\"d-line\" cx=\"292\" cy=\"118\" r=\"10\" fill=\"none\"/>\n  <text class=\"d-label-muted\" x=\"60\" y=\"162\">12-day streak</text>\n  <text class=\"d-label\" x=\"60\" y=\"176\">Drink water</text>\n  <circle class=\"d-line\" cx=\"292\" cy=\"172\" r=\"10\" fill=\"none\"/>\n  <text class=\"d-label-muted\" x=\"60\" y=\"216\">3-day streak</text>\n  <text class=\"d-label\" x=\"60\" y=\"230\">Stretch 10 min</text>\n  <circle class=\"d-line\" cx=\"292\" cy=\"226\" r=\"10\" fill=\"none\"/>\n  <text class=\"d-label-muted\" x=\"60\" y=\"270\">30-day streak</text>\n  <rect class=\"d-box-accent\" x=\"40\" y=\"380\" width=\"280\" height=\"50\" rx=\"0\"/>\n  <text class=\"d-label-muted\" x=\"180\" y=\"410\" text-anchor=\"middle\">Today · Stats · Settings</text>\n</svg>\n:::\n<p>Select <strong>every</strong> change that fixes a real problem without creating a new one.</p>\n","hints":["Squint at the mock-up. What stands out, and which streak belongs to which habit?","Compare the gap between a name and its streak with the gap between that streak and the next habit.","Count the left edges and centered lines. Then ask whether adding boxes or color removes a problem or hides it."],"explanation":"<p>Three things are wrong. The title is the same size and weight as the habit names, so nothing ranks. Each streak is 40 px below its own habit but only 14 px above the next one, so proximity pairs it with the wrong row; put it 4 px under its name and give rows a larger gap. The centered progress line adds a second alignment axis for no reason; align it to the shared left edge. Boxes and dividers would decorate the inverted spacing instead of fixing it, centered names make the list harder to scan, and accent-colored streaks would compete with the check buttons, the one thing that should carry the accent.</p>\n","checkLabels":{},"optionText":{"title-rank":{"text":"Make the title clearly larger and bolder than the habit names.","why":"Correct. Right now title and habits are the same size, so the screen has no entry point. A clear size and weight step gives it one."},"regroup-streaks":{"text":"Place each streak a few pixels under its own habit name and increase the gap between rows.","why":"Correct. The streaks currently sit closer to the next habit than to their own. Small inside, larger between, fixes the grouping."},"one-edge":{"text":"Left-align the progress line to the same edge as the list.","why":"Correct. The centered line creates a second axis. One shared left edge makes the screen calmer and quicker to scan."},"boxes-dividers":{"text":"Wrap every row in a box and add a divider under each box.","why":"Boxes hide the spacing problem rather than solve it, and the screen gets heavier. Fix the gaps first; you may not need boxes at all."},"center-names":{"text":"Center the habit names so the list feels balanced.","why":"Centered list items start at different x positions, so the eye has to hunt for each one. Lists read best left-aligned."},"accent-streaks":{"text":"Color the streak counts with the accent color so they stand out.","why":"Streaks rank below the habits and their check buttons. Giving them the accent makes them compete with the primary action."}}},"words":810,"readMinutes":4}