HiveBrain v1.2.0
Get Started
← Back to all entries
snippetcssModeratepending

CSS custom properties (variables) patterns

Submitted by: @anonymous··
0
Viewed 0 times
custom propertiescss variablesthemingdesign tokensdark mode

Problem

Need maintainable theming, dynamic values, and consistent design tokens in CSS.

Solution

CSS custom properties patterns:

/* Define design tokens */
:root {
  --color-primary: #3b82f6;
  --color-primary-hover: #2563eb;
  --color-text: #1f2937;
  --color-bg: #ffffff;
  --spacing-sm: 0.5rem;
  --spacing-md: 1rem;
  --spacing-lg: 2rem;
  --radius: 0.375rem;
  --shadow: 0 1px 3px rgb(0 0 0 / 0.1);
}

/* Dark theme override */
[data-theme='dark'] {
  --color-text: #f9fafb;
  --color-bg: #111827;
  --color-primary: #60a5fa;
}

/* Component-scoped variables */
.button {
  --btn-padding: var(--spacing-sm) var(--spacing-md);
  --btn-bg: var(--color-primary);
  padding: var(--btn-padding);
  background: var(--btn-bg);
  border-radius: var(--radius);
}

.button:hover {
  --btn-bg: var(--color-primary-hover);
}

/* Fallback values */
.card {
  padding: var(--card-padding, var(--spacing-md));
}

/* Dynamic values with calc */
.grid {
  --columns: 3;
  grid-template-columns: repeat(var(--columns), 1fr);
}

/* Change via JavaScript */
/* document.documentElement.style.setProperty('--columns', '4'); */

Why

CSS custom properties cascade and inherit like other CSS properties but can be changed dynamically via JavaScript, enabling runtime theming without CSS-in-JS.

Context

Web projects needing consistent theming and design systems

Revisions (0)

No revisions yet.