Skip to content
nuggetof joy

Post · October 22, 2026

AMDE 355 – Typography, Motion & Composition (Week 6)

AMDE 355 · Advanced Web Design · Week 06

Typography, Motion & Composition.

Typography is more than choosing a font. It creates hierarchy, pace, tone, and movement across a page. This week, you’ll build a typographic system and use restrained motion to guide attention without distracting from the content.

Type systemsFluid typographyCSS transitionsMotion with purpose

01 / Typography is interface design

A strong typographic system makes a page easier to scan and gives it a recognizable voice. Instead of styling every heading independently, establish a small set of roles and use them consistently.

01

Hierarchy

Use size, weight, spacing, and contrast to show what matters first, second, and third.

02

Readability

Control line length, line height, and paragraph spacing. Small adjustments can make long text feel dramatically easier to read.

03

Personality

Choose typefaces that support the project’s tone, then use contrast deliberately rather than collecting too many fonts.

Design principle: create contrast with a plan. A large display headline, a comfortable body size, and a restrained supporting style are often enough.

02 / Build a small type scale

Define reusable CSS custom properties for your type system. These tokens make it easier to adjust the overall design later.

type-system.css · reusable type tokens
:root { /* Type scale and reading rhythm */ –type-body: 1rem; –type-heading: clamp(2rem, 5vw, 4.5rem); –type-subhead: clamp(1.25rem, 2vw, 1.75rem); –reading-width: 65ch; } body { font-size: var(–type-body); line-height: 1.65; } h1 { font-size: var(–type-heading); line-height: 0.98; letter-spacing: -0.04em; }
What does clamp() do? It sets a minimum, a flexible preferred value, and a maximum. The headline can scale with the viewport without becoming tiny or enormous.

03 / Tune the reading experience

A

Line length

Use a readable measure for paragraphs. The ch unit is useful for limiting text width based on character size.

B

Line height

Body text usually needs more vertical space than a large headline. Adjust each level for its role.

C

Responsive scale

Check your type at mobile, tablet, and desktop widths. A good scale adapts without breaking the hierarchy.

type-system.css · text measure
.article-copy { max-width: 65ch; font-size: 1rem; line-height: 1.7; } @media (max-width: 600px) { .article-copy { line-height: 1.6; } }

04 / Add motion that communicates

Motion can signal interactivity, provide feedback, and help users understand a change of state. Keep it brief, purposeful, and consistent. Avoid animating every element just because CSS makes it possible.

motion.css · a clear hover response
.project-link { display: inline-block; transition: transform 180ms ease, color 180ms ease; } .project-link:hover { transform: translateY(-3px); } @media (prefers-reduced-motion: reduce) { .project-link { transition: none; } }
Accessibility note: respect the user’s reduced-motion preference. Motion should never be the only way to communicate important information.

05 / In-class assignment — type in motion

Choose a short piece of content from your Week 4 visual direction or Week 5 composition. Turn it into a responsive typographic landing section with one purposeful motion interaction.

1

Define your type roles

Choose a display heading, subheading, body style, and small supporting label. Document the size, weight, and line height of each.

2

Create CSS tokens

Use custom properties for your type scale and colors. Include at least one fluid size using clamp().

3

Add one interaction

Apply a short transition to a link, button, or project card. Make the state change obvious but restrained.

4

Test three widths

Check desktop, tablet, and mobile. Confirm that the headline wraps intentionally and the text remains readable.

Deliverable: a working responsive page section, your type-token CSS, and a short note explaining how typography and motion support the project’s tone.

06 / Critique & self-check

Hierarchy

Can a viewer identify the headline, supporting information, and next action quickly?

Consistency

Are the type styles reused intentionally, or does every element feel unrelated?

Motion

