🎨 CSS Variables = Theme Management
Hard-coded colors are a maintenance nightmare. CSS Variables enable consistent theming and easy updates.
📝 CSS Variables Setup
:root {
/* Colors */
--color-primary: #3498db;
--color-secondary: #2ecc71;
--color-accent: #e74c3c;
--color-background: #ffffff;
--color-text: #2c3e50;
--color-text-secondary: #7f8c8d;
/* Typography */
--font-family: 'Inter', -apple-system, sans-serif;
--font-size-base: 16px;
--font-size-large: 1.25rem;
--font-size-small: 0.875rem;
/* Spacing */
--spacing-xs: 4px;
--spacing-sm: 8px;
--spacing-md: 16px;
--spacing-lg: 24px;
--spacing-xl: 32px;
/* Borders */
--border-radius-sm: 4px;
--border-radius-md: 8px;
--border-radius-lg: 16px;
--border-color: #e0e0e0;
/* Shadows */
--shadow-sm: 0 2px 4px rgba(0,0,0,0.1);
--shadow-md: 0 4px 8px rgba(0,0,0,0.12);
--shadow-lg: 0 8px 16px rgba(0,0,0,0.15);
}
/* Using Variables */
.button-primary {
background-color: var(--color-primary);
color: white;
padding: var(--spacing-md) var(--spacing-lg);
border-radius: var(--border-radius-md);
font-family: var(--font-family);
box-shadow: var(--shadow-sm);
}
.card {
background: var(--color-background);
border: 1px solid var(--border-color);
border-radius: var(--border-radius-lg);
padding: var(--spacing-lg);
box-shadow: var(--shadow-md);
}
🎯 Dynamic Theming with CSS Variables
/* Light Theme */
:root {
--bg-color: #ffffff;
--text-color: #2c3e50;
--card-bg: #f8fafc;
}
/* Dark Theme */
[data-theme='dark'] {
--bg-color: #1a1a2e;
--text-color: #e0e0e0;
--card-bg: #2d3748;
}
/* Theme Toggle with JavaScript */
function toggleTheme() {
const html = document.documentElement;
const currentTheme = html.getAttribute('data-theme');
const newTheme = currentTheme === 'dark' ? 'light' : 'dark';
html.setAttribute('data-theme', newTheme);
localStorage.setItem('theme', newTheme);
}
/* Responsive Variables */
@media (max-width: 768px) {
:root {
--font-size-base: 14px;
--spacing-lg: 16px;
--spacing-xl: 24px;
}
}
/* Component-Specific Variables */
.card {
--card-bg: var(--color-background);
--card-border: var(--border-color);
--card-padding: var(--spacing-lg);
}
.card-dark {
--card-bg: #2d3748;
--card-border: #4a5568;
}
/* Fallback Values */
.element {
color: var(--text-color, #2c3e50);
background: var(--bg-color, #ffffff);
}
💡 CSS Variables Best Practices
- Use consistent naming conventions
- Define all variables in :root
- Use semantic names over color names
- Provide fallback values
- Update variables with JavaScript for theming
CSS Variables make theming effortless. Change one value, update your entire design system.
