Breadcrumb Rails Components

A few examples of breadcrumb components for your Ruby on Rails application. Built with Tailwind CSS.

Examples

Basic Breadcrumb

A simple breadcrumb navigation with slash separators.

<div class="w-full flex justify-center">
  <nav aria-label="Breadcrumb" class="flex justify-center overflow-x-auto whitespace-nowrap">
    <ol class="flex items-center space-x-2 text-sm w-full">
      <li>
        <a href="#" class="text-neutral-500 hover:text-neutral-700 dark:text-neutral-400 dark:hover:text-neutral-200 transition-colors">
          Home
        </a>
      </li>
      <li class="flex items-center space-x-2">
        <span class="text-neutral-400 dark:text-neutral-600">/</span>
        <a href="#" class="text-neutral-500 hover:text-neutral-700 dark:text-neutral-400 dark:hover:text-neutral-200 transition-colors">
          Products
        </a>
      </li>
      <li class="flex items-center space-x-2">
        <span class="text-neutral-400 dark:text-neutral-600">/</span>
        <a href="#" class="text-neutral-500 hover:text-neutral-700 dark:text-neutral-400 dark:hover:text-neutral-200 transition-colors">
          Electronics
        </a>
      </li>
      <li class="flex items-center space-x-2">
        <span class="text-neutral-400 dark:text-neutral-600">/</span>
        <span class="text-neutral-900 dark:text-neutral-100 font-medium" aria-current="page">
          Headphones
        </span>
      </li>
    </ol>
  </nav>
</div>

Breadcrumb navigation with home icon and chevron separators.

<div class="w-full flex justify-center">
  <nav aria-label="Breadcrumb" class="flex justify-center overflow-x-auto whitespace-nowrap">
    <ol class="flex items-center space-x-1 text-sm w-full">
      <li>
        <a href="#" class="flex items-center text-neutral-500 hover:text-neutral-700 dark:text-neutral-400 dark:hover:text-neutral-200 transition-colors p-1.5 rounded hover:bg-neutral-100 dark:hover:bg-neutral-800">
          <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" viewBox="0 0 20 20" fill="currentColor">
            <path d="M10.707 2.293a1 1 0 00-1.414 0l-7 7a1 1 0 001.414 1.414L4 10.414V17a1 1 0 001 1h2a1 1 0 001-1v-2a1 1 0 011-1h2a1 1 0 011 1v2a1 1 0 001 1h2a1 1 0 001-1v-6.586l.293.293a1 1 0 001.414-1.414l-7-7z" />
          </svg>
          <span class="sr-only">Home</span>
        </a>
      </li>
      <li class="flex items-center">
        <svg xmlns="http://www.w3.org/2000/svg" class="size-4 shrink-0 text-neutral-400 dark:text-neutral-600" viewBox="0 0 20 20" fill="currentColor">
          <path fill-rule="evenodd" d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" clip-rule="evenodd" />
        </svg>
        <a href="#" class="ml-1 text-neutral-500 hover:text-neutral-700 dark:text-neutral-400 dark:hover:text-neutral-200 transition-colors p-1.5 rounded hover:bg-neutral-100 dark:hover:bg-neutral-800">
          Dashboard
        </a>
      </li>
      <li class="flex items-center">
        <svg xmlns="http://www.w3.org/2000/svg" class="size-4 shrink-0 text-neutral-400 dark:text-neutral-600" viewBox="0 0 20 20" fill="currentColor">
          <path fill-rule="evenodd" d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" clip-rule="evenodd" />
        </svg>
        <a href="#" class="ml-1 text-neutral-500 hover:text-neutral-700 dark:text-neutral-400 dark:hover:text-neutral-200 transition-colors p-1.5 rounded hover:bg-neutral-100 dark:hover:bg-neutral-800">
          Projects
        </a>
      </li>
      <li class="flex items-center">
        <svg xmlns="http://www.w3.org/2000/svg" class="size-4 shrink-0 text-neutral-400 dark:text-neutral-600" viewBox="0 0 20 20" fill="currentColor">
          <path fill-rule="evenodd" d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" clip-rule="evenodd" />
        </svg>
        <span class="ml-1 text-neutral-900 dark:text-neutral-100 font-medium p-1.5" aria-current="page">
          Project Alpha
        </span>
      </li>
    </ol>
  </nav>
</div>

Breadcrumb navigation with background styling and custom separators.

