SVG <stop> Element: Creating Color Gradients

Learn how to use the SVG &lt;stop&gt; element to define color stops in gradients. Complete guide with syntax, attributes, and practical examples.
8 min read
Believemy logo
Good to know

Introduction to the <stop> Element in SVG

When creating vector graphics with SVG, color gradients are one of the most powerful tools for bringing your creations to life. At the heart of this functionality lies the <stop> element, an essential but often overlooked component that defines color points within a gradient.

Mastering this element will enable you to create sophisticated visual effects, smooth color transitions, and professional designs directly in your HTML code. If you want to deepen your knowledge of web development and master HTML fundamentals, our HTML course will guide you step by step through this learning journey.

Good to know

💡 The <stop> element never works alone: it is always used inside a or radialGradient element to define where and how colors change.

 

Definition and Basic Syntax

What is the <stop> element?

The <stop> element is an SVG component that defines a color stop point within a gradient. Each <stop> specifies a color and its position along the gradient. By combining multiple <stop> elements, you create progressive and smooth color transitions.

Here is the basic syntax of a <stop> element:

HTML
<stop offset="0%" stop-color="#3498db" />

This simple line defines a blue color point positioned at the beginning (0%) of the gradient. But the power of <stop> lies in its combination with other elements.

 

Complete Structure with a Gradient

To use <stop>, you must integrate it within a gradient context. Here is a complete example:

HTML
<svg width="400" height="200">
  <defs>
    <linearGradient id="believemy-gradient">
      <stop offset="0%" stop-color="#667eea" />
      <stop offset="50%" stop-color="#764ba2" />
      <stop offset="100%" stop-color="#f64f59" />
    </linearGradient>
  </defs>
  <rect width="400" height="200" fill="url(#believemy-gradient)" />
</svg>

In this example, we create a three-color gradient that transitions from purple to pink through mauve. Each <stop> element defines a key point in this transition.

 

Essential Attributes of <stop>

The offset Attribute

The offset attribute defines the position of the color point along the gradient vector. It accepts two types of values:

Value TypeExampleDescription
Percentageoffset="50%"Relative position as percentage
Decimal numberoffset="0.5"Value between 0 and 1

Both notations are equivalent: offset="50%" and offset="0.5" produce exactly the same result. We recommend using percentages for better code readability.

HTML
<!-- These two notations are identical -->
<stop offset="25%" stop-color="#e74c3c" />
<stop offset="0.25" stop-color="#e74c3c" />

 

The stop-color Attribute

The stop-color attribute defines the color at this point in the gradient. You can use all CSS color formats:

HTML
<!-- Different ways to define a color -->
<stop offset="0%" stop-color="#3498db" />           <!-- Hexadecimal -->
<stop offset="25%" stop-color="rgb(52, 152, 219)" /> <!-- RGB -->
<stop offset="50%" stop-color="rgba(52, 152, 219, 0.8)" /> <!-- RGBA -->
<stop offset="75%" stop-color="hsl(204, 70%, 53%)" /> <!-- HSL -->
<stop offset="100%" stop-color="blue" />              <!-- Color name -->
Warning

