
Mobile Responsiveness
Implement mobile-first layouts, breakpoints, touch-friendly UI, and fluid type so your web app works on phones before you polish desktop.
Install
npx skills add https://github.com/hoodini/ai-agents-skills --skill mobile-responsivenessWhat is this skill?
- Mobile-first breakpoint ladder: base styles, 768px tablet, 1024px desktop, 1280px large desktop
- Tailwind responsive class patterns (sm/md/lg/xl) for padding, typography, and max-width
- Fluid typography with clamp() for base body and heading scales
- Guidance for touch interactions, mobile navigation, and viewport-oriented layout
- Triggers on responsive design, mobile-first, breakpoints, and touch events
Adoption & trust: 693 installs on skills.sh; 222 GitHub stars; 3/3 security scanners passed (skills.sh audits); trending (+100% hot-view momentum).
Recommended Skills
Journey fit
Responsive UI work sits in Build because it is implementation-time frontend engineering for shippable interfaces. Frontend subphase covers CSS breakpoints, Tailwind responsive utilities, viewport behavior, and touch patterns—not backend APIs.
Common Questions / FAQ
Is Mobile Responsiveness safe to install?
skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.
SKILL.md
READMESKILL.md - Mobile Responsiveness
# Mobile Responsiveness Build responsive, mobile-first web applications. ## Mobile-First Breakpoints ```css /* Mobile first - no media query needed for mobile base */ .container { padding: 1rem; } /* Tablet */ @media (min-width: 768px) { .container { padding: 2rem; } } /* Desktop */ @media (min-width: 1024px) { .container { padding: 3rem; max-width: 1200px; margin: 0 auto; } } /* Large desktop */ @media (min-width: 1280px) { .container { max-width: 1400px; } } ``` ## Tailwind Breakpoints ```tsx <div className=" p-4 /* Mobile: padding 1rem */ md:p-8 /* Tablet 768px+: padding 2rem */ lg:p-12 /* Desktop 1024px+: padding 3rem */ xl:max-w-6xl /* Large 1280px+: max-width */ "> <h1 className=" text-2xl /* Mobile */ md:text-3xl /* Tablet */ lg:text-4xl /* Desktop */ "> Responsive Heading </h1> </div> ``` ## Fluid Typography ```css :root { /* Fluid font size: 16px at 320px viewport, 20px at 1200px viewport */ --font-size-base: clamp(1rem, 0.9rem + 0.5vw, 1.25rem); /* Fluid heading */ --font-size-h1: clamp(2rem, 1.5rem + 2.5vw, 4rem); } body { font-size: var(--font-size-base); } h1 { font-size: var(--font-size-h1); } ``` ## Touch Interactions ```tsx import { useState } from 'react'; function SwipeableCard({ onSwipeLeft, onSwipeRight, children }) { const [touchStart, setTouchStart] = useState<number | null>(null); const [touchEnd, setTouchEnd] = useState<number | null>(null); const minSwipeDistance = 50; const onTouchStart = (e: React.TouchEvent) => { setTouchEnd(null); setTouchStart(e.targetTouches[0].clientX); }; const onTouchMove = (e: React.TouchEvent) => { setTouchEnd(e.targetTouches[0].clientX); }; const onTouchEnd = () => { if (!touchStart || !touchEnd) return; const distance = touchStart - touchEnd; const isLeftSwipe = distance > minSwipeDistance; const isRightSwipe = distance < -minSwipeDistance; if (isLeftSwipe) onSwipeLeft?.(); if (isRightSwipe) onSwipeRight?.(); }; return ( <div onTouchStart={onTouchStart} onTouchMove={onTouchMove} onTouchEnd={onTouchEnd} > {children} </div> ); } ``` ## Mobile Navigation ```tsx import { useState } from 'react'; function MobileNav() { const [isOpen, setIsOpen] = useState(false); return ( <> {/* Hamburger button - visible on mobile */} <button className="md:hidden p-2" onClick={() => setIsOpen(!isOpen)} aria-expanded={isOpen} aria-label="Toggle menu" > <span className={`hamburger ${isOpen ? 'open' : ''}`} /> </button> {/* Mobile menu */} <nav className={` fixed inset-0 bg-white z-50 transform transition-transform ${isOpen ? 'translate-x-0' : '-translate-x-full'} md:static md:translate-x-0 md:bg-transparent `} > <ul className="flex flex-col md:flex-row gap-4 p-4 md:p-0"> <li><a href="/">Home</a></li> <li><a href="/about">About</a></li> <li><a href="/contact">Contact</a></li> </ul> </nav> {/* Backdrop */} {isOpen && ( <div className="fixed inset-0 bg-black/50 z-40 md:hidden" onClick={() => setIsOpen(false)} /> )} </> ); } ``` ## Safe Areas (Notch/Home Indicator) ```css /* Account for iPhone notch and home indicator */ .container { padding-left: env(safe-area-inset-left); padding-right: env(safe-area-inset-right); padding-bottom: env(safe-area-inset-bottom); } /* Fixed bottom navigation */ .bottom-nav { position: fix