Skip to content
shadcn.io

shadcn.io is not affiliated with official shadcn/ui

Animated Underline Navbar Block for React

A one-bar navbar for a design studio whose links draw a hairline underline in from the inline start on hover and focus and retract it toward the end, with the current page keeping its full line, using nothing but a CSS transform.

Framework
UI library

Preview

Preview width

Installation

Part of Pro
Pro unlocks the code and one-line install of every Pro button and text effect, plus the MCP for your AI editor.
Have Pro already? Sign in to open it.Opens here as soon as you're Pro.

Overview

A navbar for React with Base UI whose only motion is a line under a link. The wordmark leads, five links sit start-aligned right after it (Work, Services, Studio, Journal and Contact), and Sign in and a Start free Shine Button close the row. Hover or focus a link and a hairline draws in under its label from the inline start; leave and it retracts toward the end. The page you're on, marked with aria-current="page", keeps its full line and a heavier label, so it isn't marked by colour alone. There's no script behind the line: each link's ::after is scaled from 0 to 1 with a CSS transform. Below the md breakpoint the links fold into a menu button that opens a sheet from the top with the same links and both actions. The bar is 56 pixels high, draws no bottom border (the next block's top rule is its bottom edge) and takes its rails and top rule from the Guides spine. It's built from Sheet, Guides, Shine Button and Button, with your theme's tokens for every colour. For studios, agencies, portfolios and editorial sites that want one quiet, precise hover.

FAQ

How does the underline draw in and retract?

The line is each link's ::after, one pixel high and scaled to 0 on the x axis. Its transform origin sits at the end, so when you leave it shrinks toward the end; on hover or keyboard focus the origin flips to the start and the scale goes to 1, so it grows from the start. In a right-to-left page the two origins swap, so the line still draws from the inline start. transition-transform runs 300 ms. The current page holds the scale at 1 with its origin unchanged.

How does it work with a keyboard and a screen reader?

The links sit in a nav landmark named Main, after the wordmark (a link home). Tab walks the wordmark, the five links, Sign in and Start free; a link takes a focus ring and the same underline as hover, and the current page is announced as the current page. Nothing opens or traps focus in the bar, so it needs no per-library keys.

How does it work on a phone?

Below the md breakpoint the wordmark, Start free and a menu button stay on the bar, and nothing wraps at 320 pixels. The menu button says it opens a menu and opens a sheet from the top whose header lines up with the bar (the wordmark where it was, the close button where the menu button was), then the links, the current page tinted with a dot, and Sign in and Start free. Focus moves into the sheet and stays there; Escape, the close button or choosing a link closes it, and focus goes back to the menu button. Sign in and Start free render the link they're given with render, with nativeButton={false}.

What happens with reduced motion?

With reduced motion the line appears and disappears at once instead of drawing in; the colour change on hover is instant too. The sheet opens without sliding, and the band of light on Start free fades in where it stands instead of sweeping.

How does it sit on the page, and can it stick to the top?

The navbar is the page's first block: its + marks and rails line up with every block under it, its top rule falls on the window's top edge (or between it and a banner above it), and it draws no bottom border. To keep the bar in view while the page scrolls, add sticky top-0 z-40 bg-background/80 backdrop-blur to the header.

  • Pro

    Hover Highlight Navbar

    Link highlights

    A navbar for a tile shop whose five centred links share one soft block that glides to the link you hover or focus and fades out when you leave, with the current page marked by a heavier label and a dot instead.

  • Pro

    Pill Links Navbar

    Link highlights

    A navbar for a sprint-planning app where the current page is a pill that slides to whichever link you choose, with the links and a Shine Button grouped at the end and hover only tinting.

  • Pro

    Tabs Underline Navbar

    Link highlights

    A navbar for a financial reporting tool built as cells: the wordmark in its own cell, full-height report tabs whose 2 px mark sits on the bar's bottom edge and slides on selection, and an Export action, with arrow-key navigation and a scrolling tab row on phones.

  • Pro

    Gradient Border Navbar

    Link highlights

    A navbar with a soft hairline glint on the page rule under the current link, fainter on hover and focus, with no border added and nothing that moves, and a sheet menu on phones.

  • Pro

    A quiet navigation strip for a product site: five section links separated by dots, with one underline that slides to the current page.

  • Pro

    A one-bar marketing navbar for a product roadmap tool: a wordmark, a Product menu of four areas with icons and one-line descriptions, plain links with the current page marked, Sign in and a Shine Button, and a sheet with the same links on phones.