Navbar With Contact Bar and Hanging Logo

Background photo

Cover that fits your life

Placeholder section under the navbar.

About this block

Navbar With Contact Bar and Hanging LogoPRO

A two row header for service businesses. A thin top bar lists address, email and phone in ruled cells, with social icons in square cells on the right. Below it, a logo card hangs over the next section beside the company name, and the links sit on the right with an active state and a standard dropdown that opens on hover, click or keyboard focus. On small screens the top bar keeps only the linked contacts, the logo card still hangs over the next section, the company name sits centered, and a bordered menu button opens the links with collapsible submenus.

A two row header for service businesses: a thin top bar with address, email, phone and social icons in ruled cells, and a menu row where a logo card hangs over the section below while the links, an active state and a standard dropdown sit on the right. On a phone the top bar keeps only the linked contacts, the company name sits centered, and a bordered button opens the menu with collapsible submenus.

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

Remove the preview section

The installed file renders a sample section with a background photo right after the header, marked with a TEMP comment. It is there so the preview shows how the logo hangs over the next section. Delete that section (and the fragment around the return) before you use the block, or every page with this navbar gets the sample photo and heading under it.

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://beste.dev/r/navbar118?email=YOUR_EMAIL&license_key=YOUR_KEY"

Base UI flavor

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

This installs the block to components/beste/block/navbar118.tsx. It uses no shadcn primitives, only lucide-react icons and next/image.

Quick start

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

tsx
import { Navbar118, navbar118Demo } from "@/components/beste/block/navbar118";

export default function Page() {
  return <Navbar118 {...navbar118Demo} />;
}

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

tsx
import { Facebook, Instagram, Mail, MapPin, Phone } from "lucide-react";
import { Navbar118 } from "@/components/beste/block/navbar118";

export default function Page() {
  return (
    <Navbar118
      logo={{ src: "/logo.png", alt: "Harbor Insurance Brokers" }}
      brand="Harbor Insurance Brokers"
      contacts={[
        { label: "Brooklyn, New York", icon: MapPin },
        { label: "[email protected]", href: "mailto:[email protected]", icon: Mail },
        { label: "(+1) 718 555 0179", href: "tel:+17185550179", icon: Phone },
      ]}
      socials={[
        { label: "Instagram", href: "https://instagram.com", icon: Instagram },
        { label: "Facebook", href: "https://facebook.com", icon: Facebook },
      ]}
      items={[
        { label: "Home", href: "/", isActive: true },
        { label: "About us", href: "/about" },
        {
          label: "Our products",
          href: "/products",
          children: [
            { label: "Car insurance", href: "/products/car" },
            { label: "Health insurance", href: "/products/health" },
          ],
        },
        { label: "Contact", href: "/contact" },
      ]}
      labels={{ open: "Open menu", close: "Close menu" }}
    />
  );
}

Props

PropTypeDefaultDescription
logo{ src: string; alt: string }–Image shown in the hanging logo card
hideLogoBorderbooleanfalseRemoves the border around the logo card
hideLogoShadowbooleanfalseRemoves the shadow under the logo card
brandstring–Company name next to the logo
contactsContactItem[][]Cells in the top bar; the ones with href also show on phones
socialsSocialLink[][]Square icon cells on the right of the top bar, hidden on phones
itemsNavItem[][]Menu links; an item with children becomes a dropdown
labels{ open?: string; close?: string }{}Accessible names for the mobile menu button
classNamestring–Extra classes for the outer header
ts
type ContactItem = {
  label: string;
  href?: string;
  icon?: LucideIcon;
};

type SocialLink = {
  label: string;
  href: string;
  icon: LucideIcon;
};

type NavItem = {
  label: string;
  href: string;
  isActive?: boolean;
  children?: NavChild[];
};

type NavChild = {
  label: string;
  href: string;
};

Behavior notes

  • The menu row has a fixed height (h-14, md:h-16) with a full width line under it, and the logo card is absolutely positioned inside a slot of that height. The header always ends at the line, so the next section starts there with no setting on the layout or on that section, and the card hangs over it.
  • The header is relative z-30, so the card stays above a following section unless that section sets a higher z-index of its own. Its shadow only falls downward, so no shadow shows above the card.
  • A dropdown opens on hover or click, and keyboard focus inside the item reveals it too. It opens from the bottom of the line, has rounded corners only at the bottom, and closes on Escape or a pointer down outside the menu row.
  • Dropdown panels and the mobile menu are always rendered and hidden with CSS, so every link is in the server rendered HTML. The closed mobile menu and closed submenus carry inert.
  • While the mobile menu is open, the logo card fades out and stops taking taps so it never covers the first menu rows; it fades back in when the menu closes. From lg up the card always stays visible.
  • Contacts with an href render as plain a elements, which is right for mailto: and tel: targets. Contacts without one, like an address, are hidden on phones and listed again at the foot of the mobile menu.
  • The active item uses isActive; nothing is derived from the current URL, so set it from your router.

More Navigation blocks

View all Navigation
PRO

navbar38

Dual-Row Navbar

PRO

navbar51

Tab Bar Navbar

PRO

navbar109

Account Menu Bar

Get Pro