本文へ移動
cccskills
無料GitHub で公開

web-typography

Select, pair, and implement typefaces for web projects. Use when the user mentions "font pairing", "which typeface", "line height", "responsive typography", "web font loading", "type hierarchy", "variable fonts", "FOUT/FOIT", "typographic scale", or "the text is hard to read". Also trigger when choosing between system fonts and web fonts, optimizing font-loading performance, or designing readable long-form content. Covers readability evaluation, CSS implementation, and performance optimization. For overall UI design systems, see refactoring-ui. For dramatic typographic experiences, see top-design.

インストール方法を見る

含まれるファイル(6)

  • SKILL.md17.7 KB
  • references/css-implementation.md10.7 KB
  • references/evaluating-typefaces.md8.2 KB
  • references/pairing-strategies.md8.2 KB
  • references/responsive-typography.md9.0 KB
  • references/typeface-anatomy.md7.8 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

Web Typography

A practical guide to choosing, pairing, and implementing typefaces for the web. The best typography is invisible — it immerses readers in content rather than calling attention to itself.

Core Principle

Typography is the voice of your content. The typeface you choose sets tone before a single word is read — a legal site shouldn't feel playful; a children's app shouldn't feel corporate. Follow the "clear goblet" principle: typography should be like a crystal-clear wine glass, keeping focus on the wine (content), not the glass (type).

Scoring

Goal: 10/10. Score = number of the 10 Quick Diagnostic rows the implementation satisfies. Bands: 9-10 = body 16px+, measure under 75ch, line-height 1.4+, clear level contrast, font payload under 200KB, fallbacks set, survives 200% zoom; 5-6 = readable but missing measure control, fallbacks, or zoom resilience; <=3 = sub-16px body, no measure cap, FOIT, or unreadable hierarchy. Always state the current score and the specific diagnostic rows failing.

Two Contexts for Type

All typography falls into two categories:

ContextPurposePriorities
Type for a momentHeadlines, buttons, navigation, logosPersonality, impact, distinctiveness
Type to live withBody text, articles, documentationReadability, comfort, endurance

Workhorse typefaces excel at "type to live with" — versatile across sizes, weights, and contexts without drawing attention. Examples: Georgia, Source Sans, Freight Text, FF Meta.

Typography Framework

1. How We Read

Core concept: Understanding reading mechanics is the foundation for every typography decision. Eyes don't scan smoothly — they jump in bursts.

Why it works: Fighting these mechanics creates friction that drives readers away; aligning with them lets readers absorb content faster with less fatigue.

Key insights:

  • Saccades — eyes jump in 7-9 character bursts; line length and letter spacing directly affect saccade efficiency
  • Fixations — eyes pause briefly to absorb content; dense or poorly spaced text slows reading
  • Word shapes (bouma) — experienced readers recognize word silhouettes, not individual letters
  • Legibility vs. readability — legibility is whether characters can be distinguished (a typeface concern); readability is whether text can be comfortably read for extended periods (a typography concern: size, spacing, line length). A legible typeface can still be set unreadably

Product applications:

ContextApplicationExample
Long-form contentOptimize for sustained comfort16-18px body, 1.5-1.7 line height, 45-75 char lines
Dashboard UIOptimize for rapid scanningDistinct weight hierarchy, whitespace between data groups
Mobile readingAccount for distance and lightingLarger body (17-18px), higher contrast

Copy patterns:

.prose {
  font-size: 1.125rem;     /* 18px */
  line-height: 1.6;
  max-width: 65ch;          /* ~45-75 characters */
}

See: references/typeface-anatomy.md when you need to name letterform parts (x-height, counter, aperture) or place a face in a classification system to justify a choice.

2. Evaluating Typefaces

Core concept: A typeface must pass technical, structural, and practical quality checks before it earns a place in a project. Beautiful specimens fail on screen.

Why it works: Screen rendering, variable bandwidth, and diverse devices impose constraints print never faced. Rigorous evaluation prevents costly mid-project typeface swaps.

