CR8V STACKS — The Blog
Brand Strategy
Positioning your business for long-term recognition and trust.
BRAND
↳ Need this done for you?
BRAND STRATEGY
SERVICES
We build identities that make your business memorable, credible, and easy to trust at first glance.
Positioning & messaging
Visual identity systems
View the Service →
Business Tips
Practical, tested advice for running a growing business.
SHOP
↳ Selling online?
ECOMMERCE
WEBSITES
From Shopify builds to full custom stores — we design and develop ecommerce sites that convert.
Shopify & custom builds
Checkout & payments setup
View the Service →
Content Creation
Writing and formats that keep an audience coming back.
WRITE
↳ Need content, not just tips?
CONTENT WRITING
SERVICES
Blog posts, web copy, and long-form content written to rank and to actually convert readers.
SEO-driven blog writing
Website & landing page copy
View the Service →
Digital Marketing
Strategies to grow reach, traffic, and qualified leads.
GROW
↳ Ready to grow faster?
DIGITAL MARKETING
SERVICES
SEO, email, and social strategy handled end-to-end so your traffic turns into real customers.
SEO & SEM campaigns
Email & social management
View the Service →
Web Design & Development
Building fast, functional sites that look as good as they perform.
BUILD
↳ Time for a new site?
WEBSITE DESIGN
& DEV
WordPress, Shopify, or fully custom — we design and build sites that are built to convert.
WordPress & Shopify builds
Fully custom development
View the Service →
CR8V Stacks
↳ CR8V Stacks Blog
BROWSE BY
CATEGORY
Brand Strategy Business Marketing
9
Business Productivity Systems, tools, and workflows
6
Business Tips Ecommerce · Small Business
25
Career Planning Grow your professional life
5
Content Creation Blogging · Content Writing
17
Digital Marketing Email · SEM · SEO · Social
41
Web Design & Development WordPress · Shopify · Ecommerce
60
Tutorials Step-by-step guides and how-tos
22
↳ Like what you're reading?
LET'S BUILD
SOMETHING TOGETHER
Explore Our Services

6 Amazing Elementor Button Hover Effects (No Plugins Required!)

Want to make your Elementor buttons stand out? In this tutorial series, I’ll show you 6 stunning button hover effects that you can add to your WordPress site using just custom CSS – no plugins needed!

📺 Watch the Full Tutorial Series


Effect #1: Vertical Slide Up (Text Push)

Transform your boring buttons into eye-catching interactive elements! This effect pushes the button text up vertically and replaces it with new text sliding up from below.

✨ What You’ll Learn:

  • How to create a smooth vertical text transition
  • Customizing the hover text
  • Adjusting animation speed
  • BONUS: Auto-animation option with JavaScript (optional)

📋 How to Apply:

Step 1: Add CSS Class

  • Select your button widget in Elementor
  • Go to Advanced → CSS Classes
  • Add: slide-up-button

Step 2: Add Custom CSS

  • Go to Elementor → Custom Code → Add CSS
  • Paste the CSS code below

💻 CSS Code:

    .slide-up-button .elementor-button {
    overflow: hidden;
    position: relative;
    box-sizing: border-box;
}

/* Animate the ENTIRE content wrapper (icon + text together) */
.slide-up-button .elementor-button-content-wrapper {
    display: flex;
    align-items: center;
    transition: transform 0.3s ease;
    position: relative;
}

/* Keep original styles for text-only buttons */
.slide-up-button .elementor-button-text {
    display: block;
}

.slide-up-button .elementor-button::before {
    content: "\f3fe\00a0\00a0 New Text Here"; /* \00a0 = non-breaking space */
    white-space: pre;  /* This preserves the spaces! */
    
    /* Inherit ALL text properties from the button */
    font-size: inherit;
    font-weight: inherit;
    font-family: "Font Awesome 5 Brands", "Font Awesome 6 Brands", var(--e-global-typography-text-font-family), sans-serif; /* Font Awesome for icon, then inherit for text */
    line-height: inherit;
    letter-spacing: inherit;
    color: inherit;
    
    position: absolute;
    top: 100%;
    left: 0;
    right: 0;
    width: 100%;
    height: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: transform 0.3s ease;
}

