# Logo cloud 03

> A logo cloud with marquee effect.

A shadcn/ui block from the [@eldoraui](https://eldoraui.site) registry, listed on [shadcn.exchange](https://shadcn.exchange/r/eldoraui/logo-cloud-03).

- Page, with a live preview: https://shadcn.exchange/r/eldoraui/logo-cloud-03
- Screenshot: https://abzjhwgwpdpz7ua5.public.blob.vercel-storage.com/shots/eldoraui/logo-cloud-03-light-407ec87699e26abf.png
- Registry item: https://eldoraui.site/r/logo-cloud-03.json
- Categories: logo-cloud
- Listed: 2026-10-13, source last changed 2026-10-13

## Install

```bash
npx shadcn@latest add https://eldoraui.site/r/logo-cloud-03.json
```

Run it in a project that has shadcn/ui set up. It adds the files below and installs what they depend on.

## Dependencies

- Registry items: `marquee`

## Files

### `registry/blocks/logo-cloud-03/page.tsx`

```tsx
import Image from "next/image"

import { Marquee } from "@/registry/eldoraui/marquee"

const companies = [
  {
    name: "Google",
    url: "https://pub-b3533f2e1c954842824758490b95c9d5.r2.dev/Google.svg",
  },
  {
    name: "GitHub",
    url: "https://pub-b3533f2e1c954842824758490b95c9d5.r2.dev/GitHub.svg",
  },
  {
    name: "Amazon",
    url: "https://pub-b3533f2e1c954842824758490b95c9d5.r2.dev/Amazon.svg",
  },
  {
    name: "Netflix",
    url: "https://pub-b3533f2e1c954842824758490b95c9d5.r2.dev/Netflix.svg",
  },
  {
    name: "YouTube",
    url: "https://pub-b3533f2e1c954842824758490b95c9d5.r2.dev/YouTube.svg",
  },
  {
    name: "Instagram",
    url: "https://pub-b3533f2e1c954842824758490b95c9d5.r2.dev/Instagram.svg",
  },
  {
    name: "Spotify",
    url: "https://pub-b3533f2e1c954842824758490b95c9d5.r2.dev/Spotify.svg",
  },
]

export default function LogoCloud03Page() {
  return (
    <div className="flex min-h-svh w-full items-center justify-center p-6 md:p-10">
      <div className="w-full max-w-sm md:max-w-3xl">
        <section id="logos">
          <div className="container mx-auto px-4 py-12 md:px-8">
            <h3 className="text-center text-sm font-semibold text-gray-500">
              TRUSTED BY LEADING TEAMS
            </h3>
            <div className="relative mt-6">
              <Marquee className="max-w-full [--duration:40s]">
                {companies.map((company, idx) => (
                  <Image
                    key={idx}
                    width={112}
                    height={40}
                    src={company.url}
                    className="h-10 w-28 opacity-30 grayscale dark:brightness-0 dark:invert"
                    alt={company.name}
                  />
                ))}
              </Marquee>
              <div className="from-background pointer-events-none absolute inset-y-0 left-0 h-full w-1/3 bg-gradient-to-r"></div>
              <div className="from-background pointer-events-none absolute inset-y-0 right-0 h-full w-1/3 bg-gradient-to-l"></div>
            </div>
          </div>
        </section>
      </div>
    </div>
  )
}
```

### `registry/blocks/logo-cloud-03/components/marquee.tsx`

```tsx
import { cn } from "@/lib/utils"

interface MarqueeProps extends React.HTMLAttributes<HTMLDivElement> {
  reverse?: boolean
  pauseOnHover?: boolean
  children?: React.ReactNode
  vertical?: boolean
  repeat?: number
}

export function Marquee({
  className,
  reverse,
  pauseOnHover = false,
  children,
  vertical = false,
  repeat = 4,
  ...props
}: MarqueeProps) {
  return (
    <div
      {...props}
      className={cn(
        "group flex [gap:var(--gap)] overflow-hidden p-2 [--duration:40s] [--gap:1rem]",
        {
          "flex-row": !vertical,
          "flex-col": vertical,
        },
        className
      )}
    >
      {Array(repeat)
        .fill(0)
        .map((_, i) => (
          <div
            key={i}
            className={cn("flex shrink-0 justify-around [gap:var(--gap)]", {
              "animate-marquee flex-row": !vertical,
              "animate-marquee-vertical flex-col": vertical,
              "group-hover:[animation-play-state:paused]": pauseOnHover,
              "[animation-direction:reverse]": reverse,
            })}
          >
            {children}
          </div>
        ))}
    </div>
  )
}
```
