MailMode Preview first. Panic less.
Docs Learn Changelog About Status Terms Privacy
← Back to MailMode
MailMode Learn Technical reference

Outlook VML Buttons and Dark Mode Rendering

A technical reference for how classic Outlook for Windows handles VML buttons, MSO fallbacks and dark mode colour transformations.

Published: 9th June 2026 Last updated: 9th June 2026
targetClassic Outlook Windows
patternHybrid HTML + VML
riskLayer mismatch
VML relevant

Classic Outlook Windows

Word-engine rendering makes VML useful for buttons, backgrounds and rounded fills, but dark mode is high risk.

Not VML

New Outlook Windows

WebView-style rendering should not be treated as the same target as classic Outlook for Windows.

Partial invert

Outlook.com + mobile

Not VML clients, but dark mode can still create border, background and text mismatches.

Test carefully

Bulletproof buttons

The common production pattern is VML inside MSO conditionals plus an HTML/CSS anchor for everyone else.

This is an independent MailMode guide, not official Microsoft documentation. Outlook behaviour changes across rendering engines, app versions, tenants and user settings, so treat these patterns as practical checks rather than exact guarantees.

Key takeaways

VML is a scoped Outlook Windows fallback

  • VML is deprecated as a web technology, but still matters in email because classic Outlook for Windows uses Word-style rendering.
  • VML should be treated as a Word/MSO fallback technique, not a general-purpose email design layer.
  • VML is only relevant for classic Outlook for Windows and Microsoft 365 classic Outlook for Windows.
  • New Outlook for Windows, Outlook.com, Outlook for Mac and Outlook mobile should not be treated as VML clients.
  • Most bulletproof buttons use a hybrid structure: VML inside MSO conditionals plus an HTML/CSS <a> button for everyone else.
  • Classic Outlook dark mode can preserve VML fills or VML images while transforming live text, HTML backgrounds or CSS borders.
  • That split can cause two-tone button patches, fill/text mismatches and border/fill mismatches.
  • fillcolor, strokecolor, inline CSS, bgcolor and live text can be processed differently.
  • mso-color-alt:auto is a specialised text workaround with body/fill colour constraints, not a universal fix.
  • Nested VML is fragile; a VML button inside a VML background image is a common classic Outlook failure path.
  • VML remains useful, but only as a scoped legacy fallback.
  • Accessibility matters: keep CTA text live and avoid image-only buttons.
  • Test classic Outlook Windows, new Outlook, Outlook.com, Mac and mobile separately.
Try MailMode

See your email in every mode

Test your email across light, dark, partial invert and full invert modes.

Try MailMode for free →

No signup required

Light Dark Partial Full
Client matrix

Where VML actually matters

VML behaviour notes are based on public Microsoft documentation, bulletproof email development references and email developer testing sources. Behaviour can vary by Outlook version, Windows settings, rendering path and account configuration.

Client/surfaceRendering familyIs VML relevant?Dark mode behaviourDeveloper strategy
Classic Outlook for WindowsWord engineVML targetFull invert riskUse MSO/VML narrowly, keep HTML fallback aligned and test dark mode in the exact desktop client.
Microsoft 365 classic Outlook for WindowsWord engineVML targetFull invert riskTreat as classic Outlook; check 100% and 120 DPI for button dimensions and text clipping.
New Outlook for WindowsWebView/web engineNot VMLMixed supportUse web-family assumptions, not MSO/VML assumptions, and verify current builds separately.
Outlook.com / Outlook on the webWebView/web engineNot VMLPartial invertUse data-og*, transparent border strategies and resilient HTML buttons instead of VML.
Outlook for MacWebKit/native familyNot VMLPartial invertAuthor standards-friendly dark CSS and test separately from Windows.
Outlook iOSMobile appNot VMLPartial invertCheck CTA fill, border and image contrast in mobile dark mode.
Outlook AndroidMobile appNot VMLPartial invertUse tested mobile-friendly HTML/CSS fallbacks rather than VML.
VML layer

What VML is doing inside a button

