DEV Community

Cover image for Most Shopify Developers Use This Every Day. Almost Nobody Knows Why It Exists.
Sameer Mulla
Sameer Mulla

Posted on

Most Shopify Developers Use This Every Day. Almost Nobody Knows Why It Exists.

Shopify CSS Explained: {% stylesheet %} vs {% style %} vs <style>

If you've built a Shopify theme, you've probably used one of these:

{% stylesheet %};
{% style %}
<style>
Enter fullscreen mode Exit fullscreen mode

They all write CSS.

So why did Shopify create three different ways to do what seems like the same job?

The answer isn't about syntaxβ€”it's about performance, scalability, and architecture.

Let's explain it with something every developer understands.

🚦 Shopify CSS Is Like a Traffic Signal System

Imagine your Shopify theme is a busy city.

Thousands of cars (sections) move through it every day. Without traffic signals, every intersection would become chaotic.

Shopify's CSS methods work the same way.

Each one controls traffic differently.


🟒 Green Light β€” {% stylesheet %};

This is the city's central traffic controller.

It creates one set of traffic rules and shares them with every intersection.

Every section follows the same rules without creating duplicate copies.

{% stylesheet %};
.product-card {
  color: var(--heading-color);
  padding: 20px;
  border-radius: 12px;
}
{% endstylesheet %}
Enter fullscreen mode Exit fullscreen mode

Why?

Shopify bundles this CSS once, making it reusable across the theme.

Best for

  • Shared component styles
  • Layouts
  • Buttons
  • Cards
  • Grids
  • Reusable UI

Trade-offs

βœ… Smaller HTML

βœ… Cached CSS

βœ… Excellent performance

❌ Doesn't support Liquid variables

❌ Can't use:

{{ section.settings.heading_color }}
Enter fullscreen mode Exit fullscreen mode

🟑 Yellow Light β€” {% style %};

Now imagine a traffic officer standing at a busy intersection.

Instead of following fixed rules, they react to what's happening right now.

That's exactly what {% style %}; does.

{% style %};
.product-card {
  color: {{ section.settings.heading_color }};
}
{% endstyle %};
Enter fullscreen mode Exit fullscreen mode

Why?

Every section generates its own CSS using Liquid values from the Theme Editor.

Best for

  • Theme Editor settings
  • Dynamic colors
  • Typography controls
  • Spacing controls
  • Merchant customization

Trade-offs

βœ… Supports Liquid

βœ… Updates instantly in the Theme Editor

❌ Generates CSS for every section instance

❌ Larger HTML when many sections are rendered


πŸ”΄ Red Light β€” Raw <style>

This is like placing a temporary stop sign during road construction.

It works.

But it isn't connected to Shopify's CSS bundling system.

<style>
.notice {
  color: red;
}
</style>
Enter fullscreen mode Exit fullscreen mode

Why?

It's plain HTML.

No Shopify processing.

No Theme Editor integration.

Best for

  • Small one-off styles
  • Temporary experiments
  • Static pages

Trade-offs

βœ… Familiar HTML

βœ… Simple

❌ Not bundled

❌ No Shopify-specific features

❌ Easy to duplicate accidentally


πŸ“Š Architecture Diagram

                 Shopify Theme

                      β”‚
      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
      β”‚               β”‚               β”‚
      β”‚               β”‚               β”‚
{% stylesheet %}   {% style %}     <style>
Shared CSS        Dynamic CSS      Static CSS
Cached Once       Per Section      Plain HTML
Fastest           Flexible         One-Off
Enter fullscreen mode Exit fullscreen mode

⚑ Performance Tip

Use CSS variables to combine the best of both worlds.

<div
  class="product-card"
  style="--heading-color: {{ section.settings.heading_color }};"
>
Enter fullscreen mode Exit fullscreen mode

Then keep your reusable CSS bundled:

{% stylesheet %};
.product-card {
  color: var(--heading-color);
}
{% endstylesheet %};
Enter fullscreen mode Exit fullscreen mode

Now your CSS stays cached while each section receives its own custom value.

Benefits:

  • Less duplicated CSS
  • Smaller HTML
  • Better scalability
  • Faster rendering

πŸ’‘ Senior Developer Tip

Don't ask:

"Which CSS method should I use?"

Ask instead:

"Which responsibility belongs to which CSS method?"

Architecture beats shortcuts every time.


🎯 Final Takeaway

Great Shopify themes aren't built with more CSS.

They're built with better architecture.

Use:

  • {% stylesheet %}; for reusable, cached styles.
  • {% style %}; for dynamic styles powered by Liquid.
  • <style> only when plain HTML is all you need.

The best Shopify developers don't choose oneβ€”they know when to use each.


Have you used all three in your Shopify projects? Which one do you prefer and why?

Top comments (0)