Does the interaction communicate feedback? Is the page still understandable without motion?

  • Type roles and CSS custom properties are defined.
  • At least one type size uses clamp().
  • Paragraph measure and line height support comfortable reading.
  • One purposeful transition or interaction is included.
  • Reduced-motion preferences are considered.
  • Desktop, tablet, and mobile views have been checked.

Instructor-only material · Remove before publishing to students

Instructor Layout Code — Step by Step

Use this demonstration to model how a designer develops a type system, tests it in context, and adds motion only when it improves the experience.

1

Start with content

Choose a short headline, one paragraph, and one action link. Ask students what should be noticed first and why.

2

Build the type scale

Define body, subhead, and display sizes as custom properties. Demonstrate how changing one token affects the whole page.

3

Use fluid type

Replace a fixed oversized heading with clamp(). Resize the browser and discuss minimum, preferred, and maximum values.

4

Adjust the reading measure

Apply a max-width using ch. Compare long lines with a narrower text column.

5

Add one transition

Animate a small interaction such as a link shifting upward on hover. Explain the duration and easing, then test keyboard focus as well.

6

Check accessibility and responsive behavior

Use the keyboard, test narrow widths, and demonstrate prefers-reduced-motion. Ask whether the design still communicates without animation.

Instructor demonstration: The six steps above are the teaching sequence. The examples below are the actual code to type, test, and discuss. Move slowly through them; show the result after each change instead of pasting everything at once.

Step 1A — Start with the content and semantic HTML

Begin with meaning before decoration. This sample gives students a headline, a supporting paragraph, and one action. Ask: What should the visitor notice first? What information supports that message? What is the action?

index.html
<!-- Start with the message. Do not style it yet. -->
<main class="poster">
  <p class="eyebrow">Independent Design Journal</p>
  <h1 class="headline">
    Ideas move
the world. </h1> <p class="intro"> A journal about creative work, unexpected connections, and the people who make things happen. </p> <a class="action" href="#stories"> Explore the stories <span aria-hidden="true">↗</span> </a> </main>

Explain: the h1 is the primary message, the paragraph gives context, and the anchor is a real link. Classes let us style the roles without using HTML elements only because of how they look.

Step 2A — Create a type scale with CSS custom properties

Show students the hard-to-maintain version first: different font sizes scattered across selectors. Then replace the repeated values with named tokens. The names communicate intent and make global changes easier.

styles.css
/* First, define a small and intentional type system. */
:root {
  --type-small: 0.8rem;
  --type-body: 1rem;
  --type-subhead: 1.5rem;
  --type-display: 3.5rem;
  --leading-body: 1.65;
  --leading-display: 0.98;
}

body {
  font-size: var(--type-body);
  line-height: var(--leading-body);
}

.eyebrow {
  font-size: var(--type-small);
  text-transform: uppercase;
  letter-spacing: 0.12em;
}

.headline {
  font-size: var(--type-display);
  line-height: var(--leading-display);
  letter-spacing: -0.045em;
}

Demonstration: change --type-display from 3.5rem to 4rem. Then change it back. Point out that the selector remains the same while the token controls the visual system.

Compare: a token is a named design decision. --type-display describes the role; 3.5rem is the current value. Students should avoid creating a separate token for every tiny difference.

Step 3A — Make the headline fluid with clamp()

First show the fixed-size version, then replace it with the fluid version. Resize the browser slowly so students can observe the difference.

fixed-size.css
/* This can look oversized on a phone. */
.headline {
  font-size: 3.5rem;
}
fluid-size.css
.headline {
  font-size: clamp(2.2rem, 6vw, 5.5rem);
  line-height: 0.98;
}
  • 2.2rem: minimum size; the headline should not shrink below this.
  • 6vw: preferred fluid size, based on viewport width.
  • 5.5rem: maximum size; the headline stops growing beyond this cap.

Ask students to predict what will happen before resizing. Then have them test a narrow phone-width viewport, a tablet-width viewport, and a wide desktop viewport.

Step 4A — Control the reading measure and line length

