Custom Styling
Custom Styling
CookieDialog provides extensive styling customization options through CSS variables, custom classes, and complete theme overrides.
CSS Variables
CookieDialog uses CSS custom properties for easy theming:
Color Variables
:root { /* Background colors */ --cd-bg-primary: #ffffff; --cd-bg-secondary: #f8f9fa; --cd-bg-overlay: rgba(0, 0, 0, 0.5);
/* Text colors */ --cd-text-primary: #212529; --cd-text-secondary: #6c757d; --cd-text-muted: #adb5bd;
/* Border and shadow */ --cd-border-color: #dee2e6; --cd-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);
/* Button colors */ --cd-btn-primary-bg: #007bff; --cd-btn-primary-text: #ffffff; --cd-btn-primary-hover: #0056b3;
--cd-btn-secondary-bg: #6c757d; --cd-btn-secondary-text: #ffffff; --cd-btn-secondary-hover: #545b62;}
Spacing and Layout
:root { /* Spacing */ --cd-spacing-xs: 4px; --cd-spacing-sm: 8px; --cd-spacing-md: 16px; --cd-spacing-lg: 24px; --cd-spacing-xl: 32px;
/* Border radius */ --cd-border-radius: 8px; --cd-border-radius-sm: 4px; --cd-border-radius-lg: 12px;
/* Sizing */ --cd-max-width: 500px; --cd-min-height: 200px;
/* Typography */ --cd-font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; --cd-font-size-sm: 0.875rem; --cd-font-size-md: 1rem; --cd-font-size-lg: 1.125rem; --cd-line-height: 1.5;}
Component Classes
Target specific parts of the dialog:
Dialog Container
/* Main dialog container */.cookiedialog { /* Custom styles for the entire dialog */ font-family: 'Inter', sans-serif; border: 2px solid var(--cd-border-color);}
/* Position-specific styling */.cookiedialog--bottom { border-radius: var(--cd-border-radius) var(--cd-border-radius) 0 0;}
.cookiedialog--top { border-radius: 0 0 var(--cd-border-radius) var(--cd-border-radius);}
.cookiedialog--center { border-radius: var(--cd-border-radius); max-width: 90vw; max-height: 90vh;}
Content Areas
/* Header section */.cookiedialog__header { padding: var(--cd-spacing-lg); border-bottom: 1px solid var(--cd-border-color);}
/* Title */.cookiedialog__title { font-size: var(--cd-font-size-lg); font-weight: 600; margin: 0 0 var(--cd-spacing-sm) 0; color: var(--cd-text-primary);}
/* Description */.cookiedialog__description { font-size: var(--cd-font-size-md); color: var(--cd-text-secondary); margin: 0;}
/* Body content */.cookiedialog__body { padding: var(--cd-spacing-lg);}
/* Footer with buttons */.cookiedialog__footer { padding: var(--cd-spacing-lg); border-top: 1px solid var(--cd-border-color);}
Categories Section
/* Categories container */.cookiedialog__categories { margin: var(--cd-spacing-md) 0;}
/* Individual category */.cookiedialog__category { display: flex; align-items: center; justify-content: space-between; padding: var(--cd-spacing-md); margin-bottom: var(--cd-spacing-sm); background: var(--cd-bg-secondary); border-radius: var(--cd-border-radius-sm); border: 1px solid var(--cd-border-color);}
/* Category info */.cookiedialog__category-info { flex: 1;}
.cookiedialog__category-name { font-weight: 500; color: var(--cd-text-primary); margin-bottom: var(--cd-spacing-xs);}
.cookiedialog__category-description { font-size: var(--cd-font-size-sm); color: var(--cd-text-muted);}
/* Toggle switch */.cookiedialog__toggle { margin-left: var(--cd-spacing-md);}
Buttons
/* Button container */.cookiedialog__buttons { display: flex; gap: var(--cd-spacing-md); margin-top: var(--cd-spacing-lg);}
/* Base button styles */.cookiedialog__button { flex: 1; padding: var(--cd-spacing-md) var(--cd-spacing-lg); border: none; border-radius: var(--cd-border-radius-sm); font-size: var(--cd-font-size-md); font-weight: 500; cursor: pointer; transition: all 0.2s ease;}
/* Primary button */.cookiedialog__button--primary { background: var(--cd-btn-primary-bg); color: var(--cd-btn-primary-text);}
.cookiedialog__button--primary:hover { background: var(--cd-btn-primary-hover); transform: translateY(-1px);}
/* Secondary button */.cookiedialog__button--secondary { background: var(--cd-btn-secondary-bg); color: var(--cd-btn-secondary-text);}
.cookiedialog__button--secondary:hover { background: var(--cd-btn-secondary-hover);}
/* Outline button */.cookiedialog__button--outline { background: transparent; color: var(--cd-btn-primary-bg); border: 2px solid var(--cd-btn-primary-bg);}
.cookiedialog__button--outline:hover { background: var(--cd-btn-primary-bg); color: var(--cd-btn-primary-text);}
Custom Themes
Dark Theme Override
/* Dark theme */[data-theme="dark"] .cookiedialog,.cookiedialog--dark { --cd-bg-primary: #1a202c; --cd-bg-secondary: #2d3748; --cd-bg-overlay: rgba(0, 0, 0, 0.8);
--cd-text-primary: #f7fafc; --cd-text-secondary: #e2e8f0; --cd-text-muted: #a0aec0;
--cd-border-color: #4a5568; --cd-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
--cd-btn-primary-bg: #3182ce; --cd-btn-primary-hover: #2c5282;}
Material Design Theme
.cookiedialog--material { --cd-border-radius: 4px; --cd-shadow: 0 8px 32px rgba(0, 0, 0, 0.12);
font-family: 'Roboto', sans-serif; box-shadow: var(--cd-shadow); border: none;}
.cookiedialog--material .cookiedialog__button { text-transform: uppercase; font-weight: 500; letter-spacing: 0.5px; border-radius: 4px;}
.cookiedialog--material .cookiedialog__button--primary { background: #1976d2; box-shadow: 0 2px 4px rgba(25, 118, 210, 0.3);}
.cookiedialog--material .cookiedialog__button--primary:hover { background: #1565c0; box-shadow: 0 4px 8px rgba(25, 118, 210, 0.4);}
iOS Style Theme
.cookiedialog--ios { --cd-border-radius: 16px; --cd-spacing-md: 20px; --cd-font-family: -apple-system, BlinkMacSystemFont, sans-serif;
background: rgba(255, 255, 255, 0.95); backdrop-filter: blur(20px); border: 1px solid rgba(255, 255, 255, 0.2);}
.cookiedialog--ios .cookiedialog__button { border-radius: 12px; font-weight: 600; min-height: 44px;}
.cookiedialog--ios .cookiedialog__button--primary { background: #007aff; color: white;}
.cookiedialog--ios .cookiedialog__category { background: rgba(120, 120, 128, 0.12); border: none; border-radius: 12px;}
Responsive Design
/* Mobile-first responsive design */.cookiedialog { width: 100%; max-width: var(--cd-max-width); margin: 0;}
/* Mobile styles */@media (max-width: 767px) { .cookiedialog { border-radius: 0; max-width: 100%; }
.cookiedialog--bottom { position: fixed; bottom: 0; left: 0; right: 0; }
.cookiedialog--center { position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 90vw; max-height: 90vh; overflow-y: auto; }
.cookiedialog__buttons { flex-direction: column; }
.cookiedialog__category { flex-direction: column; align-items: flex-start; text-align: left; }
.cookiedialog__toggle { margin-left: 0; margin-top: var(--cd-spacing-sm); align-self: flex-end; }}
/* Tablet styles */@media (min-width: 768px) and (max-width: 1023px) { .cookiedialog { max-width: 80vw; }}
/* Desktop styles */@media (min-width: 1024px) { .cookiedialog { max-width: var(--cd-max-width); }
.cookiedialog--bottom { margin: 0 auto var(--cd-spacing-lg) auto; }
.cookiedialog--top { margin: var(--cd-spacing-lg) auto 0 auto; }}
Animations
Slide Animations
/* Slide up from bottom */.cookiedialog--bottom { animation: slideUp 0.3s ease-out;}
@keyframes slideUp { from { transform: translateY(100%); opacity: 0; } to { transform: translateY(0); opacity: 1; }}
/* Slide down from top */.cookiedialog--top { animation: slideDown 0.3s ease-out;}
@keyframes slideDown { from { transform: translateY(-100%); opacity: 0; } to { transform: translateY(0); opacity: 1; }}
/* Scale in for center */.cookiedialog--center { animation: scaleIn 0.3s ease-out;}
@keyframes scaleIn { from { transform: scale(0.9); opacity: 0; } to { transform: scale(1); opacity: 1; }}
Button Hover Effects
/* Ripple effect */.cookiedialog__button { position: relative; overflow: hidden;}
.cookiedialog__button::before { content: ''; position: absolute; top: 50%; left: 50%; width: 0; height: 0; border-radius: 50%; background: rgba(255, 255, 255, 0.3); transform: translate(-50%, -50%); transition: width 0.6s, height 0.6s;}
.cookiedialog__button:active::before { width: 300px; height: 300px;}
Complete Custom Theme Example
/* Glassmorphism theme */.cookiedialog--glass { background: rgba(255, 255, 255, 0.1); backdrop-filter: blur(20px); border: 1px solid rgba(255, 255, 255, 0.2); border-radius: 20px; box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1); color: #333;}
.cookiedialog--glass .cookiedialog__category { background: rgba(255, 255, 255, 0.1); border: 1px solid rgba(255, 255, 255, 0.2); backdrop-filter: blur(10px);}
.cookiedialog--glass .cookiedialog__button { background: rgba(255, 255, 255, 0.2); border: 1px solid rgba(255, 255, 255, 0.3); color: #333; backdrop-filter: blur(10px);}
.cookiedialog--glass .cookiedialog__button:hover { background: rgba(255, 255, 255, 0.3); transform: translateY(-2px);}
.cookiedialog--glass .cookiedialog__button--primary { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; border: none;}
CSS-in-JS Integration
For modern frameworks, you can define styles programmatically:
const customStyles = { '.cookiedialog': { fontFamily: 'Inter, sans-serif', borderRadius: '16px', boxShadow: '0 20px 60px rgba(0, 0, 0, 0.1)', border: 'none', background: 'linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%)' },
'.cookiedialog__button--primary': { background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)', border: 'none', borderRadius: '8px', padding: '12px 24px', fontWeight: '600', transition: 'all 0.3s ease' }};
// Apply styles (implementation depends on your CSS-in-JS solution)
Best Practices
- Use CSS Variables: They make theming much easier
- Mobile-first: Design for mobile, then enhance for larger screens
- Test Accessibility: Ensure sufficient color contrast
- Performance: Minimize CSS bundle size
- Browser Support: Test across different browsers