<div class="w-full flex justify-center">
  <nav aria-label="Breadcrumb" class="flex justify-center w-full">
    <ol class="flex items-center space-x-1 text-sm bg-neutral-50 dark:bg-neutral-900 px-4 py-2 rounded-lg overflow-x-auto whitespace-nowrap">
      <li>
        <a href="#" class="text-neutral-600 hover:text-neutral-900 dark:text-neutral-400 dark:hover:text-neutral-100 transition-colors font-medium">
          Home
        </a>
      </li>
      <li class="flex items-center space-x-1">
        <svg xmlns="http://www.w3.org/2000/svg" class="size-4 shrink-0 text-neutral-400 dark:text-neutral-600" viewBox="0 0 20 20" fill="currentColor">
          <path fill-rule="evenodd" d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" clip-rule="evenodd" />
        </svg>
        <a href="#" class="text-neutral-600 hover:text-neutral-900 dark:text-neutral-400 dark:hover:text-neutral-100 transition-colors font-medium">
          Documentation
        </a>
      </li>
      <li class="flex items-center space-x-1">
        <svg xmlns="http://www.w3.org/2000/svg" class="size-4 shrink-0 text-neutral-400 dark:text-neutral-600" viewBox="0 0 20 20" fill="currentColor">
          <path fill-rule="evenodd" d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" clip-rule="evenodd" />
        </svg>
        <a href="#" class="text-neutral-600 hover:text-neutral-900 dark:text-neutral-400 dark:hover:text-neutral-100 transition-colors font-medium">
          Components
        </a>
      </li>
      <li class="flex items-center space-x-1">
        <svg xmlns="http://www.w3.org/2000/svg" class="size-4 shrink-0 text-neutral-400 dark:text-neutral-600" viewBox="0 0 20 20" fill="currentColor">
          <path fill-rule="evenodd" d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" clip-rule="evenodd" />
        </svg>
        <span class="text-neutral-900 dark:text-neutral-100 font-semibold" aria-current="page">
          Breadcrumb
        </span>
      </li>
    </ol>
  </nav>
</div>

Breadcrumb navigation with ellipsis truncation for long paths.

<div class="w-full flex justify-center">
  <nav aria-label="Breadcrumb" class="flex justify-center overflow-x-auto whitespace-nowrap">
    <ol class="flex items-center space-x-2 text-sm w-full">
      <li>
        <a href="#" class="text-neutral-500 hover:text-neutral-700 dark:text-neutral-400 dark:hover:text-neutral-200 transition-colors">
          Home
        </a>
      </li>
      <li class="flex items-center space-x-2">
        <span class="text-neutral-400 dark:text-neutral-600">/</span>
        <button type="button" class="text-neutral-500 hover:text-neutral-700 dark:text-neutral-400 dark:hover:text-neutral-200 transition-colors">
          ...
        </button>
      </li>
      <li class="flex items-center space-x-2">
        <span class="text-neutral-400 dark:text-neutral-600">/</span>
        <a href="#" class="text-neutral-500 hover:text-neutral-700 dark:text-neutral-400 dark:hover:text-neutral-200 transition-colors">
          Category
        </a>
      </li>
      <li class="flex items-center space-x-2">
        <span class="text-neutral-400 dark:text-neutral-600">/</span>
        <a href="#" class="text-neutral-500 hover:text-neutral-700 dark:text-neutral-400 dark:hover:text-neutral-200 transition-colors">
          Subcategory
        </a>
      </li>
      <li class="flex items-center space-x-2">
        <span class="text-neutral-400 dark:text-neutral-600">/</span>
        <span class="text-neutral-900 dark:text-neutral-100 font-medium truncate max-w-[200px]" aria-current="page" title="Very Long Product Name That Might Need Truncation">
          Very Long Product Name That Might Need Truncation
        </span>
      </li>
    </ol>
  </nav>
</div>

Breadcrumb navigation with dropdown menu for condensed navigation paths. This example uses the dropdown component stimulus controllers.

