Optimize CSS performance - critical CSS, code splitting, purging, bundle analysis
Provides CSS performance optimization with critical CSS extraction, PurgeCSS configuration, and minification using cssnano. Use when optimizing bundle sizes, improving First Contentful Paint, or configuring production builds to eliminate unused styles.
/plugin marketplace add pluginagentmarketplace/custom-plugin-css/plugin install css-assistant@pluginagentmarketplace-cssThis skill inherits all available tools. When active, it can use any tool Claude has access to.
assets/config.yamlassets/schema.jsonreferences/GUIDE.mdreferences/PATTERNS.mdscripts/validate.pyOptimize CSS performance with critical CSS extraction, code splitting, purging, and bundle analysis.
This skill provides atomic, focused guidance on CSS performance optimization with measurable metrics and production-ready configurations.
| Property | Value |
|---|---|
| Category | Optimization |
| Complexity | Advanced to Expert |
| Dependencies | css-fundamentals, css-architecture |
| Bonded Agent | 06-css-performance |
Skill("css-performance")
parameters:
optimization_type:
type: string
required: true
enum: [critical-css, purging, minification, code-splitting, selectors]
description: Type of optimization to implement
tool:
type: string
required: false
enum: [purgecss, cssnano, critical, webpack, postcss]
description: Specific tool configuration
metrics:
type: boolean
required: false
default: true
description: Include measurement recommendations
validation:
- rule: optimization_type_required
message: "optimization_type parameter is required"
- rule: valid_optimization
message: "optimization_type must be one of: critical-css, purging..."
retry_config:
max_attempts: 3
backoff_type: exponential
initial_delay_ms: 1000
max_delay_ms: 10000
logging:
entry_point: skill_invoked
exit_point: skill_completed
metrics:
- invocation_count
- optimization_type_distribution
- tool_usage
| Metric | Target | Tool |
|---|---|---|
| CSS Size (gzip) | < 50KB | DevTools |
| Unused CSS | < 20% | Coverage |
| Critical CSS | < 14KB | Penthouse |
| FCP | < 1.8s | Lighthouse |
// postcss.config.js
module.exports = {
plugins: [
require('@fullhuman/postcss-purgecss')({
content: [
'./src/**/*.{js,jsx,ts,tsx}',
'./public/index.html',
],
defaultExtractor: content =>
content.match(/[\w-/:]+(?<!:)/g) || [],
safelist: {
standard: [/^is-/, /^has-/, 'active', 'open'],
deep: [/^data-/],
greedy: [/modal$/, /tooltip$/],
},
}),
],
}
// critical.config.js
const critical = require('critical');
critical.generate({
base: 'dist/',
src: 'index.html',
css: ['dist/styles.css'],
width: 1300,
height: 900,
inline: true,
extract: true,
});
// postcss.config.js
module.exports = {
plugins: {
cssnano: {
preset: ['default', {
discardComments: { removeAll: true },
normalizeWhitespace: true,
colormin: true,
minifyFontValues: true,
// Unsafe optimizations (test carefully)
reduceIdents: false,
mergeIdents: false,
}],
},
},
}
<!-- Inline critical CSS -->
<style>/* Critical CSS here */</style>
<!-- Async load full CSS -->
<link rel="preload" href="styles.css" as="style"
onload="this.onload=null;this.rel='stylesheet'">
<noscript>
<link rel="stylesheet" href="styles.css">
</noscript>
/* FAST */
.button { } /* Single class */
#header { } /* ID */
/* MODERATE */
.nav .link { } /* Descendant */
.nav > .link { } /* Child */
/* SLOW (avoid) */
.container * { } /* Universal descendant */
[class*="btn-"][class$="-lg"] { } /* Complex attribute */
# Lighthouse CI
npx lighthouse-ci https://example.com --collect
# CSS Coverage in Chrome DevTools
# 1. Open DevTools → More Tools → Coverage
# 2. Reload page
# 3. Check CSS usage percentage
# Bundle analysis
npx webpack-bundle-analyzer stats.json
Pre-deployment:
├─ [ ] CSS minified
├─ [ ] Unused CSS purged (< 20% unused)
├─ [ ] Critical CSS inlined
├─ [ ] Non-critical CSS async loaded
├─ [ ] Source maps excluded from production
├─ [ ] gzip/Brotli compression enabled
└─ [ ] Cache headers configured
describe('CSS Performance Skill', () => {
test('validates optimization_type parameter', () => {
expect(() => skill({ optimization_type: 'invalid' }))
.toThrow('optimization_type must be one of: critical-css...');
});
test('returns PurgeCSS config for purging type', () => {
const result = skill({ optimization_type: 'purging', tool: 'purgecss' });
expect(result).toContain('safelist');
expect(result).toContain('content');
});
test('includes metrics when flag is true', () => {
const result = skill({ optimization_type: 'critical-css', metrics: true });
expect(result).toContain('14KB');
expect(result).toContain('Lighthouse');
});
});
| Error Code | Cause | Recovery |
|---|---|---|
| INVALID_OPTIMIZATION | Unknown optimization type | Show valid options |
| TOOL_NOT_INSTALLED | Tool package missing | Show install command |
| OVER_PURGING | Styles missing in production | Expand safelist |
This skill should be used when the user asks to "create a slash command", "add a command", "write a custom command", "define command arguments", "use command frontmatter", "organize commands", "create command with file references", "interactive command", "use AskUserQuestion in command", or needs guidance on slash command structure, YAML frontmatter fields, dynamic arguments, bash execution in commands, user interaction patterns, or command development best practices for Claude Code.
This skill should be used when the user asks to "create an agent", "add an agent", "write a subagent", "agent frontmatter", "when to use description", "agent examples", "agent tools", "agent colors", "autonomous agent", or needs guidance on agent structure, system prompts, triggering conditions, or agent development best practices for Claude Code plugins.
This skill should be used when the user asks to "create a hook", "add a PreToolUse/PostToolUse/Stop hook", "validate tool use", "implement prompt-based hooks", "use ${CLAUDE_PLUGIN_ROOT}", "set up event-driven automation", "block dangerous commands", or mentions hook events (PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification). Provides comprehensive guidance for creating and implementing Claude Code plugin hooks with focus on advanced prompt-based hooks API.