Menu

Tailwind CSS Outline Color

Outline color in CSS allows you to set the color of an outline around elements such as buttons, divs, or input fields. Unlike borders, which are part of the box model and affect layout, outlines do not occupy space and exist outside of the element’s dimensions.

Tailwind CSS provides a rich collection of utilities to easily manage outline colors without writing custom CSS for each implementation. With its class-based approach, you can quickly apply, modify, or conditionally update outline color properties in your application.

ClassPropertiesExample
outline-inheritoutline-color: inherit;<div className="outline-inherit"></div>
outline-currentoutline-color: currentColor;<div className="outline-current"></div>
outline-transparentoutline-color: transparent;<div className="outline-transparent"></div>
outline-blackoutline-color: #000;<div className="outline-black"></div>
outline-whiteoutline-color: #fff;<div className="outline-white"></div>
outline-slate-50outline-color: #f8fafc;<div className="outline-slate-50"></div>
outline-slate-100outline-color: #f1f5f9;<div className="outline-slate-100"></div>
outline-slate-200outline-color: #e2e8f0;<div className="outline-slate-200"></div>
outline-slate-300outline-color: #cbd5e1;<div className="outline-slate-300"></div>
outline-slate-400outline-color: #94a3b8;<div className="outline-slate-400"></div>
outline-slate-500outline-color: #64748b;<div className="outline-slate-500"></div>
outline-slate-600outline-color: #475569;<div className="outline-slate-600"></div>
outline-slate-700outline-color: #334155;<div className="outline-slate-700"></div>
outline-slate-800outline-color: #1e293b;<div className="outline-slate-800"></div>
outline-slate-900outline-color: #0f172a;<div className="outline-slate-900"></div>
outline-slate-950outline-color: #020617;<div className="outline-slate-950"></div>
outline-gray-50outline-color: #f9fafb;<div className="outline-gray-50"></div>
outline-gray-100outline-color: #f3f4f6;<div className="outline-gray-100"></div>
outline-gray-200outline-color: #e5e7eb;<div className="outline-gray-200"></div>
outline-gray-300outline-color: #d1d5db;<div className="outline-gray-300"></div>
outline-gray-400outline-color: #9ca3af;<div className="outline-gray-400"></div>
outline-gray-500outline-color: #6b7280;<div className="outline-gray-500"></div>
outline-gray-600outline-color: #4b5563;<div className="outline-gray-600"></div>
outline-gray-700outline-color: #374151;<div className="outline-gray-700"></div>
outline-gray-800outline-color: #1f2937;<div className="outline-gray-800"></div>
outline-gray-900outline-color: #111827;<div className="outline-gray-900"></div>
outline-gray-950outline-color: #030712;<div className="outline-gray-950"></div>
outline-zinc-50outline-color: #fafafa;<div className="outline-zinc-50"></div>
outline-zinc-100outline-color: #f4f4f5;<div className="outline-zinc-100"></div>
outline-zinc-200outline-color: #e4e4e7;<div className="outline-zinc-200"></div>
outline-zinc-300outline-color: #d4d4d8;<div className="outline-zinc-300"></div>
outline-zinc-400outline-color: #a1a1aa;<div className="outline-zinc-400"></div>
outline-zinc-500outline-color: #71717a;<div className="outline-zinc-500"></div>
outline-zinc-600outline-color: #52525b;<div className="outline-zinc-600"></div>
outline-zinc-700outline-color: #3f3f46;<div className="outline-zinc-700"></div>
outline-zinc-800outline-color: #27272a;<div className="outline-zinc-800"></div>
outline-zinc-900outline-color: #18181b;<div className="outline-zinc-900"></div>
outline-zinc-950outline-color: #09090b;<div className="outline-zinc-950"></div>
outline-neutral-50outline-color: #fafafa;<div className="outline-neutral-50"></div>
outline-neutral-100outline-color: #f5f5f5;<div className="outline-neutral-100"></div>
outline-neutral-200outline-color: #e5e5e5;<div className="outline-neutral-200"></div>
outline-neutral-300outline-color: #d4d4d4;<div className="outline-neutral-300"></div>
outline-neutral-400outline-color: #a3a3a3;<div className="outline-neutral-400"></div>
outline-neutral-500outline-color: #737373;<div className="outline-neutral-500"></div>
outline-neutral-600outline-color: #525252;<div className="outline-neutral-600"></div>
outline-neutral-700outline-color: #404040;<div className="outline-neutral-700"></div>
outline-neutral-800outline-color: #262626;<div className="outline-neutral-800"></div>
outline-neutral-900outline-color: #171717;<div className="outline-neutral-900"></div>
outline-neutral-950outline-color: #0a0a0a;<div className="outline-neutral-950"></div>
outline-stone-50outline-color: #fafaf9;<div className="outline-stone-50"></div>
outline-stone-100outline-color: #f5f5f4;<div className="outline-stone-100"></div>
outline-stone-200outline-color: #e7e5e4;<div className="outline-stone-200"></div>
outline-stone-300outline-color: #d6d3d1;<div className="outline-stone-300"></div>
outline-stone-400outline-color: #a8a29e;<div className="outline-stone-400"></div>
outline-stone-500outline-color: #78716c;<div className="outline-stone-500"></div>
outline-stone-600outline-color: #57534e;<div className="outline-stone-600"></div>
outline-stone-700outline-color: #44403c;<div className="outline-stone-700"></div>
outline-stone-800outline-color: #292524;<div className="outline-stone-800"></div>
outline-stone-900outline-color: #1c1917;<div className="outline-stone-900"></div>
outline-stone-950outline-color: #0c0a09;<div className="outline-stone-950"></div>
outline-red-50outline-color: #fef2f2;<div className="outline-red-50"></div>
outline-red-100outline-color: #fee2e2;<div className="outline-red-100"></div>
outline-red-200outline-color: #fecaca;<div className="outline-red-200"></div>
outline-red-300outline-color: #fca5a5;<div className="outline-red-300"></div>
outline-red-400outline-color: #f87171;<div className="outline-red-400"></div>
outline-red-500outline-color: #ef4444;<div className="outline-red-500"></div>
outline-red-600outline-color: #dc2626;<div className="outline-red-600"></div>
outline-red-700outline-color: #b91c1c;<div className="outline-red-700"></div>
outline-red-800outline-color: #991b1b;<div className="outline-red-800"></div>
outline-red-900outline-color: #7f1d1d;<div className="outline-red-900"></div>
outline-red-950outline-color: #450a0a;<div className="outline-red-950"></div>
outline-orange-50outline-color: #fff7ed;<div className="outline-orange-50"></div>
outline-orange-100outline-color: #ffedd5;<div className="outline-orange-100"></div>
outline-orange-200outline-color: #fed7aa;<div className="outline-orange-200"></div>
outline-orange-300outline-color: #fdba74;<div className="outline-orange-300"></div>
outline-orange-400outline-color: #fb923c;<div className="outline-orange-400"></div>
outline-orange-500outline-color: #f97316;<div className="outline-orange-500"></div>
outline-orange-600outline-color: #ea580c;<div className="outline-orange-600"></div>
outline-orange-700outline-color: #c2410c;<div className="outline-orange-700"></div>
outline-orange-800outline-color: #9a3412;<div className="outline-orange-800"></div>
outline-orange-900outline-color: #7c2d12;<div className="outline-orange-900"></div>
outline-orange-950outline-color: #431407;<div className="outline-orange-950"></div>
outline-amber-50outline-color: #fffbeb;<div className="outline-amber-50"></div>
outline-amber-100outline-color: #fef3c7;<div className="outline-amber-100"></div>
outline-amber-200outline-color: #fde68a;<div className="outline-amber-200"></div>
outline-amber-300outline-color: #fcd34d;<div className="outline-amber-300"></div>
outline-amber-400outline-color: #fbbf24;<div className="outline-amber-400"></div>
outline-amber-500outline-color: #f59e0b;<div className="outline-amber-500"></div>
outline-amber-600outline-color: #d97706;<div className="outline-amber-600"></div>
outline-amber-700outline-color: #b45309;<div className="outline-amber-700"></div>
outline-amber-800outline-color: #92400e;<div className="outline-amber-800"></div>
outline-amber-900outline-color: #78350f;<div className="outline-amber-900"></div>
outline-amber-950outline-color: #451a03;<div className="outline-amber-950"></div>
outline-yellow-50outline-color: #fefce8;<div className="outline-yellow-50"></div>
outline-yellow-100outline-color: #fef9c3;<div className="outline-yellow-100"></div>
outline-yellow-200outline-color: #fef08a;<div className="outline-yellow-200"></div>
outline-yellow-300outline-color: #fde047;<div className="outline-yellow-300"></div>
outline-yellow-400outline-color: #facc15;<div className="outline-yellow-400"></div>
outline-yellow-500outline-color: #eab308;<div className="outline-yellow-500"></div>
outline-yellow-600outline-color: #ca8a04;<div className="outline-yellow-600"></div>
outline-yellow-700outline-color: #a16207;<div className="outline-yellow-700"></div>
outline-yellow-800outline-color: #854d0e;<div className="outline-yellow-800"></div>
outline-yellow-900outline-color: #713f12;<div className="outline-yellow-900"></div>
outline-yellow-950outline-color: #422006;<div className="outline-yellow-950"></div>
outline-lime-50outline-color: #f7fee7;<div className="outline-lime-50"></div>
outline-lime-100outline-color: #ecfccb;<div className="outline-lime-100"></div>
outline-lime-200outline-color: #d9f99d;<div className="outline-lime-200"></div>
outline-lime-300outline-color: #bef264;<div className="outline-lime-300"></div>
outline-lime-400outline-color: #a3e635;<div className="outline-lime-400"></div>
outline-lime-500outline-color: #84cc16;<div className="outline-lime-500"></div>
outline-lime-600outline-color: #65a30d;<div className="outline-lime-600"></div>
outline-lime-700outline-color: #4d7c0f;<div className="outline-lime-700"></div>
outline-lime-800outline-color: #3f6212;<div className="outline-lime-800"></div>
outline-lime-900outline-color: #365314;<div className="outline-lime-900"></div>
outline-lime-950outline-color: #1a2e05;<div className="outline-lime-950"></div>
outline-green-50outline-color: #f0fdf4;<div className="outline-green-50"></div>
outline-green-100outline-color: #dcfce7;<div className="outline-green-100"></div>
outline-green-200outline-color: #bbf7d0;<div className="outline-green-200"></div>
outline-green-300outline-color: #86efac;<div className="outline-green-300"></div>
outline-green-400outline-color: #4ade80;<div className="outline-green-400"></div>
outline-green-500outline-color: #22c55e;<div className="outline-green-500"></div>
outline-green-600outline-color: #16a34a;<div className="outline-green-600"></div>
outline-green-700outline-color: #15803d;<div className="outline-green-700"></div>
outline-green-800outline-color: #166534;<div className="outline-green-800"></div>
outline-green-900outline-color: #14532d;<div className="outline-green-900"></div>
outline-green-950outline-color: #052e16;<div className="outline-green-950"></div>
outline-emerald-50outline-color: #ecfdf5;<div className="outline-emerald-50"></div>
outline-emerald-100outline-color: #d1fae5;<div className="outline-emerald-100"></div>
outline-emerald-200outline-color: #a7f3d0;<div className="outline-emerald-200"></div>
outline-emerald-300outline-color: #6ee7b7;<div className="outline-emerald-300"></div>
outline-emerald-400outline-color: #34d399;<div className="outline-emerald-400"></div>
outline-emerald-500outline-color: #10b981;<div className="outline-emerald-500"></div>
outline-emerald-600outline-color: #059669;<div className="outline-emerald-600"></div>
outline-emerald-700outline-color: #047857;<div className="outline-emerald-700"></div>
outline-emerald-800outline-color: #065f46;<div className="outline-emerald-800"></div>
outline-emerald-900outline-color: #064e3b;<div className="outline-emerald-900"></div>
outline-emerald-950outline-color: #022c22;<div className="outline-emerald-950"></div>
outline-teal-50outline-color: #f0fdfa;<div className="outline-teal-50"></div>
outline-teal-100outline-color: #ccfbf1;<div className="outline-teal-100"></div>
outline-teal-200outline-color: #99f6e4;<div className="outline-teal-200"></div>
outline-teal-300outline-color: #5eead4;<div className="outline-teal-300"></div>
outline-teal-400outline-color: #2dd4bf;<div className="outline-teal-400"></div>
outline-teal-500outline-color: #14b8a6;<div className="outline-teal-500"></div>
outline-teal-600outline-color: #0d9488;<div className="outline-teal-600"></div>
outline-teal-700outline-color: #0f766e;<div className="outline-teal-700"></div>
outline-teal-800outline-color: #115e59;<div className="outline-teal-800"></div>
outline-teal-900outline-color: #134e4a;<div className="outline-teal-900"></div>
outline-teal-950outline-color: #042f2e;<div className="outline-teal-950"></div>
outline-cyan-50outline-color: #ecfeff;<div className="outline-cyan-50"></div>
outline-cyan-100outline-color: #cffafe;<div className="outline-cyan-100"></div>
outline-cyan-200outline-color: #a5f3fc;<div className="outline-cyan-200"></div>
outline-cyan-300outline-color: #67e8f9;<div className="outline-cyan-300"></div>
outline-cyan-400outline-color: #22d3ee;<div className="outline-cyan-400"></div>
outline-cyan-500outline-color: #06b6d4;<div className="outline-cyan-500"></div>
outline-cyan-600outline-color: #0891b2;<div className="outline-cyan-600"></div>
outline-cyan-700outline-color: #0e7490;<div className="outline-cyan-700"></div>
outline-cyan-800outline-color: #155e75;<div className="outline-cyan-800"></div>
outline-cyan-900outline-color: #164e63;<div className="outline-cyan-900"></div>
outline-cyan-950outline-color: #083344;<div className="outline-cyan-950"></div>
outline-sky-50outline-color: #f0f9ff;<div className="outline-sky-50"></div>
outline-sky-100outline-color: #e0f2fe;<div className="outline-sky-100"></div>
outline-sky-200outline-color: #bae6fd;<div className="outline-sky-200"></div>
outline-sky-300outline-color: #7dd3fc;<div className="outline-sky-300"></div>
outline-sky-400outline-color: #38bdf8;<div className="outline-sky-400"></div>
outline-sky-500outline-color: #0ea5e9;<div className="outline-sky-500"></div>
outline-sky-600outline-color: #0284c7;<div className="outline-sky-600"></div>
outline-sky-700outline-color: #0369a1;<div className="outline-sky-700"></div>
outline-sky-800outline-color: #075985;<div className="outline-sky-800"></div>
outline-sky-900outline-color: #0c4a6e;<div className="outline-sky-900"></div>
outline-sky-950outline-color: #082f49;<div className="outline-sky-950"></div>
outline-blue-50outline-color: #eff6ff;<div className="outline-blue-50"></div>
outline-blue-100outline-color: #dbeafe;<div className="outline-blue-100"></div>
outline-blue-200outline-color: #bfdbfe;<div className="outline-blue-200"></div>
outline-blue-300outline-color: #93c5fd;<div className="outline-blue-300"></div>
outline-blue-400outline-color: #60a5fa;<div className="outline-blue-400"></div>
outline-blue-500outline-color: #3b82f6;<div className="outline-blue-500"></div>
outline-blue-600outline-color: #2563eb;<div className="outline-blue-600"></div>
outline-blue-700outline-color: #1d4ed8;<div className="outline-blue-700"></div>
outline-blue-800outline-color: #1e40af;<div className="outline-blue-800"></div>
outline-blue-900outline-color: #1e3a8a;<div className="outline-blue-900"></div>
outline-blue-950outline-color: #172554;<div className="outline-blue-950"></div>
outline-indigo-50outline-color: #eef2ff;<div className="outline-indigo-50"></div>
outline-indigo-100outline-color: #e0e7ff;<div className="outline-indigo-100"></div>
outline-indigo-200outline-color: #c7d2fe;<div className="outline-indigo-200"></div>
outline-indigo-300outline-color: #a5b4fc;<div className="outline-indigo-300"></div>
outline-indigo-400outline-color: #818cf8;<div className="outline-indigo-400"></div>
outline-indigo-500outline-color: #6366f1;<div className="outline-indigo-500"></div>
outline-indigo-600outline-color: #4f46e5;<div className="outline-indigo-600"></div>
outline-indigo-700outline-color: #4338ca;<div className="outline-indigo-700"></div>
outline-indigo-800outline-color: #3730a3;<div className="outline-indigo-800"></div>
outline-indigo-900outline-color: #312e81;<div className="outline-indigo-900"></div>
outline-indigo-950outline-color: #1e1b4b;<div className="outline-indigo-950"></div>
outline-violet-50outline-color: #f5f3ff;<div className="outline-violet-50"></div>
outline-violet-100outline-color: #ede9fe;<div className="outline-violet-100"></div>
outline-violet-200outline-color: #ddd6fe;<div className="outline-violet-200"></div>
outline-violet-300outline-color: #c4b5fd;<div className="outline-violet-300"></div>
outline-violet-400outline-color: #a78bfa;<div className="outline-violet-400"></div>
outline-violet-500outline-color: #8b5cf6;<div className="outline-violet-500"></div>
outline-violet-600outline-color: #7c3aed;<div className="outline-violet-600"></div>
outline-violet-700outline-color: #6d28d9;<div className="outline-violet-700"></div>
outline-violet-800outline-color: #5b21b6;<div className="outline-violet-800"></div>
outline-violet-900outline-color: #4c1d95;<div className="outline-violet-900"></div>
outline-violet-950outline-color: #2e1065;<div className="outline-violet-950"></div>
outline-purple-50outline-color: #faf5ff;<div className="outline-purple-50"></div>
outline-purple-100outline-color: #f3e8ff;<div className="outline-purple-100"></div>
outline-purple-200outline-color: #e9d5ff;<div className="outline-purple-200"></div>
outline-purple-300outline-color: #d8b4fe;<div className="outline-purple-300"></div>
outline-purple-400outline-color: #c084fc;<div className="outline-purple-400"></div>
outline-purple-500outline-color: #a855f7;<div className="outline-purple-500"></div>
outline-purple-600outline-color: #9333ea;<div className="outline-purple-600"></div>
outline-purple-700outline-color: #7e22ce;<div className="outline-purple-700"></div>
outline-purple-800outline-color: #6b21a8;<div className="outline-purple-800"></div>
outline-purple-900outline-color: #581c87;<div className="outline-purple-900"></div>
outline-purple-950outline-color: #3b0764;<div className="outline-purple-950"></div>
outline-fuchsia-50outline-color: #fdf4ff;<div className="outline-fuchsia-50"></div>
outline-fuchsia-100outline-color: #fae8ff;<div className="outline-fuchsia-100"></div>
outline-fuchsia-200outline-color: #f5d0fe;<div className="outline-fuchsia-200"></div>
outline-fuchsia-300outline-color: #f0abfc;<div className="outline-fuchsia-300"></div>
outline-fuchsia-400outline-color: #e879f9;<div className="outline-fuchsia-400"></div>
outline-fuchsia-500outline-color: #d946ef;<div className="outline-fuchsia-500"></div>
outline-fuchsia-600outline-color: #c026d3;<div className="outline-fuchsia-600"></div>
outline-fuchsia-700outline-color: #a21caf;<div className="outline-fuchsia-700"></div>
outline-fuchsia-800outline-color: #86198f;<div className="outline-fuchsia-800"></div>
outline-fuchsia-900outline-color: #701a75;<div className="outline-fuchsia-900"></div>
outline-fuchsia-950outline-color: #4a044e;<div className="outline-fuchsia-950"></div>
outline-pink-50outline-color: #fdf2f8;<div className="outline-pink-50"></div>
outline-pink-100outline-color: #fce7f3;<div className="outline-pink-100"></div>
outline-pink-200outline-color: #fbcfe8;<div className="outline-pink-200"></div>
outline-pink-300outline-color: #f9a8d4;<div className="outline-pink-300"></div>
outline-pink-400outline-color: #f472b6;<div className="outline-pink-400"></div>
outline-pink-500outline-color: #ec4899;<div className="outline-pink-500"></div>
outline-pink-600outline-color: #db2777;<div className="outline-pink-600"></div>
outline-pink-700outline-color: #be185d;<div className="outline-pink-700"></div>
outline-pink-800outline-color: #9d174d;<div className="outline-pink-800"></div>
outline-pink-900outline-color: #831843;<div className="outline-pink-900"></div>
outline-pink-950outline-color: #500724;<div className="outline-pink-950"></div>
outline-rose-50outline-color: #fff1f2;<div className="outline-rose-50"></div>
outline-rose-100outline-color: #ffe4e6;<div className="outline-rose-100"></div>
outline-rose-200outline-color: #fecdd3;<div className="outline-rose-200"></div>
outline-rose-300outline-color: #fda4af;<div className="outline-rose-300"></div>
outline-rose-400outline-color: #fb7185;<div className="outline-rose-400"></div>
outline-rose-500outline-color: #f43f5e;<div className="outline-rose-500"></div>
outline-rose-600outline-color: #e11d48;<div className="outline-rose-600"></div>
outline-rose-700outline-color: #be123c;<div className="outline-rose-700"></div>
outline-rose-800outline-color: #9f1239;<div className="outline-rose-800"></div>
outline-rose-900outline-color: #881337;<div className="outline-rose-900"></div>
outline-rose-950outline-color: #4c0519;<div className="outline-rose-950"></div>

