agentleFS
YardonYanYardonYan/ui-design-skills/skills/web/web-design/SKILL.md

web-design

Skill0 starsChanged yesterdayApache-2.0View on GitHub

CSS implementation patterns for layout, typography, color, spacing, and responsive design. Complements ui-design (fundamentals) with code-focused examples.

27 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use seo.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • nilssonrSkill

    seo

    Full SEO workflow for auditing pages and creating SEO-optimized content. Provides checklists with educational explanations aligned with Google Search Central documentation.

    Also in 3 projects that use this

The file

We split this skill into the rules it gives an agent

10 rules. 0 are common, 8 are distinctive, and 2 are very specific to this project.

  • 0

    Common

    Most of the 23 edited versions we read keep these.

  • 8

    Distinctive

    This author's own choices. Worth a look.

  • 2

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Use CSS Grid for two-dimensional layouts and Flexbox for one-dimensional flow.

    line 27
  2. Distinctive:

    Every palette needs five functional roles:

    line 62
  3. Distinctive:

    Create depth through surface layering, not just shadows:

    line 74
  4. Distinctive:

    Use HSL or OKLCH for perceptually uniform color manipulation.

    line 85
  5. Distinctive:

    Prefer fluid sizing over rigid breakpoints where possible:

    line 136
  6. Very specific:

    Use container queries (@container) for component-level responsiveness when a component's layout should respond to its container, not the …

    line 149
  7. Distinctive:

    Every UI component should have clear states, consistent spacing, and predictable behavior:

    line 186
  8. Distinctive:

    Use motion to communicate state changes, not to decorate.

    line 224
  9. Very specific:

    Use native animation-timeline: scroll() (behind @supports) for parallax and reveal effects without JavaScript.

    line 253
  10. Distinctive:

    Before shipping, verify against these criteria:

    line 257

“Common” is measured: kept by at least 6 in 10 of the 23 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Web Design Patterns

CSS implementation patterns for production-grade interfaces. For design fundamentals and decision-making, see ui-design. This skill focuses on code.

See also: ui-design for typography/color/spacing theory, frontend-design for creative aesthetics.

Installation

OpenClaw / Moltbot / Clawbot

npx clawhub@latest install web-design

Layout Principles

Use CSS Grid for two-dimensional layouts and Flexbox for one-dimensional flow. Choose the right tool for each context.

Layout NeedToolWhy
Page-level structureCSS Grid (grid-template-areas)Named regions, explicit row/column control
Navigation barsFlexboxSingle-axis alignment, spacing with gap
Card gridsGrid (auto-fill / auto-fit)Responsive without media queries
CenteringGrid (place-items: center)Shortest, most reliable centering
Sidebar + contentGrid (grid-template-columns: 250px 1fr)Proportional sizing with fixed sidebar
Stacking overlapsGrid + grid-area: 1/1Layer elements without position: absolute

Spatial Composition

Go beyond predictable layouts. Intentional asymmetry, overlapping elements, and grid-breaking accents create visual interest. Use grid stacking (grid-area: 1/1) instead of position: absolute for overlapping elements. Choose generous negative space for luxury/editorial aesthetics, or controlled density for data-rich interfaces — the choice must be intentional.

Typography

Typography carries 90% of a design's personality. Choose fonts that match the interface's purpose.

ContextDisplay Font DirectionBody Font DirectionExample Pairing
Editorial / magazineHigh-contrast serifNeutral humanist sansPlayfair Display + Source Sans 3
SaaS dashboardGeometric sansMatching weight sansDM Sans + DM Mono (data)
Creative portfolioExpressive displayClean readable sansSyne + Outfit
E-commerce luxuryThin modern serifElegant sansCormorant Garamond + Jost
Developer toolingMonospace displayMonospace bodyJetBrains Mono + IBM Plex Mono

Type Scale

