Raphael を使用しており、rect を作成し、CSS を介して fill プロパティを制御したいと考えています。
古典的な方法で塗りつぶし属性を設定すると、すべてが正常に機能します。
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'
asrect
属性を示し、長方形は赤い境界線で正しくレンダリングされますが、黒一色で塗りつぶされます。
いくつかのさらなる観察:
- js は js/ フォルダー、css は css/ フォルダー、images は img/ フォルダーにあります。「../img」、「./img」、「img」を試してみましたが、同じ動作です。
- 塗りつぶしをしないと、期待どおりに白い塗りつぶしが得られます。
- 私が置く
fill: foobar
と、白い背景が得られます。 - 置く
fill: #ff0000
と、予想される赤い背景が得られます。 - 偽のファイル名を使用すると、同じ黒い背景が得られます。
- この動作は、Chrome および Firefox と一致しています。
4 番目と 5 番目のポイントから、ファイルが見つからないように見えますが、チェックする必要があったパスの組み合わせを使い果たしたと思います (css は、「../img」パスを使用して同じフォルダー内の他の画像を検索します)。 . 問題は別のところにあると思います。
似たような経験をした人はいますか?