Overview of Outline Color

Adding the Outline Color

To add an outline color, use outline-color-value utilities, e.g., outline-rose-900.

This is a live editor. Play around with it!
export default function OutlineButton() {
  return (
    <div className="flex items-center justify-center h-screen w-screen bg-gray-50"> {/* Full-screen container */}
      <button className="outline outline-4 outline-blue-500 p-4 rounded-md">
        Button with outline color
      </button>
    </div>
  );
}

Adjusting with Opacity

You can control the opacity of the outline color using Tailwind’s opacity modifiers. To use it, append the opacity to the outline color utility, e.g., outline-rose-900/50.

This is a live editor. Play around with it!
export default function OutlineWithOpacity() {
  return (
    <div className="flex items-center justify-center h-screen w-screen bg-gray-50">
      <input
        type="text"
        placeholder="Type here"
        className="outline outline-4 outline-indigo-600/60 outline-opacity-50 p-3 rounded-md"
      />
    </div>
  );
}

States and Responsiveness

Hover and Focus States

Tailwind utilities shine when applying styles conditionally, especially during state transitions like hover or focus. The hover and focus modifiers enable developers to define outline colors dynamically.

This is a live editor. Play around with it!
export default function StatefulOutline() {
  return (
    <div className="flex items-center justify-center h-screen w-screen bg-gray-50">
      <button className="p-4 rounded-md outline outline-2 outline-gray-400 hover:outline-blue-500 focus:outline-green-500 transition-all">
        Hover/Focus on Me
      </button>
    </div>
  );
}

