About
Careers
FAQs
Diplomas & Certificates
Awards
Gallery
Brand Design
Product Designs
WordPress Website
SEO
Hosting & Security
Website Care & Rescue
Launch
Scale
Transform
Case Studies
Portfolio
Client Stories
Curated Portfolio
Our Process
Insights
Free tool
Use this free color contrast checker to test any two colors against the WCAG rules, straight in your browser. Put in a text color and a background color and the ratio appears as you type, with a pass or fail for each of the five levels that matter. Hex, rgb(), hsl() and plain CSS names such as tomato all work, and a color with transparency is composited over its background before it is measured, because that is what a reader actually sees.
If a pair fails you get the nearest color that passes, rather than a cross and no way forward. Nothing is uploaded: there are no files here at all, only color values, and they never leave the tab. Setting a whole type scale instead? Use the font clamp calculator.
Accepts hex, rgb, rgba, hsl, hsla or a CSS color name.
Body text at 16 pixels. This is the size most of a page is set in, and it is the size the 4.5 to 1 rule is written for. Read it, rather than trusting the number on its own.
Small print at 13 pixels, which is where a marginal pair stops being readable first.
Each step is mixed toward white or black in sRGB, which is what a design tool means by a tint and a shade. The number under each one is its ratio against the current background, so you can see where the pair starts passing.
Five steps, no account and nothing to install.
Built for our own work, free for yours. No sign-up on any of them.
Usually because something has to be readable by everyone, and somebody has asked for proof.
A palette that reads beautifully in a presentation can fail outright as body text. The ratio is the same number for everyone, so it turns a matter of taste into a matter of fact.
An audit hands you the pairs that failed and the ratio each one needs. This hands back the nearest color that passes, so the fix keeps the hue instead of throwing the palette out.
Put the section background in, then walk the tints and shades of your text color until the number under a swatch clears the bar. No guessing, and no second tool.
Borders, icons and form outlines are held to 3 to 1 rather than 4.5, which is why a control that looks faint can still be compliant and one that looks fine can still fail.
Text on a scrim is measured on what is actually painted, not on the color you typed. Enter the overlay with its alpha and it is composited over the background first.
Far cheaper than discovering at launch that the secondary color cannot carry text. Check the pairs while the palette is still a decision rather than a dependency.
What the levels mean, what happens to your colors, and why the number can differ by 0.01.
No. The whole tool runs in your own tab and there is nothing to upload: a color is a few characters and the arithmetic happens on your device. The page does send three counters, which are how many checks were run, how many values were copied, and one per visit. Those are numbers only and carry nothing about your colors or your palette.
WCAG means 18pt, which is 24px, or 14pt bold, which is about 18.66px. At or above that size a pair only needs 3 to 1 instead of 4.5 to 1, and below it 4.5 to 1 applies. This is why a headline can pass in a color that the body text underneath it cannot use.
AA is the level almost every brief, procurement requirement and audit means, and it is what the accessibility regulations in most countries are written against. AAA at 7 to 1 is a genuinely high bar that rules out a lot of otherwise usable color, and it is normally treated as an aspiration for body text rather than a requirement. If nobody has told you which one they want, they mean AA.
Both are computing the same number and the difference is rounding. A raw ratio of 4.4951 rounds up to 4.50 but is genuinely below the 4.5 threshold, so a tool that rounds before it compares will show 4.50 next to a pass for a pair that actually fails. This one decides the pass or fail on the full unrounded value and rounds the displayed number down, so what you see can never claim more contrast than there is. On any pair that is comfortably clear of a threshold the two tools agree exactly.
Yes, and it is handled properly. rgba(0, 0, 0, 0.5) is not black: what a reader sees is that black mixed with whatever is behind it. The tool composites the text color over the background color, and the background over white, before it measures anything. Skipping that step overstates the contrast, which is the dangerous direction to be wrong in.
Two separate things. One is large text, as above. The other is non-text contrast: the visible boundary of a button, a form field outline, a focus ring, an icon that carries meaning, and the parts of a chart you need to tell apart. Those are held to 3 to 1 against whatever sits next to them. It is the rule people forget, because it is easy to check the words on a button and never check the button.
No. It checks one pair of colors at a time, which is deliberate: this is the tool for while you are choosing colors, or fixing a specific finding. To sweep an existing page for every pair on it you want a browser extension or an automated audit, and then you come back here to work out what to change each failure to.
Hex in three, four, six or eight digits, so #abc, #abcd, #1A2B3C and #11223344 all work. rgb() and rgba() in comma or space form, with percentages if you prefer. hsl() and hsla() the same way. And the CSS color names. Anything it cannot read is flagged rather than quietly treated as black, so a typo can never show you a confident number for a color you did not mean.
Free tools are a small part of what we do. The rest is websites and digital products for businesses serious about growth, whether you are launching, scaling or transforming.