Use a consistent ratio. A 1.25 (major third) scale works for most interfaces: text-xs 0.64rem, text-sm 0.8rem, text-base 1rem, text-lg 1.25rem, text-xl 1.563rem, text-2xl 1.953rem, text-3xl 2.441rem, text-4xl 3.052rem. Set body text to 1rem (16px minimum), line-height 1.5 for body, 1.1–1.2 for headings. Limit line length to 60–75ch.

Color

Building a Palette

Every palette needs five functional roles:

RolePurposeExample Usage
PrimaryBrand identity, primary actionsButtons, links, active states
NeutralText, borders, backgroundsBody text, cards, dividers
AccentSecondary actions, highlightsTags, badges, secondary buttons
Success / Warning / ErrorSemantic feedbackToasts, form validation, status
SurfaceLayered backgroundsCards on page, modals on overlay

Contrast and Depth

Create depth through surface layering, not just shadows:

:root {
  --surface-0: hsl(220 15% 8%);    /* page background */
  --surface-1: hsl(220 15% 12%);   /* card */
  --surface-2: hsl(220 15% 16%);   /* raised element */
  --surface-3: hsl(220 15% 20%);   /* popover / modal */
}

Use HSL or OKLCH for perceptually uniform color manipulation. Dominant color with sharp accents outperforms evenly-distributed palettes. Always verify WCAG contrast: 4.5:1 for normal text, 3:1 for large text.

Spacing

Consistent spacing creates rhythm. Use an 8px base unit (or 4px for dense UIs):

TokenValueUse
--space-10.25rem (4px)Inline icon gaps, tight padding
--space-20.5rem (8px)Input padding, compact lists
--space-30.75rem (12px)Button padding, card inner spacing
--space-41rem (16px)Default element spacing
--space-61.5rem (24px)Section padding, card gaps
--space-82rem (32px)Section separation
--space-123rem (48px)Major section breaks
--space-164rem (64px)Page-level vertical rhythm

Apply spacing consistently: use gap on Grid/Flexbox containers instead of margins on children. This eliminates margin-collapse bugs and simplifies responsive adjustments.

Visual Hierarchy

Guide the eye through deliberate contrast in size, weight, color, and space.

Hierarchy Techniques

TechniqueHowImpact
Size contrastHero heading 3–4x body sizeImmediate focal point
Weight contrastBold headings + regular bodyScannability
Color contrastPrimary text vs muted secondaryInformation layering
Spatial groupingTight spacing within groups, wide betweenGestalt proximity
ElevationShadows / surface layersInteractive affordance
Whitespace isolationEmpty space around key elementEmphasis through absence

Practical Pattern — Card Hierarchy

Layer hierarchy within cards: eyebrow (xs, uppercase, muted) → title (xl, semibold) → body (base, secondary color, 1.6 line-height) → action (spaced apart with margin-top). Use surface color for separation and consistent padding from spacing tokens.

Responsive Design

Breakpoint Strategy

BreakpointTargetApproach
< 640pxMobileSingle column, stacked navigation, touch targets ≥ 44px
640–1024pxTabletTwo-column options, collapsible sidebars
1024–1440pxDesktopFull layout, hover interactions enabled
> 1440pxWideMax-width container (1280px), prevent ultra-wide line lengths

Fluid Techniques

Prefer fluid sizing over rigid breakpoints where possible:

/* Fluid typography — scales between 640px and 1440px viewport */
h1 { font-size: clamp(2rem, 1.5rem + 2.5vw, 3.5rem); }

/* Fluid spacing */
section { padding-block: clamp(2rem, 1rem + 4vw, 6rem); }

/* Intrinsic grid — no media queries needed */
.grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 20rem), 1fr)); gap: var(--space-6); }

Use container queries (@container) for component-level responsiveness when a component's layout should respond to its container, not the viewport.

Accessibility

Accessibility is not optional. Build it in from the start.

