mobile-app-ux
3
总安装量
3
周安装量
#61618
全站排名
安装命令
npx skills add https://github.com/ibutters/claudecodeplugins --skill mobile-app-ux
Agent 安装分布
gemini-cli
3
antigravity
3
claude-code
3
codex
3
opencode
2
windsurf
2
Skill 文档
Mobile App UX Best Practices
Touch Target Guidelines
| Element | Minimum Size | Recommended | Spacing |
|---|---|---|---|
| Buttons | 44Ã44px | 48Ã48px | 8px between |
| Icons | 24Ã24px | 24Ã24px + 44px touch area | 12px between |
| List items | 44px height | 48-56px height | No gap needed |
| Form inputs | 44px height | 48px height | 16px between |
.touch-target {
min-height: 44px;
min-width: 44px;
padding: var(--space-3);
}
/* Expand touch area without visual change */
.icon-button {
position: relative;
}
.icon-button::after {
content: '';
position: absolute;
inset: -8px;
}
â Do’s
Navigation
- Bottom navigation for 3-5 primary actions
- Keep most important actions within thumb reach
- Use clear, recognizable icons with labels
- Provide visual feedback on active state
- Support swipe gestures for natural navigation
Content
- Prioritize content over chrome (UI elements)
- Use progressive disclosure – show essentials first
- Lazy load content below the fold
- Provide pull-to-refresh for dynamic content
- Show skeleton screens, not spinners
Forms
- Use appropriate keyboard types (email, tel, number)
- Show inline validation, not after submit
- Provide autocomplete where possible
- Group related fields visually
- Save form progress automatically
Feedback
- Immediate visual response to all touches
- Haptic feedback for important actions
- Clear loading states with progress indication
- Confirmation for destructive actions
- Undo option instead of “Are you sure?”
â Don’ts
Navigation
- â Hamburger menus for primary navigation
- â Deep navigation hierarchies (>3 levels)
- â Small, closely spaced tap targets
- â Gestures without visual affordances
- â Hiding essential actions in menus
Content
- â Horizontal scrolling for content
- â Tiny text (<16px for body copy)
- â Low contrast text on images
- â Auto-playing video with sound
- â Interstitials blocking content
Forms
- â Required fields without indication
- â Generic error messages
- â Disabling zoom on inputs
- â Dropdowns for <5 options (use radio)
- â Multi-step forms without progress indicator
Interaction
- â Double-tap to activate
- â Hover-dependent interactions
- â Precise targeting requirements
- â Long press without alternative
- â Blocking the UI during operations
Thumb Zone Design
âââââââââââââââââââââââ
â Hard to reach â â Secondary actions, menu
â â
âââââââââââââââââââââââ¤
â Natural reach â â Content, scrollable area
â â
âââââââââââââââââââââââ¤
â Easy reach â â Primary actions, nav
âââââââââââââââââââââââ
/* Bottom-anchored primary actions */
.primary-actions {
position: fixed;
bottom: 0;
left: 0;
right: 0;
padding: var(--space-4);
padding-bottom: env(safe-area-inset-bottom, var(--space-4));
}
Component Patterns
Bottom Sheet
interface BottomSheetProps {
isOpen: boolean;
onClose: () => void;
children: ReactNode;
}
export const BottomSheet: FC<BottomSheetProps> = ({ isOpen, onClose, children }) => (
<>
{isOpen && <div className="overlay" onClick={onClose} />}
<div className={cn('bottom-sheet', isOpen && 'bottom-sheet--open')}>
<div className="bottom-sheet__handle" />
{children}
</div>
</>
);
Swipeable Card
export const SwipeableCard: FC<Props> = ({ onSwipeLeft, onSwipeRight, children }) => {
const handlers = useSwipeable({
onSwipedLeft: onSwipeLeft,
onSwipedRight: onSwipeRight,
trackMouse: false,
});
return <div {...handlers}>{children}</div>;
};
Performance Checklist
- First Contentful Paint < 1.8s
- Time to Interactive < 3.8s
- Images optimized and lazy-loaded
- Animations at 60fps
- No layout shifts during load
- Works offline (PWA)
Accessibility
- Use semantic HTML (
<button>,<nav>,<main>) - Support screen readers (aria-labels)
- Ensure 4.5:1 color contrast minimum
- Support text scaling up to 200%
- Never disable pinch-to-zoom