.slide-up-button .elementor-button:hover .elementor-button-content-wrapper { 
    transform: translateY(-190%);  /* Adjust this value based on your button padding */
}

.slide-up-button .elementor-button:hover::before {
    transform: translateY(-100%);
}

🎯 Customization Options:

  • Change the hover text in content: "New Text Here"
  • Adjust speed by modifying 0.3s value
  • Change translateY(-100%) to increase/decrease slide distance

🔥 Optional: Auto-Animation

Want the button to animate automatically? Add this JavaScript!

Add Extra CSS Class

  • Select your button widget in Elementor
  • Go to Advanced → CSS Classes
  • Add: auto-animate beside slide-up-button so you will have slide-up-button auto-animate

JavaScript Code:

<script>
document.addEventListener('DOMContentLoaded', function() {
    // Find all buttons with slide-up-button class
    const buttons = document.querySelectorAll('.slide-up-button');
    
    buttons.forEach(function(button) {
        // Add the auto-animate class to enable animation
        button.classList.add('auto-animate');
    });
});
</script>

Additional CSS for Auto-Animation:

/* Auto-Animation Keyframes - MUST match the hover values */
@keyframes autoSlideUpText {
0%, 45% {
transform: translateY(0);
}
50%, 95% {
transform: translateY(-190%); /* MUST match the hover value in first css*/
}
100% {
transform: translateY(0);
}
}

@keyframes autoSlideUpBefore {
0%, 45% {
transform: translateY(0);
}
50%, 95% {
transform: translateY(-100%);
}
100% {
transform: translateY(0);
}
}

/* Apply animation when auto-animate class is added */
.slide-up-button.auto-animate .elementor-button-content-wrapper {
animation: autoSlideUpText 4s ease-in-out infinite;
}

.slide-up-button.auto-animate .elementor-button::before {
animation: autoSlideUpBefore 4s ease-in-out infinite;
}

/* Pause animation on hover */
.slide-up-button.auto-animate .elementor-button:hover .elementor-button-content-wrapper,
.slide-up-button.auto-animate .elementor-button:hover::before {
animation-play-state: paused;
}

 


Effect #2: Horizontal Slide

Make your button text slide horizontally! The original text slides out to the right while new text slides in from the left.

✨ What You’ll Learn:

  • Creating horizontal text animations
  • Customizing slide direction
  • Perfect for call-to-action buttons

📋 How to Apply:

Step 1: Add CSS Class

  • CSS Class: horizontal-slide-button

Step 2: Add Custom CSS

💻 CSS Code:

    .horizontal-slide-button .elementor-button {
    overflow: hidden;
    position: relative;
}

.horizontal-slide-button .elementor-button-content-wrapper {
    transition: transform 0.4s ease;
}

.horizontal-slide-button .elementor-button::before {
    content: "\f3fe\00a0\00a0 Slide Right!"; /* \00a0 = non-breaking space */
    white-space: pre;  /* This preserves the spaces! */
    
    /* Inherit ALL text properties from the button */
    font-size: inherit;
    font-weight: inherit;
    font-family: "Font Awesome 5 Brands", "Font Awesome 6 Brands", var(--e-global-typography-text-font-family), sans-serif; /* Font Awesome for icon, then inherit for text */
    line-height: inherit;
    letter-spacing: inherit;
    color: inherit;
    
    position: absolute;
    left: -100%;
    top: 0;
    width: 100%;
    height: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: left 0.4s ease;
}

.horizontal-slide-button .elementor-button:hover .elementor-button-content-wrapper {
    transform: translateX(150%); /* Adjust this value based on your padding */
}

.horizontal-slide-button .elementor-button:hover::before {
    left: 0;
}

🎯 Pro Tips:

  • Change left: -100% to left: 100% to reverse the slide direction
  • Modify "Slide Right!" to your desired hover text
  • Adjust 0.4s for faster or slower animations

Effect #3: Fill From Bottom

This elegant effect fills your button with color from the bottom up, creating a smooth paint-fill animation.

