我正在使用 Raphaël JavaScript 库在 HTML 页面中创建 SVG 元素,并使用 CodeIgniter 作为 PHP 框架。在 CodeIgniter 框架中,我需要在 HTML 文档的 head 中添加 <base>
标签来使用 JS、CSS 和图片,但这会导致 SVG 元素出现奇怪的问题。
当我使用 <base>
标签时,渐变效果无法正常工作,而是将对象变为黑色。填充图像的路径对象也表现出相同的问题。
我正在使用 Raphaël JavaScript 库在 HTML 页面中创建 SVG 元素,并使用 CodeIgniter 作为 PHP 框架。在 CodeIgniter 框架中,我需要在 HTML 文档的 head 中添加 <base>
标签来使用 JS、CSS 和图片,但这会导致 SVG 元素出现奇怪的问题。
当我使用 <base>
标签时,渐变效果无法正常工作,而是将对象变为黑色。填充图像的路径对象也表现出相同的问题。
SVG渐变是用唯一的id
属性在文档中定义的,然后作为URL从另一个元素中引用。通常这个URL只是标识符片段,例如:
<defs>
<linearGradient id="foo" ...>...</linearGradient>
</defs>
<rect fill="url(#foo)" ... />
如果您使用带有`href`属性的<base>
元素,您将改变文档中此类URL的含义。这些URL不再相对于当前文档进行计算,而是相对于指定的单独URI进行计算。fill="url(http://mydomain.com/foo/bar.html#gradient)"
。然而,我建议修复CodeIgniter,不需要 <base>
标签。为什么你需要这个呢? - Phrogz<base>
的需要:https://github.com/angular/angular.js/issues/8934#issuecomment-56568466 - Bungle你的渐变定义出现了问题,可能已经损坏了。 此外,在使用填充渐变对象时,Opera 有时会出现问题。
我有一个类似的问题 - 渐变在Chrome中被渲染成全黑色,但我甚至没有使用<base>
标签。
更改
<stop offset="1" style="stop-color:#F26722"/>
到
<stop offset="1" stop-color="#F26722"/>
问题似乎已经解决。
另一个无关的 bug 是 Chrome 无法解析 <g>
元素上的 transform="translate(...)"
,我不得不将它们移动到单独的 <path>
中。