Breakpoint Modifiers

You can also use Tailwind’s responsive design modifiers to implement outline colors with media queries. This allows the outline color to dynamically adapt based on screen sizes.

This is a live editor. Play around with it!
export default function ResponsiveOutline() {
  return (
    <div className="flex flex-col items-center justify-center h-screen w-screen bg-gray-50">
      <span className="outline outline-2 outline-red-400 sm:outline-green-500 md:outline-blue-600 lg:outline-purple-700 xl:outline-yellow-500 p-4 rounded-md">
        Resize the browser to see outline color change!
      </span>
    </div>
  );
}

Custom Outline Color

Extending the Theme

While Tailwind’s default palette is extensive, there are times when you require a custom outline color. By extending your Tailwind configuration file, you can add custom colors. Once added, use these custom colors as follows:

This is a live editor. Play around with it!
import tailwindConfig from "./tailwind.config.js";
tailwind.config = tailwindConfig;

export default function CustomColorOutline() {
  return (
    <div className="flex items-center justify-center h-screen w-screen bg-gray-50">
      <button className="outline outline-4 outline-custom-teal hover:outline-soft-pink p-4 rounded-lg">
        Custom Teal Outline
      </button>
    </div>
  );
}

Using Arbitrary Values

For absolute flexibility, Tailwind supports arbitrary values. This feature allows you to specify a custom outline color without defining it in the configuration:

