8.5 KiB
8.5 KiB
Responsive Design Guide - KLZ Cables
This guide documents the responsive design patterns and utilities implemented for the KLZ Cables Next.js application.
Overview
The responsive design system follows a mobile-first approach with comprehensive breakpoints, fluid typography, and optimized touch interactions.
Breakpoints
| Breakpoint | Width | Use Case |
|---|---|---|
xs |
475px | Extra small phones |
sm |
640px | Small phones (landscape) |
md |
768px | Tablets (portrait) |
lg |
1024px | Tablets (landscape) / Small desktops |
xl |
1280px | Desktops |
2xl |
1400px | Large desktops |
3xl |
1600px | Very large desktops |
Core Utilities
1. Responsive Utilities (lib/responsive.ts)
import {
getViewport,
checkBreakpoint,
resolveResponsiveProp,
generateImageSizes,
getResponsiveGrid,
clamp
} from '@/lib/responsive';
// Get current viewport information
const viewport = getViewport();
// Check specific breakpoint
const isMobile = checkBreakpoint('mobile', viewport);
// Resolve responsive prop
const spacing = resolveResponsiveProp({
mobile: '1rem',
tablet: '1.5rem',
desktop: '2rem'
}, viewport);
2. Responsive Components
Button Component
<Button
variant="primary"
size="md"
responsiveSize={{
mobile: 'sm',
tablet: 'md',
desktop: 'lg'
}}
touchTarget={true}
>
Click Me
</Button>
Container Component
<Container
maxWidth="xl"
padding="responsive"
safeArea={true}
>
{content}
</Container>
Grid Component
<Grid
responsiveCols={{
mobile: 1,
tablet: 2,
desktop: 3
}}
gap="responsive"
stackMobile={true}
>
{items}
</Grid>
FeaturedImage Component
<FeaturedImage
src="/image.jpg"
alt="Description"
quality="auto"
placeholder="blur"
blurDataURL="data:image/..."
responsiveSrc={{
mobile: '/image-mobile.jpg',
tablet: '/image-tablet.jpg',
desktop: '/image-desktop.jpg'
}}
/>
3. Responsive Layout Patterns
ResponsiveWrapper
<ResponsiveWrapper
stackOnMobile={true}
centerOnMobile={true}
padding="responsive"
container={true}
maxWidth="xl"
>
{content}
</ResponsiveWrapper>
ResponsiveGrid
<ResponsiveGrid
columns={{
mobile: 1,
tablet: 2,
desktop: 3,
largeDesktop: 4
}}
gap="responsive"
stackMobile={true}
>
{items}
</ResponsiveGrid>
ResponsiveSection
<ResponsiveSection
padding="responsive"
maxWidth="6xl"
centered={true}
safeArea={true}
>
{content}
</ResponsiveSection>
Mobile-First Design Principles
1. Touch Targets
- Minimum: 44px × 44px (WCAG requirement)
- Recommended: 48px × 48px
- Large: 56px × 56px (for important actions)
2. Typography
- Fluid typography using CSS
clamp() - Minimum font size: 16px (WCAG requirement)
- Optimized line heights: 1.4-1.6
- Mobile: tighter line height for readability
3. Spacing
- Mobile: smaller spacing (0.5-1rem)
- Tablet: medium spacing (1-1.5rem)
- Desktop: larger spacing (1.5-2rem)
4. Images
- Mobile: 75% quality, smaller dimensions
- Tablet: 85% quality, medium dimensions
- Desktop: 90% quality, full dimensions
- Lazy loading: enabled by default
- Placeholder blur: for better UX
5. Navigation
- Mobile: hamburger menu with full-screen drawer
- Tablet: hybrid approach
- Desktop: full navigation bar
Testing Utilities
1. Viewport Testing
import { ResponsiveTestUtils } from '@/lib/responsive-test';
// Simulate different viewports
ResponsiveTestUtils.simulateMobile();
ResponsiveTestUtils.simulateTablet();
ResponsiveTestUtils.simulateDesktop();
2. Validation
import { validateResponsiveDesign } from '@/lib/responsive-test';
const result = validateResponsiveDesign();
console.log(result.passed); // true/false
console.log(result.warnings); // []
console.log(result.errors); // []
3. Generate Report
import { generateResponsiveReport } from '@/lib/responsive-test';
const report = generateResponsiveReport();
console.log(report);
Responsive Checklist
Layout
- Content stacks properly on mobile (1 column)
- Grid layouts adapt to screen size (2-4 columns)
- No horizontal scrolling at any breakpoint
- Content remains within safe areas
- Padding and margins scale appropriately
Typography
- Text remains readable at all sizes
- Line height is optimized for mobile
- Headings scale appropriately
- No text overflow or clipping
- Font size meets WCAG guidelines (16px minimum)
Navigation
- Mobile menu is accessible (44px touch targets)
- Desktop navigation hides on mobile
- Menu items are properly spaced
- Active states are visible
- Back/forward navigation works
Images
- Images load with appropriate sizes
- Aspect ratios are maintained
- No layout shift during loading
- Lazy loading works correctly
- Placeholder blur is applied
Forms
- Input fields are 44px minimum touch target
- Labels remain visible
- Error messages are readable
- Form submits on mobile
- Keyboard navigation works
Performance
- Images are properly sized for viewport
- No unnecessary large assets on mobile
- Critical CSS is loaded
- Touch interactions are smooth
- No layout thrashing
Accessibility
- Touch targets are 44px minimum
- Focus indicators are visible
- Screen readers work correctly
- Color contrast meets WCAG AA
- Zoom is not restricted
Common Patterns
1. Mobile-First Grid
<Grid
cols={1}
sm={2}
md={3}
gap="md"
>
{items}
</Grid>
2. Stacked to Row
<ResponsiveStack gap="md" wrap={false}>
<div>Left</div>
<div>Right</div>
</ResponsiveStack>
3. Hide on Mobile
<div className="hidden md:block">
Desktop only content
</div>
4. Show on Mobile Only
<div className="block md:hidden">
Mobile only content
</div>
Performance Optimization
1. Image Optimization
- Use
quality="auto"for automatic optimization - Implement responsive
srcsets - Enable lazy loading
- Use blur placeholders
2. Component Optimization
- Use
React.memo()for expensive components - Implement proper key props
- Avoid unnecessary re-renders
- Use dynamic imports for heavy components
3. CSS Optimization
- Use Tailwind's JIT compiler
- Minimize custom CSS
- Leverage CSS containment
- Implement proper z-index layers
Browser Support
- iOS Safari: 12+
- Chrome: 90+
- Firefox: 88+
- Edge: 90+
- Samsung Internet: 13+
Accessibility Standards
- WCAG 2.1 AA compliance
- Keyboard navigation support
- Screen reader compatibility
- Color contrast 4.5:1 minimum
- Focus indicators visible
Testing Strategy
1. Manual Testing
- Test on real devices
- Check all breakpoints
- Verify touch interactions
- Test with screen readers
2. Automated Testing
- Use responsive test utilities
- Validate design rules
- Generate reports
- Monitor performance
3. Browser DevTools
- Use device emulation
- Test network throttling
- Check accessibility
- Audit performance
Migration Guide
From Static to Responsive
- Update components with responsive props
- Add breakpoint classes
- Implement fluid typography
- Optimize images for responsive
- Test on all devices
Legacy Support
For older components:
// Wrap with ResponsiveWrapper
<ResponsiveWrapper stackOnMobile={true}>
<LegacyComponent />
</ResponsiveWrapper>
Troubleshooting
Common Issues
-
Horizontal scrolling
- Check for fixed widths
- Verify container padding
- Test with
overflow-x: hidden
-
Layout shift
- Add width/height to images
- Use CSS aspect-ratio
- Implement proper loading
-
Touch target too small
- Increase padding
- Use touch-target utilities
- Check minimum 44px
-
Text too small
- Use fluid typography
- Check clamp() values
- Verify base font size
Resources
Last Updated: 2025-12-29
Version: 1.0.0
Maintainer: KLZ Cables Development Team