無料GitHub で公開
userinterface-wiki
UI/UX best practices for web interfaces. Use when reviewing animations, CSS, audio, typography, UX patterns, prefetching, or icon implementations. Covers 11 categories from animation principles to typography. Outputs file:line findings.
含まれるファイル(157)
- SKILL.md13.8 KB
- AGENTS.md85.2 KB
- metadata.json1.6 KB
- rules/_sections.md3.2 KB
- rules/_template.md418 B
- rules/a11y-reduced-motion-check.md554 B
- rules/a11y-toggle-setting.md508 B
- rules/a11y-visual-equivalent.md674 B
- rules/a11y-volume-control.md438 B
- rules/appropriate-confirmations-only.md334 B
- rules/appropriate-errors-warnings.md320 B
- rules/appropriate-no-decorative.md347 B
- rules/appropriate-no-high-frequency.md519 B
- rules/appropriate-no-punishing.md478 B
- rules/container-callback-ref.md701 B
- rules/container-guard-initial-zero.md588 B
- rules/container-no-excessive-use.md446 B
- rules/container-overflow-hidden.md581 B
- rules/container-transition-delay.md478 B
- rules/container-two-div-pattern.md794 B
- rules/container-use-resize-observer.md1.1 KB
- rules/context-cleanup-nodes.md395 B
- rules/context-resume-suspended.md455 B
- rules/context-reuse-single.md524 B
- rules/design-filter-for-character.md497 B
- rules/design-noise-for-percussion.md544 B
- rules/design-oscillator-for-tonal.md410 B
- rules/duration-max-300ms.md347 B
- rules/duration-press-hover.md372 B
- rules/duration-shorten-before-curve.md411 B
- rules/duration-small-state.md247 B
- rules/easing-entrance-ease-out.md378 B
- rules/easing-exit-ease-in.md353 B
- rules/easing-for-state-change.md451 B
- rules/easing-linear-only-progress.md390 B
- rules/easing-natural-decay.md515 B
- rules/easing-no-linear-motion.md521 B
- rules/easing-transition-ease-in-out.md287 B
- rules/envelope-exponential-decay.md383 B
- rules/envelope-no-zero-target.md407 B
- rules/envelope-set-initial-value.md418 B
- rules/exit-key-required.md529 B
- rules/exit-matches-initial.md490 B
- rules/exit-prop-required.md595 B
- rules/exit-requires-wrapper.md437 B
- rules/impl-default-subtle.md280 B
- rules/impl-preload-audio.md607 B
- rules/impl-reset-current-time.md404 B
- rules/mode-pop-layout-for-lists.md477 B
- rules/mode-sync-layout-conflict.md589 B
- rules/mode-wait-doubles-duration.md480 B
- rules/morphing-aria-hidden.md358 B
- rules/morphing-consistent-viewbox.md446 B
- rules/morphing-group-variants.md922 B
- rules/morphing-jump-non-grouped.md581 B
- rules/morphing-reduced-motion.md644 B
- rules/morphing-spring-rotation.md516 B
- rules/morphing-strokelinecap-round.md323 B
- rules/morphing-three-lines.md537 B
- rules/morphing-use-collapsed.md511 B
- rules/native-backdrop-styling.md497 B
- rules/native-placeholder-styling.md515 B
- rules/native-selection-styling.md269 B
- rules/nested-consistent-timing.md581 B
- rules/nested-propagate-required.md865 B
- rules/none-context-menu-entrance.md461 B
- rules/none-high-frequency.md539 B
- rules/none-keyboard-navigation.md528 B
- rules/param-click-duration.md388 B
- rules/param-filter-frequency-range.md300 B
- rules/param-q-value-range.md287 B
- rules/param-reasonable-gain.md291 B
- rules/physics-active-state.md532 B
- rules/physics-no-excessive-stagger.md457 B
- rules/physics-spring-for-overshoot.md580 B
- rules/physics-subtle-deformation.md500 B
- rules/prefetch-hit-slop.md523 B
- rules/prefetch-keyboard-tab.md448 B
- rules/prefetch-not-everything.md503 B
- rules/prefetch-touch-fallback.md663 B
- rules/prefetch-trajectory-over-hover.md647 B
- rules/prefetch-use-selectively.md466 B
- rules/presence-disable-interactions.md576 B
- rules/presence-hook-in-child.md550 B
- rules/presence-safe-to-remove.md672 B
- rules/pseudo-content-required.md461 B
- rules/pseudo-first-line-styling.md580 B
- rules/pseudo-hit-target-expansion.md522 B
- rules/pseudo-marker-styling.md480 B
- rules/pseudo-over-dom-node.md515 B
- rules/pseudo-position-relative-parent.md493 B
- rules/pseudo-z-index-layering.md548 B
- rules/spring-for-gestures.md445 B
- rules/spring-for-interruptible.md493 B
- rules/spring-params-balanced.md401 B
- rules/spring-preserves-velocity.md476 B
- rules/staging-dim-background.md464 B
- rules/staging-one-focal-point.md537 B
- rules/staging-z-index-hierarchy.md498 B
- rules/timing-consistent.md600 B
- rules/timing-no-entrance-context-menu.md513 B
- rules/timing-under-300ms.md489 B
- rules/transition-name-cleanup.md576 B
- rules/transition-name-required.md545 B
- rules/transition-name-unique.md418 B
- rules/transition-over-js-library.md622 B
- rules/transition-style-pseudo-elements.md488 B
- rules/type-antialiased-on-retina.md362 B
- rules/type-disambiguation-stylistic-set.md327 B
- rules/type-font-display-swap.md578 B
- rules/type-justify-with-hyphens.md425 B
- rules/type-letter-spacing-uppercase.md474 B
- rules/type-no-font-synthesis.md353 B
- rules/type-oldstyle-nums-for-prose.md429 B
- rules/type-opentype-contextual-alternates.md344 B
- rules/type-optical-sizing-auto.md454 B
- rules/type-proper-fractions.md292 B
- rules/type-slashed-zero.md328 B
- rules/type-tabular-nums-for-data.md446 B
- rules/type-text-wrap-balance-headings.md399 B
- rules/type-text-wrap-pretty.md322 B
- rules/type-underline-offset.md477 B
- rules/type-variable-weight-continuous.md494 B
- rules/ux-aesthetic-usability.md665 B
- rules/ux-cognitive-load-reduce.md1.1 KB
- rules/ux-common-region-boundaries.md1.1 KB
- rules/ux-doherty-perceived-speed.md659 B
- rules/ux-doherty-under-400ms.md618 B
- rules/ux-fitts-hit-area.md525 B
- rules/ux-fitts-target-size.md565 B
- rules/ux-goal-gradient-progress.md702 B
- rules/ux-hicks-minimize-choices.md923 B
- rules/ux-jakobs-familiar-patterns.md712 B
- rules/ux-millers-chunking.md464 B
- rules/ux-pareto-prioritize-features.md759 B
- rules/ux-peak-end-finish-strong.md723 B
- rules/ux-postels-accept-messy-input.md878 B
- rules/ux-pragnanz-simplify.md726 B
- rules/ux-progressive-disclosure.md785 B
- rules/ux-proximity-grouping.md638 B
- rules/ux-serial-position.md683 B
- rules/ux-similarity-consistency.md664 B
- rules/ux-teslers-complexity.md556 B
- rules/ux-uniform-connectedness.md983 B
- rules/ux-von-restorff-emphasis.md778 B
- rules/ux-zeigarnik-show-incomplete.md746 B
- rules/visual-animate-shadow-pseudo.md942 B
- rules/visual-border-alpha-colors.md454 B
- rules/visual-button-shadow-anatomy.md1.5 KB
- rules/visual-concentric-radius.md757 B
- rules/visual-consistent-spacing-scale.md661 B
- rules/visual-layered-shadows.md656 B
- rules/visual-no-pure-black-shadow.md462 B
- rules/visual-shadow-direction.md701 B
- rules/visual-shadow-matches-elevation.md548 B
- rules/weight-duration-matches-action.md504 B
- rules/weight-match-action.md519 B
SKILL.md(原文)
インストールする前に、エージェントに与えられる指示の中身を確認できます。
User Interface Wiki
Comprehensive UI/UX best practices guide for web interfaces. Contains 152 rules across 12 categories, prioritized by impact to guide automated code review and generation.
When to Apply
Reference these guidelines when:
- Implementing or reviewing animations (CSS transitions, Motion/Framer Motion)
- Choosing between springs, easing curves, or no animation
- Working with AnimatePresence and exit animations
- Writing CSS with pseudo-elements or View Transitions API
- Adding audio feedback or procedural sound to UI
- Building morphing icon components
- Animating container width/height with dynamic content
- Designing UI that respects cognitive psychology (Fitts's, Hick's, Miller's laws)
- Implementing predictive prefetching for perceived performance
- Setting up typography, OpenType features, or numeric formatting
Rule Categories by Priority
| Priority | Category | Impact | Prefixes |
|---|---|---|---|
| 1 | Animation Principles | CRITICAL | timing-, physics-, staging- |
| 2 | Timing Functions | HIGH | spring-, easing-, duration-, none- |
| 3 | Exit Animations | HIGH | exit-, presence-, mode-, nested- |
| 4 | CSS Pseudo Elements | MEDIUM | pseudo-, transition-, native- |
| 5 | Audio Feedback | MEDIUM | a11y-, appropriate-, impl-, weight- |
| 6 | Sound Synthesis | MEDIUM | context-, envelope-, design-, param- |
| 7 | Morphing Icons | LOW | morphing- |
| 8 | Container Animation | MEDIUM | container- |
| 9 | Laws of UX | HIGH | ux- |
| 10 | Predictive Prefetching | MEDIUM | prefetch- |
| 11 | Typography | MEDIUM | type- |
| 12 | Visual Design | HIGH | visual- |
Quick Reference
1. Animation Principles (CRITICAL)
timing-under-300ms- User animations must complete within 300mstiming-consistent- Similar elements use identical timing valuestiming-no-entrance-context-menu- Context menus: no entrance animation, exit onlyeasing-natural-decay- Use exponential ramps for natural decay, not lineareasing-no-linear-motion- Linear easing only for progress indicatorsphysics-active-state- Interactive elements need :active scale transformphysics-subtle-deformation- Squash/stretch in 0.95-1.05 rangephysics-spring-for-overshoot- Springs for overshoot-and-settle, not easingphysics-no-excessive-stagger- Stagger delays under 50ms per itemstaging-one-focal-point- One prominent animation at a timestaging-dim-background- Dim modal/dialog backgroundsstaging-z-index-hierarchy- Animated elements respect z-index layers
2. Timing Functions (HIGH)
spring-for-gestures- Gesture-driven motion (drag, flick) must use springsspring-for-interruptible- Interruptible motion must use springsspring-preserves-velocity- Springs preserve input energy on releasespring-params-balanced- Avoid excessive oscillation in spring paramseasing-for-state-change- System state changes use easing curveseasing-entrance-ease-out- Entrances use ease-outeasing-exit-ease-in- Exits use ease-ineasing-transition-ease-in-out- View transitions use ease-in-outeasing-linear-only-progress- Linear only for progress/time representationduration-press-hover- Press/hover: 120-180msduration-small-state- Small state changes: 180-260msduration-max-300ms- User-initiated max 300msduration-shorten-before-curve- Fix slow feel with shorter duration, not curvenone-high-frequency- No animation for high-frequency interactionsnone-keyboard-navigation- Keyboard navigation instant, no animationnone-context-menu-entrance- Context menus: no entrance, exit only
3. Exit Animations (HIGH)
exit-requires-wrapper- Conditional motion elements need AnimatePresence wrapperexit-prop-required- Elements in AnimatePresence need exit propexit-key-required- Dynamic lists need unique keys, not indexexit-matches-initial- Exit mirrors initial for symmetrypresence-hook-in-child- useIsPresent in child, not parentpresence-safe-to-remove- Call safeToRemove after async cleanuppresence-disable-interactions- Disable interactions on exiting elementsmode-wait-doubles-duration- Mode "wait" doubles duration; halve timingmode-sync-layout-conflict- Mode "sync" causes layout conflictsmode-pop-layout-for-lists- Use popLayout for list reorderingnested-propagate-required- Nested AnimatePresence needs propagate propnested-consistent-timing- Coordinate parent-child exit durations
4. CSS Pseudo Elements (MEDIUM)
pseudo-content-required- ::before/::after need content propertypseudo-over-dom-node- Pseudo-elements over extra DOM nodes for decorationpseudo-position-relative-parent- Parent needs position: relativepseudo-z-index-layering- Z-index for correct pseudo-element layeringpseudo-hit-target-expansion- Negative inset for larger hit targetspseudo-marker-styling- Use ::marker for custom list bullet stylespseudo-first-line-styling- Use ::first-line for typographic treatmentstransition-name-required- View transitions need view-transition-nametransition-name-unique- Each transition name unique during transitiontransition-name-cleanup- Remove transition name after completiontransition-over-js-library- Prefer View Transitions API over JS librariestransition-style-pseudo-elements- Style ::view-transition-group for custom animationsnative-backdrop-styling- Use ::backdrop for dialog backgroundsnative-placeholder-styling- Use ::placeholder for input stylingnative-selection-styling- Use ::selection for text selection styling
5. Audio Feedback (MEDIUM)
a11y-visual-equivalent- Every sound must have a visual equivalenta11y-toggle-setting- Provide toggle to disable soundsa11y-reduced-motion-check- Respect prefers-reduced-motion for sounda11y-volume-control- Allow independent volume adjustmentappropriate-no-high-frequency- No sound on typing or keyboard navappropriate-confirmations-only- Sound for payments, uploads, submissionsappropriate-errors-warnings- Sound for errors that can't be overlookedappropriate-no-decorative- No sound on hover or decorative momentsappropriate-no-punishing- Inform, don't punish with harsh soundsimpl-preload-audio- Preload audio files to avoid delayimpl-default-subtle- Default volume subtle (0.3), not loudimpl-reset-current-time- Reset currentTime before replayweight-match-action- Sound weight matches action importanceweight-duration-matches-action- Sound duration matches action duration
6. Sound Synthesis (MEDIUM)
context-reuse-single- Reuse single AudioContext, don't create per soundcontext-resume-suspended- Resume suspended AudioContext before playingcontext-cleanup-nodes- Disconnect audio nodes after playbackenvelope-exponential-decay- Exponential ramps for natural decayenvelope-no-zero-target- Exponential ramps target 0.001, not 0envelope-set-initial-value- Set initial value before rampingdesign-noise-for-percussion- Filtered noise for clicks/tapsdesign-oscillator-for-tonal- Oscillators with pitch sweep for tonal soundsdesign-filter-for-character- Bandpass filter to shape percussive soundsparam-click-duration- Click sounds: 5-15ms durationparam-filter-frequency-range- Click filter: 3000-6000Hzparam-reasonable-gain- Gain under 1.0 to prevent clippingparam-q-value-range- Filter Q: 2-5 for focused but natural
7. Morphing Icons (LOW)
morphing-three-lines- Every icon uses exactly 3 SVG linesmorphing-use-collapsed- Unused lines use collapsed constantmorphing-consistent-viewbox- All icons share same viewBox (14x14)morphing-group-variants- Rotational variants share group and base linesmorphing-spring-rotation- Spring physics for grouped icon rotationmorphing-reduced-motion- Respect prefers-reduced-motionmorphing-jump-non-grouped- Instant rotation jump between non-grouped iconsmorphing-strokelinecap-round- Round stroke line capsmorphing-aria-hidden- Icon SVGs are aria-hidden
8. Container Animation (MEDIUM)
container-two-div-pattern- Outer animated div, inner measured div; never same elementcontainer-guard-initial-zero- Guard bounds === 0 on initial render, fall back to "auto"container-use-resize-observer- Use ResizeObserver for measurement, not getBoundingClientRectcontainer-overflow-hidden- Set overflow: hidden on animated container during transitionscontainer-no-excessive-use- Use sparingly: buttons, accordions, interactive elementscontainer-callback-ref- Use callback ref (not useRef) for measurement hookscontainer-transition-delay- Add small delay for natural catching-up feel
9. Laws of UX (HIGH)
ux-fitts-target-size- Size interactive targets for easy clicking (min 32px)ux-fitts-hit-area- Expand hit areas with invisible padding or pseudo-elementsux-hicks-minimize-choices- Minimize choices to reduce decision timeux-millers-chunking- Chunk data into groups of 5-9 for scannabilityux-doherty-under-400ms- Respond within 400ms to feel instantux-doherty-perceived-speed- Fake speed with skeletons, optimistic UI, progress indicatorsux-postels-accept-messy-input- Accept messy input, output clean dataux-progressive-disclosure- Show what matters now, reveal complexity laterux-jakobs-familiar-patterns- Use familiar UI patterns users know from other sitesux-aesthetic-usability- Visual polish increases perceived usabilityux-proximity-grouping- Group related elements spatially with tighter spacingux-similarity-consistency- Similar elements should look alikeux-common-region-boundaries- Use boundaries to group related contentux-von-restorff-emphasis- Make important elements visually distinctux-serial-position- Place key items first or last in sequencesux-peak-end-finish-strong- End experiences with clear success statesux-teslers-complexity- Move complexity to the system, not the userux-goal-gradient-progress- Show progress toward completionux-zeigarnik-show-incomplete- Show incomplete state to drive completionux-pragnanz-simplify- Simplify complex visuals into clear formsux-pareto-prioritize-features- Prioritize the critical 20% of featuresux-cognitive-load-reduce- Minimize extraneous cognitive loadux-uniform-connectedness- Visually connect related elements with lines or frames
10. Predictive Prefetching (MEDIUM)
prefetch-trajectory-over-hover- Trajectory prediction over hover; reclaims 100-200msprefetch-not-everything- Prefetch by intent, not viewport; avoid wasted bandwidthprefetch-hit-slop- Use hitSlop to trigger predictions earlierprefetch-touch-fallback- Fall back gracefully on touch devices (no cursor)prefetch-keyboard-tab- Prefetch on keyboard navigation when focus approachesprefetch-use-selectively- Use predictive prefetching where latency is noticeable
11. Typography (MEDIUM)
type-tabular-nums-for-data- Tabular numbers for columns, dashboards, pricingtype-oldstyle-nums-for-prose- Oldstyle numbers blend into body texttype-slashed-zero- Slashed zero in code-adjacent UIstype-opentype-contextual-alternates- Keep calt enabled for contextual glyph adjustmenttype-disambiguation-stylistic-set- Enable ss02 to distinguish I/l/1 and 0/Otype-optical-sizing-auto- Leave font-optical-sizing auto for size-adaptive glyphstype-antialiased-on-retina- Antialiased font smoothing on retina displaystype-text-wrap-balance-headings- text-wrap: balance on headings for even linestype-underline-offset- Offset underlines below descenderstype-no-font-synthesis- Disable font-synthesis to prevent faux bold/italictype-font-display-swap- Use font-display: swap to avoid invisible text during loadtype-variable-weight-continuous- Use continuous weight values (100-900) with variable fontstype-text-wrap-pretty- text-wrap: pretty for body text to reduce orphanstype-justify-with-hyphens- Pair text-align: justify with hyphens: autotype-letter-spacing-uppercase- Add letter-spacing to uppercase and small-caps texttype-proper-fractions- Use diagonal-fractions for proper typographic fractions
12. Visual Design (HIGH)
visual-concentric-radius- Inner radius = outer radius minus padding for nested elementsvisual-layered-shadows- Layer multiple shadows for realistic depthvisual-shadow-direction- All shadows share same offset direction (single light source)visual-no-pure-black-shadow- Use neutral colors, not pure black, for shadowsvisual-shadow-matches-elevation- Shadow size indicates elevation in consistent scalevisual-animate-shadow-pseudo- Animate shadow via pseudo-element opacity for performancevisual-consistent-spacing-scale- Use a consistent spacing scale, not arbitrary valuesvisual-border-alpha-colors- Semi-transparent borders adapt to any backgroundvisual-button-shadow-anatomy- Six-layer shadow anatomy for polished buttons
How to Use
Read individual rule files for detailed explanations and code examples:
rules/timing-under-300ms.md
rules/spring-for-gestures.md
rules/ux-doherty-under-400ms.md
rules/type-tabular-nums-for-data.md
Each rule file contains:
- Brief explanation of why it matters
- Incorrect code example with explanation
- Correct code example with explanation
Full Compiled Document
For the complete guide with all rules expanded: AGENTS.md
レビュー
まだレビューはありません。使ってみた感想をお寄せください。