Gallery✨ Premium

Logo Ticker

A row of logo boxes scrolling slowly and continuously; the box under the mouse or with focus lights up, and the whole band stops so you can look at it.

CSSLogos

Updated

This effect is part of Effect.Labs — 840 vanilla effects, some free, some premium. Gallery has 44 effects, including 6 free. Explore the category →

3 usage examples

“They trust us” — below the hero of an invoicing app — Logo Ticker example 1

① “They trust us” — below the hero of an invoicing app

WhenOn the Quillance home page, between the promise (“Quotes, invoices and payment reminders, in one place”) and the three key features, six client logos scroll in white boxes with a slate border.
WhySocial proof reads at a glance without taking a whole section, and the endless row shows there are more clients than room. Slate boxes suit the site's light background.
Settingsdata-speed="32", --lgmq-tint: 15, 23, 42, --lgmq-text: #475569, --lgmq-text-hover: #0f172a, --lgmq-logo-width: 116px, --lgmq-logo-height: 44px, --lgmq-space: 12px; a brand <svg> next to each name.
Makers at a craft market — link cards to each stand — Logo Ticker example 2

② Makers at a craft market — link cards to each stand

WhenOn the Vauclère market page, under the dates and the “Plan my visit” button, the “Makers” row runs large 182 × 74 px boxes: thumbnail, workshop name, craft and stand number. Each box is a link.
WhyThe row acts as a living menu: you spot a craft you like, the mouse stops the band and lights the box, one click leads to the stand. Woven, leather or ceramic patterns in the thumbnails announce the craft before the text.
Settingsdata-speed="38", --lgmq-logo-width: 182px, --lgmq-logo-height: 74px, --lgmq-tint: 243, 238, 226, --lgmq-text: #f3eee2, --lgmq-space: 10px; boxes as <a class="lgmq-logo">.
Accepted payment methods — right under the Pay button — Logo Ticker example 3

③ Accepted payment methods — right under the Pay button

WhenOn a shop's payment page, under the “Pay €84.00” button, a small row of 26 px pills runs the accepted methods: bank card, bank transfer, 3 instalments, gift card, mobile wallet.
WhyThe information reassures at the moment of paying without weighing down the form: the row fits the button's width and moves slowly enough (26 px/s) to be read in passing.
Settingsdata-speed="26", --lgmq-logo-width: auto, --lgmq-logo-height: 26px, --lgmq-tint: 17, 24, 39, --lgmq-text: #374151, --lgmq-space: 6px, --lgmq-button-size: 20px; a small CSS-drawn icon before each label.

How it works

Each .lgmq-logo is a 120 × 60 px box (--lgmq-logo-width, --lgmq-logo-height) with a lightly tinted background and a thin border. Put in it whatever you have: the name as text, a logo <img> or <svg> (capped at 60% of the height to keep some air), or make the whole box a link with <a class="lgmq-logo">.

The row moves at 40 px per second (data-speed). The script copies the list as many times as the width requires and sets the duration from its length. When logo images arrive after the first count, the list grows wider: the ResizeObserver recounts: no gap appears, but the row jumps once at that moment. Give your images a width to avoid it. Before the repair, a hole appeared beyond 1,000 px of width.

On hover, a box's background, border and text brighten in 0.3 s, and the band stops under the mouse so it can be read or clicked. The boxes' hue is a single variable, --lgmq-tint, written as R, G, B: 15, 23, 42 gives slate boxes for a light background.

Accessibility

  • Stopping: a Pause button with aria-pressed at the end of the row, plus the hover stop (WCAG 2.2.2).
  • Image logos: give each <img> an alt with the company name; only the original list is read, the duplicates carry aria-hidden="true" (before the repair, every box was announced twice).
  • Link boxes: with <a class="lgmq-logo">, Tab visits the original boxes only; the focused box lights up as on hover, the row returns to its start, holds still and slides over to it.
  • Reduced motion: with prefers-reduced-motion: reduce, the row stays still and scrolls by hand, or with the arrow keys after Tab when it overflows (it then takes keyboard focus); box highlighting keeps working.
  • Contrast: the default text (white at 60%) on the tinted box reaches 7:1 over #0a0a0f; change --lgmq-text on a light background.

Browser compatibility

CSS animation, colours as rgba(var(--lgmq-tint), …), 4.5 KB of commented JavaScript, no dependency. ResizeObserver (Chrome 64, Firefox 69, Safari 13.1) follows images that load late. Measured in Chromium 151, Firefox 153 and WebKit 26.5: full row at 390, 800 and 1,900 px, highlight on hover and focus, 0 errors.

Chrome 74+✓ Full (measured)
Firefox 69+✓ Full (measured)
Safari 13.1+✓ Full (WebKit engine measured)
Edge 79+✓ Full (Chromium engine)
Mobile iOS 13.4+✓ Full (WebKit engine measured)
Android Chrome 74+✓ Full (Chromium engine)

Without JavaScript, the boxes line up once, still, in a row scrollable by hand. In Safari before 13.1, an image loading late may leave a short gap until the next resize: give your <img> elements a width.

The code

HTML structure to paste into your page (the CSS + JS come with your purchase):

index.html — structure
<div class="fx-0195-root" data-speed="40" data-direction="left">
  <div class="lgmq-band">
    <div class="lgmq-viewport">
      <div class="lgmq-track">
        <ul class="lgmq-group" role="list">
          <li><div class="lgmq-logo"><img src="logo-client.svg" alt="Client name"></div></li>
          <li><a class="lgmq-logo" href="/partner">Partner</a></li>
        </ul>
      </div>
    </div>
    <button type="button" class="lgmq-toggle" aria-pressed="false" aria-label="Pause"></button>
  </div>
</div>

One-time payment, no subscription — the code is yours forever

Customize

Options passed to the API or data-* attributes:

Option / propertyDefaultEffect
Boxes (HTML — .lgmq-logo inside each <li>) 6 “Logo N” boxes Text, <img>, <svg>, or a link box <a>. Written once.
--lgmq-logo-width / --lgmq-logo-height 120px / 60px Box size; auto width to follow the content.
--lgmq-tint 99, 102, 241 Hue of the background (10%, 20% on hover) and border (30%, 50% on hover), as R, G, B.
--lgmq-text / --lgmq-text-hover rgba(255, 255, 255, .6) / #fff Box text at rest and lit.
data-speed / data-direction 40 / left Pixels per second and row direction.
--lgmq-space 3rem Gap between two boxes.
--lgmq-height / --lgmq-bg / --lgmq-padding 180px / #0a0a0f / 1rem 0 Demo frame.
--lgmq-button / --lgmq-button-size rgba(255, 255, 255, .8) / 2rem Pause button.

FAQ

The box centres its content and caps the image at the full width and 60% of the height, without distorting it (object-fit: contain). A square logo and a very wide one therefore fit the same box; for logos that are all very wide, raise --lgmq-logo-width.
Add .lgmq-logo img { filter: grayscale(1); opacity: .7 } and .lgmq-logo:hover img { filter: none; opacity: 1 } to your stylesheet: the box already lights up on hover, the logo follows.
It jumps once: the list gets wider, the script recomputes the offset and the duration, the speed stays the same but the position changes abruptly (measured in Chromium and Firefox after a few laps). To avoid it, give your <img> elements width and height: the list has its final width from the start.