Skip to content

Transition Utilities

Performance-optimised transition classes that target specific CSS properties instead of all. All transition classes respect prefers-reduced-motion automatically.

Available Classes

ClassTransition properties
transition-colorsbackground-color, border-color, color
transition-shadowbox-shadow
transition-transformtransform
transition-opacityopacity
transition-allall (use sparingly)
transition-noneDisables transitions

All classes use --duration-fast (150ms) and --ease-out by default.

Color & Shadow

Opacity & Transform

Hover: transition-opacity
Hover: transition-transform

Prefer specific transitions

transition-all animates every property change, which can cause layout jank and unexpected visual artefacts. Use a specific class (transition-colors, transition-opacity, etc.) whenever possible.


Responsive Variants

All classes support breakpoint prefixes: sm:, md:, lg:, xl:, 2xl:.

html
<!-- No transition on mobile, color transition from md up -->
<button class="transition-none md:transition-colors">Responsive</button>

Accessibility

Transitions are automatically disabled for users who have enabled Reduce Motion in their OS settings:

css
@media (prefers-reduced-motion: reduce) {
  .transition-colors,
  .transition-shadow,
  .transition-transform,
  .transition-opacity,
  .transition-all {
    transition-duration: 0.01ms !important;
  }
}

This sets transition-duration to near-zero rather than removing the transition entirely, so transitionend events still fire and JavaScript logic relying on them continues to work.


Duration & Timing Tokens

Override the defaults with CSS custom properties or the SCSS functions:

TokenValue
--duration-fast150ms
--duration-base300ms
--duration-slow500ms
TokenValue
--easecubic-bezier(0.4, 0, 0.2, 1)
--ease-incubic-bezier(0.4, 0, 1, 1)
--ease-outcubic-bezier(0, 0, 0.2, 1)
--ease-in-outcubic-bezier(0.4, 0, 0.2, 1)
--linearlinear
html
<!-- Slower transition via inline override -->
<div class="transition-opacity" style="transition-duration: var(--duration-slow)">
  Slow fade
</div>