Link Color in HTML Email
Underline plus hex. No pseudo-classes in the inbox.
Accessibility audit finding 4.1.1 landed the day before launch: link identified only by color. The email template used a beautiful brand blue for URLs embedded in body copy with no underline, because the web team’s link stylesheet said text-decoration none with an underline on hover. In a browser, that works. In an inbox, hover does not exist the way developers expect, focus-visible never arrived, and visited is stripped or homogenized by half the clients in your deployment matrix. The auditor was correct. The links failed WCAG 1.4.1 in email context even though the same hex passed on the marketing site.
Inline link styling is the entire story for HTML email. You get one static presentation per link tag. Make it recognizable without a mouse.
What inbox CSS supports and why pseudo-classes fail
The MDN link pseudo-class and its cousins visited, hover, and active define interactive states on the web. Can I email’s pseudo-class index paints a bleaker picture. Support is fragmented. Hover is irrelevant on touch-first clients. Many webmail interfaces rewrite anchor styles for their own chrome. A style block rule like content a:hover color change might apply in Apple Mail and die silently in Gmail web.
Do not depend on hover for affordance or information. Mobile opens dominate most campaigns. Hover is a desktop webmail nicety at best. Do not depend on visited to communicate you already clicked this. Unvisited styling must stand alone. Do not depend on focus-visible for keyboard users in email. Client support is effectively zero for message HTML. Put color and text-decoration inline on every anchor in body copy.
<a href="https://example.com/receipt/8842"
style="color:#1d4ed8;text-decoration:underline;">
View your March receipt
</a>
Color plus underline satisfies auditors who apply WCAG 1.4.1 strictly. Information conveyed by color, meaning this span is a link, is also available through another visual cue, the underline. Hue-only links fail even when designers argue the blue is obvious enough.
Navigation bars on websites get away with color-only links because landmark context and layout signal clickability. Paragraphs in email do not. A sentence that reads update your preferences or cancel anytime needs both targets underlined if they are links, or rewritten so each link is a distinct phrase.
<p style="color:#334155;font-size:16px;line-height:24px;">
Your trial ends Friday.
<a href="https://example.com/upgrade"
style="color:#1d4ed8;text-decoration:underline;">
Upgrade now
</a>
or
<a href="https://example.com/settings/billing"
style="color:#1d4ed8;text-decoration:underline;">
manage billing
</a>.
</p>
Footer and legal links often use smaller size but the same rule. Some brands use underline on body links only and omit it in footers where link density is high. That is a conscious risk trade. Document it in your accessibility statement if legal approves. Default recommendation: underline everywhere in message body and footer.
Descriptive text, hex choice, and button-shaped links
When you cannot style hover or focus to add context, the link phrase carries more weight. Click here and read more fail screen reader users who tab through links out of sentence context. Email clients expose link lists in accessibility APIs the same way browsers do. Weak patterns put the verb in surrounding copy and the link on click here. Strong patterns make the link text self-describing: reset your password as the anchor phrase with expiry context in adjacent copy.
Link color must clear contrast against its background and remain distinguishable from surrounding body text. A link hex identical to body text with only underline satisfies 1.4.1, but users expect links to look link-like. The usual compromise is brand accent on body on white background. Check the triad in a contrast tool before lock.
| Element | Hex | On background | Notes |
|---|---|---|---|
| Body | #334155 |
#ffffff |
Base copy |
| Link | #1d4ed8 |
#ffffff |
6.4:1 vs white—passes |
| Link | #1d4ed8 |
#f1f5f9 |
Slightly lower; verify |
| Muted link (footer) | #64748b |
#f1f5f9 |
Often fails—darken to #475569 |
Outlook’s Word renderer antialiases light blues poorly on gray cells. If your outer wrapper is f8fafc, test link blue there, not only on white artboards in Figma. Avoid color inherit on links in body copy. It produces text that matches paragraphs and removes the hue cue auditors flag. Inheritance works in nav-style email blocks only when every item is obviously a link through all caps, pipe separators, or dedicated button row.
Campaigns often use anchor tags styled as buttons. Affordance is rarely the problem. Contrast on the button fill is.
<a href="https://example.com/checkout"
style="background-color:#2563eb;color:#ffffff;text-decoration:none;
display:inline-block;padding:12px 24px;border-radius:4px;
font-size:16px;font-weight:bold;">
Complete purchase
</a>
Note text-decoration none on button links. The filled background supplies non-color cue. Auditors treat obvious buttons differently from inline prose links. Still verify white-on-blue contrast exceeds 4.5:1. Outlook adds quirks. Border-radius may not render. Display inline-block sometimes collapses padding. Table-based button patterns with td bgcolor remain the nuclear option for Outlook-heavy B2B lists. The link color inside the button is still white inline on the anchor.
Client behavior, head styles, and testing before send
Gmail rewrites some link colors in its web interface for security scanning and external-link warnings. You cannot control that chrome. You can control inline styles in the message body. Gmail wraps links in redirect URLs. UTM parameters still work. Hover styles in style blocks are stripped in many contexts.
Outlook forces text-decoration underline on some link types regardless of your CSS, usually not a problem when you wanted underline anyway. Outlook 2007 through 2019 sometimes applies default blue if inline color is missing. Another reason never to omit inline color.
Apple Mail respects link colors and underlines reliably. Dark mode may invert or recolor links when you supply prefers-color-scheme dark overrides.
<style>
@media (prefers-color-scheme: dark) {
.dm-link { color: #93c5fd !important; }
}
</style>
<a class="dm-link"
href="https://example.com/help"
style="color:#1d4ed8;text-decoration:underline;">
Help center
</a>
Inline is the universal fallback. Class supplies dark tint where supported. iOS Mail enlarges tap targets but does not add hover. Underline helps finger targeting psychologically even though it does not change hit area.
Embedded CSS in head can normalize link appearance with a global anchor rule. Gmail may keep this. Outlook may ignore it for some selectors. Never rely on head rules alone. Duplicate critical properties inline. Build tools including MJML, Maizzle, and internal React-email pipelines should inline automatically. Verify the output HTML, not the source abstraction. Hover in style for desktop webmail is optional enhancement. Treat hover as progressive, not required. No recipient should lose information when hover never fires.
Tab through links in a browser preview with keyboard only. Does each link text make sense isolated? Litmus or Email on Acid confirms underline and color in Outlook Windows, Gmail web, and iOS Mail. Real device forward tests whether forwarding strips style in some clients. Inline must survive. Disable always underline links OS setting on macOS if you test locally. Some clients respect OS prefs over your CSS. Screen reader spot check with VoiceOver on iOS reading the link rotor and NVDA on Windows for desktop webmail. Log failures with client and build version. Underline missing in Outlook 2016 is fixable. Links look bad is not.
Your site should follow focus, hover, and visited policies appropriate to interactive UI. See Styling Links Without Losing Affordance for web patterns. Email is a static snapshot of one state. Pick the state that reads correctly without a pointer device. Usually that is underlined plus brand accent hex, not hover underline only. Keep one token export. Web link resolves to the same hex email templates pull from the same row. When brand refreshes the accent, both surfaces update in one release.
Case study: audit finding 4.1.1 the day before launch
A subscription meal-kit company prepared a transactional email redesign for March billing reminders. The template replaced a plain-text legacy layout with a branded HTML shell: logo header, gray body copy at 334155, accent blue links at 1d4ed8, and a primary checkout button. The web design system had shipped six months earlier with link styles that removed underline by default and restored it on hover for desktop. The email team copied hex values from the design token export. They did not copy text-decoration behavior because the Figma email frame looked correct without underlines. Blue on gray body read link-like to the designers reviewing on Retina displays.
Legal and accessibility review was scheduled for the Tuesday before a Thursday send to 2.3 million active subscribers. The external auditor opened the Litmus preview across twelve clients Monday evening. Finding 4.1.1 landed in the report Tuesday 8am: links identified only by color. Body copy contained seven inline anchors across billing summary, preference management, and help center paths. None had text-decoration underline. Footer unsubscribe and privacy links used muted gray at 64748b on f1f5f9 background without underline. Two of those pairs failed contrast as well as hue-only identification.
The email engineering lead argued the links were obvious. The auditor cited WCAG 1.4.1 use of color. Information conveyed by color must also be available through another visual characteristic. In email, hover could not supply that second characteristic. Focus-visible could not supply it. Visited styling could not supply it reliably across Gmail and Outlook. The finding was blocking for the company’s accessibility statement, which procurement had attached to a retail partnership contract signed six weeks prior.
Panic review Tuesday morning confirmed the failure was systemic, not client-specific. Gmail web stripped the head style block that added underline on anchor elements. Apple Mail kept the head rule but iOS Mail dominated fifty-eight percent of opens in the prior campaign analytics. Outlook 2016 rendered underline on some links through user-agent defaults but inconsistently on footer muted links where inline color overrode defaults oddly. The checkout button passed because filled background supplied non-color cue. Inline prose links failed everywhere except accidental Outlook underline on two of seven.
The fix was mechanically simple and politically tense. Every body anchor received inline color and text-decoration underline. Footer links darkened from 64748b to 475569 on f1f5f9 to clear contrast and gained underline. Link text was rewritten in two places where click here had survived from the legacy plain-text template. Reset your billing PIN replaced click here in the password reset sentence. The href remained unchanged. UTM parameters remained attached.
Dark mode required a second pass. Apple Mail dark mode recolored 1d4ed8 links toward unreadable navy on charcoal backgrounds until the team added dm-link class with 93c5fd override in prefers-color-scheme dark media query, with inline 1d4ed8 fallback for clients that ignored head styles. QA re-ran Litmus across the same twelve clients. Auditor signed finding resolved Tuesday 4pm. Send schedule held for Thursday.
Post-send analytics showed no lift or drop in click-through rate versus the prior plain-text billing reminder. Support tickets about confused links dropped from a baseline of eleven per month to three. The three remaining tickets involved forwarded messages where a corporate Exchange server stripped style blocks entirely, leaving underline dependent on inline styles that survived. Engineering added inline underline to a secondary plain-text multipart alternative for clients that refused HTML styling, a compromise the auditor accepted as equivalent facilitation.
The team documented email link rules in the same token README as web link tokens. Web hover underline remains valid for interactive UI. Email inline underline is mandatory for prose links. Button-shaped anchors remain the exception with text-decoration none when fill contrast passes. Brand refresh workflow now includes one Litmus accessibility pass before any template change ships to more than ten thousand recipients.
The lesson for the email lead, repeated in onboarding for contractors: the inbox you have is not the browser you wish recipients used. Design for static presentation. Underline plus hex is not an aesthetic regression. It is the affordance that survives Gmail, Outlook, Apple Mail, forward stripping, and auditors who apply WCAG 1.4.1 to message HTML as strictly as they apply it to your marketing site.
The company added the Tuesday incident to its quarterly email accessibility regression pack alongside image alt text and logical reading order checks. Every template change above ten thousand recipients now required Litmus proof across Outlook 2016, Gmail web, and iOS Mail with inline styles verified in raw HTML source, not only in the build tool preview. Contractors received a one-page constraint sheet: prose links get inline color and underline, button links get fill contrast above 4.5:1, footer muted links darken to pass on gray cells, link text must read correctly in VoiceOver rotor isolation. The sheet linked to the web link token export row so hex stayed synchronized across surfaces.
Brand design pushed back once on underline in a minimalist product announcement. Legal cited the retail partnership accessibility exhibit. Product cited the March send delay cost. Design compromised with a slightly thinner underline via inline text-decoration-style solid and one-pixel text-underline-offset where clients supported it in head styles, with full underline inline regardless so Gmail recipients saw the same affordance as Apple Mail recipients. The compromise satisfied the auditor and preserved most of the visual restraint the brand team wanted. Email is negotiation under constraint, not a copy-paste of web CSS.
Hue-only links copied from the website remain the most common failure mode in email audits. Web teams ship accent color with text-decoration none and hover underline. Email teams copy hex and forget underline. Audit fails. The fix takes twenty minutes in HTML. The launch delay costs twenty hours in cross-functional panic. Build the underline into the template generator defaults so authors opt out consciously rather than opt in accidentally.