Unlock Dynamic Text Effects on Your Shopify Horizon Theme Slideshows
Ever scrolled through a Shopify store and admired those slick, dynamic slideshows where text and buttons gracefully appear, rather than just popping into existence? It's a small detail, but it can make a huge difference in how professional and engaging your storefront feels. Our community often buzzes with questions about achieving these kinds of custom effects without relying on extra apps, and recently, a fantastic thread popped up that perfectly illustrates a common challenge and an elegant solution.
Let's dive into a common scenario faced by Geronim0, a store owner using the Horizon theme, who wanted to add a bit of flair to their slideshow. Specifically, they wanted the header, text, and button on each slide to elegantly pop up from the bottom and align neatly to the left. Sounds simple, right? Well, with a little custom CSS magic, it absolutely is – but there were a few interesting twists along the way that the community helped iron out!
Bringing Your Slideshow Text to Life: The Initial Setup
Our resident CSS wizard, Ploqo, quickly jumped in to help Geronim0, assuring them that this effect was totally achievable with just a few lines of custom CSS, no app needed. Here's a glimpse of the kind of effect we're talking about:

Before diving into the code, there's a quick layout adjustment to make sure your text elements stack correctly. This is super important for the animation to look right:
- From your Shopify admin, go to Online Store > Themes.
- Click Customize next to your Horizon theme.

- In the theme editor, click on a Slide within your Slideshow section. Under Layout, set Alignment to Left. You'll need to do this for each slide in your slideshow.

- Now, click Theme settings at the top left of the editor.

- Open Custom CSS. This is where the magic happens!
The Core Animation Code
Ploqo provided the initial CSS to create the slide-up effect, with slight delays for each element (heading, text, button) to appear sequentially. This code defines a @keyframes animation called slide-pop-up and applies it to the content of the currently active slideshow slide. This version was refined to ensure it plays once on every slide change:
@keyframes slide-pop-up {
from { opacity: 0; transform: translateY(40px); }
to { opacity: 1; transform: translateY(0); }
}
slideshow-slide[aria-hidden="false"] .group-block-content > * {
animation: slide-pop-up 0.8s ease 0.4s both;
}
slideshow-slide[aria-hidden="false"] .group-block-content > :nth-child(2) {
animation-delay: 0.6s;
}
slideshow-slide[aria-hidden="false"] .group-block-content > :nth-child(3) {
animation-delay: 0.8s;
}

Paste this into your Custom CSS box and click Save. After reloading your store, you should see your text and buttons animating beautifully!
Tackling the 'Double Play' Loop Issue
Now, here's where the community discussion really shined. Geronim0 noticed a common snag: the issue reappeared when the slideshow looped back to the first slide. The text would "refresh twice" or perform a "double play" animation, which definitely breaks the smooth user experience. This is a classic example of how dynamic elements can behave unexpectedly when a slideshow cycles.
Ploqo, ever diligent, quickly recognized the problem. The first step to fix this was to ensure that content on inactive slides remained completely hidden. This prevents any flickering or partial animations before a slide is fully visible:
slideshow-slide[aria-hidden="true"] .group-block-content > * {
opacity: 0;
}
You'll want to add this rule after the animation code you just pasted in your Custom CSS. Just click after the last }, press Enter, and paste it in.

Geronim0 confirmed this was a good step, but the 'double play' on the first slide loop still wasn't completely resolved. Ploqo investigated further and found that sometimes an 'empty' state could trigger an unwanted re-animation when the slides cycled. This led to the final, crucial piece of CSS:
slideshow-slides:has(slideshow-slide:empty) .group-block-content > * {
animation-play-state: paused;
}
This clever rule pauses the animation state when the slideshow detects an 'empty' slide state, which helps prevent that pesky double animation when the loop completes. Add this rule after all the previous CSS snippets, following the same steps:

After adding all three code blocks and saving, Geronim0 confirmed that the issue was finally solved! The text now rises a single time after the loop, just like the other slides.
Your Complete Step-by-Step Guide for Horizon Theme Slideshow Effects
To recap and make it super easy for you, here are the consolidated steps to get this polished slideshow text effect working perfectly on your Shopify Horizon theme:
- Set Slide Alignment: In your theme editor, for each slide in your slideshow, set the Alignment under Layout to Left.
- Access Custom CSS: Go to Theme settings > Custom CSS.
- Add the Core Animation: Paste the following CSS to create the slide-up animation for your heading, text, and button. This is the refined version that ensures a smooth single animation on each slide change:
@keyframes slide-pop-up { from { opacity: 0; transform: translateY(40px); } to { opacity: 1; transform: translateY(0); } } slideshow-slide[aria-hidden="false"] .group-block-content > * { animation: slide-pop-up 0.8s ease 0.4s both; } slideshow-slide[aria-hidden="false"] .group-block-content > :nth-child(2) { animation-delay: 0.6s; } slideshow-slide[aria-hidden="false"] .group-block-content > :nth-child(3) { animation-delay: 0.8s; } - Hide Inactive Slide Content: Immediately after the previous code (click after the last
}and press Enter), add this rule to prevent flickering on hidden slides:slideshow-slide[aria-hidden="true"] .group-block-content > * { opacity: 0; } - Fix the Loop 'Double Play': Finally, add this rule after the opacity rule to prevent the animation from playing twice when the slideshow loops back to the first slide:
slideshow-slides:has(slideshow-slide:empty) .group-block-content > * { animation-play-state: paused; } - Save and Test: Click Save and then reload your store page to see your beautifully animated slideshow in action!
A Note on Theme Compatibility
It's worth noting that while this solution is tailor-made for the Horizon theme and its specific class names (like .group-block-content), the principles apply broadly across Shopify. Mustafa_Ali in the thread also offered a similar approach using class names common in Dawn-based themes (e.g., .slideshow__slide, .banner__heading). The key takeaway here is understanding your theme's specific class names. If you're using a different theme and this code doesn't work right away, you might need to inspect your slide elements to find the correct selectors.
This thread is a perfect example of the power of the Shopify community. With a little custom CSS and the right guidance, you can really make your store shine and achieve those polished, dynamic effects without the overhead of additional apps. Don't be afraid to dive into the custom CSS section – it's a powerful tool for fine-tuning your store's look and feel. If you're looking to start your own store and experiment with these kinds of customizations, Shopify makes it incredibly accessible to tailor your online presence to your exact vision.