Warning: if you omit the stop-color attribute, the default color will be black (#000000). Always remember to explicitly specify your colors to avoid surprises!

 

The stop-opacity Attribute

The stop-opacity attribute controls the transparency of the color at this point in the gradient. It accepts a value between 0 (fully transparent) and 1 (fully opaque).

HTML
<svg width="400" height="150">
  <defs>
    <linearGradient id="fade-gradient">
      <stop offset="0%" stop-color="#9b59b6" stop-opacity="1" />
      <stop offset="100%" stop-color="#9b59b6" stop-opacity="0" />
    </linearGradient>
  </defs>
  <rect width="400" height="150" fill="url(#fade-gradient)" />
</svg>

This code creates a fade effect where the purple color gradually fades until it becomes transparent. This technique is widely used for masking effects and overlays.

 

Advanced Practical Examples

Creating a Rainbow Gradient

Let's see how to create a complete rainbow gradient using multiple <stop> elements:

HTML
<svg width="500" height="100" xmlns="http://www.w3.org/2000/svg">
  <defs>
    <linearGradient id="rainbow" x1="0%" y1="0%" x2="100%" y2="0%">
      <stop offset="0%" stop-color="#ff0000" />    <!-- Red -->
      <stop offset="17%" stop-color="#ff8000" />   <!-- Orange -->
      <stop offset="33%" stop-color="#ffff00" />   <!-- Yellow -->
      <stop offset="50%" stop-color="#00ff00" />   <!-- Green -->
      <stop offset="67%" stop-color="#0080ff" />   <!-- Light blue -->
      <stop offset="83%" stop-color="#0000ff" />   <!-- Blue -->
      <stop offset="100%" stop-color="#8000ff" />  <!-- Violet -->
    </linearGradient>
  </defs>
  <rect width="500" height="100" fill="url(#rainbow)" rx="10" />
</svg>

Each <stop> represents a color of the visible spectrum, distributed evenly along the gradient. Note the use of rx="10" on the rectangle to round the corners.

 

Shiny Button Effect with Radial Gradient

The <stop> element also works with radial gradients to create depth effects:

HTML
<svg width="200" height="80" xmlns="http://www.w3.org/2000/svg">
  <defs>
    <radialGradient id="believemy-button" cx="50%" cy="30%" r="70%">
      <stop offset="0%" stop-color="#ffffff" stop-opacity="0.4" />
      <stop offset="40%" stop-color="#667eea" />
      <stop offset="100%" stop-color="#4c51bf" />
    </radialGradient>
  </defs>
  <rect x="10" y="10" width="180" height="60" rx="30" 
        fill="url(#believemy-button)" />
  <text x="100" y="48" text-anchor="middle" 
        fill="white" font-family="Arial" font-weight="bold">
    Sign Up
  </text>
</svg>

This code generates a button with a realistic light effect. The first <stop> creates a semi-transparent white reflection at the top of the button, while the other two define the main blue gradient.

 

Creating an Icon with Multiple Gradients

You can define multiple gradients in the same element and apply them to different shapes:

HTML
<svg width="100" height="100" viewBox="0 0 100 100">
  <defs>
    <!-- Gradient for the sun -->
    <radialGradient id="sun">
      <stop offset="0%" stop-color="#fff9c4" />
      <stop offset="50%" stop-color="#ffeb3b" />
      <stop offset="100%" stop-color="#ff9800" />
    </radialGradient>
    
    <!-- Gradient for the sky -->
    <linearGradient id="sky" x1="0%" y1="0%" x2="0%" y2="100%">
      <stop offset="0%" stop-color="#1976d2" />
      <stop offset="100%" stop-color="#81d4fa" />
    </linearGradient>
  </defs>
  
  <!-- Sky background -->
  <rect width="100" height="100" fill="url(#sky)" />
  
  <!-- Sun -->
  <circle cx="75" cy="25" r="20" fill="url(#sun)" />
</svg>

This code creates a small scene with a gradient sky and a luminous sun. Each graphic element uses its own gradient defined with <stop> elements.

 

Best Practices and Optimization

Order of stop Elements

The <stop> elements should be ordered by increasing offset value. Although modern browsers generally handle incorrect ordering, we recommend always respecting the logical order:

HTML
<!-- ✅ Good practice: ascending order -->
<linearGradient id="correct">
  <stop offset="0%" stop-color="red" />
  <stop offset="50%" stop-color="yellow" />
  <stop offset="100%" stop-color="green" />
</linearGradient>

<!-- ❌ Avoid: incorrect order -->
<linearGradient id="incorrect">
  <stop offset="100%" stop-color="green" />
  <stop offset="0%" stop-color="red" />
  <stop offset="50%" stop-color="yellow" />
</linearGradient>

 

Using CSS Styles for Colors

For better maintainability, you can use CSS properties to define the colors of your <stop> elements:

HTML
<style>
  .stop-start { stop-color: var(--primary-color, #667eea); }
  .stop-end { stop-color: var(--secondary-color, #764ba2); }
</style>

<svg width="300" height="100">
  <defs>
    <linearGradient id="theme-gradient">
      <stop offset="0%" class="stop-start" />
      <stop offset="100%" class="stop-end" />
    </linearGradient>
  </defs>
  <rect width="300" height="100" fill="url(#theme-gradient)" />
</svg>

This approach allows you to easily modify the colors of your gradients by simply changing the CSS variables, which is particularly useful for dynamic themes.

 

Reusing Gradients

Once defined in the element, a gradient can be reused as many times as needed in your SVG:

HTML
<svg width="400" height="200">
  <defs>
    <linearGradient id="course-gradient">
      <stop offset="0%" stop-color="#11998e" />
      <stop offset="100%" stop-color="#38ef7d" />
    </linearGradient>
  </defs>
  
  <!-- Reusing the same gradient -->
  <circle cx="60" cy="100" r="50" fill="url(#course-gradient)" />
  <rect x="130" y="50" width="100" height="100" fill="url(#course-gradient)" />
  <ellipse cx="320" cy="100" rx="60" ry="40" fill="url(#course-gradient)" />
</svg>

This technique reduces your code size and facilitates global modifications.

 

Common Mistakes to Avoid

Forgetting the Parent Element

The <stop> element must always be a direct child of a <linearGradient> or <radialGradient> element. A common mistake is placing it directly in the SVG:

HTML
<!-- ❌ INCORRECT: stop without gradient parent -->
<svg>
  <stop offset="0%" stop-color="blue" />
</svg>

<!-- ✅ CORRECT: stop inside a linearGradient -->
<svg>
  <defs>
    <linearGradient id="my-gradient">
      <stop offset="0%" stop-color="blue" />
    </linearGradient>
  </defs>
</svg>

 

A Single stop Element

A gradient with only one <stop> will display a solid color. To create an actual transition, you need at least two color points:

HTML
<!-- ❌ Result: solid blue color -->
<linearGradient id="incomplete">
  <stop offset="0%" stop-color="blue" />
</linearGradient>

<!-- ✅ Result: actual gradient -->
<linearGradient id="complete">
  <stop offset="0%" stop-color="blue" />
  <stop offset="100%" stop-color="purple" />
</linearGradient>
Good to know

A minimal gradient requires two <stop> elements: one at the beginning (offset 0%) and one at the end (offset 100%) to define the starting and ending colors.

 

Confusing stop-color and fill

The fill attribute does not work on <stop> elements. Always use stop-color:

HTML
<!-- ❌ INCORRECT: fill doesn't work on stop -->
<stop offset="50%" fill="red" />

<!-- ✅ CORRECT: use stop-color -->
<stop offset="50%" stop-color="red" />

 

Browser Compatibility

The <stop> element enjoys excellent compatibility with all modern browsers:

BrowserMinimum VersionSupport
Chrome1.0✅ Full
Firefox1.5✅ Full
Safari3.0✅ Full
Edge12✅ Full
Opera9.0✅ Full
Internet Explorer9✅ Full

SVG and its gradient elements have been supported for a very long time by all browsers, making it a reliable technology for your web projects.

 

Frequently Asked Questions about the <stop> Element

Question

Can you animate the colors of a <stop> element?

Yes, you can animate the stop-color and stop-opacity attributes using SVG animation elements like <animate> or with CSS and JavaScript. Here is a simple example:

HTML
<stop offset="50%" stop-color="blue">
  <animate attributeName="stop-color" 
           values="blue;red;blue" 
           dur="3s" 
           repeatCount="indefinite" />
</stop>

 

Question

How many <stop> elements can you use in a gradient?

There is no technical limit to the number of <stop> elements you can use. However, for performance and readability reasons, we recommend not exceeding 10 to 15 color points. Beyond that, the gradient becomes difficult to maintain and the visual gains are usually negligible.

 

Question

How do you create a gradient with sharp transitions rather than progressive ones?

To create sharp transitions (without fading), place two <stop> elements with different colors at the same offset:

HTML
<linearGradient id="stripes">
  <stop offset="0%" stop-color="blue" />
  <stop offset="50%" stop-color="blue" />
  <stop offset="50%" stop-color="red" />  <!-- Same offset, different color -->
  <stop offset="100%" stop-color="red" />
</linearGradient>

 

Question

How can I learn HTML and CSS?

To master HTML, CSS, and SVG techniques like gradients, we recommend following our HTML course. This course will guide you from the basics to advanced concepts, with practical exercises to reinforce your knowledge.

Related terms

Discover our hTML and CSS glossary

Browse the terms and definitions most commonly used in HTML and CSS development.

Share this article

Want to help us? Share this article on your networks or even better: on your site, in an article or in your newsletter.