Key insights:

  • Technical quality — consistent stroke weights, even visual color across text blocks, good kerning pairs (AV, To, Ty), complete character set, multiple weights (minimum: regular, bold, italic)
  • Structural assessment — generous x-height (better screen readability), open counters and apertures (a, e, c), distinct letterforms (Il1, O0, rn vs. m)
  • Practical needs — test at actual use sizes on target screens, check file size, verify the license
  • Real content testing — Lorem ipsum hides problems with character frequency, word length, and paragraph rhythm

Product applications:

ContextApplicationExample
Body text selectionPrioritize x-height, open counters, even colorSource Serif Pro over Didot for long reads
UI/System textPrioritize small-size legibility and weight rangeInter or SF Pro for interface elements
Multilingual productVerify glyph coverage for target languagesNoto Sans for broad Unicode support

Copy patterns:

/* Stress-test at every actual use size */
body { font-size: 16px; }
.caption { font-size: 0.75rem; }
h1 { font-size: 3rem; }

Ethical boundary: Always verify the web license before shipping a font — desktop/print licenses rarely cover web embedding, and unlicensed use creates real legal liability.

See: references/evaluating-typefaces.md when vetting a candidate face — full quality checklist, red-flags table, and the structural criteria to inspect.

3. Choosing Typefaces

Core concept: Start with purpose, not aesthetics. The content's tone, reading context, and duration should drive selection — not personal preference or trends.

Why it works: Purpose-driven choices feel inevitable rather than arbitrary, and survive stakeholder review because they can be justified with reasoning rather than taste.

Key insights:

  • Define the job first — body text, headlines, and UI elements may each need different faces
  • Match tone to content — a financial report needs a different voice than a bakery menu
  • Check the family — confirm needed weights, italics, and styles exist before committing
  • Safe starting points — body serif: Georgia, Source Serif Pro, Charter; body sans: system fonts, Source Sans Pro, Inter, IBM Plex Sans

Product applications:

ContextApplicationExample
Content-heavy siteWorkhorse serif or sans for sustained readingSource Serif Pro or Charter for articles
SaaS dashboardClean sans with strong tabular figuresInter or IBM Plex Sans for data-rich UIs
Accessibility-focusedFaces designed for maximum legibilityAtkinson Hyperlegible for vision-impaired users

Copy patterns:

/* Web font with system fallback stack */
body {
  font-family: 'Source Sans Pro', -apple-system,
               BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
}

See: references/evaluating-typefaces.md when narrowing finalists or weighing free vs. paid faces — the side-by-side comparison method and quality-option shortlists.

4. Pairing Typefaces

Core concept: Successful pairings create clear contrast — faces should be obviously different, not confusingly similar. One to two typefaces maximum.

Why it works: Clear structural contrast (serif + sans, light + bold, humanist + geometric) gives each face a distinct role. Faces that are too similar create tension without purpose — readers sense something is "off" without knowing why.

Key insights:

  • Contrast types — structure (serif + sans), weight (light + regular), era (humanist + geometric), width (condensed + normal)
  • Same designer strategy — faces by one designer often share harmonizing DNA (FF Meta + FF Meta Serif)
  • Superfamilies — families designed to work together eliminate guesswork (Roboto + Roboto Slab)
  • Pairing failures — two near-identical faces, both faces competing for attention, one face overwhelming the other

Product applications:

ContextApplicationExample
Editorial siteSerif headlines + sans bodyPlayfair Display + Source Sans Pro
DocumentationMonospace code + sans prose from one familyIBM Plex Mono + IBM Plex Sans
Minimal brandSingle family with weight variationInter at varying weights and sizes

Copy patterns:

/* Classic serif + sans-serif pairing */
h1, h2, h3 { font-family: 'Playfair Display', Georgia, serif; }
body { font-family: 'Source Sans Pro', -apple-system, sans-serif; }

See: references/pairing-strategies.md when picking a second face — proven combinations, the contrast-type table, and same-designer/superfamily shortcuts.

5. Typographic Measurements

Core concept: Three measurements — font size, line length, and line height — form the foundation of comfortable reading. Getting these right matters more than typeface choice.

