cx.
Signature
Parameters
Configuration object for the variant function
Returns
A function that accepts variant selections and returns a space-separated class string.Function Signature:Returned String Format:
- Base class:
ss-{hash} - Variant classes:
ss-{hash}--{variantName}-{value} - Example:
"ss-xyz ss-xyz--color-primary ss-xyz--size-lg"
- Type-safe variant selection with autocomplete
- Automatic sanitization (prevents CSS injection)
- Returns space-separated class string ready for className attribute
- Zero runtime overhead (just string concatenation)
Examples
Basic Usage
With Multiple Variants
With Default Variants
With Compound Variants
Combining with cx Utility
Boolean Variants
Type Definitions
Notes
- IDE Syntax Highlighting: Wrap CSS strings in
css\…“ to get IDE syntax highlighting from the vscode-styled-components extension - Build-Time Extraction: All CSS is extracted at build time. Only class name mapping runs at runtime.
- Zero Runtime CSS: No runtime CSS generation. The function just concatenates pre-generated class names.
- Type Safety: Full TypeScript support with autocomplete for variant names and values
- Security: Variant values are automatically sanitized to prevent CSS injection
- Class Pattern: Generated classes follow BEM-like naming:
ss-{hash}for base,ss-{hash}--{variant}-{value}for variants
Use Cases
When to use cssVariants
- Applying variant styles to non-React elements (e.g.,
<div>,<span>) - Combining with other class utilities like Tailwind CSS
- Building design system primitives that return class names
- Need more control over className composition
When to use styledVariants instead
- Creating reusable React components with variant props
- Need automatic prop forwarding and ref support
- Want component-level abstractions
- Prefer JSX syntax over className strings
See Also
- styledVariants - Create styled components with variant props
- css - Get a scoped class name for CSS
- cx - Utility for conditionally joining class names