Animated Gradient Borders with Tailwind CSS

Author avatar

QUOC HUY NGUYEN

· 5 min read
Animated Gradient Borders with Tailwind CSS

Animated gradient borders have taken the design world by storm, adding a dynamic and visually captivating element to SaaS and startup landing pages. Inspired by this creative trend, we crafted our own version—introducing the galaxy border effect using Tailwind CSS.

Animated galaxy border, gradient border with tailwindcss

We made a card highlighted with this particular visual effect using only CSS. By leveraging Tailwind’s arbitrary properties we created a complex gradient, consisting of:

  • A linear gradient with three stop-colors for the background

  • A conic gradient with five stop-colors for the borders

Then, we added a CSS @property rule to control the angle of the conic gradient. This allowed us to animate the gradient with a new animation defined in the tailwind.config.js file.

Note: this animation is currently only supported in Chrome and Chromium-based browsers. Firefox does not yet support the CSS @property rule, but it is expected to be integrated soon, as it is already available in the nightly development version.

<div class="w-full max-w-[422px] [background:linear-gradient(45deg,#172033,theme(colors.slate.800)_50%,#172033)_padding-box,conic-gradient(from_var(--border-angle),theme(colors.slate.600/.48)_80%,_theme(colors.indigo.500)_86%,_theme(colors.indigo.300)_90%,_theme(colors.indigo.500)_94%,_theme(colors.slate.600/.48))_border-box] rounded-2xl border border-transparent animate-border">
    <div class="p-5">
        <div class="flex justify-between items-center">
            <div>
                <div class="flex space-x-2 items-center mb-0.5">
                    <div class="text-2xl font-bold text-slate-200 mb-1">17,479</div>
                    <div class="text-xs font-medium text-emerald-500">+48%</div>
                </div>
                <div class="text-sm font-medium text-slate-500">Monthly visits</div>
            </div>
            <button class="w-8 h-8 flex justify-center items-center text-slate-500 hover:text-slate-400">
                <span class="sr-only">Open menu</span>
                <svg class="fill-current" xmlns="http://www.w3.org/2000/svg" width="16" height="4" fill="none">
                    <path d="M8 4a2 2 0 1 0 0-4 2 2 0 0 0 0 4ZM2 4a2 2 0 1 0 0-4 2 2 0 0 0 0 4ZM14 4a2 2 0 1 0 0-4 2 2 0 0 0 0 4Z"/>
                </svg>
            </button>
        </div>
    </div>
    <div class="px-5">
        <img class="group-hover:opacity-0 transition-opacity duration-500" src="./card-01.png" width="380" height="173" alt="Card image 01">
    </div>
</div>

Next, add this CSS to your stylesheet

@property --border-angle {
    inherits: false;
    initial-value: 0deg;
    syntax: '<angle>';
}

Finally, add a new animation to your tailwind.config.js file

tailwind.config = {
    theme: {
        extend: {
            animation: {
                'border': 'border 4s linear infinite',
            },
            keyframes: {
                'border': {
                    to: { '--border-angle': '360deg' },
                }
            }                      
        },
    },
};

If you enjoyed this post, you might also be interested in our CSS Animations Christmas post.

QUOC HUY NGUYEN

About QUOC HUY NGUYEN

Time is free, but it’s priceless. You can’t own it, but you can use it. You can’t keep it, but you can spend it. Once you’ve lost it you can never get it back