Skills DirectorySkills Directory
SkillsLearnSecurityCategoriesDocsBlogPro
Sign InSubmit Skill
Skills Directory

Security-tested agent skills for Claude, coding agents, and AI workflows.

Directory

  • Browse Skills
  • All Skills A–Z
  • Claude Skills
  • Claude Code Skills
  • Agent Skills
  • Categories
  • Authors
  • Submit a Skill

Learn

  • Learn Hub
  • Install Claude Skills
  • Write SKILL.md
  • Skills vs MCP
  • Directories Compared

Security

  • Security
  • Methodology
  • Secure Claude Skills
  • Security Badges
  • Chrome Extension
  • Skill Manager

Company

  • About
  • Community
  • Blog
  • API Docs
  • Advertise

2026 Skills Directory. All rights reserved.

ProTermsPrivacyRefunds
Back to skills

Styled Components Pro

ASecurity

Style React with styled-components: theming, transient props, attrs, SSR, and performance patterns. Use when building component-scoped styles with CSS-in-JS.

2 stars
0 votes
0 copies
0 views
Added 9/29/2026
ai-agentsgoreactnextjsperformance

Works with

cursor

Security Analysis

A100/100

Scanned 9/29/2026

$npx -y skills add aicodedecode/awesome-muse-skills --skill styled-components-pro --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Styled Components Pro?

Add the live security badge to your README — it updates automatically with every re-scan.