RequirementImplementationStandard
Color contrast4.5:1 normal text, 3:1 large text / UIWCAG 2.1 AA
Keyboard navigationAll interactive elements focusable and operableWCAG 2.1.1
Focus indicatorsVisible :focus-visible ring, 2px+ offsetWCAG 2.4.7
Semantic HTMLUse <button>, <nav>, <main>, <article> etc.WCAG 1.3.1
Alt textDescriptive for informational images, alt="" for decorativeWCAG 1.1.1
Motion safetyRespect prefers-reduced-motionWCAG 2.3.3
Touch targetsMinimum 44×44px interactive areasWCAG 2.5.8
ARIA when neededaria-label, aria-live, role only when native semantics insufficientWCAG 4.1.2
/* Robust focus indicator */
:focus-visible {
  outline: 2px solid var(--color-primary);
  outline-offset: 2px;
}

/* Respect motion preferences */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    transition-duration: 0.01ms !important;
  }
}

Component Design

Anatomy of a Well-Designed Component

Every UI component should have clear states, consistent spacing, and predictable behavior:

StateVisual TreatmentExample
DefaultBase stylingButton at rest
HoverSubtle shift — background, shadow, or scalebackground lightens 5-10%
Active / PressedCompressed feel — reduced shadow, slight insettransform: scale(0.98)
FocusHigh-visibility ring, no outline removal:focus-visible ring
DisabledReduced opacity, cursor: not-allowedopacity: 0.5
LoadingSpinner or skeleton, disabled interactionInline spinner replacing label

Design Token Architecture

Structure tokens in three layers for maintainability:

/* Layer 1: Primitive values */
--blue-500: oklch(0.55 0.2 250);
--gray-100: oklch(0.95 0.005 250);
--radius-md: 0.5rem;

/* Layer 2: Semantic aliases */
--color-primary: var(--blue-500);
--color-surface: var(--gray-100);
--radius-button: var(--radius-md);

/* Layer 3: Component-specific */
--btn-bg: var(--color-primary);
--btn-radius: var(--radius-button);
--btn-padding: var(--space-2) var(--space-4);

This three-layer approach allows theme switching by remapping Layer 2 without touching components.

Interaction Patterns

Motion and Animation

Use motion to communicate state changes, not to decorate. Focus on high-impact moments:

InteractionDurationEasingPurpose
Button hover150msease-outAcknowledge interaction
Modal open250msease-outDraw attention
Modal close200msease-inQuick dismissal
Page transition300msease-in-outMaintain spatial context
Stagger reveal50–80ms delay per itemease-outSequential content loading
Micro-feedback100msease-outToggle, checkbox, switch
/* Staggered entrance animation */
.stagger-item {
  opacity: 0;
  translate: 0 1rem;
  animation: reveal 0.5s ease-out forwards;
}
.stagger-item:nth-child(1) { animation-delay: 0ms; }
.stagger-item:nth-child(2) { animation-delay: 60ms; }
.stagger-item:nth-child(3) { animation-delay: 120ms; }

@keyframes reveal {
  to { opacity: 1; translate: 0 0; }
}

Scroll-Driven Effects

Use native animation-timeline: scroll() (behind @supports) for parallax and reveal effects without JavaScript. Wrap in feature detection to gracefully degrade.

Design Quality Checklist

Before shipping, verify against these criteria:

  • Typography: Intentional font pairing, consistent scale, readable line lengths
  • Color: Cohesive palette, WCAG contrast met, semantic feedback colors defined
  • Spacing: Consistent rhythm using spacing tokens, no ad-hoc pixel values
  • Hierarchy: Clear visual flow — eye path follows intended reading order
  • Responsiveness: Tested at mobile, tablet, desktop; no horizontal overflow
  • Accessibility: Keyboard navigable, focus visible, screen-reader tested, motion-safe
  • States: All interactive elements have hover, active, focus, disabled, and loading states
  • Personality: Design has a clear point-of-view — not generic template aesthetic
  • Performance: Images optimized, fonts subset, animations GPU-accelerated (transform, opacity)
  • Dark mode: If supported, surfaces use layered lightness, not inverted colors

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.