A bulletproof Outlook button usually has two paths. MSO conditional comments expose the VML branch to classic Outlook for Windows, while the normal HTML anchor handles webmail, mobile, Apple Mail, Gmail and new Outlook-style clients.

<v:roundrect> creates the Outlook-only rounded rectangle. arcsize controls the radius, fillcolor controls the fill, strokecolor controls the stroke, and <v:fill> handles advanced fills or images.

<v:textbox> can hold richer boxed content, but it adds complexity. <w:anchorlock> helps lock the clickable area in Word/Outlook.

The VML and HTML layers need matching dimensions, text, colours and links. Fixed VML dimensions are common because classic Outlook does not behave like modern CSS padding. If one layer changes in dark mode and the other does not, the mismatch becomes visible.

MSO/VML branch for classic Outlook HTML anchor branch for other clients Fixed dimensions are common Match hrefs and visible text Test as rendered HTML
Hybrid VML + HTML button
<div>
  <!--[if mso]>
  <v:roundrect
    xmlns:v="urn:schemas-microsoft-com:vml"
    xmlns:w="urn:schemas-microsoft-com:office:word"
    href="https://example.com"
    style="height:44px;v-text-anchor:middle;width:220px;"
    arcsize="12%"
    strokecolor="#4f46e5"
    fillcolor="#4f46e5">
    <w:anchorlock/>
    <center style="color:#ffffff;font-family:Arial,sans-serif;font-size:16px;font-weight:bold;">
      Call to action
    </center>
  </v:roundrect>
  <![endif]-->

  <a href="https://example.com"
     style="background-color:#4f46e5;border:1px solid #4f46e5;border-radius:6px;color:#ffffff;display:inline-block;font-family:Arial,sans-serif;font-size:16px;font-weight:bold;line-height:44px;text-align:center;text-decoration:none;width:220px;mso-hide:all;">
    Call to action
  </a>
</div>
Dark mode behaviour

Why Outlook buttons can split into layers

Classic Outlook Windows behaviour should be treated as observed risk, not a fixed algorithm. VML fills, strokes, live text and HTML fallbacks can be handled differently across Outlook builds and Windows display settings.

Light mode

Single visual button

The VML branch and HTML branch are visually aligned, so the recipient sees one consistent CTA.

Full invert risk

Classic Outlook transformation

Classic Outlook is best treated as full-invert risk at layout level, with VML-specific exceptions.

VML exception

Fill preserved, text changed

The VML shape colour may remain fixed while text, stroke or surrounding surfaces shift for contrast.

Layer mismatch

Two-tone centre patch

An HTML layer above or inside the VML button can become visible if it transforms differently.

Text workaround

mso-color-alt:auto

Can help VML text in narrow cases, but depends on body and fill colour relationships.

Partial invert

Outlook.com/mobile border mismatch

Non-VML Outlook clients can still transform fill and border colours independently.

Property matrix

VML and HTML properties do not behave as one system

Property notes describe practical email QA risks rather than guaranteed Outlook rules. Test the rendered email because MSO conditionals, VML attributes and HTML fallback styles can diverge.

Property/attributeWhere it appliesDark mode riskNotes
fillcolorVML shape fillMedium controlOften behaves differently from HTML backgrounds; do not assume future Outlook builds preserve it identically.
<v:fill color="">Advanced VML fillLow controlCan handle images, tiles or fills; image fills add remote-content and dark-mode risk.
strokecolorVML border/strokeLow controlStroke and fill can diverge; do not rely on a subtle one-pixel outline.
strokeweightVML stroke widthMedium controlChanging stroke weight can require matching width/height changes to keep the visual box aligned.
CSS background-colorHTML fallback anchor/tablePartial invertMay be transformed separately from VML fill.
RGBA backgroundHTML layer in Outlook branchUse with cautionSometimes used so classic Outlook ignores the HTML layer and shows the VML fill instead.
bgcolorHTML table/cell attributePartial invertUseful fallback, but can be treated differently from CSS.
CSS colorHTML textFull invert riskLive text is accessible, but colour can be rewritten by clients.
<center style="color:...">Text inside VMLLow controlText inside VML is harder to stabilise than simple HTML text.
mso-color-alt:autoMSO-specific text workaroundUse with cautionSpecialised workaround; body background and VML fill values influence the result.
mso-hide:allHide HTML branch from OutlookMedium controlHelps avoid duplicate buttons, but still needs real Outlook testing.
arcsizeVML corner radiusMedium controlMust visually match HTML border-radius; exact mapping is not always obvious.
fixed width / heightVML and HTML dimensionsMixed supportCommon in bulletproof buttons, but fragile at high DPI or with long/localised text.
v-text-anchorVML vertical alignmentMedium controlUseful for centring, but does not solve colour transformation.
VML hrefVML click targetTracking riskMust match the HTML anchor URL so tracking and accessibility do not diverge.
Broken designs

