How to Configure Strict CSS View-Transition-Old and New Blend Modes in Google Chrome

In modern web applications featuring full-page or component-level view transitions, achieving cinema-grade visual fidelity requires more than basic linear opacity interpolation. When cross-fading text elements, dark-mode toggles, or high-contrast graphics, simple opacity transitions often create an unsightly muddy grey wash where both states appear semi-transparent simultaneously. Within Google Chrome, mastering strict mix-blend-mode styling across ::view-transition-old(<name>) and ::view-transition-new(<name>) preserves luminance, optical contrast, and sharp edges throughout the transition lifecycle.

The Luminance Clipping Problem in Default Cross-Fades

By default, Chrome applies standard cross-fade animations:

/* Default User Agent View Transition Styling */
::view-transition-old(root) {
  animation: 0.25s ease both -ua-view-transition-fade-out;
}
::view-transition-new(root) {
  animation: 0.25s ease both -ua-view-transition-fade-in;
}

Midway through the transition (at 50% progress), both snapshots render at 50% opacity. If a dark element sits over a light background, blending two semi-transparent states dims peak brightness, creating a muddy or washed-out appearance. This is especially distracting when morphing high-contrast typography or branding assets.

Configuring Strict Mix-Blend-Mode Optical Blending

To eliminate grey mud and preserve crisp luminance during dark-mode theme switches or photo transitions, apply mix-blend-mode: plus-lighter to both pseudo-elements inside an isolated image pair:

/* Theme toggle container */
html {
  view-transition-name: root;
}

/* Isolate the transition blend group */
::view-transition-image-pair(root) {
  isolation: isolate;
}

/* Optical luminance cross-fade */
::view-transition-old(root) {
  animation: 0.3s cubic-bezier(0.4, 0, 0.2, 1) both fade-out;
  mix-blend-mode: plus-lighter;
}

::view-transition-new(root) {
  animation: 0.3s cubic-bezier(0.4, 0, 0.2, 1) both fade-in;
  mix-blend-mode: plus-lighter;
}

@keyframes fade-out {
  from { opacity: 1; }
  to { opacity: 0; }
}

@keyframes fade-in {
  from { opacity: 0; }
  to { opacity: 1; }
}

Under mix-blend-mode: plus-lighter, the rendering pipeline adds RGB colour channels together, preventing luminance dips and delivering vibrant, fluid transitions.

Specialized Blending for Text Elements

For text headlines morphing across pages, pair mix-blend-mode: difference or screen to ensure letterforms never appear faint or ghosted during position and font-size interpolation.

Auditing Blend Modes in Chrome DevTools

Google Chrome provides specialized DevTools tooling to audit view transition blending:

  1. Open DevTools (F12) and navigate to the Animations tab.
  2. Trigger a view transition and pause the animation timeline at 50% completion.
  3. In the Elements panel, expand ::view-transition-image-pair.
  4. Inspect computed styles on ::view-transition-old and ::view-transition-new to verify active mix-blend-mode values.
  5. Toggle blend modes directly in DevTools to evaluate visual clarity in real time.

Get the best tech tips delivered straight to your inbox.

Join thousands of readers mastering Apple, Google, Microsoft, and Linux.