---
description: Mobile-first UX patterns and touch interaction design
alwaysApply: false
globs: **/*.{ts,tsx,js,jsx,vue,css,scss}
---
# Mobile UX Patterns & Touch Interactions
## Mobile-First Philosophy
Start with mobile constraints, then progressively enhance for larger screens.
### Design Process
1. **Mobile (320-480px)**: Core functionality only
2. **Tablet (768-1024px)**: Add supporting features
3. **Desktop (1280px+)**: Enhanced experience
## Touch Target Sizing
### Minimum 44x44px Touch Targets
```css
.touch-target {
min-width: 44px;
min-height: 44px;
/* Apple HIG recommendation */
}
.touch-target-optimal {
min-width: 48px;
min-height: 48px;
/* Material Design recommendation */
}
```
### Spacing Between Targets
```css
.button-group {
display: flex;
gap: 16px; /* Comfortable spacing */
}
```
## Thumb-Friendly Zones
```
┌─────────────────┐
│ Hard to reach │ ← Top 20%
├─────────────────┤
│ Easy reach │ ← Middle 60%
├─────────────────┤
│ Natural thumb │ ← Bottom 20%
│ zone │ (place primary actions here)
└─────────────────┘
```
Primary actions should be placed in the bottom 20% for one-handed use.
## Dynamic Viewport Height
```css
/* Use dvh instead of vh for mobile */
.hero {
height: 100dvh; /* Dynamic viewport height */
}
/* Fallback for older browsers */
.hero {
height: 100vh;
height: 100dvh;
}
```
## Safe Area Insets (iOS)
```css
.header {
padding-top: env(safe-area-inset-top);
padding-left: env(safe-area-inset-left);
padding-right: env(safe-area-inset-right);
}
.footer {
padding-bottom: env(safe-area-inset-bottom);
}
```
## Form Input Optimization
```html
```
```css
/* Prevent iOS zoom on focus */
input, select, textarea {
font-size: 16px; /* Minimum to prevent zoom */
}
```
## Touch Feedback
```css
.button {
transition: transform 0.1s ease, opacity 0.1s ease;
}
.button:active {
transform: scale(0.95);
opacity: 0.8;
}
```