Mastering Product Card Layouts: How to Move Your Shopify Product Titles Below Images

Hey fellow store owners! Ever stared at your collection pages, scratching your head, wishing you could just tweak that one little thing? You know, like moving the product title from above the image to below it? It sounds simple, right? But as many of us have found, sometimes those "simple" changes in Shopify themes can send you down a rabbit hole. Well, I recently stumbled upon a fantastic community discussion that tackled exactly this, and I just had to share the insights.

It all started with a post from gladfulspirit, who was trying to get their product names to appear below the image on their product cards, both for products with actual images and those using a placeholder. They’d been using the inspector in Chrome for hours, trying to pinpoint the exact CSS causing the issue. If you've been there, you know the feeling – it's like trying to find a needle in a haystack of code!

Here’s a look at what gladfulspirit was trying to achieve:

Garden Treasures Nursery Products

image

Understanding the Shopify Product Card Logic

Thanks to insights from tim_tairli, we learned how modern Shopify themes (like Dawn) dynamically assign classes to product cards. This is crucial because these classes dictate layout. The theme checks for a featured image and assigns a class:

  • If a product has media (an image), the card gets the card--media class.
  • If it doesn't, it gets the card--text class.

This class assignment happens right in your snippets/card-product.liquid file. Tim even pointed us to the exact Liquid code that handles this:

{% if card_product.featured_media %} card--media{% else %} card--text{% endif %}

This conditional class is a game-changer. Different CSS rules apply based on whether a card is "media-rich" or "text-only," and often the latter hides or repositions elements like the product title.

The "Aha!" Moment: Finding the Hidden CSS

After some back and forth, gladfulspirit had their breakthrough. The solution wasn't just about Liquid; it was uncovering a CSS rule actively suppressing the product title. The culprit? component-card.css, with a related rule in base.css.

The product title (a card__heading element) was generated by card-product.liquid, but hidden by a CSS rule (often with display: none;):

.card\u2013\u2013standard.card\u2013\u2013media .card__inner .card__information,
/* .card\u2013\u2013standard.card\u2013\u2013text:not(.card\u2013\u2013horizontal) > .card__content .card__heading:not(.card__heading\u2013\u2013placeholder), */
.card\u2013\u2013standard:not(.card\u2013\u2013horizontal) > .card__content .card__badge,
.card\u2013\u2013standard.card\u2013\u2013text.article-card > .card__content .card__information,
.card\u2013\u2013standard > .card__content .card__caption {
    display: none;
}

That commented-out line – /* .card–standard.card–text:not(.card–horizontal) > .card__content .card__heading:not(.card__heading–placeholder), */ – is the key! When a product card was card--text (no featured image), this rule set display: none;, hiding the title below the image area.

Your Step-by-Step Solution

Ready to adjust your product titles? Here’s how, based on community insights:

1. Always, Always, Always Back Up Your Theme!

Before any code changes, go to Online Store > Themes, find your current theme, click Actions > Duplicate. This creates a safe backup.

2. Locate the Relevant Files

In your Shopify admin, go to Online Store > Themes > Actions > Edit code for your duplicated theme. You’ll work with: snippets/card-product.liquid, assets/base.css, and possibly assets/component-card.css.

3. Inspect Your Live Site (Again!)

Open your collection page, right-click a product card (especially one without an image) and "Inspect." Look for the

element to see if it has card--media or card--text. Find the

(your product title) and check its computed styles for display: none; and its source stylesheet.

4. Modify the CSS to Unhide the Title

gladfulspirit's discovery points to modifying or removing display: none; from the CSS rule targeting .card__heading when the card is .card--text. This rule is often in base.css or component-card.css. Look for this pattern:

.card\u2013\u2013standard.card\u2013\u2013media .card__inner .card__information,
.card\u2013\u2013standard.card\u2013\u2013text:not(.card\u2013\u2013horizontal) > .card__content .card__heading:not(.card__heading\u2013\u2013placeholder),
.card\u2013\u2013standard:not(.card\u2013\u2013horizontal) > .card__content .card__badge,
.card\u2013\u2013standard.card\u2013\u2013text.article-card > .card__content .card__information,
.card\u2013\u2013standard > .card__content .card__caption {
    display: none;
}

If you find a similar rule, you can either: Remove the specific selector (e.g., .card–standard.card–text:not(.card–horizontal) > .card__content .card__heading:not(.card__heading–placeholder)) from the display: none; block. Or, to override it with a new rule (if removal causes issues), add this to base.css (or theme.css):

.card\u2013\u2013standard.card\u2013\u2013text .card__content .card__heading {
    display: block !important; /* Or flex, depending on your desired layout */
}

The goal: ensure card__heading isn't display: none; for card--text type products.

5. Adjust Liquid for Consistent Placement (If Needed)

Even after unhiding, placement might not be perfect. Examine snippets/card-product.liquid to locate

elements. Gladfulspirit’s code showed two – one before, one after the image. You may need to ensure the desired one renders and the undesired one is removed or hidden. A simplified structure might look like:

{%- if card_product.featured_media -%} {%- endif -%}

{{ card_product.title | escape }}

Ensure the card__heading you want is positioned after the media (or placeholder). Remove or hide any other problematic card__heading instances via CSS.

A Quick Note on Alternatives

NKCreativeSoulutions suggested "changing the text to media" in class names, likely meaning modifying Liquid to always assign card--media. While this forces the card--media layout, it could have unintended side effects on other card--text dependent styling. Direct CSS modification is generally more targeted and safer.

Customizing your Shopify store is a journey of discovery, and this thread shows the power of community. It’s about understanding theme structure, CSS, and Liquid. Experiment on a duplicated theme, use your inspector, and always back up your work!

Share:

Use cases

Explore use cases

Agencies, store owners, enterprise — find the migration path that fits.

Explore use cases