CSS Named Colors Browser

All 148 CSS named colors - searchable, sortable, filterable. Click any color to copy hex, RGB, or HSL.

Last reviewed: April 2026

New to this tool? Click here for instructions

148 colors

The CSS Named Colors Browser is a complete reference for every keyword color in the CSS Color Module Level 4 specification — 148 names spanning aliceblue through yellowgreen, each with its hex, RGB, HSL, and HSV equivalents and instant copy-to-clipboard for every value.

What This Tool Does

This tool is a searchable, sortable, and filterable reference for all 148 CSS named colors recognized by every modern browser. Every entry includes its keyword (the CSS-valid name), its hexadecimal triplet (e.g. #FF6347), its rgb() functional notation (e.g. rgb(255, 99, 71)), its hsl() equivalent (e.g. hsl(9, 100%, 64%)), and its HSV reading for designers who think in saturation-value terms rather than lightness. Clicking any swatch copies the hex code to your clipboard and opens a detail panel where you can copy the RGB or HSL string instead, useful when a chart library or design token system expects one format and not another.

The browser is purely a reference — no color picker, no palette generator, no gradient builder. That single-purpose scope is intentional. When you need to know whether papayawhip is a real name or remember which exact yellow palegoldenrod resolves to, the answer should be one search away rather than buried inside a multi-pane design app. Every calculation runs client-side from a static lookup table; nothing you type is sent anywhere.

Sorting controls let you re-order the grid by alphabetical name, by hue angle (red → orange → yellow → green → cyan → blue → purple), by perceived lightness, or by saturation. Family filters narrow the grid to a single hue group at a time — reds, pinks, oranges, yellows, greens, cyans, blues, purples, browns, whites, or grays/blacks — which is the fastest way to compare visually similar names like tomato, coral, and salmon side by side. The grid renders the entire palette without pagination because 148 swatches fit comfortably on a single scroll on any modern device.

How to Use It

Start by typing into the search box at the top. The matcher checks the keyword name, the hex code, and the RGB string, so red, #ff0000, and 255,0,0 all find the same swatch. Partial matches work too: typing dark lists every name beginning with that prefix, typing green lists every name containing it (darkgreen, lightgreen, seagreen, limegreen, etc.). The search debounces input by 150 milliseconds so the grid never flickers between keystrokes.

Click a swatch to copy its hex code to your clipboard immediately and open the detail panel beneath the search bar. The detail panel shows the name, hex, RGB, and HSL values each on their own row with an individual Copy button, so you can grab rgb(255, 99, 71) for a Chart.js dataset without first stripping the # off a hex code. A small toast notification confirms the copy. Clicking another swatch replaces the detail; clicking the same swatch a second time keeps it open.

Use the sort chips to re-order the grid. By Name is alphabetical and is the default — useful when you remember a name and want to confirm its hex code. By Hue sorts by HSL hue angle, which groups colors into rainbow order and is the right choice when you're picking a palette by warmth or coolness. By Lightness runs from black to white and surfaces the lightest and darkest variants of each hue at opposite ends. By Saturation puts the most vivid colors first and pushes desaturated grays and beiges to the bottom — helpful when you need a punchy accent color and don't want to be distracted by muted candidates.

The family filter chips below the sort row narrow the visible set to a single hue family. Combining filter + sort is powerful: filter to Greens and sort By Lightness to see the full green ramp from darkgreen at the bottom to honeydew at the top. Every swatch tile shows the name and hex code at a glance, and the swatch block above renders the color against your current theme background so you can immediately see how each name reads in light or dark mode.

Worked Example: tomato vs coral vs salmon

Few decisions in CSS naming demonstrate the unreliability of named colors as crisply as the three "warm reddish-orange" keywords: tomato, coral, and salmon. All three sound like they should describe the same color. They don't.

tomato resolves to #FF6347, rgb(255, 99, 71), hsl(9, 100%, 64%) — a saturated, slightly orange-leaning red. The name comes from the X11 color database and was popularized in early Mac OS UI tutorials, where it served as a recognizable accent color for "warning" or "highlight" states. It is the color that appears in countless old "Hello World" CSS tutorials precisely because the keyword is memorable. coral resolves to #FF7F50, rgb(255, 127, 80), hsl(16, 100%, 66%) — lighter and noticeably more orange than tomato, with the hue shifted seven degrees toward yellow. salmon resolves to #FA8072, rgb(250, 128, 114), hsl(6, 93%, 71%) — lighter still, slightly desaturated, and the most pink-shifted of the three.

Visually, on a white background, the three are easy to distinguish only when placed side by side. On their own — especially under reduced contrast, color-blind simulation, or low ambient light — any of them could be mistaken for any other. This is exactly why named colors fail as a branding system: a designer who says "use tomato as the accent" has no guarantee a different team member won't substitute coral or salmon and produce a visually inconsistent product. The hex value #FF6347 is unambiguous; the name "tomato" is not.

The lesson generalizes: there are at least eight other clusters of named colors where two or more keywords describe colors close enough to be confused at first glance — the gray family, the blue family (navy, darkblue, midnightblue), the purple family (indigo, rebeccapurple, purple), the green family, and so on. Use named colors when the exact shade does not matter. Use hex or HSL when it does.

Common Use Cases

Rapid Prototyping

The most common legitimate use for named colors is throwaway styling. When you're sketching a layout and want a distinct color on every section to keep them mentally separate, typing background: tomato; is faster than opening a color picker, copying a hex code, and remembering which hex went where. Names are mnemonics. papayawhip, peachpuff, and mistyrose evoke their colors clearly enough that you can read your own prototype CSS without referring to a swatch.

Chart and Data-Viz Libraries

Charting libraries including D3, Chart.js, ECharts, and Plotly accept named colors interchangeably with hex codes in any color-accepting property. Setting borderColor: "steelblue" on a Chart.js dataset is shorter and more readable than "#4682B4" — and when you're prototyping a dashboard, the small readability win compounds across dozens of series. Production dashboards eventually migrate to design tokens or custom palettes, but the prototyping phase benefits from name-as-color shorthand.

Default Placeholder Styling

Form placeholders, disabled-state backgrounds, "no data" empty states, and other low-priority decorative surfaces are perfect targets for named colors. lightgray for a divider, whitesmoke for an alternating row background, silver for a disabled button border — these are values that will never be brand-critical and will never need to scale. Naming them by keyword makes the CSS self-documenting in a way hex codes can't match.

Fallback Colors When a Theme Fails

A robust CSS theme uses custom properties: color: var(--text-primary, black);. The fallback after the comma fires if the variable is undefined. Named colors make excellent fallbacks because they are guaranteed to be valid in every browser since the late 1990s and they communicate intent (black, white, red) more clearly than arbitrary hex values would. When a custom theme bundle fails to load and the fallback fires, an obvious named color is a clearer "something broke" signal than a near-match hex.

Educational and Tutorial Material

CSS tutorials — both online courses and printed books — have always leaned on named colors because they're memorable and demonstrate property behavior without distracting students with hex syntax. The MDN documentation pages for color, background-color, and border consistently use names like red, blue, and green in their examples for exactly this reason. When you're learning, the cognitive load of also parsing hex codes adds nothing to comprehension.

Edge Cases and Quirks

Named colors carry several well-known traps that catch even experienced developers off guard.

Color aliases: aqua and cyan are identical. Both resolve to #00FFFF. The same is true for fuchsia and magenta (both #FF00FF) — one name was specified by HTML 4 and the other was added later from the X11 palette. The browser accepts either interchangeably, so a stylesheet mixing both for the same intent is technically valid but stylistically chaotic.

gray and grey are both valid. CSS recognizes both spellings as the same color. So does darkgray/darkgrey, lightgray/lightgrey, dimgray/dimgrey, slategray/slategrey, and so on. Pick one spelling and stick with it inside a single codebase — the linter won't flag the inconsistency, but human reviewers will.

darkgray is lighter than gray. This is one of CSS's most-cited bugs. gray is #808080 (50% gray). darkgray is #A9A9A9 (66% gray, noticeably lighter). The reason is historical: the X11 color palette from the 1980s defined them this way, and when CSS 2.1 adopted the X11 names in 1998 the inversion came along. The CSS spec authors could have fixed it, but doing so would break every stylesheet that visually expects the existing values. So the bug is now a permanent feature.

transparent is a named color. It resolves to rgba(0, 0, 0, 0) — black with zero alpha — and is treated as a color value in every property that accepts a color. This matters in transitions: animating from red to transparent passes through translucent red rather than fading to white, because the underlying RGB stays at red until alpha hits zero. For a fade-to-white transition you need rgba(255,255,255,0) as the endpoint.

currentColor is a keyword, not a color. It refers to the computed value of the color property on the element at the time it is read, and resolves dynamically. border-color: currentColor; means "the border is always the same color as the text," even when the text color changes via inheritance or a class swap. currentColor is accepted anywhere a color value is allowed, but it isn't itself a color — you can't use it in a gradient stop and expect a fixed swatch.

System colors are deprecated. CSS 2.1 defined a set of system color keywords like MenuText, ButtonFace, WindowText, and InfoBackground, intended to match the user's operating system theme. They were deprecated in CSS Color 3 because the values varied unpredictably between operating systems and browser versions and could not be relied on for consistent styling. Modern browsers still accept them but resolve them to fixed fallbacks. Avoid them in new code.

Browser quirks for rebeccapurple. Safari shipped support within days of the name being announced in June 2014. Chrome and Firefox followed by October 2014. Internet Explorer 11 never recognized the keyword — sites that needed IE 11 support had to fall back to the literal hex #663399. Now that IE 11 is end-of-life, rebeccapurple is safe everywhere.

Case insensitivity. Named colors are case-insensitive in CSS. Tomato, TOMATO, tomato, and ToMaTo all resolve identically. By convention, write them lowercase.

Behind the Scenes: History of CSS Named Colors

X11 Roots (1980s)

The named color palette in CSS is not original to CSS. It was inherited from the X11 color database, which was developed at MIT in the mid-1980s as part of the X Window System — the original Unix graphical environment. Engineers needed an easy way to refer to common colors from configuration files and shell scripts, and the X11 team built a text file called rgb.txt mapping plain-English names like tomato, cornflowerblue, and papayawhip to their RGB triplets. Many of the names were chosen for their evocative quality rather than any standardization process — papayawhip, for example, came from one developer's pantone-style approach to naming. The file shipped on every X11 system and quickly became a de facto standard.

HTML 4 (1997)

Web standards arrived next. HTML 4, finalized in 1997, defined exactly 16 named colors: black, silver, gray, white, maroon, red, purple, fuchsia, green, lime, olive, yellow, navy, blue, teal, and aqua. These were chosen to match the VGA palette common at the time and were the only named colors guaranteed across all HTML 4 browsers. Everything else had to be a hex code.

SVG 1.0 and CSS 2.1 (1998–2001)

When the W3C published SVG 1.0 in 2001, it adopted the X11 color palette wholesale — all 140-odd names — for use inside SVG documents. CSS 2.1 (1998 working draft, finalized in 2011) imported the same X11 palette as recognized values for the color property, expanding the 16-color HTML 4 set into the much richer palette we have today. This is where the historical bugs, like darkgray being lighter than gray, became permanent fixtures — the X11 quirks came along with the colors.

CSS Color Module Level 3 (2018)

CSS Color 3, which formally became a W3C Recommendation in 2018, locked the X11-plus-HTML-4 set at 147 named colors. It also added the rgba() and hsla() functional notations for the first time, recognizing that named colors alone were not sufficient for modern design.

CSS Color Module Level 4 and rebeccapurple (2014)

The 148th named color was added under unusual circumstances. In June 2014, Eric Meyer — one of the founding voices of modern CSS and the author of CSS: The Definitive Guide — lost his six-year-old daughter Rebecca to brain cancer. Rebecca had recently declared, on her birthday, that she preferred to be called "Becca" instead. Her favorite color was purple. In the days after her death, the CSS Working Group voted unanimously to add a new named color, rebeccapurple, with the hex value #663399 — chosen because Eric had been using #663399 as a personal-site accent color for over a decade. It is the only named color in the CSS specification added for purely personal, non-technical reasons, and it stands as a permanent memorial.

Comparison: Named Colors vs Hex vs rgb() vs hsl() vs oklch()

CSS gives you at least five distinct ways to specify the same color. Each has a sweet spot. Picking the right notation matters more than novice CSS users realize, because the wrong choice makes maintenance painful months or years later.

Named colors are the most readable and the least precise. They are excellent for prototypes, fallbacks, tutorials, and any context where the exact shade does not matter. They are unreliable for branding because similar-sounding names (tomato vs coral vs salmon) produce visibly different colors. There are only 148 of them — nothing in between.

Hex codes (#FF6347) are the workhorses of brand and design-system color. They are precise, universally supported, easy to copy from a Sketch or Figma file, and unambiguous in code review. Their weakness is that they're opaque — you cannot tell from #A1B2C3 alone whether it's bluish or grayish without looking at it. Use hex when you have a brand palette to enforce and a designer providing exact values.

rgb() and rgba() functional notations expose the same color values that hex encodes, but in decimal and with optional alpha. rgb(255, 99, 71) reads more clearly than #FF6347 if you're going to manipulate components programmatically in JavaScript, and rgba(255, 99, 71, 0.5) handles transparency without dragging in a separate opacity property. Use RGB when you need alpha or when you're computing values dynamically.

hsl() and hsla() express colors in hue/saturation/lightness terms, which maps far better to how humans actually think about color. hsl(9, 100%, 64%) tells you immediately that this is a warm hue (red end of the spectrum), fully saturated, and slightly above middle brightness. Adjusting "make it 10% lighter" or "make it less saturated" becomes a one-number change. Use HSL for design tokens, theme systems, and any context where colors will be programmatically shifted along one axis at a time.

oklch() is the modern replacement for HSL in CSS Color Module Level 4. It uses the OKLab perceptual color space, which means equal numeric changes in lightness or chroma produce equal perceptual changes — unlike HSL, where a 10% lightness shift can look much more dramatic in some hues than others. oklch(70% 0.18 30) is the right notation when accessibility and perceptual uniformity matter: WCAG contrast calculations, color-blind-safe palettes, and dark-mode generation all benefit from oklch's predictable behavior. As of 2026, oklch has full support in all evergreen browsers (Chrome 111+, Firefox 113+, Safari 15.4+) and should be the default for new design systems.

The decision tree: named colors for prototypes; hex for brand palettes; rgb for JavaScript-computed colors; hsl for human-tunable design tokens; oklch for accessibility-driven systems and new code. There is no single right answer — pick the notation that matches the constraint you care most about.

Frequently Asked Questions

It is a historical bug preserved for backward compatibility. The X11 color palette defined darkgray (#A9A9A9, 66% gray) lighter than gray (#808080, 50% gray) in the 1980s, and when CSS 2.1 adopted the X11 names in 1998 it inherited the inconsistency. Browsers cannot fix it without breaking decades of existing stylesheets, so the inversion remains permanently in the spec. If you want a darker gray than gray, use dimgray (#696969) instead.

Yes. Both aqua and cyan resolve to the exact same color value, #00FFFF or rgb(0, 255, 255). aqua was one of the 16 original HTML 4 named colors; cyan was added later as a synonym matching the X11 palette. They are fully interchangeable in every modern browser. The same is true for fuchsia and magenta — both resolve to #FF00FF.

There are 148 named colors in the current CSS Color Module Level 4 specification. This counts each name as distinct, including aliases like gray/grey and aqua/cyan. If you collapse the aliases, the palette covers roughly 140 unique color values. HTML 4 originally defined just 16 named colors; the rest were imported from the X11 color database via SVG 1.0 and CSS 2.1. The most recent addition is rebeccapurple, which brought the total from 147 to 148 in 2014.

rebeccapurple (#663399) was added to CSS Color Module Level 4 in 2014 in tribute to Rebecca Meyer, the six-year-old daughter of web standards advocate Eric Meyer, who died of brain cancer in June 2014. Purple was her favorite color, and Eric had used #663399 as a personal-site accent for years. The CSS Working Group voted unanimously to add the name as a permanent memorial. It is the only color in the spec added for personal rather than technical reasons.

Use them for prototypes, debug outlines, fallbacks, and placeholder styles where exact color is unimportant. Avoid them in production design systems and brand-critical interfaces. Names like tomato and coral are visually similar but distinct, and the historical inconsistencies (e.g. darkgray being lighter than gray) make them unreliable for accessibility-driven design. Hex codes, HSL values, or CSS custom properties give you precise, auditable values that are easier to maintain at scale.

currentColor is a keyword that resolves to the computed value of the element's color property at the moment it is read. inherit is a value that copies the parent element's computed value of whatever property it is applied to. currentColor is dynamic and can be used as a value inside other properties (border-color: currentColor;) to keep borders in sync with text color even when text color changes. inherit only copies from the immediate parent and is property-specific.

Most named color pairs fail WCAG 2.1 AA contrast requirements (4.5:1 for body text, 3:1 for large text) when combined naively. Yellow on white, lightgreen on white, and any pastel-on-pastel pairing fails. Black on white passes; navy or darkred on white passes; almost everything in between requires testing. Run every named-color pair through a dedicated contrast checker like the Color Contrast Checker before shipping, or switch to oklch() notation where contrast can be computed predictably.

Safari (WebKit) was first, shipping support within days of Eric Meyer's announcement in June 2014. Chrome (Blink) followed shortly after, and Firefox (Gecko) added support in version 33 in October 2014. Internet Explorer 11 never supported it; Edge added it from its first release. Modern evergreen browsers all recognize the keyword without issue, so the only reason to use the literal hex #663399 today is if you need to support a legacy IE 11 environment.

Quick reference

CSS Named Colors Browser
Color Name Hex Code RGB Values Common Use
Black #000000 rgb(0,0,0) Text on light backgrounds
White #FFFFFF rgb(255,255,255) Text on dark backgrounds
Red #FF0000 rgb(255,0,0) Alerts, errors, highlights
Blue #0000FF rgb(0,0,255) Links, headings, navigation
Green #00FF00 rgb(0,255,0) Success indicators, eco themes
Yellow #FFFF00 rgb(255,255,0) Warnings, highlights, accents