SVGマスターへの道

色とスタイル - SVGの見た目を飾ろう

これまでのページでSVGの骨組みや基本的な図形、そして複雑なパスの描き方を学びましたね。でも、そのままでは白黒だったり、ちょっと地味だったりするかもしれません。このページでは、SVGの図形に色を塗ったり、線のスタイルを変えたり、透明にしたりと、見た目を華やかにカスタマイズする方法を探求します!

基本の「塗り(Fill)」と「線(Stroke)」

SVGの図形の見た目を決める最も基本的な属性は fill(塗りつぶし)と stroke(枠線)です。

fill - 図形の内部を塗りつぶす

fill 属性は、図形の内部を特定の色で塗りつぶします。色の指定方法はたくさんあります。

fill デモ

{/* currentColor demoのため親に色指定 */}

<rect fill="#3498db" ... />

stroke - 図形の輪郭線を描く

stroke 属性は、図形の輪郭線の色を指定します。色の指定方法は fill と同じです。none を指定すると線は描かれません。

線のスタイルを極める

stroke で線の色を決めたら、次は線の太さや端の形、点線など、もっと細かいスタイルを設定してみましょう。

stroke-width - 線の太さ

線の太さを数値で指定します。通常、単位なしの数値はピクセルとして扱われます。

strokestroke-width デモ

<circle stroke="#e67e22" stroke-width="4" ... />

stroke-linecap - 線の端点の形

開いたパス(例えば <line> や閉じていない <path>)の線の端をどのような形にするかを指定します。

stroke-linecap デモ

<line stroke-linecap="butt" ... />

stroke-linejoin - 線の角の形

パスの線が折れ曲がる部分(角)の形状を指定します。

stroke-miterlimit: stroke-linejoin="miter" の時のみ有効。線の太さに対するマイターの長さの最大比率を指定します。デフォルトは4。これを超えると、角は bevel のように処理されます。

stroke-linejoinstroke-miterlimit デモ

<polygon stroke-linejoin="miter" stroke-miterlimit="4" ... />

stroke-dasharraystroke-dashoffset - 点線・破線

stroke-dasharray は、点線や破線のパターンを定義します。カンマまたはスペースで区切られた数値のリストで、線部分の長さと空白部分の長さを交互に指定します (例: "5, 3" は長さ5の線、長さ3の空白の繰り返し)。

stroke-dashoffset は、ダッシュパターンの開始位置をずらします。アニメーションで線が動いているように見せる効果にも使われます。

stroke-dasharraystroke-dashoffset デモ

<line stroke-dasharray="10,5" stroke-dashoffset="0" ... />

透明度 (Opacity)

図形やその一部を半透明にするには、以下の属性を使います。値は 0.0 (完全に透明) から 1.0 (完全に不透明) の範囲で指定します。

透明度デモ

<rect opacity="1" fill-opacity="1" stroke-opacity="1" ... />

CSSによるスタイリング

これまで見てきた fillstroke などの属性は「プレゼンテーション属性」と呼ばれ、SVG要素に直接記述してスタイルを指定します。しかし、SVGのスタイルはCSSを使っても指定できます。CSSを使うと、スタイルを一元管理したり、ホバーエフェクトをつけたりと、より高度な制御が可能です。

スタイルの指定方法

  1. プレゼンテーション属性: <rect fill="blue" />
  2. インラインCSS (style属性): <rect style="fill: blue;" />
  3. 内部スタイルシート (<style>要素): SVG内の<defs>や直接<svg>直下に<style>タグを置き、CSSルールを記述します。
    <svg>
      <style>
        .myRect { fill: blue; stroke: red; stroke-width: 2; }
        .myRect:hover { fill: green; }
      </style>
      <rect class="myRect" x="10" y="10" width="50" height="50" />
    </svg>
  4. 外部スタイルシート: HTMLファイルから通常のCSSファイル(例: styles.css)を読み込み、その中でSVG要素のIDやクラスに対してスタイルを定義します。これが最も一般的な方法です。

CSSプロパティ名は、SVGの属性名とほぼ同じですが、ハイフン(-)が入るものがハイフン区切りになります (例: stroke-width)。