This is a live editor. Play around with it!
export default function ArbitraryOutline() {
  return (
    <div className="flex flex-col items-center justify-center h-screen w-screen bg-gray-900 space-y-4 text-white">
      <div className="outline outline-2 outline-[#F0A202] p-3 rounded-md">
        Hexadecimal Outline (#F0A202)
      </div>
      <div className="outline outline-2 outline-[rgb(123,104,238)] p-3 rounded-md">
        RGB Outline (123, 104, 238)
      </div>
      <div className="outline outline-2 outline-[hsl(180,100%,30%)] p-3 rounded-md">
        HSL Outline (180, 100%, 30%)
      </div>
    </div>
  );
}

Real World Examples

Product Card Grid with Focus Outlines

This example shows a grid of product cards with custom outline colors on focus for accessibility.

This is a live editor. Play around with it!
export default function ProductGrid() {
  const products = [
    {
      id: 1,
      name: "Leather Backpack",
      price: "$129.99",
      src: "https://images.unsplash.com/photo-1548036328-c9fa89d128fa",
      alt: "Brown leather backpack"
    },
    {
      id: 2,
      name: "Wireless Headphones",
      price: "$199.99",
      src: "https://images.unsplash.com/photo-1505740420928-5e560c06d30e",
      alt: "Black wireless headphones"
    },
    {
      id: 3,
      name: "Smart Watch",
      price: "$299.99",
      src: "https://images.unsplash.com/photo-1523275335684-37898b6baf30",
      alt: "Modern smartwatch"
    },
    {
      id: 4,
      name: "Camera Lens",
      price: "$449.99",
      src: "https://images.unsplash.com/photo-1516035069371-29a1b244cc32",
      alt: "Professional camera lens"
    },
    {
      id: 5,
      name: "Mechanical Keyboard",
      price: "$159.99",
      src: "https://images.unsplash.com/photo-1511467687858-23d96c32e4ae",
      alt: "RGB mechanical keyboard"
    },
    {
      id: 6,
      name: "Gaming Mouse",
      price: "$79.99",
      src: "https://images.unsplash.com/photo-1527814050087-3793815479db",
      alt: "Gaming mouse with RGB lighting"
    }
  ];

  return (
    <div className="grid grid-cols-1 gap-6 p-8">
      {products.map((product) => (
        <div
          key={product.id}
          className="group relative rounded-lg p-4 transition-all hover:shadow-lg focus-within:outline focus-within:outline-blue-500"
          tabIndex="0"
        >
          <img
            src={product.src}
            alt={product.alt}
            className="h-48 w-full object-cover rounded-md"
          />
          <h3 className="mt-4 text-lg font-semibold">{product.name}</h3>
          <p className="text-gray-600">{product.price}</p>
        </div>
      ))}
    </div>
  );
}

This example demonstrates a navigation menu with outline colors indicating active states.

This is a live editor. Play around with it!
export default function NavigationMenu() {
  const menuItems = [
    { id: 1, name: "Dashboard", active: true },
    { id: 2, name: "Analytics", active: false },
    { id: 3, name: "Customers", active: false },
    { id: 4, name: "Inventory", active: false },
    { id: 5, name: "Settings", active: false },
    { id: 6, name: "Support", active: false }
  ];

  return (
    <nav className="bg-gray-800 p-4">
      <ul className="flex space-x-4">
        {menuItems.map((item) => (
          <li key={item.id}>
            <a
              href="#"
              className={`px-4 py-2 rounded-md text-white ${
                item.active
                  ? "outline outline-2 outline-yellow-400"
                  : "hover:outline hover:outline-2 hover:outline-gray-400"
              }`}
            >
              {item.name}
            </a>
          </li>
        ))}
      </ul>
    </nav>
  );
}

Form Input Fields with Validation Outlines

This example shows form inputs with different outline colors based on validation states.

This is a live editor. Play around with it!
export default function ContactForm() {
  const fields = [
    { id: 1, name: "name", label: "Full Name", type: "text", state: "default" },
    { id: 2, name: "email", label: "Email", type: "email", state: "error" },
    { id: 3, name: "phone", label: "Phone", type: "tel", state: "success" },
    { id: 4, name: "company", label: "Company", type: "text", state: "default" },
    { id: 5, name: "message", label: "Message", type: "textarea", state: "default" },
    { id: 6, name: "subject", label: "Subject", type: "text", state: "warning" }
  ];

  return (
    <form className="max-w-2xl mx-auto p-6 space-y-4">
      {fields.map((field) => (
        <div key={field.id} className="flex flex-col">
          <label className="mb-2 text-sm font-medium">{field.label}</label>
          {field.type === "textarea" ? (
            <textarea
              className={`p-3 rounded-lg border ${
                field.state === "error"
                  ? "outline outline-2 outline-red-500"
                  : field.state === "success"
                  ? "outline outline-2 outline-green-500"
                  : field.state === "warning"
                  ? "outline outline-2 outline-yellow-500"
                  : "focus:outline focus:outline-2 focus:outline-blue-500"
              }`}
              rows="4"
            />
          ) : (
            <input
              type={field.type}
              className={`p-3 rounded-lg border ${
                field.state === "error"
                  ? "outline outline-2 outline-red-500"
                  : field.state === "success"
                  ? "outline outline-2 outline-green-500"
                  : field.state === "warning"
                  ? "outline outline-2 outline-yellow-500"
                  : "focus:outline focus:outline-2 focus:outline-blue-500"
              }`}
            />
          )}
        </div>
      ))}
    </form>
  );
}

Team Member Cards with Interactive Outlines

This example displays team member cards with interactive outline effects.

This is a live editor. Play around with it!
export default function TeamGrid() {
  const team = [
    {
      id: 1,
      name: "Sarah Johnson",
      role: "CEO",
      src: "https://images.unsplash.com/photo-1438761681033-6461ffad8d80",
      alt: "Sarah Johnson profile picture"
    },
    {
      id: 2,
      name: "Michael Chen",
      role: "CTO",
      src: "https://images.unsplash.com/photo-1472099645785-5658abf4ff4e",
      alt: "Michael Chen profile picture"
    },
    {
      id: 3,
      name: "Emma Williams",
      role: "Design Director",
      src: "https://images.unsplash.com/photo-1494790108377-be9c29b29330",
      alt: "Emma Williams profile picture"
    },
    {
      id: 4,
      name: "David Kim",
      role: "Lead Developer",
      src: "https://images.unsplash.com/photo-1500648767791-00dcc994a43e",
      alt: "David Kim profile picture"
    },
    {
      id: 5,
      name: "Lisa Martinez",
      role: "Product Manager",
      src: "https://images.unsplash.com/photo-1534528741775-53994a69daeb",
      alt: "Lisa Martinez profile picture"
    },
    {
      id: 6,
      name: "James Wilson",
      role: "Marketing Head",
      src: "https://images.unsplash.com/photo-1519345182560-3f2917c472ef",
      alt: "James Wilson profile picture"
    }
  ];

  return (
    <div className="grid grid-cols-1 gap-8 p-10">
      {team.map((member) => (
        <div
          key={member.id}
          className="group relative rounded-xl p-6 transition-all hover:outline hover:outline-2 hover:outline-purple-400 focus-within:outline-purple-600"
        >
          <img
            src={member.src}
            alt={member.alt}
            className="w-32 h-32 rounded-full mx-auto mb-4 object-cover"
          />
          <h3 className="text-xl font-bold text-center">{member.name}</h3>
          <p className="text-gray-600 text-center">{member.role}</p>
        </div>
      ))}
    </div>
  );
}

Feature Cards with Hover Outlines

This example shows feature cards with outline colors on hover.

This is a live editor. Play around with it!
export default function FeatureGrid() {
  const features = [
    {
      id: 1,
      title: "Cloud Storage",
      description: "Secure and scalable storage solutions",
      icon: "https://images.unsplash.com/photo-1516156008625-3a9d6067fab5",
      color: "blue"
    },
    {
      id: 2,
      title: "Analytics",
      description: "Advanced data insights and reporting",
      icon: "https://images.unsplash.com/photo-1551288049-bebda4e38f71",
      color: "green"
    },
    {
      id: 3,
      title: "Security",
      description: "Enterprise-grade protection",
      icon: "https://images.unsplash.com/photo-1562813733-b31f71025d54",
      color: "red"
    },
    {
      id: 4,
      title: "Integration",
      description: "Seamless third-party connections",
      icon: "https://images.unsplash.com/photo-1451187580459-43490279c0fa",
      color: "purple"
    },
    {
      id: 5,
      title: "Automation",
      description: "Streamlined workflow processes",
      icon: "https://images.unsplash.com/photo-1518432031352-d6fc5c10da5a",
      color: "orange"
    },
    {
      id: 6,
      title: "Support",
      description: "24/7 dedicated customer service",
      icon: "https://images.unsplash.com/photo-1549923746-c502d488b3ea",
      color: "teal"
    }
  ];

  return (
    <div className="grid grid-cols-1 gap-6 p-8">
      {features.map((feature) => (
        <div
          key={feature.id}
          className={`p-6 rounded-lg transition-all hover:outline hover:outline-2 hover:outline-${feature.color}-500`}
        >
          <img
            src={feature.icon}
            alt=""
            className="w-16 h-16 object-cover rounded-full mb-4"
          />
          <h3 className="text-xl font-bold mb-2">{feature.title}</h3>
          <p className="text-gray-600">{feature.description}</p>
        </div>
      ))}
    </div>
  );
}

Customization Examples

Custom Outline Color for Interactive Form Elements

This example demonstrates how to create a custom outline color scheme for form elements with enhanced focus states.

This is a live editor. Play around with it!
// App.js
import tailwindConfig from "./tailwind.config.js";
tailwind.config = tailwindConfig;

export default function CustomFormOutline() {
  return (
    <div className="min-h-screen bg-gray-50 p-8">
      <form className="max-w-md mx-auto space-y-6 bg-white p-8 rounded-xl shadow-lg">
        <div className="space-y-2">
          <label className="block text-gray-700 font-medium">
            Username
          </label>
          <input
            type="text"
            className="w-full px-4 py-2 border rounded-lg focus:outline focus:outline-custom focus:outline-2 transition-all"
            placeholder="Enter username"
          />
        </div>
        <div className="space-y-2">
          <label className="block text-gray-700 font-medium">
            Password
          </label>
          <input
            type="password"
            className="w-full px-4 py-2 border rounded-lg focus:outline focus:outline-custom focus:outline-2 transition-all"
            placeholder="Enter password"
          />
        </div>
      </form>
    </div>
  )
}

Interactive Card with Custom Outline Hover Effect

This example shows how to implement a custom outline color for interactive cards with hover states.

This is a live editor. Play around with it!
// App.js
  import tailwindConfig from "./tailwind.config.js";
tailwind.config = tailwindConfig;

export default function FeatureCard() {
  return (
    <div className="min-h-screen bg-gray-100 p-8">
      <div className="max-w-4xl mx-auto grid grid-cols-1 md:grid-cols-2 gap-6">
        <div className="group bg-white p-6 rounded-xl hover:outline hover:outline-2 hover:outline-feature transition-all duration-300">
          <img
            src="https://images.unsplash.com/photo-1498050108023-c5249f4df085"
            alt="Feature"
            className="w-full h-48 object-cover rounded-lg mb-4"
          />
          <h3 className="text-xl font-bold text-gray-800 mb-2">
            Development Tools
          </h3>
          <p className="text-gray-600">
            Enhance your workflow with our powerful development tools and features.
          </p>
        </div>
        <div className="group bg-white p-6 rounded-xl hover:outline hover:outline-2 hover:outline-feature transition-all duration-300">
          <img
            src="https://images.unsplash.com/photo-1461749280684-dccba630e2f6"
            alt="Feature"
            className="w-full h-48 object-cover rounded-lg mb-4"
          />
          <h3 className="text-xl font-bold text-gray-800 mb-2">
            Cloud Solutions
          </h3>
          <p className="text-gray-600">
            Scale your applications with our robust cloud infrastructure.
          </p>
        </div>
      </div>
    </div>
  )
}

Event Schedule Timeline with Progress Outline

This example demonstrates how to implement a custom outline color for interactive cards with focus states.

This is a live editor. Play around with it!
// App.js
import tailwindConfig from "./tailwind.config.js";
tailwind.config = tailwindConfig;

import React, { useState } from 'react';

const EventTimeline = () => {
  const [selectedEvent, setSelectedEvent] = useState(null);

  const events = [
    {
      id: 1,
      time: '09:00 AM',
      title: 'Opening Keynote',
      location: 'Main Hall',
      status: 'past'
    },
    {
      id: 2,
      time: '10:30 AM',
      title: 'Future of AI Panel',
      location: 'Innovation Room',
      status: 'past'
    },
    {
      id: 3,
      time: '01:00 PM',
      title: 'Networking Lunch',
      location: 'Garden Area',
      status: 'current'
    },
    {
      id: 4,
      time: '02:30 PM',
      title: 'Workshop Sessions',
      location: 'Break-out Rooms',
      status: 'upcoming'
    }
  ];

  const getStatusStyles = (status) => {
    switch(status) {
      case 'past':
        return 'outline-past';
      case 'current':
        return 'outline-current';
      case 'upcoming':
        return 'outline-upcoming';
      default:
        return 'outline-gray-200';
    }
  };

  return (
    <div className="w-full max-w-[450px] bg-white p-4">
      <div className="space-y-4">
        {events.map((event) => (
          <div
            key={event.id}
            className={`rounded-lg bg-gray-50 p-4 cursor-pointer transition-all
              ${selectedEvent === event.id ? `outline outline-2 ${getStatusStyles(event.status)}` : ''}
            `}
            onClick={() => setSelectedEvent(event.id === selectedEvent ? null : event.id)}
          >
            <h3 className="text-xl font-semibold mb-2">{event.title}</h3>
            <div className="flex items-center text-gray-600 mb-2">
              <span className="font-mono">{event.time}</span>
              <span className="mx-2"></span>
              <div className="flex items-center">
                <svg 
                  className="w-4 h-4 mr-1" 
                  fill="none" 
                  stroke="currentColor" 
                  viewBox="0 0 24 24"
                >
                  <path 
                    strokeLinecap="round" 
                    strokeLinejoin="round" 
                    strokeWidth={2} 
                    d="M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z" 
                  />
                  <path 
                    strokeLinecap="round" 
                    strokeLinejoin="round" 
                    strokeWidth={2} 
                    d="M15 11a3 3 0 11-6 0 3 3 0 016 0z" 
                  />
                </svg>
                {event.location}
              </div>
            </div>
            {selectedEvent === event.id && (
              <div className="flex justify-between mt-4">
                <button className="px-4 py-2 bg-white rounded-lg shadow hover:shadow-md transition-shadow">
                  Add to Calendar
                </button>
                <button className="px-4 py-2 bg-white rounded-lg shadow hover:shadow-md transition-shadow">
                  Set Reminder
                </button>
              </div>
            )}
          </div>
        ))}
      </div>
    </div>
  );
};

export default EventTimeline;

Best Practices

Maintain Design Consistency

Consistency is crucial in creating professional interfaces. To achieve uniformity using Tailwind CSS outline color utilities, ensure that all outline styles, such as thickness (outline-*), colors (outline-color-*), and opacity levels (outline-opacity-*), align with your brand guidelines and project color palette.

For instance, if your project utilizes a specific blue for primary actions, ensure all focus states and hover outlines mirror this shade for consistency. By standardizing utilities, designers can avoid style fragmentation and improve the understandability of components across teams.

Leverage Utility Combinations

When working with Outline Color, consider pairing it with complementary utilities such as outline-offset, outline-width, and rounded to create polished and visually appealing UI components. For example, using outline-red-500, outline-offset-2, and rounded-md together can create a prominent focus state for form inputs that feels modern and accessible.

Use state modifiers to enhance interactivity. For example, you can use hover:outline-blue-600 or focus:outline-green-500 to change the outline color dynamically based on user actions. This adds depth to your interface and improves usability by providing clear feedback to users.

Accessibility Considerations

Enhance Readability and Navigability

Outline colors can significantly impact how easily users can read and navigate content. By applying a distinct outline to critical interactive elements, you help users quickly identify which parts of the page are actionable.

This visual indicator is especially important for individuals who rely on clear, differentiated states to move through an interface. In addition, consider how the outline color contrasts with the background or text. Dark outlines on dark backgrounds can reduce visibility, so lighter or more contrasting shades might be necessary.

Effective outlines should align with established accessibility guidelines, which emphasize clarity and a consistent user experience.

Ensure Keyboard Accessibility

Keyboard accessibility ensures that users who navigate primarily via keyboard can move through an interface with ease. Applying an outline color to focused elements is one of the most straightforward ways to make keyboard navigation clear.

When users press the Tab key to jump between interactive components—such as links, buttons, or form fields—a distinct outline color highlights their current position.

Check the below example to know how outline color can be used with the focus modifier to build keyboard-interactive UIs:

This is a live editor. Play around with it!
export default function KeyboardNavigationMenu() {
  return (
    <nav className="bg-gray-800 p-4">
      <ul className="flex space-x-4">
        <li>
          <a
            href="#"
            className="text-white px-4 py-2 rounded-md focus:outline focus:outline-green-500 focus:outline-2"
          >
            Home
          </a>
        </li>
        <li>
          <a
            href="#"
            className="text-white px-4 py-2 rounded-md focus:outline focus:outline-green-500 focus:outline-2"
          >
            Services
          </a>
        </li>
        <li>
          <a
            href="#"
            className="text-white px-4 py-2 rounded-md focus:outline focus:outline-green-500 focus:outline-2"
          >
            Contact
          </a>
        </li>
      </ul>
    </nav>
  );
}

Debugging Common Issues

Resolve Common Problems

Issues such as outline not appearing at the expected offset, or failing to show up altogether often arise. The key to addressing these issues lies in a systematic troubleshooting approach.

First, confirm that the element in question is truly focusable or interactive. If an outline is supposed to show on focus, but the element can’t receive focus in the DOM (e.g., a div without a tabindex), no outline will appear. Add an appropriate attribute or change the element to a button or link if it’s meant to be interactive.

Second, check for conflicting classes. For example, if multiple border utilities are applied (like border-2 border-blue-500 alongside an outline class), the combined effect could appear jarring or overshadow the outline.

Third, verify that your color classes are spelled correctly. Typos in utility classes—like outlne-blue-500 instead of outline-blue-500 can be deceptively easy to miss.

Systematically removing these small mistakes from your code can save hours of debugging frustration.

Isolate Utility Conflicts

Tailwind CSS is powerful, but with so many utility classes at your disposal, it’s possible to inadvertently introduce conflicts.

For example, you might apply both outline-gray-500 and outline-blue-500 to the same element, or combine an outline with a ring utility like ring-red-500, creating unexpected visual outcomes. Identifying and resolving these conflicts is crucial for maintaining a clean and predictable design system.

Begin by systematically reviewing each utility class attached to the problematic element. If two or more classes compete—for example, both set the outline color—you’ll need to decide which is the intended style. Remove any redundant or extraneous classes.