<div class="flex justify-center w-full whitespace-nowrap">
  <ol class="flex justify-center items-center space-x-2 text-sm w-full">
    <li>
      <a href="#" class="flex items-center text-neutral-500 hover:text-neutral-700 dark:text-neutral-400 dark:hover:text-neutral-200 transition-colors">
        <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4 mr-1" viewBox="0 0 20 20" fill="currentColor">
          <path d="M10.707 2.293a1 1 0 00-1.414 0l-7 7a1 1 0 001.414 1.414L4 10.414V17a1 1 0 001 1h2a1 1 0 001-1v-2a1 1 0 011-1h2a1 1 0 011 1v2a1 1 0 001 1h2a1 1 0 001-1v-6.586l.293.293a1 1 0 001.414-1.414l-7-7z" />
        </svg>
        <span class="hidden sm:block">Home</span>
      </a>
    </li>
    <li class="flex items-center space-x-2">
      <span class="text-neutral-400 dark:text-neutral-600">/</span>

      <!-- Dropdown for hidden breadcrumb items -->
      <div class="relative" data-controller="dropdown-popover" data-dropdown-popover-placement-value="bottom-start">
        <button
          class="flex outline-none items-center gap-1 text-neutral-500 hover:text-neutral-700 dark:text-neutral-400 dark:hover:text-neutral-200 transition-colors p-1 rounded hover:bg-neutral-100 dark:hover:bg-neutral-700/50"
          data-dropdown-popover-target="button"
          data-action="dropdown-popover#toggle"
          aria-label="Show more breadcrumb items"
        >
          <svg xmlns="http://www.w3.org/2000/svg" class="size-4" viewBox="0 0 20 20" fill="currentColor">
            <path d="M6 10a2 2 0 11-4 0 2 2 0 014 0zM12 10a2 2 0 11-4 0 2 2 0 014 0zM16 12a2 2 0 100-4 2 2 0 000 4z" />
          </svg>
        </button>

        <dialog
          class="absolute z-10 w-fit rounded-lg border border-neutral-200 bg-white text-neutral-900 opacity-0 shadow-md transition-opacity duration-150 ease-out outline-hidden dark:border-neutral-700/50 dark:bg-neutral-800 dark:text-neutral-100"
          style="margin-right: initial;"
          data-controller="menu"
          data-dropdown-popover-target="menu"
          autofocus="false"
          data-action="click@document->dropdown-popover#closeOnClickOutside
                      close->menu#reset
                      keydown.up->menu#prev keydown.down->menu#next
                      keydown.up->menu#preventScroll keydown.down->menu#preventScroll"
        >
          <div class="flex flex-col p-1" role="menu">
            <a href="#" class="flex items-center rounded-md px-3 py-2 text-sm text-neutral-700 hover:bg-neutral-100 focus:bg-neutral-100 focus:outline-hidden dark:text-neutral-100 dark:hover:bg-neutral-700/50 dark:focus:bg-neutral-700/50" data-menu-target="item" role="menuitem" tabindex="-1">
              Electronics
            </a>
            <a href="#" class="flex items-center rounded-md px-3 py-2 text-sm text-neutral-700 hover:bg-neutral-100 focus:bg-neutral-100 focus:outline-hidden dark:text-neutral-100 dark:hover:bg-neutral-700/50 dark:focus:bg-neutral-700/50" data-menu-target="item" role="menuitem" tabindex="-1">
              Audio & Sound
            </a>
          </div>
        </dialog>
      </div>
    </li>
    <li class="flex items-center space-x-2">
      <span class="text-neutral-400 dark:text-neutral-600">/</span>
      <a href="#" class="flex items-center gap-1 text-neutral-500 hover:text-neutral-700 dark:text-neutral-400 dark:hover:text-neutral-200 transition-colors">
        <svg xmlns="http://www.w3.org/2000/svg" class="size-4" width="18" height="18" viewBox="0 0 18 18"><g fill="currentColor"><path d="m15.75,13.5c-.4141,0-.75-.3359-.75-.75v-3.75c0-3.3086-2.6914-6-6-6s-6,2.6914-6,6v3.75c0,.4141-.3359.75-.75.75s-.75-.3359-.75-.75v-3.75C1.5,4.8643,4.8643,1.5,9,1.5s7.5,3.3643,7.5,7.5v3.75c0,.4141-.3359.75-.75.75Z" stroke-width="0"></path><path d="m5.25,9c-2.0679,0-3.75,1.6821-3.75,3.75s1.6821,3.75,3.75,3.75c.9648,0,1.75-.7852,1.75-1.75v-4c0-.9648-.7852-1.75-1.75-1.75Z" stroke-width="0"></path><path d="m12.75,9c-.9648,0-1.75.7852-1.75,1.75v4c0,.9648.7852,1.75,1.75,1.75,2.0679,0,3.75-1.6821,3.75-3.75s-1.6821-3.75-3.75-3.75Z" stroke-width="0"></path></g></svg>
        <span class="hidden sm:block">Headphones</span>
      </a>
    </li>
  </ol>
</div>

Table of contents

Get notified when new components come out