✨ What You’ll Learn:

  • Creating fill animations
  • Working with transparent backgrounds
  • Border to solid color transitions

📋 How to Apply:

Step 1: Add CSS Class

  • CSS Class: fill-bottom-button

Step 2: Add Custom CSS

💻 CSS Code:

    .fill-bottom-button .elementor-button {
    position: relative;
    overflow: hidden;
}

.fill-bottom-button .elementor-button::before {
    content: "";
    position: absolute;
    bottom: 0;
    left: 0;
    width: 100%;
    height: 0;
    background: #667eea;
    transition: height 0.4s ease;
    z-index: 0;
}

.fill-bottom-button .elementor-button-content-wrapper {
    position: relative;
    z-index: 1;
}

.fill-bottom-button .elementor-button:hover {
    color: white;
}

.fill-bottom-button .elementor-button:hover::before {
    height: 100%;
}

🎯 Customization Options:

  • Change bottom: 0 to top: 0 for fill from top
  • Modify colors in border and background properties
  • Adjust height: 100% for partial fills

Effect #4: Border Draw

An impressive effect where borders draw themselves around your button from opposite corners, creating a sophisticated animation.

✨ What You’ll Learn:

  • Creating animated borders with pseudo-elements
  • Corner-to-corner animations
  • Professional-looking outline effects

📋 How to Apply:

Step 1: Add CSS Class

  • CSS Class: border-draw-button

Step 2: Add Custom CSS

💻 CSS Code (Variation 1):

    .border-draw-button .elementor-button {
    position: relative;
    transition: border-color 0.3s ease, color 0.3s ease;
    /* Border radius will be set in Elementor */
}

/* Optional: Set custom values via CSS variables */
.border-draw-button {
    --border-width: 2px;
    --border-color: #667eea;
    --hover-color: #764ba2;
    --border-extend: 10px;  /* How much the border extends beyond corners */
}

.border-draw-button .elementor-button::before,
.border-draw-button .elementor-button::after {
    content: "";
    position: absolute;
    width: 0;
    height: 0;
    transition: all 0.4s ease;
    box-sizing: border-box;
}

/* Top-left corner with extension */
.border-draw-button .elementor-button::before {
    top: calc(var(--border-width, 2px) * -1);
    left: calc(var(--border-width, 2px) * -1);
    border-top: var(--border-width, 2px) solid var(--border-color, currentColor);
    border-left: var(--border-width, 2px) solid var(--border-color, currentColor);
    border-top-left-radius: inherit;  /* Inherit border radius */
    border-bottom-right-radius: inherit;  /* Add this */
}

/* Bottom-right corner with extension */
.border-draw-button .elementor-button::after {
    bottom: calc(var(--border-width, 2px) * -1);
    right: calc(var(--border-width, 2px) * -1);
    border-bottom: var(--border-width, 2px) solid var(--border-color, currentColor);
    border-right: var(--border-width, 2px) solid var(--border-color, currentColor);
    border-bottom-right-radius: inherit;  /* Inherit border radius */
    border-top-left-radius: inherit;  /* Add this */
}

.border-draw-button .elementor-button:hover {
    border-color: transparent !important;
}

.border-draw-button .elementor-button:hover::before,
.border-draw-button .elementor-button:hover::after {
    width: calc(100% + var(--border-extend, 10px));
    height: calc(100% + var(--border-extend, 10px));
}

 

Or 💻 CSS Code (Variation 2):

    .border-draw-button .elementor-button {
    position: relative;
    /* Elementor sets: background, border, color, padding, etc. */
    transition: border-color 0.3s ease, color 0.3s ease;
}

/* Optional: Set custom values via CSS variables */
.border-draw-button {
    --border-width: 2px;      /* Change this to match your design */
    --border-color: #667eea;  /* Change this to match your design */
    --hover-color: #764ba2;   /* Text color on hover */
}

.border-draw-button .elementor-button::before,
.border-draw-button .elementor-button::after {
    content: "";
    position: absolute;
    width: 0;
    height: 0;
    transition: all 0.4s ease;
    box-sizing: border-box;
    border-radius: inherit;
}