Common Outlook VML button failures

VML fill may stay fixed while text changes

What breaks
Text loses contrast against a preserved VML fill.
Affected Outlook surface
Classic Outlook Windows.
Why it happens
VML fill and live text can be processed differently.
Safer approach
Test text colour in dark mode and keep fallback contrast high.

Button background and VML fill can diverge

What breaks
The HTML fallback and VML branch no longer match.
Affected Outlook surface
Classic Outlook Windows.
Why it happens
CSS background and VML fill are separate layers.
Safer approach
Keep Outlook-only HTML backgrounds transparent where needed.

Two-tone centre patch behind text

What breaks
A rectangle appears behind the button label.
Affected Outlook surface
Classic Outlook Windows.
Why it happens
An inner HTML layer transforms over a fixed VML fill.
Safer approach
Remove competing inner backgrounds in the MSO branch.

Border/fill mismatch

What breaks
The stroke remains bright or dark while the fill changes.
Affected Outlook surface
Outlook Windows, Outlook.com and mobile.
Why it happens
Stroke, border and fill colours are evaluated separately.
Safer approach
Use robust contrast and consider transparent borders in web/mobile clients.

Rounded corners differ

What breaks
The VML radius and HTML radius do not visually align.
Affected Outlook surface
Classic Outlook Windows.
Why it happens
arcsize does not map perfectly to CSS border-radius.
Safer approach
Use modest radii and compare against the HTML fallback.

VML button over VML background image

What breaks
Stacked VML layers become fragile or misaligned.
Affected Outlook surface
Classic Outlook Windows.
Why it happens
Nested or overlapping VML increases rendering complexity.
Safer approach
Keep VML as flat and scoped as possible.

Image-backed button disappears

What breaks
The CTA meaning vanishes when images are blocked.
Affected Outlook surface
Outlook clients with remote images blocked.
Why it happens
Image-only buttons depend on image loading.
Safer approach
Use live text with a real link and accessible label.

VML image fill does not load

What breaks
A background-image button or hero CTA loses its intended surface.
Affected Outlook surface
Classic Outlook Windows with blocked remote content.
Why it happens
VML image fills depend on remote image loading permissions.
Safer approach
Prefer solid fills and keep CTA meaning in live text.

Dark button disappears into dark canvas

What breaks
The button edge vanishes when the surrounding surface also darkens.
Affected Outlook surface
Classic Outlook Windows, Outlook.com and mobile.
Why it happens
Fill, border and page background can transform independently.
Safer approach
Add a tested outline, wrapper or contrast edge that survives the target client.

120 DPI scaling distorts dimensions

What breaks
Text, height or width no longer align cleanly.
Affected Outlook surface
Windows Outlook on scaled displays.
Why it happens
Word rendering and Windows DPI scaling can alter dimensions.
Safer approach
Test 100% and 120 DPI where possible.

Tracking links diverge

What breaks
The VML href and HTML anchor lead to different URLs.
Affected Outlook surface
Classic Outlook Windows and non-Outlook fallbacks.
Why it happens
The button has two link declarations.
Safer approach
Keep VML and HTML hrefs generated from the same source.
Safer patterns

Keep VML narrow and intentional

Default

Use a normal HTML anchor first

The HTML button should be the main production pattern for non-MSO clients.

MSO only

Scope VML to classic Windows

Wrap VML inside MSO conditionals so it does not leak into modern clients.

