Skip to content
LSD Framework
Component · primitive

Marquee

A token-paced rail of repeating content. One axis, one velocity, one fade. Compose it with wordmarks, logos, quotes, or any small unit you want to keep in slow orbit.

--marquee-velocity data-direction · data-reverse · data-pause-on-hover ↩ All components
01 · LTR · normal velocitydata-direction="ltr" data-velocity="normal"
Nebula · Constellation · Aurora · Orion · Galaxy ·
02 · RTL · slowdata-direction="rtl" data-velocity="slow"
03 · Multi-row · alternating directionstwo .lsd-marquee stacked, second is data-reverse
LSD moved our design system from a folder of guesses to a substrate the agents could read. — Mira, design lead The surface tiers do the colour thinking so we don't. — Devon, product First builder where motion is a token, not a plugin. — Ivy, motion We composed an entire pricing page from primitives in one sitting. — Sasha, founder
Surface-aware components Container queries Aurora timeline Behaviour wires Token-snap drag Cascade actions Responsive overrides Style queries
04 · Vertical · updata-direction="up" data-velocity="normal"
v0.6 · builder UX overhaul v0.5 · Aurora timeline lands v0.4 · Surfaces panel v0.3 · Containers register v0.2 · Behaviours pillar v0.1 · Tokens-first export
Drag snaps to token Iframe pointer overlay Visibility utilities Style queries shipped Cascade fan-out CSS-first motion
05 · Fast · hover-pauseddata-velocity="fast" data-pause-on-hover
surfacescontainers behavioursaurora motiontokens queriestiers cascadestate
UsageAPI surface

Authoring contract

A marquee is a host element with one .lsd-marquee__track rail and at least two identical .lsd-marquee__group children. The duplicate is what makes the loop seamless — mark it aria-hidden="true" so it's invisible to assistive tech.

HookValuesEffect
data-directionltr · rtl · up · downAxis + initial direction. up/down auto-stack the items.
data-reversebooleanFlip the computed direction without changing axis.
data-velocityslow · normal · fastPulls from --marquee-velocity-{slow,normal,fast}. Override the var to inject your own pace.
data-pause-on-hoverbooleanPauses the rail on :hover and :focus-within.
--marquee-gaplengthSpacing between items. Default 28px.
--marquee-fadelengthEdge-mask width. Set 0 for hard edges.
prefers-reduced-motionRail becomes a snap-scrollable list. Animation is dropped, content stays reachable.
View marquee HTML
<div class="lsd-marquee" data-direction="ltr" data-velocity="normal" data-pause-on-hover>
  <div class="lsd-marquee__track">
    <div class="lsd-marquee__group"><!-- items… --></div>
    <div class="lsd-marquee__group" aria-hidden="true"><!-- same items, mirror copy --></div>
  </div>
</div>
LSD components · Marquee · primitive
↩ All components