Real-Time Theme Preview Sandbox
Experiment with your website's theme in a live environment. Preview how different components and elements look with your chosen color scheme, typography, and spacing.
Preview
Buttons
Cards
Card Title
Card content with theme styling applied.
Colored Card
Card with background color.
Form Elements
Typography
Heading 1
Heading 2
Regular paragraph text with theme styling.
Accent colored text.
Generated Theme CSS
:root { /* Colors */ --primary: #3b82f6; --secondary: #64748b; --background: #ffffff; --text: #1f2937; --accent: #f59e0b; /* Typography */ --font-family: system-ui, sans-serif; --font-size-base: 16px; /* Spacing */ --spacing: 1rem; --radius: 0.5rem; }
Understanding Theme Systems
A theme system is the foundation of your website's visual design. It encompasses colors, typography, spacing, and component styles that work together to create a cohesive user experience.
Key Theme Components
- Color palette and color modes
- Typography scale and font families
- Spacing and layout systems
- Component variants and states
- Animation and transition styles
Theme Considerations
- Brand consistency across components
- Accessibility and contrast ratios
- Dark mode support
- Component state variations
- Responsive behavior
Theme Implementation Best Practices
1. CSS Custom Properties
Use CSS variables to create flexible and maintainable themes:
:root { /* Colors */ --primary: #3b82f6; --primary-hover: #2563eb; --secondary: #64748b; --background: #ffffff; --text: #1f2937; /* Typography */ --font-main: system-ui, sans-serif; --font-heading: "Inter", sans-serif; /* Spacing */ --spacing-unit: 0.25rem; --radius: 0.5rem; }
2. Dark Mode Support
Implement dark mode using CSS custom properties and media queries:
@media (prefers-color-scheme: dark) { :root { --background: #1f2937; --text: #f3f4f6; --primary: #60a5fa; --primary-hover: #93c5fd; } }
3. Component Variants
Create reusable component styles with variants:
.button { padding: calc(var(--spacing-unit) * 2) calc(var(--spacing-unit) * 4); border-radius: var(--radius); font-family: var(--font-main); transition: all 0.2s ease; } .button-primary { background: var(--primary); color: white; } .button-secondary { background: var(--secondary); color: white; }
4. Responsive Design
Implement responsive adjustments using CSS variables:
:root { --container-width: 100%; --font-size-base: 16px; } @media (min-width: 768px) { :root { --container-width: 750px; --font-size-base: 18px; } }
Theme Testing Strategies
Visual Regression Testing
Implement visual regression tests to catch unintended theme changes:
- Screenshot comparison across theme variations
- Component state testing
- Responsive breakpoint testing
- Color mode transition testing
Accessibility Testing
Ensure your theme meets accessibility standards:
- Color contrast ratios
- Focus state visibility
- Text readability
- Interactive element sizing
Cross-Browser Testing
Test theme consistency across different browsers:
- CSS variable support
- Font rendering
- Color mode implementation
- Animation performance
Related Tools and Resources
Frequently Asked Questions
How do I maintain consistency across different components?
Use a design token system with CSS variables to maintain consistency:
:root { /* Base tokens */ --color-blue-500: #3b82f6; --spacing-4: 1rem; /* Semantic tokens */ --color-primary: var(--color-blue-500); --button-padding: var(--spacing-4); }
How can I test my theme across different devices?
Implement a comprehensive testing strategy:
- Use browser developer tools for device emulation
- Test on physical devices when possible
- Implement responsive breakpoints using CSS variables
- Use automated testing tools for cross-device verification
Should I use CSS-in-JS or CSS variables for theming?
Both approaches have their merits:
- CSS Variables: Better performance, native browser support, easier debugging
- CSS-in-JS: Type safety, dynamic theming, component co-location
Choose based on your project needs, team expertise, and performance requirements.
How do I handle theme switching?
Implement theme switching using CSS classes or data attributes:
/* Theme switching with data attributes */ [data-theme="light"] { --background: white; --text: black; } [data-theme="dark"] { --background: #1a1a1a; --text: white; } /* Theme switching with classes */ .theme-light { --background: white; --text: black; } .theme-dark { --background: #1a1a1a; --text: white; }
Theme Organization Tips
File Structure
themes/ ├── base.css # Base variables ├── light.css # Light theme ├── dark.css # Dark theme └── components/ # Component-specific ├── button.css ├── input.css └── card.css
Variable Naming
/* Token hierarchy */ --color-primary-50: #f0f9ff; --color-primary-100: #e0f2fe; /* ... */ /* Semantic naming */ --button-bg: var(--color-primary-500); --button-text: var(--color-neutral-50); --button-border: var(--color-primary-600);