css3 clip pathをSVGのインラインで書く

ここらへんを見て、さっくりできると思ったらすごいハマったのでメモ

結論、web上で見かける使い方ではWEBデザインに使うには実用に耐えなかった。

  • ポイント1
<svg height="0" width="0" style="position:absolute">
</svg>

svgのインラインの定義でheight="0" width="0",style="position:absolute"を設定すること
これをしないと、実際にsvgの領域が確保されてデザインが崩れる。

タグの下にsvgタグを設定するとあるが、実際には、上記の設定がされていれば、svgのタグ設置はどこでもよい。
上記のデモの場合タグの下に空白のsvg領域が確保されているので、それっぽく動いているように見えるが、
実際問題としてタグの下にも要素がある場合、無駄な余白が発生することになる。だいたい、bodyの下にsvgタグを置くようである。 ちなみに、svgファイルの場合にはdefsタグで囲えば表示されないが、インラインsvgでは無効なので設定しても領域が確保されます。

  • ポイント2
 <clipPath id="svgPath" clipPathUnits="objectBoundingBox">      

clipPathUnits="objectBoundingBox" を設定する。

There is a rather significant issue with using SVG-defined clip paths though: they are pinned to the upper left of the document. … I’m probably just missing something, but I’m not finding an obvious way to get the path to move along with the element it’s applied to, like the way clip-path works if you use a basic element right in the CSS.


これを設定しないと,HTMLの左上が原点となってクリッピングがされる。
つまり、実質ヘッダ画像等でないとクリップできない。

なので上記デモで、svgタグを上に設定すると、そのsvg領域分クリッピング対象がずれて
クリッピングができなくなる。

尚、clipPathUnits="objectBoundingBox"にすると単位がpixelベースから比率%ベースに変更になるので注意が必要。
100%=1になるので、データを変更してあげる必要がある。pxなどに単位指定不可

クリップ対象のdivが可変する場合は、アスペクト比がくずれる可能性がある。