SVG Gradient turns black when there is a BASE tag in HTML page?

时光总嘲笑我的痴心妄想 提交于 2019-11-26 19:51:08

问题


I am using the Raphaël JavaScript Library to create SVG elements in an HTML page and using CodeIgniter as a PHP framework. In the CodeIgniter framework I need to add a <base> tag in the head of the HTML document to use JS,CSS and images, but it caused a strange problem in the SVG element.

When I use the <base> tag, gradients do not work. Instead, the object turns black. It behaves exactly the same with image filled path objects.


回答1:


SVG Gradients are defined in the document with a unique id attribute, and then referenced from another element as a URL. Typically the URL is just the identifier fragment, e.g.:

<defs>
  <linearGradient id="foo" ...>...</linearGradient>
</defs>
<rect fill="url(#foo)" ... />

If you introduce a <base> element with an href attribute, you change the meaning of such URLs in the document. Instead of being computed relative to the current document, they are computed relative to the specified separate URI.




回答2:


see also the following bug report: https://bugzilla.mozilla.org/show_bug.cgi?id=652991

apparently, the notion of referencing (the fill gradient or marker-end, I suspect, too) by URL is problematic for AJAX-style applications that also use history.pushState().




回答3:


Your gradient definition is getting corrupted Also there are sometimes problems with Opera for certain usages of gradient filled objects




回答4:


I had a similar issue - gradient is rendered all black in Chrome, but I didn't even have a <base> tag.

Changing

<stop  offset="1" style="stop-color:#F26722"/>

to

<stop  offset="1" stop-color="#F26722"/>

seemed to fix the issue.

Another unrelated bug was Chrome being unable to parse transform="translate(...)" on <g> elements, I had to move them into individual <path>-s.



来源:https://stackoverflow.com/questions/7759371/svg-gradient-turns-black-when-there-is-a-base-tag-in-html-page

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!