web-dev-qa-db-ja.com

SVG図形の特定の側面のみに線幅:1を設定する方法は?

ストローク幅の設定:SVGの<rect>要素に1を指定すると、四角形のすべての辺にストロークが配置されます。

SVG長方形の3辺のみにストローク幅を配置するにはどうすればよいですか?

89
user782860

ストロークまたはノーストロークが必要な場合は、 stroke-dasharray を使用して、ダッシュとギャップを長方形の辺と一致させることでこれを行うこともできます。

rect { fill: none; stroke: black; }
.top { stroke-dasharray: 0,50,150 }
.left { stroke-dasharray: 150,50 }
.bottom { stroke-dasharray: 100,50 }
.right { stroke-dasharray: 50,50,100 }
<svg height="300">
    <rect x="0.5" y="0.5" width="50" height="50" class="top"/>
    <rect x="0.5" y="60.5" width="50" height="50" class="left"/>
    <rect x="0.5" y="120.5" width="50" height="50" class="bottom"/>
    <rect x="0.5" y="180.5" width="50" height="50" class="right"/>
</svg>

jsfiddle を参照してください。

162
Erik Dahlström

SVGで単一の図形のさまざまな部分の視覚スタイルを変更することはできません(まだ利用できません Vector Effects モジュールはありません)。代わりに、ストロークごとに個別のシェイプを作成するか、変更する他の視覚スタイルを作成する必要があります。

特にこの場合、<rect>または<polygon>要素を使用する代わりに、長方形の3辺のみをカバーする<path>または<polyline>を作成できます。

<!-- Move to 50,50 then draw a line to 150,50, to 150,150, and then to 50,150 -->
<path d="M50,50 L150,50 150,150 50,150" />
<polyline points="50,50 150,50 150,150 50,150" />

これらのアクションの効果は、ここで確認できます: http://jsfiddle.net/b5FrF/3/

Red square with stroke on three sides

詳細については、 <polyline> およびより強力でありながら混乱を招く <path> を参照してください。形状

29
Phrogz

ストロークの3つの辺にポリラインを使用し、長方形にストロークをまったく配置しないようにすることができます。 SVGではパス/シェイプの異なる部分に異なるストロークを適用できるとは思わないので、同じ効果を得るには複数のオブジェクトを使用する必要があります。

2
wdebeaum