Alignment

Match dimensions

Keep VML width, height, line-height and text aligned with the HTML fallback.

Complexity

Avoid nested VML

VML backgrounds, buttons and images layered together are harder to debug.

Layer control

Use transparent or RGBA HTML layers

When a VML fill is present, reduce competing Outlook-only HTML backgrounds that can invert separately.

Accessibility

Use live text

Do not make the CTA depend on a button image that may be blocked.

Partial invert

Prefer resilient borders

Transparent or higher-contrast borders can reduce Outlook.com/mobile mismatch risk.

Windows QA

Check DPI scaling

Test classic Outlook at normal and scaled Windows display settings when possible.

Text colour

Treat mso-color-alt:auto as narrow

Use it only after testing body/fill combinations; it usually cannot optimise every text case globally.

Tracking

Share one URL source

Generate VML and HTML hrefs together so tracking and analytics stay consistent.

Code recipes

Small button patterns worth testing

These snippets are examples, not drop-in guarantees. Test the final compiled HTML in the Outlook clients that matter to your audience.

These are simplified MailMode-authored patterns using placeholder URLs. Keep the VML href and HTML anchor href generated from the same source in production.

Basic hybrid VML + HTML button
<!--[if mso]>
<v:roundrect xmlns:v="urn:schemas-microsoft-com:vml"
  xmlns:w="urn:schemas-microsoft-com:office:word"
  href="https://example.com"
  arcsize="12%"
  fillcolor="#4f46e5"
  strokecolor="#4f46e5"
  style="height:44px;v-text-anchor:middle;width:220px;">
  <w:anchorlock/>
  <center style="color:#ffffff;font-family:Arial,sans-serif;font-size:16px;font-weight:bold;">Call to action</center>
</v:roundrect>
<![endif]-->

<a href="https://example.com"
  style="background-color:#4f46e5;border:1px solid #4f46e5;border-radius:6px;color:#ffffff;display:inline-block;line-height:44px;text-align:center;text-decoration:none;width:220px;mso-hide:all;">
  Call to action
</a>
Outlook-only transparent HTML layer
<!--[if mso]>
<style>
  .mso-transparent-bg {
    background: transparent !important;
  }
</style>
<![endif]-->
RGBA fallback to reduce competing Outlook layers
<a href="https://example.com"
   style="background:rgba(79,70,229,1);border:1px solid #4f46e5;color:#ffffff;display:inline-block;line-height:44px;text-align:center;text-decoration:none;width:220px;">
  Call to action
</a>
Outlook.com partial-invert border mitigation
<a href="https://example.com"
   style="background-color:#4f46e5;border:1px solid transparent;border-radius:6px;color:#ffffff;display:inline-block;line-height:44px;text-align:center;text-decoration:none;width:220px;">
  Call to action
</a>
MSO text colour workaround to test carefully
<!--[if mso]>
<style>
  .mso-auto-text {
    mso-color-alt: auto;
  }
</style>
<![endif]-->
MSO-only wrapper fallback
<!--[if mso]>
<table role="presentation" cellpadding="0" cellspacing="0">
  <tr>
    <td bgcolor="#4f46e5">
<![endif]-->

<a href="https://example.com" class="button">
  Call to action
</a>

<!--[if mso]>
    </td>
  </tr>
</table>
<![endif]-->
Accessibility

Bulletproof should still mean usable

  • Bulletproof buttons are usually better than image-only CTAs because they preserve live text.
  • Screen readers and keyboard users need meaningful links, not decorative button images.
  • VML can introduce accessibility complications, so keep the real CTA as a meaningful <a> where possible.
  • Keep the VML href and HTML anchor href aligned so the same CTA destination is exposed in every branch.
  • Links inside VML-heavy background sections can be harder to keyboard-test in classic Outlook, so verify focus and click behaviour where possible.
  • Avoid duplicate or competing links if the VML href and HTML anchor diverge.
  • Use clear link text that still makes sense when the surrounding design changes.
Recommendation

Is VML still worth using?

Yes

Classic Outlook is important

Use VML if your audience includes classic Outlook for Windows and the design needs something Word Outlook cannot otherwise render reliably.

