Dark Mode Implementation
Material UI provides built-in support for dark mode through palette modes and color schemes.Basic Dark Mode
Static Dark Mode
Create a theme with dark mode:Dark Mode Palette Colors
Dark mode uses different default colors optimized for dark backgrounds: Light Mode Primary:blue[700] (#1976d2)
Dark Mode Primary: blue[200] (#90caf9)
Light Mode Secondary: purple[500] (#9c27b0)
Dark Mode Secondary: purple[200] (#ce93d8)
Light Mode Error: red[700] (#d32f2f)
Dark Mode Error: red[500] (#f44336)
Light Mode Warning: #ed6c02
Dark Mode Warning: orange[400] (#ffa726)
Light Mode Info: lightBlue[700] (#0288d1)
Dark Mode Info: lightBlue[400] (#29b6f6)
Light Mode Success: green[800] (#2e7d32)
Dark Mode Success: green[400] (#66bb6a)
Dark Mode Background Colors
Dark Mode Action Colors
Toggle Dark Mode
Implement a dark mode toggle:Color Schemes (Recommended)
Use color schemes for better dark mode support:Custom Dark Mode Colors
System Preference Detection
Use CSS variables with media query for automatic detection:Manual Color Scheme Selection
Use class or data attribute selector:useColorScheme Hook
Control color scheme from components:Persistent Dark Mode
Save preference to localStorage:Dark Mode with CSS Variables
Dark Mode Images
Switch images based on mode:Dark Mode Styling
Conditional styles based on mode:Material Design Elevation in Dark Mode
Dark mode uses overlays to simulate elevation:Default Color Scheme
Testing Dark Mode
Test both modes:Color Scheme Best Practices
- Use semantic colors: Primary, secondary, error, etc.
- Test contrast ratios: Ensure WCAG compliance
- Provide mode toggle: Let users choose
- Respect system preference: Use
colorSchemeSelector: 'media' - Persist preference: Save to localStorage
- Test both modes: Ensure all content is visible
Common Dark Mode Issues
Issue: White flash on load
Solution: Set initial theme in HTML:Issue: Images too bright in dark mode
Solution: Apply opacity or use different images:Source Reference
The dark mode implementation can be found at:- Light palette:
packages/mui-material/src/styles/createPalette.js:12 - Dark palette:
packages/mui-material/src/styles/createPalette.js:55 - Color schemes:
packages/mui-material/src/styles/createTheme.ts:30 - Default colors:
packages/mui-material/src/styles/createPalette.js:116