Why it works: These measurements govern how the eye tracks across and down text: optimal line length matches the saccade pattern, adequate line height prevents the eye from jumping to the wrong line on the return sweep, and sufficient size makes letterforms recognizable on screen.

Key insights:

  • Body size — 16px minimum; err larger (18px) for reading-heavy sites; mobile users hold phones farther than designers assume
  • Line length (measure) — 45-75 characters ideal, 66 optimal; enforce with ch units or max-width
  • Line height — 1.4-1.8 for body; longer lines need more; headlines need tighter (1.1-1.25)
  • Heading scale — consistent ratio (1.2-1.5) between levels creates hierarchy without extremes

Product applications:

ContextApplicationExample
Blog / article65ch max-width, 1.6 line height.prose { max-width: 65ch; line-height: 1.6; }
DashboardTighter line height for dense dataline-height: 1.3; for table cells and labels
Landing pageGenerous sizing for scanabilityfont-size: 1.25rem; line-height: 1.7;

Copy patterns:

.prose {
  font-size: clamp(1rem, 0.95rem + 0.25vw, 1.125rem);
  line-height: 1.6;
  max-width: 65ch;
}
/* Line height by context */
h1, h2 { line-height: 1.1; }      /* headlines: 1.1-1.25 */
.ui-text { line-height: 1.35; }   /* UI: 1.3-1.4 */
.body-text { line-height: 1.6; }  /* body: 1.5-1.7 */

See: references/responsive-typography.md when writing the clamp() formulas — how to derive min/preferred/max and viewport-based measurement strategies.

6. Building Type Hierarchies

Core concept: Hierarchy tells readers what matters most. Create distinction through controlled variation in size, weight, and color — but don't pull all three levers at once.

Why it works: Deliberate, consistent differences between levels let readers grasp page structure at a glance; without hierarchy everything competes and nothing wins.

Key insights:

  • Three levers — size, weight, color; vary one or two between adjacent levels, never all three
  • The squint test — squinting at a page should still reveal the hierarchy
  • Consistent scale — a modular ratio (1.2-1.5) between heading levels creates rhythm; arbitrary sizes create noise
  • Don't skip levels — jumping H1 to H3 breaks the reader's mental model

Product applications:

ContextApplicationExample
Content pageSize + weight across 4-5 levelsH1 2.5rem/700, H2 1.75rem/600, Body 1rem/400
DashboardWeight + color for data vs. labelsBold #111 values, regular #666 labels
Form UISubtle weight shift for labelsLabel: 600 weight, input: 400 weight

Copy patterns:

