Noticed By Row

Written about in

Quietwork,occasionallynoticed.

  • Publication logo
  • Publication logo
  • Publication logo
  • Publication logo
  • Publication logo
  • Publication logo
About this block

Noticed By RowPRO

A press row: a serif heading that settles in word by word beside a pill action, then six greyscale logos in a ruled strip that blur in one after another and regain their colour on hover.

Logos17: Noticed By Row

A press row ruled top and bottom: a heading and a pill above a grid of greyscale publication logos that regain their colour on hover, each in its own cell.

Upgrade to Pro

Pro blocks install through the shadcn CLI with your license key and ship their full source. Docs and live previews stay open to everyone, so you can read every block's details first.

Upgrade Now

Installation

Swap YOUR_EMAIL and YOUR_KEY for the email and license key on your account. Find your license key on your account page.

Radix flavor

bash
npx shadcn add "https://ui.beste.co/r/logos17?email=YOUR_EMAIL&license_key=YOUR_KEY"

Base UI flavor

bash
npx shadcn add "https://ui.beste.co/r-base/logos17?email=YOUR_EMAIL&license_key=YOUR_KEY"

This installs the block to components/beste/block/logos17.tsx plus the button22 sliding-marker pill and the text1 word stagger it uses.

Quick start

The installed file exports logos17Demo alongside the block: the exact props behind the preview above. Spread it to get a working logo row in one line.

tsx
import { Logos17, logos17Demo } from "@/components/beste/block/logos17";

export default function Page() {
  return <Logos17 {...logos17Demo} />;
}

Then replace the demo with your own props. Written out, a trimmed setup looks like this:

tsx
import { Logos17 } from "@/components/beste/block/logos17";

export default function Page() {
  return (
    <Logos17
      eyebrow="Written about in"
      heading="Quiet work, occasionally noticed."
      logos={[
        { src: "/logos/one.png", alt: "Publication logo" },
        { src: "/logos/two.png", alt: "Publication logo" },
      ]}
      button={{ label: "Press enquiries", href: "mailto:[email protected]", tone: "outline" }}
    />
  );
}

Props

PropTypeDefaultDescription
eyebrowstring–Small-caps line above the heading
headingstring–Section heading, rendered as an h2 through Text1
logosLogo[][]Publication logos, six across from md
buttonActionButton–Pill action beside the heading
classNamestring–Extra classes for the outer <section>
ts
type Logo = {
  src: string;
  alt: string;
};

type ActionButton = {
  label: string;
  href: string;
  tone?: "primary" | "light" | "dark" | "outline";
};

Behavior notes

  • Logos are given grayscale and half opacity at rest and return to full on hover, so a row of mismatched brand colors reads as one band until someone looks at a particular mark.
  • Each logo is set to h-8 w-auto, so marks of different widths line up on a common height rather than on a common width, which is what keeps a wordmark and a monogram looking equally weighted.
  • The grid steps two, three, then six across, so six logos fill exactly one row at md and break into even rows below it rather than leaving a single mark stranded.
  • The rules are a border-y on the list itself rather than a border per cell, so the row reads as one band whatever the logo count.
  • Section padding is lighter than the rest of the set (py-16 rising to py-24), because a logo row is a punctuation mark between sections rather than a section of its own.
  • Logos enter with a 0.08s stagger, tight enough that the row resolves as one object.
  • Give every logo a real alt; these are the only images in the block and a row of empty alts leaves a screen reader with nothing.

More Logos blocks

View all Logos
PRO

logos18

Press Notes

PRO

logos11

Logos With Stat

PRO

logos16

Press Quote Card

Get Pro access