Avatar ui-001
A small circular image showing a user's photo or initials.
72 patterns in this category — each with its illustration, what it is, and the fields that matter when you build or review one. Part of the UX pattern catalogue; the raw, agent-readable version is ux-pattern-catalogue/ui-patterns.json.
A small circular image showing a user's photo or initials.
A small colored label showing status or category. Use for status indicators, counts, or tags.
A month grid showing dates. Use for inline date selection or scheduling displays.
A bordered box containing related information. Use for product displays, content previews, or dashboard widgets.
A sliding gallery showing one item at a time with navigation arrows. Use sparingly.
A visual graph showing data trends and comparisons. Always provide a table alternative for accessibility.
A table with sorting, filtering, and pagination. Use for structured data with 5+ columns.
A simple table for displaying rows of data. Use for static displays, comparison tables, or pricing.
A bar showing how far along a task is. Use for file uploads, multi-step processes, or loading.
A placeholder shape that shows where content will appear while loading. Replaces spinners for layout-aware loading.
A trail showing where you are in the site hierarchy.
A keyboard-triggered search box for finding actions and content quickly (Ctrl/Cmd+K).
A menu that appears when you click a button, showing a list of actions.
A horizontal bar of menus like File, Edit, View — for complex desktop-style applications.
The main site navigation with links and optional dropdown sections.
Page numbers for navigating between pages of a long list. Default choice over infinite scroll.
A navigation panel on the left side of the screen. Use for dashboard apps and admin panels.
Tabs along the top that switch between different content sections.
A colored banner showing an important inline message — warnings, success, errors, or info.
A popup asking you to confirm a significant action before it happens. Use for destructive or irreversible operations.
A small popup message that appears briefly and disappears. Use for action confirmations and non-critical errors.
A friendly message shown when there's no data yet, with a clear next step. Never show a blank page.
A popup window that appears on top of the page with a backdrop. Focus is trapped inside until closed.
A panel that slides in from the bottom or side. Great for mobile-friendly detail views and filters.
A small floating panel next to a button. Use for rich tooltips, mini-forms, or extra controls.
A panel that slides in from the side. Use for settings, detail views, or shopping carts.
A small label that appears on hover or focus. Use for icon-only buttons or additional context.
A menu that appears on right-click. Use for desktop app-like interfaces. Always provide alternative access.
A preview card that appears when you hover over a link. Use for user profiles or entity summaries.
Sections that expand and collapse when you click their headings. Use for FAQs or grouped settings.
A container that keeps images or videos at the right proportions regardless of screen size.
A section you can expand or collapse with a single toggle. Use for optional details or advanced options.
A divider between panels you can drag to resize. Use for code editors or comparison views.
A container with custom scrollbars for overflowing content like chat windows or code blocks.
A visual line separating sections of content. Use between content groups or menu sections.
Updates the interface instantly when you perform an action. If something goes wrong on the server, it quietly retries or rolls back.
Shows the page shape while content loads, so the layout doesn't jump around when data arrives.
Heavy components like date pickers or rich text editors load only when you click on them.
Content below the fold loads as you scroll to it, keeping the initial page load fast.
Only renders the rows you can see — handles thousands of items smoothly without slowing down.
Starts loading the next page when you hover a link, so navigation feels instant.
Shows simple view first, details on demand. Keeps interfaces approachable without hiding power.
Shows cached data immediately, refreshes in the background. Dashboards and feeds feel instant.
Waits until you stop typing before searching. Prevents unnecessary requests while you compose your query.
Paginated by default (better for SEO and accessibility). Infinite scroll only when explicitly chosen for feed-type content.
Each page only loads the code it needs. Automatic in Next.js, Remix, and SvelteKit.
Smooth animations between page navigations. Respects user's reduced-motion preference.
Tab stays inside the popup until you close it. Every modal, dialog, drawer, and sheet must trap focus.
When a popup closes, focus returns to the button that opened it. Maintains keyboard user's place on the page.
Arrow keys move between items in a list, menu, or grid. The standard keyboard pattern for grouped elements.
Tab enters a group of items, arrow keys move within it, Tab leaves. Prevents excessive tab stops.
A hidden link that lets keyboard users jump past navigation to the main content. Must be the first focusable element.
A clear outline shows which element is currently focused. Never remove focus styles without providing a visible replacement.
Pressing Escape closes any overlay — popovers, dialogs, drawers, dropdowns, and tooltips.
Enter or Space triggers buttons and links. Every clickable element must respond to both keys.
Screen readers announce dynamic changes — toast notifications, form errors, loading states — without moving focus.
Write base CSS for mobile, then add min-width media queries to enhance for larger screens. Forces content prioritization.
Standard breakpoints at 360/768/1024/1440px. Use content-driven breakpoints when the design breaks at non-standard widths.
Component adapts to its container width instead of the viewport. Essential for reusable components in different layout contexts.
Font sizes scale smoothly between breakpoints using clamp(min, preferred, max). Never use raw vw units alone for text.
All interactive elements must be at least 44×44px with 8px gaps between adjacent targets (WCAG 2.5.8).
Use srcset + sizes for resolution switching, <picture> for art direction, loading="lazy" for below-fold, and aspect-ratio to prevent layout shift.
Desktop: persistent top bar or sidebar. Mobile: bottom tab bar (3—5 items) or hamburger menu. Never hide-only on desktop.
Use margin-inline, padding-block, border-inline-start instead of physical directions. Automatically adapts to RTL and vertical writing modes.
Component-level error catching with fallback UI, error logging, and reset/retry actions. Prevents a single broken component from crashing the page.
Retry failed network requests with exponential backoff (1s → 2s → 4s). Show a retry button after max attempts. Never retry indefinitely.
Detect offline status and show a persistent banner. Serve cached content via service worker. Queue mutations for sync-on-reconnect.
Friendly 404 page with search bar, popular links, and a clear path home. Never show a raw server error page.
Apologetic 500 page with retry button and status page link. Log the error server-side. Show a reference ID for support.
When there is no data yet: show an illustration, explain what will appear here, and provide a primary CTA to create the first item.
When a search or filter returns nothing: show the query, suggest alternatives, and offer a way to clear filters.
Non-blocking toast for transient network errors with a retry action. For persistent failures, escalate to a full-page error state.