多角形を描く – polygon要素

SVG で多角形を描くには polygon 要素を使用します。

polygon要素:書き方

polyline要素 と同じ様に 折れ曲がるポイントを points 属性で x,y と記入して行きます。

<svg width="400" height="200">
    <polygon points="10,180 150,50 300,180" fill="#F6675C" />
</svg>

ブラウザでの表示

polygon要素で三角形を描いたブラウザでの表示

多角形を線のみで描く

多角形を線のみで描くには、fill 属性値に none を指定し、stroke 属性を指定します。

<svg width="600" height="220">
    <polygon points="10,180 150,50 300,180" fill="none" stroke="#666" stroke-width="5" />
</svg>

ブラウザでの表示

三角形を線のみで描いたブラウザでの表示

線の角の形状を変更する

線の角の形状を変更するには、polyline要素 の時と同じく stroke-linejoin 属性に値を設定します。デフォルトは尖った形の miter になっています。丸くするには round、紙を折り返したような形にするには bevel を設定します。

<svg width="600" height="700">
<!-- デフォルトの折り返し -->
<svg width="600" height="220">
    <polygon points="50,180 200,50 350,180" fill="#ccc" stroke="#666" stroke-width="20" />
</svg>

<!-- 折り返しを丸く -->
    <polygon points="50,380 200,250 350,380" fill="#ccc" stroke="#666" stroke-width="20" stroke-linejoin="round" />

<!-- 折り返しを紙のようにする -->
    <polygon points="50,580 200,450 350,580" fill="#ccc" stroke="#666" stroke-width="20" stroke-linejoin="bevel" />
</svg> 

ブラウザでの表示

デフォルトの折り返し
デフォルトの折り返しをブラウザでの表示

stroke-linejoin=”round”
stroke-linejoin=

stroke-linejoin=”bevel”
stroke-linejoin=

複雑な多角形の塗りつぶし方を変更する

複雑な多角形になった場合に fill 属性での塗りつぶしが予想と違った塗りつぶし方になることがあります。

<svg width="600" height="220">
    <polygon points="10,180 150,50 250,50 110,180 210,180 350,50 400,50 180,50 50,180 270,180 400,50" fill="none" fill-rule="evenodd" stroke="#666" stroke-width="5" />
</svg> 

複雑な多角形
1

上記のような多角形を fill 属性で塗りつぶすと以下のような塗りつぶされ方になります。

<svg width="600" height="220">
    <polygon points="10,180 150,50 250,50 110,180 210,180 350,50 400,50 180,50 50,180 270,180 400,50" fill="#F6675C" stroke="#666" stroke-width="5" />
</svg> 

デフォルトの塗りつぶされ方
デフォルトの塗りつぶされ方のブラウザでの表示

これを交互に塗りつぶす様にするには、fill-rule 属性を evenodd とします。デフォルトでは fill-rule=”nonzero” となっており、図形の内側をすべて塗りつぶす様になっています。

<svg width="600" height="220">
    <polygon points="10,180 150,50 250,50 110,180 210,180 350,50 400,50 180,50 50,180 270,180 400,50" fill="#F6675C" fill-rule="evenodd" stroke="#666" stroke-width="5" />
</svg> 

fill-rule=”evenodd” にした場合の塗りつぶされ方
fill-rule=

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です