Long lines are tiring to read. The ch unit roughly tracks the width of the “0” character in the current font, making it useful for setting a text column.

reading-measure.css
.intro {
  max-width: 62ch;
  font-size: var(--type-body);
  line-height: 1.7;
}

.poster {
  padding: clamp(1.25rem, 5vw, 4rem);
}

Before/after exercise: temporarily remove max-width and stretch the paragraph across the full screen. Restore 62ch. Ask which version feels easier to scan and why.

Step 5A — Add motion to a meaningful interaction

Start with a static link. Then add a small movement that signals interactivity. Avoid large, constant, or distracting motion; the effect should support the action rather than compete with the headline.

motion.css
.action {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  transition: transform 180ms ease, color 180ms ease;
}

.action:hover {
  transform: translateY(-3px);
}

.action:focus-visible {
  outline: 3px solid currentColor;
  outline-offset: 4px;
}

Test with a mouse, then press Tab to reach the link. Explain that hover feedback is not enough: keyboard users also need a visible focus state.

Try three values: change 180ms to 80ms, then 400ms. Ask which feels immediate, which feels sluggish, and whether the transition is noticeable without being distracting.

Step 6A — Respect reduced-motion preferences

Motion should not be required to understand the content. Add a reduced-motion rule so people who have requested less animation receive a calmer experience.

reduced-motion.css
/* Keep the interaction understandable without movement. */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    scroll-behavior: auto;
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
}

Discuss: the headline, paragraph, and action still communicate the same information if movement is removed. Motion is an enhancement, not a substitute for structure or content.

Step 7A — Put the pieces together and inspect the result

Use this compact combined example to review the relationships between the tokens, fluid type, reading measure, and motion. Students do not need to memorize every value; they should learn to recognize what each rule controls.

composition.css
:root {
  --ink: #172033;
  --accent: #b8f34b;
  --space: 1.25rem;
}

body {
  margin: 0;
  color: var(--ink);
  font-family: Arial, sans-serif;
}

.poster {
  padding: clamp(1.25rem, 5vw, 4rem);
  min-height: 70vh;
}

.headline {
  max-width: 12ch;
  font-size: clamp(2.2rem, 6vw, 5.5rem);
  line-height: 0.98;
}

.intro {
  max-width: 62ch;
  line-height: 1.7;
}

.action {
  background: var(--accent);
  color: var(--ink);
  padding: 0.8rem 1rem;
  transition: transform 180ms ease;
}

.action:hover {
  transform: translateY(-3px);
}

Live demonstration prompts

  1. Change the accent token. Which parts of the composition update?
  2. Increase the headline’s minimum size. At what viewport does the layout begin to feel crowded?
  3. Remove the intro’s max-width. Compare reading comfort.
  4. Temporarily remove the transition. Does the link remain understandable and usable?
  5. Tab through the page. Can you always see where keyboard focus is?
  6. Turn on a reduced-motion preference and confirm the experience still makes sense.

Instructor quick reference — What each decision does

TechniquePurposeQuestion to ask students
--type-displayCentralized display-size tokenWhat happens when one value changes?
clamp()Fluid sizing with minimum and maximum boundsWhat are the three arguments controlling?
max-width: 62chLimits paragraph line lengthWhich version is easier to read?
line-heightControls vertical space between linesDoes the text feel cramped or disconnected?
transitionSmoothly communicates a state changeDoes the motion clarify the interaction?
:focus-visibleVisible keyboard focus indicatorCan a keyboard user identify the current control?
prefers-reduced-motionRespects a user preference for less movementDoes the design still work without motion?
Instructor reminder: type hierarchy, line length, and motion should be judged in the actual composition. A value that looks good in isolation may fail at a different screen size or when the full headline and paragraph are present. Keep asking students to predict, test, compare, and explain.
Teaching note: keep the focus on design decisions rather than decorative effects. Students should be able to explain what each typographic choice and motion cue contributes.