This poses an issue when using the CSS fill property for SVG and providing a gradient id (read more here)
The following was tested on AEM 6.2 and AEM 6.3.
For example:
if you had the following SVG markup:
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50 50">
<path class="svg-icon" d=""></path>
</svg>
<svg class="svg-helpers" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 0 0">
<linearGradient id="svg-gradient" gradientUnits="userSpaceOnUse" x1="24.602" y1="44.404" x2="24.602" y2="5.599">
<stop offset="0" stop-color="#a81d36"></stop>
<stop offset=".768" stop-color="#d52805"></stop>
</linearGradient>
</svg>
and the following ClienLibrary:
ClienLibrary path: /etc/design/clientlib/test
# css.txt
main.css
main.css
/* main.css */
.svg-icon{
fill: url(#svg-gradient) /* use the defined svg gradient with id:#svg-gradient to fill this shape */
}
Because AEM will rewrite URL’s to the relative path, the resulting CSS on the pag would actually be:
.svg-icon{
fill: url(#svg-gradient) /* use the defined svg gradient with id:#svg-gradient to fill this shape */
}
Because AEM will rewrite URL’s to the relative path, the resulting CSS on the pag would actually be:
/* AEM generated css after rewrite */
.svg-icon{
fill: url(test/#svg-gradient) /* use the defined svg gradient with id:#svg-gradient to fill this shape */
}
But this is not desired as the browser will now try to resolve that relative path to: /etc/design/clientlib/test/#svg-gradient
To overcome this, we need to tell AEM to not process this url, we can do so by adding the string “absolute:” to the beginning of the url:
.svg-icon{
fill: url(test/#svg-gradient) /* use the defined svg gradient with id:#svg-gradient to fill this shape */
}
But this is not desired as the browser will now try to resolve that relative path to: /etc/design/clientlib/test/#svg-gradient
To overcome this, we need to tell AEM to not process this url, we can do so by adding the string “absolute:” to the beginning of the url:
/* adjusted main.css */
.svg-icon{
fill: url(absolute:#svg-gradient)
}
AEM will now refrain from processing the url and generate the following desired CSS:
.svg-icon{
fill: url(absolute:#svg-gradient)
}
AEM will now refrain from processing the url and generate the following desired CSS:
/* adjusted main.css */
.svg-icon{
fill: url(#svg-gradient)
}
.svg-icon{
fill: url(#svg-gradient)
}
No comments:
Post a Comment
If you have any doubts or questions, please let us know.