.border-draw-button .elementor-button::before {
    top: 0;
    left: 0;
    border-top: var(--border-width, 2px) solid var(--border-color, currentColor);
    border-left: var(--border-width, 2px) solid var(--border-color, currentColor);
}

.border-draw-button .elementor-button::after {
    bottom: 0;
    right: 0;
    border-bottom: var(--border-width, 2px) solid var(--border-color, currentColor);
    border-right: var(--border-width, 2px) solid var(--border-color, currentColor);
}

.border-draw-button .elementor-button:hover {
    border-color: transparent !important;  /* Hide original border */
    color: var(--hover-color, #764ba2);    /* Optional: change text color */
}

.border-draw-button .elementor-button:hover::before,
.border-draw-button .elementor-button:hover::after {
    width: 100%;
    height: 100%;
}

 

🎯 Customization Tips:

  • Change border colors to match your brand
  • Adjust border-width for thicker/thinner lines
  • Modify 0.4s for animation speed

Effect #5: 3D Flip Effect

Create a stunning 3D flip animation that reveals text on the “back” of your button. Perfect for modern, interactive designs!

✨ What You’ll Learn:

  • Working with CSS 3D transforms
  • Creating flip card effects
  • Perspective and transform-style properties

📋 How to Apply:

Step 1: Add CSS Class

  • CSS Class: flip-3d-button

Step 2: Add Custom CSS

💻 CSS Code:

.flip-3d-button {
    perspective: 1000px;
}

.flip-3d-button .elementor-button {
    position: relative;
    transform-style: preserve-3d;
    transition: transform 0.6s;
}

.flip-3d-button .elementor-button::before {
    content: "Flipped!";
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 140%;
    display: flex;
    align-items: center;
    justify-content: center;
    background: #764ba2;
    color: white;
    transform: rotateX(-90deg);
    transform-origin: center bottom;
    transition: transform 0.6s;
}

.flip-3d-button .elementor-button:hover {
    transform: rotateX(50deg);
}

 

🎯 Pro Tips:

  • Change rotateX to rotateY for horizontal flip
  • Modify "Flipped!" to your desired back text
  • Adjust 0.6s for flip speed
  • Change perspective value for different 3D depth

Effect #6: Shutter Effect

Two colored panels slide in from top and bottom simultaneously, creating a dramatic shutter effect that fills your button.

✨ What You’ll Learn:

  • Creating dual-panel animations
  • Synchronized transitions
  • Dramatic fill effects

📋 How to Apply:

Step 1: Add CSS Class

  • CSS Class: shutter-button

Step 2: Add Custom CSS

💻 CSS Code:

.shutter-button .elementor-button {
    position: relative;
    overflow: hidden;
}

/* Make sure content wrapper is above the animation */
.shutter-button .elementor-button-content-wrapper {
    position: relative;
    z-index: 1;
}

.shutter-button .elementor-button::before,
.shutter-button .elementor-button::after {
    content: "";
    position: absolute;
    width: 100%;
    height: 0;
    left: 0;
    background: #667eea;
    transition: height 0.3s ease;
    z-index: 0;
}

.shutter-button .elementor-button::before {
    top: 0;
}

.shutter-button .elementor-button::after {
    bottom: 0;
}

.shutter-button .elementor-button:hover {
    color: white;
}

.shutter-button .elementor-button:hover::before,
.shutter-button .elementor-button:hover::after {
    height: 51%;
}

 

🎯 Customization Options:

  • Change height: 51% to adjust panel meeting point
  • Modify for horizontal shutters by changing width/height
  • Adjust colors to match your design
  • Change 0.3s for faster/slower effect

 

Share This Post

Picture of Mallami Adekunle

Mallami Adekunle

Kunle Mallami is a digital entrepreneur with expertise in website design, digital marketing, brand strategy and digital content writing. When he's not doing any of these, he will probably be on YouTube learning.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

The reCAPTCHA verification period has expired. Please reload the page.

Get your Free eBook

Enter your details below and get instant access to the eBook — and we’ll email it to you too!

Sign Up

Get the latest update on small business marketing and general digital marketing contents.