-
Notifications
You must be signed in to change notification settings - Fork 22.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
New pages: stop-opacity and stop-color properties #35170
Changes from 6 commits
52a0245
c00765c
efed66a
bcf9013
bea75ee
82f035e
c64e7b8
d376d4d
0f98c8b
7c464cc
46eded2
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
@@ -0,0 +1,146 @@ | ||||||
--- | ||||||
title: stop-color | ||||||
slug: Web/CSS/stop-color | ||||||
page-type: css-property | ||||||
browser-compat: css.properties.stop-color | ||||||
--- | ||||||
|
||||||
{{CSSRef}} | ||||||
|
||||||
The **`stop-color`** [CSS](/en-US/docs/Web/CSS) property defines the color to use for an SVG {{SVGElement("stop")}} element within a gradient. If present, it overrides the element's {{SVGAttr("stop-color")}} attribute. | ||||||
|
||||||
> [!NOTE] | ||||||
> The `stop-color` property only applies to {{SVGElement('stop')}} element nested in an {{SVGElement("svg")}}. It doesn't apply other SVG, HTML, or pseudo-elements. | ||||||
|
||||||
## Syntax | ||||||
|
||||||
```css | ||||||
/* <color> values */ | ||||||
stop-color: red; | ||||||
stop-color: hsl(120deg 75% 25% / 60%); | ||||||
stop-color: currentcolor; | ||||||
|
||||||
/* Global values */ | ||||||
stop-color: inherit; | ||||||
stop-color: initial; | ||||||
stop-color: revert; | ||||||
stop-color: revert-layer; | ||||||
stop-color: unset; | ||||||
``` | ||||||
|
||||||
### Values | ||||||
|
||||||
- {{cssxref("color_value", "<color>")}} | ||||||
|
||||||
- : The color of the fill as any valid CSS {{cssxref("color_value", "<color>")}} value. | ||||||
estelle marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
|
||||||
## Formal definition | ||||||
|
||||||
{{CSSInfo}} | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This macro is broken here. |
||||||
|
||||||
## Formal syntax | ||||||
|
||||||
{{csssyntax}} | ||||||
|
||||||
## Examples | ||||||
|
||||||
### Defining the color stops of SVG gradients | ||||||
|
||||||
This example demonstrates the basic use case of `stop-color`, and how the CSS `stop-color` property takes precedence over the `stop-color` attribute. | ||||||
|
||||||
#### HTML | ||||||
|
||||||
We have an SVG with three {{SVGElement("rect")}} squares and three almost identical {{SVGElement("linearGradient")}} elements. Each gradient has four {{SVGElement("stop")}} elements creating gradients that go from black to white and then white to grey; the only difference between them is the `id` value. | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is done. |
||||||
|
||||||
```html | ||||||
<svg viewBox="0 0 264 100" xmlns="http://www.w3.org/2000/svg"> | ||||||
<defs> | ||||||
<linearGradient id="myGradient1"> | ||||||
<stop offset="25%" stop-color="#000" /> | ||||||
<stop offset="40%" stop-color="#fff" /> | ||||||
<stop offset="60%" stop-color="#fff" /> | ||||||
<stop offset="75%" stop-color="#333" /> | ||||||
</linearGradient> | ||||||
<linearGradient id="myGradient2"> | ||||||
<stop offset="25%" stop-color="#000" /> | ||||||
<stop offset="40%" stop-color="#fff" /> | ||||||
<stop offset="60%" stop-color="#fff" /> | ||||||
<stop offset="75%" stop-color="#333" /> | ||||||
</linearGradient> | ||||||
<linearGradient id="myGradient3"> | ||||||
<stop offset="25%" stop-color="#000" /> | ||||||
<stop offset="40%" stop-color="#fff" /> | ||||||
<stop offset="60%" stop-color="#fff" /> | ||||||
<stop offset="75%" stop-color="#333" /> | ||||||
</linearGradient> | ||||||
</defs> | ||||||
<rect x="2" y="10" width="80" height="80" fill="url('#myGradient1')" /> | ||||||
<rect x="92" y="10" width="80" height="80" fill="url('#myGradient2')" /> | ||||||
<rect x="182" y="10" width="80" height="80" fill="url('#myGradient3')" /> | ||||||
</svg> | ||||||
``` | ||||||
|
||||||
#### CSS | ||||||
|
||||||
We include a {{cssxref("stroke")}} and {{cssxref("stroke-width")}} outlining the rectangle. We define the colors of the first and last stops in each gradient, overriding their `stop-color` attribute values, using the `stop-color` property using various CSS {{cssxref("color_value", "<color>")}} syntaxes. | ||||||
chrisdavidmills marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
|
||||||
```css hidden | ||||||
svg { | ||||||
border: 1px solid; | ||||||
height: calc(100vh - 20px); | ||||||
margin-bottom: 10px; | ||||||
} | ||||||
``` | ||||||
|
||||||
```css | ||||||
rect { | ||||||
stroke: #333; | ||||||
stroke-width: 1px; | ||||||
} | ||||||
|
||||||
#myGradient1 { | ||||||
stop:first-of-type { | ||||||
stop-color: #66ccff; | ||||||
} | ||||||
stop:last-of-type { | ||||||
stop-color: #f4aab9; | ||||||
} | ||||||
} | ||||||
#myGradient2 { | ||||||
stop:first-of-type { | ||||||
stop-color: yellow; | ||||||
} | ||||||
stop:last-of-type { | ||||||
stop-color: purple; | ||||||
} | ||||||
} | ||||||
#myGradient3 { | ||||||
stop:first-of-type { | ||||||
stop-color: hsl(0deg 100% 50%); | ||||||
} | ||||||
stop:last-of-type { | ||||||
stop-color: hsl(20deg 100% 50%); | ||||||
} | ||||||
} | ||||||
``` | ||||||
|
||||||
#### Results | ||||||
|
||||||
{{EmbedLiveSample("Defining the color stops of SVG gradients", "300", "200")}} | ||||||
|
||||||
## Specifications | ||||||
|
||||||
{{Specifications}} | ||||||
|
||||||
## Browser compatibility | ||||||
|
||||||
{{Compat}} | ||||||
|
||||||
## See also | ||||||
|
||||||
- SVG {{SVGAttr("stop-color")}} attribute | ||||||
- Presentation properties: `stop-color`, {{cssxref("clip-rule")}}, {{cssxref("color-interpolation-filters")}}, {{cssxref("fill-opacity")}}, {{cssxref("fill-rule")}}, {{cssxref("fill")}}, {{cssxref("marker-end")}}, {{cssxref("marker-mid")}}, {{cssxref("marker-start")}}, {{cssxref("shape-rendering")}}, {{cssxref("stop-opacity")}}, {{cssxref("stroke")}}, {{cssxref("stroke-dasharray")}}, {{cssxref("stroke-dashoffset")}}, {{cssxref("stroke-linecap")}}, {{cssxref("stroke-linejoin")}}, {{cssxref("stroke-miterlimit")}}, {{cssxref("stroke-opacity")}}, {{cssxref("stroke-width")}}, {{cssxref("text-anchor")}}, and {{cssxref("vector-effect")}} | ||||||
- {{cssxref("opacity")}} | ||||||
- {{cssxref("background-color")}} | ||||||
- {{cssxref("color_value", "<color>")}} | ||||||
- {{cssxref("basic-shape")}} data type |
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
@@ -0,0 +1,162 @@ | ||||||
--- | ||||||
title: stop-opacity | ||||||
slug: Web/CSS/stop-opacity | ||||||
page-type: css-property | ||||||
browser-compat: css.properties.stop-opacity | ||||||
--- | ||||||
|
||||||
{{CSSRef}} | ||||||
|
||||||
The **`stop-opacity`** [CSS](/en-US/docs/Web/CSS) property the opacity of a given color gradient stop in the SVG {{SVGElement("stop")}} element. If present, it overrides the element's {{SVGAttr("stop-opacity")}} attribute. | ||||||
chrisdavidmills marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
|
||||||
The property value impacts the `stop-color`'s alpha channel; it can increase the transparency of a `<stop>`'s color but can not make the color defined by the `color-stop` property more opaque. | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Can we link them?
Suggested change
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Also we have There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is fixed. They were both supposed to be |
||||||
|
||||||
> [!NOTE] | ||||||
> The `stop-opacity` property only applies to {{SVGElement('stop')}} element nested in an {{SVGElement("svg")}}. It doesn't apply other SVG, HTML, or pseudo-elements. | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @estelle the "to" near the end of the sentence still needs to be added. |
||||||
|
||||||
## Syntax | ||||||
|
||||||
```css | ||||||
/* numeric and percentage values */ | ||||||
stop-opacity: 0.2; | ||||||
stop-opacity: 20%; | ||||||
|
||||||
/* Global values */ | ||||||
stop-opacity: inherit; | ||||||
stop-opacity: initial; | ||||||
stop-opacity: revert; | ||||||
stop-opacity: revert-layer; | ||||||
stop-opacity: unset; | ||||||
``` | ||||||
|
||||||
### Values | ||||||
|
||||||
The `<opacity-value>` is a {{cssxref("number")}} and {{cssxref("percentage")}} denoting the opacity of the SVG gradient `<stop>` element. | ||||||
chrisdavidmills marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
|
||||||
- {{cssxref("number")}} | ||||||
|
||||||
- : A numeric value between `0` and `1`, inclusive. | ||||||
|
||||||
- {{cssxref("percentage")}} | ||||||
|
||||||
- : A percentage value between `0%` and `100%`, inclusive. | ||||||
|
||||||
With `0` or `0%`, the stop is fully transparent (that is, invisible). With `1` or `100%`, the element is the full opacity of the `stop-color` value; which may or may not be partially opaque. | ||||||
chrisdavidmills marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
|
||||||
## Formal definition | ||||||
|
||||||
{{CSSInfo}} | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Same issue with the broken macro here There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. PR has been filed on MDN/data - mdn/data#753 |
||||||
|
||||||
## Formal syntax | ||||||
|
||||||
{{csssyntax}} | ||||||
|
||||||
## Examples | ||||||
|
||||||
### Defining the opacity of a SVG gradient color stop | ||||||
|
||||||
This example demonstrates the basic use case of `stop-opacity`, and how the CSS `stop-opacity` property takes precedence over the `stop-opacity` attribute. | ||||||
|
||||||
#### HTML | ||||||
|
||||||
We have an SVG with a few {{SVGElement("polygon")}} stars and three almost identical {{SVGElement("linearGradient")}} elements: each has three {{SVGElement("stop")}} elements defining three color-stops that create a gradient going from blue to white to pink; the only difference between them is the `id` value. | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is done. |
||||||
|
||||||
```html | ||||||
<svg viewBox="0 0 250 120" xmlns="http://www.w3.org/2000/svg"> | ||||||
<defs> | ||||||
<linearGradient id="myGradient1"> | ||||||
<stop offset="5%" stop-color="#66ccff" stop-opacity="1" /> | ||||||
<stop offset="50%" stop-color="#fefefe" stop-opacity="1" /> | ||||||
<stop offset="95%" stop-color="#f4aab9" stop-opacity="1" /> | ||||||
</linearGradient> | ||||||
<linearGradient id="myGradient2"> | ||||||
<stop offset="5%" stop-color="#66ccff" stop-opacity="1" /> | ||||||
<stop offset="50%" stop-color="#fefefe" stop-opacity="1" /> | ||||||
<stop offset="95%" stop-color="#f4aab9" stop-opacity="1" /> | ||||||
</linearGradient> | ||||||
<linearGradient id="myGradient3"> | ||||||
<stop offset="5%" stop-color="#66ccff" stop-opacity="1" /> | ||||||
<stop offset="50%" stop-color="#fefefe" stop-opacity="1" /> | ||||||
<stop offset="95%" stop-color="#f4aab9" stop-opacity="1" /> | ||||||
</linearGradient> | ||||||
</defs> | ||||||
<polygon points="40,10 10,100 80,40 0,40 70,100" /> | ||||||
<polygon points="125,10 95,100 165,40 85,40 155,100" /> | ||||||
<polygon points="210,10 180,100 250,40 170,40 240,100" /> | ||||||
</svg> | ||||||
``` | ||||||
|
||||||
#### CSS | ||||||
|
||||||
We include a {{cssxref("stroke")}} and {{cssxref("stroke-width")}} making the polygon path line visible. | ||||||
|
||||||
Each `polygon` has a gradient background set using the {{cssxref("fill")}} property; the gradient's`id` is the `url()` parameter. We set `magenta` as the fallback color. | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is done. |
||||||
|
||||||
We define the opacity of the stops of each gradient using the `stop-opacity` property. | ||||||
|
||||||
The SVG has a striped background to make translucency more apparent. | ||||||
chrisdavidmills marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
|
||||||
```css hidden | ||||||
svg { | ||||||
border: 1px solid; | ||||||
height: calc(100vh - 20px); | ||||||
margin-bottom: 10px; | ||||||
background: repeating-linear-gradient( | ||||||
to top left, | ||||||
white 0 9px, | ||||||
black 9px 10px | ||||||
); | ||||||
} | ||||||
``` | ||||||
|
||||||
```css | ||||||
polygon { | ||||||
stroke: #333; | ||||||
stroke-width: 1px; | ||||||
} | ||||||
polygon:nth-of-type(1) { | ||||||
fill: url("#myGradient1") magenta; | ||||||
} | ||||||
polygon:nth-of-type(2) { | ||||||
fill: url("#myGradient2") magenta; | ||||||
} | ||||||
polygon:nth-of-type(3) { | ||||||
fill: url("#myGradient3") magenta; | ||||||
} | ||||||
|
||||||
#myGradient1 stop { | ||||||
stop-opacity: 1; | ||||||
} | ||||||
#myGradient2 stop { | ||||||
stop-opacity: 0.8; | ||||||
} | ||||||
#myGradient3 stop { | ||||||
stop-opacity: 25%; | ||||||
} | ||||||
``` | ||||||
|
||||||
#### Results | ||||||
|
||||||
{{EmbedLiveSample("Defining the opacity of a SVG gradient color stop", "300", "200")}} | ||||||
|
||||||
The first star is fully opaque. The fill of the second star is 80% opaque because the color stops are slightly translucent; the `stop-opacity: 0.8;` overrode the `stop-opacity="1"` element attribute value. The fill of the last star is barely noticeable with color stops that are 25% opaque. Note the stroke is the same opaque dark grey in all cases. | ||||||
|
||||||
> [!NOTE] | ||||||
> Because we used the same `stop-opacity` value for all the sibling `<stop>` elements in the linear gradient, we could have instead used a single `<linearGradient>` with fully opaque stops, and set a value for each `<polygon>`s {{cssxref("fill-opacity")}} property instead. | ||||||
|
||||||
## Specifications | ||||||
|
||||||
{{Specifications}} | ||||||
|
||||||
## Browser compatibility | ||||||
|
||||||
{{Compat}} | ||||||
|
||||||
## See also | ||||||
|
||||||
- SVG {{SVGAttr("stop-opacity")}} attribute | ||||||
- Presentation properties: `stop-opacity`, {{cssxref("clip-rule")}}, {{cssxref("color-interpolation-filters")}}, {{cssxref("fill-opacity")}}, {{cssxref("fill-rule")}}, {{cssxref("fill")}}, {{cssxref("marker-end")}}, {{cssxref("marker-mid")}}, {{cssxref("marker-start")}}, {{cssxref("shape-rendering")}}, {{cssxref("stop-color")}}, {{cssxref("stroke")}}, {{cssxref("stroke-dasharray")}}, {{cssxref("stroke-dashoffset")}}, {{cssxref("stroke-linecap")}}, {{cssxref("stroke-linejoin")}}, {{cssxref("stroke-miterlimit")}}, {{cssxref("stroke-opacity")}}, {{cssxref("stroke-width")}}, {{cssxref("text-anchor")}}, and {{cssxref("vector-effect")}} | ||||||
- {{cssxref("opacity")}} | ||||||
- {{cssxref("background-color")}} | ||||||
- {{cssxref("color_value", "<color>")}} | ||||||
- {{cssxref("basic-shape")}} data type |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is done.