Security grade badge for Styled Components Pro
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/aicodedecode-styled-components-pro/badge)](https://www.skillsdirectory.com/skills/aicodedecode-styled-components-pro)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
Files
SKILL.md
---
name: styled-components-pro
description: Style React with styled-components: theming, transient props, attrs, SSR, and performance patterns. Use when building component-scoped styles with CSS-in-JS.
category: development
---

# styled-components Pro

A practical guide to styled-components: component-scoped CSS-in-JS for React — theming, transient props, the `css` helper, SSR, and the performance patterns that keep runtime styling cheap.

## Overview

styled-components turns CSS into React components: `const Button = styled.button\`...\`` generates a class at render time with your styles attached. Styles live with components, props drive variants, and theming flows through React context. The cost is runtime: styles compute in the browser. Used well (static styles, transient props, babel plugin), the cost is small; used carelessly (new components per render, prop-drilling styles), it compounds.

## When to use

- React apps wanting co-located, prop-driven styles.
- Theming via `ThemeProvider` (light/dark, brand variants).
- Migrating from global CSS to component-scoped styles.
- SSR setups (Next.js pages router, custom SSR) needing critical CSS extraction.

## Core concepts

- **`styled`.** `styled.tag` or `styled(Component)` — template literal CSS, interpolations for props/theme. Extending: `styled(Button)` inherits styles.
- **Transient props (`$`).** `$active` instead of `active` — not forwarded to the DOM, avoiding React unknown-prop warnings and invalid HTML attributes. Default to `$` for styling-only props.
- **`css` helper.** Share style fragments: `const tone = css\`color: ...\`;` then `${tone}` in multiple components. Also powers `createGlobalStyle`.
- **`attrs`.** Set static attrs/default props: `styled.input.attrs({ type: 'checkbox' })\`...\`` — keeps the template focused on styling.
- **Theming.** `<ThemeProvider theme={theme}>` → `${({ theme }) => theme.colors.brand}`. Type the theme (TS declaration merging on `DefaultTheme`) so typos fail at compile time.
- **`createGlobalStyle`.** Resets, fonts, base styles — rendered once at app root.
- **Babel plugin.** `babel-plugin-styled-components`: meaningful `displayName`s, minified class names, SSR-friendly IDs. Non-optional in practice.

## Practical workflow

**1. Setup.** Install `styled-components` + babel plugin (in `.babelrc`/config). For SWC: `@swc/plugin-styled-components`.

**2. Component pattern.**
```tsx
import styled, { css } from 'styled-components';

const tone = {
  primary: css`background: ${({ theme }) => theme.colors.brand}; color: white;`,
  ghost: css`background: transparent; color: ${({ theme }) => theme.colors.brand};`,
};

export const Button = styled.button<{ $tone?: keyof typeof tone; $fullWidth?: boolean }>`
  padding: 0.625rem 1.25rem;
  border-radius: ${({ theme }) => theme.radii.md};
  ${({ $tone = 'primary' }) => tone[$tone]}
  ${({ $fullWidth }) => $fullWidth && 'width: 100%;'}
  &:disabled { opacity: 0.5; cursor: not-allowed; }
`;
```
Transient props, theme tokens, variant map — no prop leaks to the DOM.

**3. Theme typing.**
```ts
// styled.d.ts
import 'styled-components';
declare module 'styled-components' {
  export interface DefaultTheme { colors: { brand: string; ... }; radii: { md: string } }
}
```

**4. SSR.** Collect styles on the server (`ServerStyleSheet` / framework integration) and inject into HTML — otherwise first paint is unstyled. Next.js App Router: use the official registry pattern.

**5. Performance pass.** Define styled components at module level (never inside render — that remounts every render); prefer transient props; keep interpolations simple (avoid creating new objects/functions in interpolations).

## Common pitfalls

- **Defining components inside render.** `function X() { const Box = styled.div...; return <Box/> }` — new component identity every render → remount + style recalculation. Module level, always.
- **Non-transient styling props.** `active`, `large` forwarded to DOM → React warnings + invalid attributes. `$`-prefix everything styling-only.
- **Over-interpolation.** Complex logic inside template literals runs per render. Hoist variant maps and helpers out.
- **Missing babel plugin.** Cryptic class names, no displayNames in DevTools, SSR mismatches. Install and verify it's active.
- **Theming without types.** Untyped theme = stringly-typed typos discovered at runtime. Declare the module once.
- **Global styles multiplied.** Rendering `createGlobalStyle` component in multiple places duplicates output. Once, at the root.
- **Specificity surprises.** `styled(Button)` extension + overrides can create specificity fights. Prefer variant props on one component over deep extension chains.
- **Runtime cost denial.** Thousands of dynamic styled components on a page has measurable cost. For static marketing pages, consider zero-runtime alternatives; for apps, it's usually fine — measure before rewriting.

Attribution

aicodedecodeaicodedecode
View sourceSee grades on GitHubMore from aicodedecode →
SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments (0)

No comments yet. Be the first to comment!

SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Related Skills

Caveman

Terse caveman voice: answer first, fluff gone, every technical fact kept. Use for /caveman, "caveman mode", "talk like caveman", "be brief", "less tokens". Stays on until "stop caveman" or "normal mode".

1100021 votes

Hyperplan

Adversarial multi-agent planning skill. Self-orchestrates 5 hostile category members (unspecified-low, unspecified-high, deep, ultrabrain, artistry) via team-mode for ruthless cross-critique debate, distills only the defensible insights, then MANDATORILY hands the distilled insight bundle to the `plan` agent for executable plan formalization. Use when planning needs maximum rigor and surfacing of weak assumptions, blind spots, and over-engineering. Triggers: 'hyperplan', 'hpp', '/hyperplan', ...

698621 votes

Writing Skills

Create and manage Claude Code skills in HASH repository following Anthropic best practices. Use when creating new skills, modifying skill-rules.json, understanding trigger patterns, working with hooks, debugging skill activation, or implementing progressive disclosure. Covers skill structure, YAML frontmatter, trigger types (keywords, intent patterns), UserPromptSubmit hook, and the 500-line rule. Includes validation and debugging with SKILL_DEBUG. Examples include rust-error-stack, cargo-dep...

3931 votes

Mcp Code Execution

Routes multi-tool workflows through MCP servers for large datasets and pipelines. Use when Bash tool overhead is limiting throughput on data-heavy tasks.

3421 votes

catchup

Recovers the conversation and failed tool calls of a previous Codex, Amp, Claude Code, Antigravity, Cline, Copilot CLI, Cursor, DeepSeek Harness, Grok Build, Kimi, OpenCode, Pi Agent, or ZCode session. Use when the user says "catch up", "what did the last session do", "get me up to speed", "I switched agents", asks to recover/summarize a previous session before continuing, or asks to diagnose or report a catchup failure. Do NOT use for the current conversation, git history, or any non-agent log.

741 votes
View all in ai-agents →