Skip to Main Content
GitHub
Enjoy HyperUI? Give it a star on GitHub

How to Add Animation Duration, Delay and Easing Support to Tailwind CSS

It's important to mention that you can use JIT for one-off classes, such as:

  • [animation-duration:_2s]
  • [animation-delay:_0.5s]
  • [animation-timing-function:_linear]

It may seem strange that Tailwind CSS doesn't include this, but let's proceed.

Adding Animation Duration Classes to Tailwind CSS

To do this, add the following to your tailwind.config.js:

const plugin = require('tailwindcss/plugin')

module.exports = {
  plugins: [
    plugin(function ({ matchUtilities, theme }) {
      matchUtilities(
        {
          'animate-duration': (value) => ({
            animationDuration: value,
          }),
        },
        { values: theme('transitionDuration') }
      )
    }),
  ],
}

This will add the duration classes used for transitions to animations with the animate- prefix:

  • animate-duration-0
  • animate-duration-75
  • animate-duration-100
  • animate-duration-150
  • animate-duration-200
  • animate-duration-300
  • animate-duration-500
  • animate-duration-700
  • animate-duration-1000

Adding Animation Delay Classes to Tailwind CSS

Add the following to your tailwind.config.js:

const plugin = require('tailwindcss/plugin')

module.exports = {
  plugins: [
    plugin(function ({ matchUtilities, theme }) {
      matchUtilities(
        {
          'animate-delay': (value) => ({
            animationDelay: value,
          }),
        },
        { values: theme('transitionDelay') }
      )
    }),
  ],
}

This will add the delay classes used for transitions to animations with the animate- prefix:

  • animate-delay-0
  • animate-delay-75
  • animate-delay-100
  • animate-delay-150
  • animate-delay-200
  • animate-delay-300
  • animate-delay-500
  • animate-delay-700
  • animate-delay-1000

Adding Animation Easing Classes to Tailwind CSS

Add the following to your tailwind.config.js:

const plugin = require('tailwindcss/plugin')

module.exports = {
  plugins: [
    plugin(function ({ matchUtilities, theme }) {
      matchUtilities(
        {
          'animate-ease': (value) => ({
            animationTimingFunction: value,
          }),
        },
        { values: theme('transitionTimingFunction') }
      )
    }),
  ],
}

This will add the ease classes used for transitions to animations with the animate- prefix:

  • animate-ease
  • animate-ease-linear
  • animate-ease-in
  • animate-ease-out
  • animate-ease-in-out

Check out the Tailwind Play example.

The added classes will appear in Tailwind CSS IntelliSense.

This also means you can use JIT, for example:

  • animate-duration-[5s]
  • animate-delay-[0.25s]
  • animate-ease-[cubic-bezier(.17,_.67,_.83,_.67)]

And that's it.

That's all you need to do to add animation duration, delay, and easing support to Tailwind CSS while it's not yet part of the core. Perhaps it will be included in the future.