No

Mostly web/mobile/new Outlook

If the audience is mainly modern Outlook surfaces, a simpler HTML button can be more resilient.

Balanced

Use VML as a fallback

VML should support a legacy client path, not become the whole design system.

Pragmatic

Prioritise resilience

When brand-perfect corners matter less than readability, simpler buttons often survive dark mode better.

MailMode simulation

How this maps back to MailMode

Full-invert preview is useful for classic Outlook Windows-style risk, where aggressive transformations can expose CTA contrast and layer problems.

Partial-invert preview is useful for Outlook.com and mobile-style border, fill and background mismatch checks.

No-change preview remains useful because Outlook users can switch message viewing back toward original formatting or a light reading pane.

VML-specific behaviour is difficult to simulate exactly because VML fills, VML images, live text and HTML layers may transform differently. Treat MailMode previews as practical approximations, not exact Outlook/VML emulators.

Related guides: Outlook dark mode guide · Dark Mode CSS guide · Gmail dark mode guide · Apple Mail dark mode guide · MJML guide · React Email guide · Support matrix

No-change baseline Partial invert Full invert VML layer risk
Known limitations

What VML guidance cannot guarantee

Client split

Outlook is not one renderer

Classic Windows, new Outlook, Outlook.com, Mac and mobile clients need separate QA paths.

VML colour

Fill behaviour is observed, not future-proof

VML fills often behave differently from HTML colours today, but future Outlook versions can change.

Text fixes

VML text remains difficult

mso-color-alt:auto can help narrow cases, but body colour, fill colour and build differences still matter.

Remote content

Image-backed buttons are fragile

VML image fills and image-only CTAs can fail when images are blocked or content is not trusted.

Testing

Providers can disagree

VML dark-mode results can vary between test providers, local machines and Outlook 365 builds.

Try MailMode

Test the email you are building

Paste HTML, MJML or React Email and compare light mode, dark mode and inversion previews before you send.

Try MailMode for free → Preview Outlook button designs in dark mode

No signup required

Related Guides

Keep exploring MailMode Learn

Read nextOutlook Dark Mode Behaviour

Classic Outlook, Outlook.com and Microsoft 365 dark mode behaviours.

Read nextDark Mode CSS for HTML Email

Meta tags, media queries, client targeting and defensive patterns.

Read nextEmail Client Dark Mode Support Matrix

A practical map of client families, techniques and MailMode preview modes.

Read nextMJML Dark Mode Email Guide

Compiled HTML checks, dark CSS placement and MJML component patterns.

Read nextReact Email Dark Mode Previewing

Rendered HTML, Tailwind caveats and safe preview workflows.

References

Sources & Further Reading

Last Updated: 9th June 2026Sources Reviewed: 9th June 2026

Research note

This guide combines vendor documentation, industry testing references and MailMode’s own observations of common email rendering behaviour.

Email client behaviour can change over time, especially across app versions, operating systems and account types. Treat this guide as a practical developer reference rather than official documentation from Microsoft, Google, Apple or any other email client provider.

Official Microsoft / platform docs

Microsoft VML introductionMicrosoft VML fillcolor attributeMicrosoft VML strokecolor attributeMicrosoft Support: dark mode in OutlookMicrosoft: New Outlook for Windows overview

Bulletproof button tools

Campaign Monitor Bulletproof ButtonsCampaign Monitor Bulletproof Backgrounds

Litmus testing references

Litmus: bulletproof buttons in email designLitmus: Outlook rendering differencesLitmus dark mode guide

Email on Acid testing references

Email on Acid: bulletproof buttonsEmail on Acid: dark mode for emailEmail on Acid: Outlook DPI scaling

Outlook targeting and dark-mode notes

HTeuMeuLeu: Outlook.com data-og* notesHowToTarget.email: Outlook targeting referencesDark-mode button problem notesOutlook button dark-mode discussion

Community research

HTeuMeuLeu email-bugsmatthieuSolente/email-darkmode
© 2026 MailMode. Technical email guides. Docs · Learn · Changelog · About · Status · Privacy · Terms