Get the FREE Ultimate OpenClaw Setup Guide →

frontend-styler

npx machina-cli add skill JasonWarrenUK/claude-code-config/frontend-styler --openclaw
Files (1)
SKILL.md
11.1 KB

Frontend Styling

Comprehensive guidance for debugging layout issues, ensuring style consistency, and applying best practices in frontend development, with emphasis on Svelte/SvelteKit projects.


When This Skill Applies

Use this skill when:

  • Fixing layout problems (alignment, spacing, positioning, responsive issues)
  • Unifying component styling to match project conventions
  • Debugging visual inconsistencies or CSS bugs
  • Implementing new UI components
  • Refactoring styling approaches
  • Questions about CSS organization or best practices

Core Principles

1. Accessibility First

Accessibility is not a polish step — it's a structural requirement. Every styling decision should pass the accessibility check before considering aesthetics.

Non-negotiable:

  • Colour contrast meets WCAG 2.1 AA (4.5:1 normal text, 3:1 large text)
  • Focus indicators visible on all interactive elements
  • No information conveyed by colour alone (use icons, text, patterns too)
  • Reduced motion support via prefers-reduced-motion
  • Touch targets at least 44×44px on mobile
  • Text remains readable at 200% zoom
/* Always include focus styles */
:focus-visible {
  outline: 2px solid var(--color-focus);
  outline-offset: 2px;
}

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

/* Never rely on colour alone */
.error-field {
  border-color: var(--color-error);
  border-width: 2px; /* Visual indicator beyond colour */
}
.error-message {
  color: var(--color-error);
}
.error-message::before {
  content: "⚠ "; /* Icon reinforces the colour */
}

2. Plan Before Execute

For non-trivial styling changes:

  1. Analyse - Understand the current implementation
  2. Plan - Outline proposed changes in logical order
  3. Confirm - Get user approval before execution
  4. Execute - Apply changes methodically

3. Consistency Over Cleverness

  • Match the project's established patterns
  • Don't introduce new approaches without discussion
  • Preserve existing styling architecture
  • Keep component styles predictable

4. Hierarchy and Order

When fixing multiple issues:

  1. Fix parent containers before children
  2. Address layout structure before fine-tuning
  3. Edit CSS files before component files when possible
  4. Work through child components before parent components

Svelte-Specific Guidelines

Component-Scoped Styles

Svelte's <style> blocks are scoped by default - leverage this:

<style>
  /* Scoped automatically - no class name collisions */
  .button {
    padding: 0.5rem 1rem;
    border-radius: 0.25rem;
  }
  
  .button--primary {
    background: var(--color-primary);
  }
</style>

Global Styles

Use :global() sparingly and intentionally:

<style>
  /* Only when deliberately styling external elements */
  :global(.markdown-content h1) {
    margin-top: 2rem;
  }
</style>

CSS Custom Properties

Prefer CSS variables for theming and consistency:

<style>
  .card {
    background: var(--card-bg, #fff);
    border: 1px solid var(--card-border, #e5e7eb);
    border-radius: var(--radius-md, 0.5rem);
  }
</style>

Reactive Classes

Use Svelte's class directive for dynamic styling:

<button 
  class="btn" 
  class:btn--active={isActive}
  class:btn--disabled={disabled}
>
  Click me
</button>

Layout Debugging Workflow

Step 1: Identify Root Cause

Common layout issues and their causes:

Alignment Problems:

  • Check parent container's display property (flex/grid/block)
  • Verify align-items, justify-content, align-self
  • Check for unexpected margins/padding
  • Look for position: absolute breaking flow

Spacing Issues:

  • Examine margin collapse behaviour
  • Check for inconsistent spacing units
  • Look for box-sizing mismatches
  • Verify padding vs margin usage

Responsive Breakage:

  • Check media query breakpoints
  • Verify min-width vs max-width logic
  • Look for fixed widths instead of flexible units
  • Check for overflow issues

Z-Index Conflicts:

  • Verify stacking context creation
  • Check position property (relative/absolute/fixed)
  • Look for competing z-index values
  • Examine parent-child z-index relationships

Step 2: Determine Fix Location

Ask: "Should this be fixed in the component or its parent?"

Fix in Component When:

  • Issue is internal to component layout
  • Component violates its own design contract
  • Changes won't affect siblings or parent

Fix in Parent When:

  • Issue involves multiple children
  • Problem is container-level (flexbox/grid)
  • Fix benefits component reusability

Step 3: Apply Fixes Systematically

  1. Start with structural changes (display, position, layout)
  2. Then spacing (margin, padding, gap)
  3. Then sizing (width, height, flex-grow/shrink)
  4. Finally visual polish (borders, shadows, etc.)

Style Consistency Workflow

Step 1: Analyse Current Implementation

Check for:

  • Naming conventions - BEM, utility classes, or other patterns
  • Styling location - Component <style> vs external CSS
  • Value patterns - Hard-coded vs CSS variables
  • Units - rem, px, em usage patterns
  • Responsiveness - Media query patterns

Step 2: Identify Inconsistencies

Compare component styling against project patterns:

✗ Inconsistent: <div class="cardContainer">
✓ Consistent:   <div class="card-container">

✗ Inconsistent: padding: 8px;
✓ Consistent:   padding: 0.5rem;

✗ Inconsistent: background: #3B82F6;
✓ Consistent:   background: var(--color-primary);

Step 3: Propose Changes

List specific changes needed to match project patterns:

  • "Replace hard-coded colors with CSS variables"
  • "Convert class names from camelCase to kebab-case"
  • "Move inline styles to component <style> block"
  • "Use rem units instead of px for spacing"

Step 4: Execute After Approval

Apply changes in logical order:

  1. CSS files first (if applicable)
  2. Child components
  3. Parent component last

Project Preferences

Naming Conventions

  • CSS classes: kebab-case (e.g., card-header, btn-primary)
  • Component files: PascalCase.svelte (e.g., UserCard.svelte)
  • BEM-like modifiers: Double dash for variants (e.g., btn--primary, card--elevated)

Spacing and Units

  • Use rem for spacing (0.25rem, 0.5rem, 1rem, 1.5rem, 2rem)
  • Use em for typography-relative spacing
  • Avoid magic numbers - prefer CSS variables

Color Management

  • Define colors as CSS variables in root/theme
  • Never hard-code hex/rgb values in components
  • Use semantic naming (--color-primary, not --blue-500)

Responsive Design

  • Mobile-first approach (min-width media queries)
  • Common breakpoints:
    • sm: 640px
    • md: 768px
    • lg: 1024px
    • xl: 1280px

Common Patterns

Flexbox Layouts

/* Center content */
.container {
  display: flex;
  align-items: center;
  justify-content: center;
}

/* Responsive row to column */
.flex-container {
  display: flex;
  flex-wrap: wrap;
  gap: 1rem;
}

Grid Layouts

/* Responsive grid */
.grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
  gap: 1.5rem;
}

Component Structure

<script>
  // Logic
</script>

<div class="component">
  <!-- Template -->
</div>

<style>
  .component {
    /* Styles scoped to component */
  }
</style>

Anti-Patterns to Avoid

Don't: Mix Styling Approaches

<!-- ✗ Bad: Mixing inline styles with classes -->
<div class="card" style="margin: 10px;">

Don't: Over-Nest Selectors

/* ✗ Bad: Deep nesting */
.container .wrapper .card .header .title {
  font-size: 1.5rem;
}

/* ✓ Good: Flat structure */
.card-title {
  font-size: 1.5rem;
}

Don't: Use !important Without Cause

/* ✗ Bad: Using important as a crutch */
.button {
  color: red !important;
}

/* ✓ Good: Increase specificity properly */
.card .button {
  color: red;
}

Don't: Hard-Code Values Repeatedly

/* ✗ Bad: Repeated magic numbers */
.card { padding: 16px; }
.modal { padding: 16px; }
.panel { padding: 16px; }

/* ✓ Good: Use variables */
:root {
  --spacing-md: 1rem;
}
.card, .modal, .panel {
  padding: var(--spacing-md);
}

Accessibility Checklist

When building or reviewing UI components:

  • Does every interactive element have a visible focus indicator?
  • Does the colour contrast pass WCAG 2.1 AA? (Use browser DevTools audit)
  • Is information conveyed by more than just colour?
  • Are all images/icons either decorative (aria-hidden) or labelled (alt/aria-label)?
  • Do form inputs have associated <label> elements?
  • Are error messages linked to inputs via aria-describedby?
  • Does the component work with keyboard only (Tab, Enter, Escape)?
  • Does prefers-reduced-motion disable animations?
  • Are touch targets at least 44×44px?
  • Is text readable at 200% zoom without horizontal scrolling?

Debugging Checklist

When encountering styling issues, verify:

  • Is box-sizing: border-box set globally?
  • Are there competing CSS specificity issues?
  • Is the element in the correct stacking context?
  • Are flexbox/grid properties on the correct element (parent vs child)?
  • Are units consistent (rem vs px vs em)?
  • Does the issue exist at all breakpoints?
  • Are CSS variables defined and accessible?
  • Is the component's <style> block scoped correctly?
  • Are there any typos in class names or property names?
  • Is the browser's developer tools showing overridden styles?

Permission and Confirmation

Always ask permission before:

  • Editing multiple files (confirm per file or batch)
  • Making structural changes to component architecture
  • Introducing new styling patterns or conventions
  • Making changes that affect parent/sibling components

Always explain:

  • Why a particular approach is recommended
  • What knock-on effects changes might have
  • Which order changes will be applied
  • Alternative approaches if multiple options exist

References

For deeper dives into specific topics:


Success Criteria

A styling task is complete when:

  • Visual issues are resolved across all target breakpoints
  • Styling matches project conventions consistently
  • No new bugs or regressions introduced
  • Code is maintainable and follows project patterns
  • User has confirmed the solution meets requirements
  • Accessibility checklist passes (contrast, focus, keyboard, screen reader)
  • Animations respect prefers-reduced-motion

Source

git clone https://github.com/JasonWarrenUK/claude-code-config/blob/main/skills/frontend-styler/SKILL.mdView on GitHub

Overview

Frontend styling guidance focused on debugging layout issues, ensuring style consistency, and applying frontend best practices with an emphasis on Svelte/SvelteKit. It covers accessibility, planning, and scalable UI component styling to keep projects cohesive and maintainable.

How This Skill Works

The skill combines core principles (Accessibility First, Plan Before Execute, Consistency, Hierarchy) with Svelte-specific guidelines (component-scoped styles, selective global styles, and CSS custom properties). Practically, you apply CSS variables, use Svelte style blocks, and leverage reactive classes, following a structured layout debugging workflow to identify root causes and plan methodical changes.

When to Use It

  • Fixing layout problems such as alignment, spacing, and responsive issues
  • Unifying component styling to match project conventions
  • Debugging visual inconsistencies or CSS bugs
  • Implementing new UI components with consistent styling
  • Refactoring styling approaches for better maintainability

Quick Start

  1. Step 1: Identify root cause using the Layout Debugging Workflow
  2. Step 2: Plan changes and obtain approval before implementation
  3. Step 3: Implement changes using scoped styles, CSS vars, and test accessibility

Best Practices

  • Prioritize accessibility: ensure contrast, focus indicators, reduced motion, and touch targets
  • Plan changes first: analyze, plan, confirm with stakeholders, then execute
  • Maintain consistency by following established patterns and avoiding new approaches without discussion
  • Fix layout issues by addressing parent containers first, then children
  • Leverage Svelte features: component-scoped styles, CSS custom properties, and selective global styling

Example Use Cases

  • Unify button styles across a SvelteKit app using shared classes and CSS vars
  • Resolve a spacing issue by updating a parent grid container and applying consistent padding
  • Fix color contrast in a form error message and ensure visible focus ring
  • Create a reusable Card component with scoped styles and design tokens
  • Migrate inline styles to CSS vars and class-based styling for maintainability

Frequently Asked Questions

Add this skill to your agents
Sponsor this space

Reach thousands of developers