我正在使用 Raphael,我想创建一个矩形并通过 CSS 控制填充属性。
当我以经典方式设置填充属性时,一切正常:
space = paper.rect(0,0,1000,500).attr({fill: "url('img/cell_background.png')"});
事实上,通过这种方法,我得到了正确的填充。如果检查元素,我可以看到在rect
元素fill
中指定了属性,并且它引用了svg
's中定义的模式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'
asrect
属性,矩形正确渲染为红色边框,但填充为纯黑色。
一些进一步的观察:
- js在js/文件夹,css在css/文件夹,图片在img/文件夹。我尝试使用“../img”、“./img”和“img”,但我的行为相同;
- 如果我不放填充物,我会得到预期的白色填充物;
- 如果我把
fill: foobar
我得到一个白色的背景; - 如果我放
fill: #ff0000
我会得到预期的红色背景; - 如果我使用假文件名,我会获得相同的黑色背景;
- 该行为与 Chrome 和 Firefox 一致。
从第四点和第五点开始,似乎找不到文件,但我认为已经用尽了我应该检查的路径组合(css使用'../img'路径在同一文件夹中找到其他图像) . 我认为问题出在其他地方。
有没有人有类似的经历?