内部CSSエディタデモ

下のテキストエリアでSVG要素のスタイルを編集し、「適用」ボタンを押してみてください。(例: .styledRect { fill: orange; stroke: purple; })

多くのプレゼンテーション属性よりも、CSSで指定されたスタイルの方が優先度が高いです。ただし、!importantが使われるとさらに複雑になります。

豆知識 (English/日本語)

Did you know? The `currentColor` keyword in SVG (and CSS) is incredibly useful. If you set `fill="currentColor"` or `stroke="currentColor"` on an SVG element, it will inherit the value of the `color` CSS property from its parent or itself. This makes it easy to theme SVG icons to match surrounding text color, for example.

知っていましたか?SVG (およびCSS) の `currentColor` というキーワードは非常に便利です。SVG要素に `fill="currentColor"` や `stroke="currentColor"` を設定すると、その要素自身または親要素のCSSの `color` プロパティの値を継承します。これにより、例えばSVGアイコンの色を周囲のテキストの色に合わせるなど、テーマ設定が簡単になります。

まとめ

このページでは、SVG図形の見た目を豊かにするための様々なスタイリング方法を学びました。fillstroke といった基本的な属性から、線の端点や角の形状、点線、透明度、そしてCSSを使った柔軟なスタイリングまで、多くのテクニックがあります。

これらの知識を駆使すれば、SVGで表現できるデザインの幅がぐっと広がります。インタラクティブデモで色々試して、各プロパティの効果を確かめてみてください。

次は、SVGで文字を扱う方法について学ぶ「文字だって描ける - SVGテキスト入門」です。図形だけでなく、美しいテキストもSVGの重要な要素ですよ!

このページの要約

日本語

SVGの図形は、fill(塗りつぶし)やstroke(枠線)属性で基本的な色を指定できます。色の指定方法には、名前付きカラー、16進数、RGB(A)、HSL(A)、そしてcurrentColorがあります。線のスタイルはstroke-width(太さ)、stroke-linecap(端点)、stroke-linejoin(角)、stroke-dasharray(点線)などで細かく調整可能です。透明度はopacityfill-opacitystroke-opacityで設定します。これらのスタイルはプレゼンテーション属性として直接要素に記述するほか、CSS(インライン、内部スタイルシート、外部スタイルシート)を使っても指定でき、より柔軟な管理が可能です。

English

SVG shapes can be styled using fill and stroke attributes for basic colors, specified by named colors, hex codes, RGB(A), HSL(A), or `currentColor`. Line styles are further customizable with stroke-width, stroke-linecap (end caps), stroke-linejoin (corners), and stroke-dasharray (dashed lines). Opacity can be controlled with opacity, fill-opacity, and stroke-opacity. These styles can be applied directly as presentation attributes or more flexibly via CSS (inline, internal, or external stylesheets).

Español

Las formas SVG se pueden diseñar usando los atributos fill (relleno) y stroke (trazo) para colores básicos, especificados por nombres de color, códigos hexadecimales, RGB(A), HSL(A) o `currentColor`. Los estilos de línea se pueden personalizar aún más con stroke-width (ancho de trazo), stroke-linecap (extremos de línea), stroke-linejoin (uniones de línea) y stroke-dasharray (líneas discontinuas). La opacidad se puede controlar con opacity, fill-opacity y stroke-opacity. Estos estilos se pueden aplicar directamente como atributos de presentación o de forma más flexible mediante CSS (en línea, hojas de estilo internas o externas).

中文

SVG形状可以使用fill(填充)和stroke(描边)属性来设置基本颜色样式,颜色可以通过命名颜色、十六进制代码、RGB(A)、HSL(A)或currentColor指定。线条样式可以通过stroke-width(描边宽度)、stroke-linecap(线端样式)、stroke-linejoin(线条连接样式)和stroke-dasharray(虚线样式)进一步自定义。不透明度可以通过opacityfill-opacitystroke-opacity控制。这些样式可以直接作为表示属性应用,也可以通过CSS(内联、内部或外部样式表)更灵活地应用。