【发布时间】:2012-08-20 00:49:31
【问题描述】:
我正在使用 Raphael,我想创建一个矩形并通过 CSS 控制填充属性。
当我以经典方式设置填充属性时,一切正常:
space = paper.rect(0,0,1000,500).attr({fill: "url('img/cell_background.png')"});
事实上,通过这种方法,我得到了正确的填充。如果检查元素,我可以看到在rect 元素中指定了fill 属性,它引用了svg 的defs 中定义的模式。
<svg>
...
<defs style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); ">
<pattern style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); "
id="E6992022-9B75-4D1E-9D44-6EC45CE420A1" x="0" y="0"
patternUnits="userSpaceOnUse" height="5" width="9"
patternTransform="matrix(1,0,0,1,0,0) translate(0,0)">
<image style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); "
x="0" y="0"
href="img/cell_background.png" width="9" height="5">
</image>
</pattern>
</defs>
<rect style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); "
x="0" y="0" width="1000" height="500" r="0" rx="0" ry="0"
fill="url(#E6992022-9B75-4D1E-9D44-6EC45CE420A1)" stroke="#000"
class="space">
</rect>
...
</svg>
如果我改为使用以下代码创建rect:
space = paper.rect(0,0,1000,500);
space.node.setAttribute("class","space");
然后在我定义的 .css 中:
.space {
fill: url('img/cell_background.png');
stroke: #ff0000;
}
然后检查的html显示fill='none'作为rect属性,矩形正确渲染为红色边框,但填充为纯黑色。
一些进一步的观察:
- js在js/文件夹,css在css/文件夹,图片在img/文件夹。我尝试使用 '../img'、'./img' 和 'img' 但我的行为相同;
- 如果我不添加填充物,我会得到预期的白色填充物;
- 如果我输入
fill: foobar,我将获得白色背景; - 如果我输入
fill: #ff0000,我会得到预期的红色背景; - 如果我使用假文件名,我会得到相同的黑色背景;
- 该行为与 Chrome 和 Firefox 一致。
从第四点和第五点开始,似乎找不到文件,但我认为已经用尽了我应该检查的路径组合(css 使用 '../img 在同一文件夹中找到其他图像' 小路)。我认为问题出在其他地方。
有人有类似经历吗?
【问题讨论】:
-
你在尝试使用 CSS 来设置 SVG 元素的属性?
-
是的。这是完全错误的吗?由于它与笔画一起使用,我天真地认为它也可以与填充一起使用。傻我!
-
我检查了你可以在 SVG 上使用 CSS:w3.org/TR/SVG/styling.html#StylingWithCSS
-
网址应该与 CSS 文件相关,因此 ../img 似乎是正确的。您是在本地运行它还是在 Web 服务器中运行它,因为您可能会遇到本地文件访问安全限制。浏览器错误控制台有什么东西吗?
-
它是在本地运行的,正如我所说的,如果我不使用css,图像可以正确显示,我认为不是权限问题。在 Firefox Web 控制台上,我看不到与这些行相关的任何错误或警告。我看不到对该图像的任何请求。
标签: javascript css svg raphael