Skip to content

No.283 · Sections· New

Partner Ribbon

A quiet stream of company marks or names, measured to loop without a seam, with the strip itself acting as a quiet pause target.

The prompt

Copy this text

Automatic copying is unavailable. Copy the selected text using your device’s copy command.

Written for the variant you picked above: Mixed marks

Build a hairline-framed company-identity ribbon on dark forest green (#142019). A small mono label sits above the strip; there are no separate controls or link directories. Within soft horizontal edge masks, show optically balanced company identities or images at natural proportions with generous spacing. Measure an entire sequence including its trailing gap, repeat enough copies to cover the viewport plus a spare sequence, and move by the exact measured period at a constant pixel-per-second speed. Default to 28px/s desktop and 20px/s on small containers. Re-measure with ResizeObserver, font completion and image load/error, preserving proportional progress. Pause on hover and manual pause; suspend requestAnimationFrame entirely offscreen or when the document is hidden, without a jump when resumed. Animated copies are decorative. The moving strip is a single native button: click, tap, Enter or Space toggles persistent pause with a dynamic accessible action label and visible focus. Give assistive technology a single identity list. No external assets or animation libraries. A missing image falls back to the company label, zero items omit the section and one item stays static. Reduced motion uses one wrapping, unmasked collection, not a duplicated frozen track. Use native controls, visible focus, proper cleanup and fluid layout. Selected variant — Mixed marks (marks): Use eight fictional companies with original inline SVG image marks at mixed natural widths. One leftward row, muted treatment. Keep the single-row arrangement. This selection takes precedence over references to other themes or options in the general brief. Implement this selected appearance; do not add a variant picker or alternative appearances unless requested. Implementation requirements: Use React and TypeScript. Keep the component self-contained, with uniquely scoped CSS and no animation libraries. Include required imports, styles and font setup in the result. Interaction: Hover pauses temporarily; clicking, tapping, Enter or Space on the moving strip toggles persistent pause. There are no separate visible controls. Motion: Measured translate3d loop at 28px/s desktop or 20px/s mobile, with phase retained across resize. Offscreen/hidden frame work stops. Reduced motion renders a static list. Accessibility: Decorative copies are aria-hidden; a single accessible identity list remains. The whole moving strip is a labelled native pause target with visible focus. Reduced motion and single-item arrangements are static, without a button. Responsive behavior: Measured natural-width marks repeat to cover any viewport. Header wraps below 600px; reduced motion uses a fluid wrapping collection. One item is static. Touch: Tap the moving strip to pause or resume; no visible instruction or secondary control. Preserve keyboard access, visible focus and reduced-motion behavior. Keep fictional demo data and simulated service calls in a separate usage example; expose callbacks for real actions and recover from rejected requests. Keep usage-example links inside the demo: use local buttons or prevent navigation. Demonstration links must not navigate to Vitrine routes or open other pages; preserve real URL support in the reusable component itself. Verify the result at narrow and wide viewport sizes, with keyboard input and reduced motion enabled.

Notes

Interaction
Hover pauses temporarily; clicking, tapping, Enter or Space on the moving strip toggles persistent pause. There are no separate visible controls.
Motion
Measured translate3d loop at 28px/s desktop or 20px/s mobile, with phase retained across resize. Offscreen/hidden frame work stops. Reduced motion renders a static list.
Accessibility
Decorative copies are aria-hidden; a single accessible identity list remains. The whole moving strip is a labelled native pause target with visible focus. Reduced motion and single-item arrangements are static, without a button.
Responsive
Measured natural-width marks repeat to cover any viewport. Header wraps below 600px; reduced motion uses a fluid wrapping collection. One item is static.
On touch
Tap the moving strip to pause or resume; no visible instruction or secondary control.

Featured

310 components