h1 { font-size: clamp(2rem, 1.5rem + 2vw, 3rem); font-weight: 700; color: #111; }
h2 { font-size: clamp(1.5rem, 1.25rem + 1vw, 2rem); font-weight: 600; color: #111; }
body { font-size: 1rem; font-weight: 400; color: #333; }
.secondary { font-size: 0.875rem; color: #666; }
/* Headings: more space above than below */
h1, h2, h3 { margin: 1.5em 0 0.5em; line-height: 1.2; }

Ethical boundary: Don't bury fees, disclaimers, or opt-outs in small or low-contrast type to demote what users need to see — hierarchy that hides material information weaponizes typography against the reader.

See: references/css-implementation.md when implementing the CSS — full hierarchy patterns, @font-face loading, font-variation-settings axes, and subsetting with pyftsubset.

7. Responsive Typography and Web Font Performance

Core concept: Type must adapt to screens, and web fonts must load efficiently. Fluid typography with clamp() eliminates breakpoint jumps; strategic font loading prevents layout shift and slow renders.

Why it works: A fixed font size cannot serve both a 320px phone and a 1440px desktop. Web fonts are render-blocking by default — unoptimized loading causes Flash of Invisible Text (FOIT) or Flash of Unstyled Text (FOUT).

Key insights:

  • Fluid typography — clamp(min, preferred, max) scales smoothly between viewports, no media queries needed for type
  • Breakpoint adjustments — mobile needs slightly larger body (17-18px) and a tighter heading scale; desktop can push display sizes while keeping line-length limits
  • Loading strategy — font-display: swap shows fallback text immediately; preload critical fonts; subset to needed characters
  • Performance budget — under 200KB total font payload; prefer WOFF2; a variable font can replace 4-6 static weight files

Product applications:

ContextApplicationExample
Content siteFluid sizes with clamp()font-size: clamp(1rem, 0.9rem + 0.5vw, 1.25rem)
E-commercePreload hero font, lazy-load secondary weights<link rel="preload" href="font.woff2" as="font">
Global productSubset per language to cut payloadLatin subset for English, CJK subset for Asian pages

Copy patterns:

h1 { font-size: clamp(2rem, 1.5rem + 2vw, 3.5rem); }

@font-face {
  font-family: 'Custom Font';
  src: url('/fonts/custom.woff2') format('woff2');
  font-display: swap;
  unicode-range: U+0000-00FF; /* Latin subset */
}
/* In <head>: <link rel="preload" href="/fonts/custom.woff2" as="font" type="font/woff2" crossorigin> */

Ethical boundary: Don't optimize users out — subsetting that drops characters non-English readers need, or removing italic/bold weights needed for emphasis, trades inclusivity for speed.

Common Mistakes

MistakeWhy It FailsFix
Text feels crampedTight line height fatigues readersIncrease line-height to 1.6+; add paragraph spacing
Lines too longBeyond 75 chars the eye loses the return sweepmax-width: 65ch on text containers
Headings look disconnectedExcess space above breaks association with contentReduce space above heading; keep space below
Text looks blurryFont-smoothing or subpixel rendering issuesCheck font-smoothing; try different weight; increase size
Fonts loading slowlyUnoptimized files block renderingSubset; font-display: swap; preload critical fonts
Body text too smallPhones held farther than assumed; strains older eyesIncrease to 18px; test at real distance
Hierarchy is unclearInsufficient contrast between levelsIncrease size/weight differences
Typefaces clashPairing without clear contrast creates tensionOne family, or ensure structural contrast (serif + sans)
Lorem ipsum testingDummy text hides rhythm and frequency problemsTest with real, representative content

Quick Diagnostic

QuestionIf NoAction
Is body text 16px or larger?Too small for comfortable readingAt least 16px; prefer 18px for reading-heavy pages
Is line length under 75 characters?Eye loses position on return sweepmax-width: 65ch on prose containers
Is line height 1.4+ for body?Lines feel cramped, reading slowsIncrease to 1.5-1.7
Is there clear contrast between type levels?Hierarchy invisible, scanning failsIncrease size or weight differences
Tested at actual sizes on real screens?Rendering surprises in productionTest every use size on target devices
Is total font payload under 200KB?Slow loading hurts UX and SEOSubset, WOFF2, consider variable fonts
Are fallback fonts specified?FOIT leaves blank textSystem fallbacks in every font-family
Does the page work at 200% zoom?Accessibility failure for low visionFix overflow and truncation at 200%
Are headings free of orphaned words?Trailing words look unfinishedtext-wrap: balance or manual breaks
Are links visually distinct?Users can't find interactive elementsColor and/or underline distinction

Further Reading

About the Author

Jason Santa Maria is a graphic designer and educator who served as Creative Director at Typekit (now Adobe Fonts) and co-founded A Book Apart. He teaches at the School of Visual Arts in New York, and On Web Typography distills his bridge between traditional typographic craft and the realities of designing for screens.

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

Build lean, opinionated products using the 37signals philosophy from "Getting Real", "Rework", and "Shape Up". Use when the user mentions "Getting Real", "Rework", "Shape Up", "37signals", "Basecamp method", "six-week cycles", "fixed time variable scope", "appetite vs estimates", "betting table", "breadboarding", "fat marker sketch", "build less", "underdo the competition", "opinionated software", "we have too many meetings", "how do we ship faster", or "stop overbuilding". Also trigger when cutting scope to ship sooner, running a small team, or avoiding long-term roadmaps. Covers shaping, betting, building, and the art of saying no. For MVP validation, see lean-startup. For design sprints, see design-sprint.

日本語の概要は準備中です。原文の説明を表示しています。

wondelai/skills2,3972026年9月11日 更新

Guided journey from a working codebase grown slow and tangled to one measurably fast, cleanly bounded, and readable. Orchestrates eight skills phase by phase - working-with-legacy-code, clean-architecture, software-design-philosophy, refactoring-patterns, system-design, ddia-systems, release-it, pragmatic-programmer - every phase carries its method inline so it runs standalone, asking the user questions at every decision point and recording results in the project docs/ folder (PERFORMANCE.md, ARCHITECTURE.md, ARCHITECTURE-OPTIMIZATION-PLAN.md) so the journey resumes across sessions. Use when the user wants to make an app faster, untangle drifted boundaries, fix slow endpoints and queries, or says 'it works but it is slow and getting worse'. For an untested prototype, improve-code-quality; for an aged codebase you fear to touch, remove-technical-debt; for greenfield structure, design-code-architecture; for marketing-site page speed, improve-website. For one framework in isolation, invoke that skill directly.

日本語の概要は準備中です。原文の説明を表示しています。

wondelai/skills2,3972026年9月11日 更新

Create uncontested market space using value innovation instead of competing head-to-head. Use when the user mentions "blue ocean", "red ocean", "strategy canvas", "ERRC framework", "value innovation", "non-customers", "buyer utility map", "the market is too crowded", "how do we stand out", or "escape the price war". Also trigger when exploring a new market category, or finding underserved or non-customers. Covers the Four Actions Framework, Six Paths, buyer utility map, and value-cost trade-offs. For real strategy formulation and bad-strategy detection, see good-strategy-bad-strategy. For tech adoption strategy, see crossing-the-chasm. For product positioning, see obviously-awesome.

日本語の概要は準備中です。原文の説明を表示しています。

wondelai/skills2,3972026年9月11日 更新

Structure software around the Dependency Rule: source code dependencies point inward from frameworks to use cases to entities. Use when the user mentions "architecture layers", "dependency rule", "ports and adapters (hexagonal)", "onion architecture", "screaming architecture", "where should business logic go", "decouple from the database", "swap the framework without a rewrite", or "keep business rules independent". Also trigger when deciding which layer code belongs in, isolating core logic from infrastructure, defining module boundaries, or debating whether the framework should call your code or the reverse. Covers component principles, boundaries, and SOLID. For code-level quality, see clean-code. For domain modeling, see domain-driven-design.

日本語の概要は準備中です。原文の説明を表示しています。

wondelai/skills2,3972026年9月11日 更新

Write readable, maintainable code through disciplined naming, small functions, and clean error handling. Use when the user mentions "clean up this code", "this function is too long", "code smells", "naming conventions", "boy scout rule", "single responsibility", or "unit test quality". Also trigger when reviewing a pull request for readability, untangling a messy function, debating comment styles, or improving error-handling patterns. Covers SRP, comment discipline, formatting, and unit testing. For refactoring techniques, see refactoring-patterns. For architecture and dependency rules, see clean-architecture.

日本語の概要は準備中です。原文の説明を表示しています。

wondelai/skills2,3972026年9月11日 更新

Start and scale networked products using Andrew Chen's "The Cold Start Problem" framework for network effects. Use when the user mentions "network effects", "chicken and egg", "cold start", "two-sided marketplace", "atomic network", "hard side", "liquidity", "critical mass", "invite-only launch", "how do I get my first users", or "the marketplace has no buyers or sellers". Also trigger when launching a marketplace, social, or collaboration product that is worthless without other users, deciding launch sequencing and seeding tactics, or diagnosing stalled network growth at scale. Covers the five stages: cold start, tipping point, escape velocity, hitting the ceiling, and the moat. For word-of-mouth virality, see contagious. For habit-driven retention, see hooked-ux.

日本語の概要は準備中です。原文の説明を表示しています。

wondelai/skills2,3972026年9月11日 更新

wondelai のスキルをすべて見る

このスキルの問題を報告する