logo
コーディング

更新日

SVGでアウトラインをカスタマイズしてみよう

これまで、二回ほどSVGに関する記事を書きましたが、SVGの面白さは伝わっていますかね…!?今回はSVGのアウトライン(線)の装飾に注目!オブジェクトを徐々に描いていくラインエフェクトにも挑戦します!

SVG の基本的な情報や書き方は過去記事「アイコンフォントから SVG へ!より手軽にベクター画像を表示しよう」をご覧ください!

SVG 線種プロパティの基礎

基本的な書き方ですが、SVG のコード内に直接記述する方法と、CSS で指定する方法があります。例えば stroke プロパティを使う場合:

<svg viewBox="0 0 200 200">
  <line x1="10" y1="10" x2="190" y2="190" stroke="#000" />
</svg>

のように、 stroke="#000" と直接記述しても OK ですし、

<svg viewBox="0 0 200 200">
  <line x1="10" y1="10" x2="190" y2="190" />
</svg>

と書いて HTML でラインのみを表示させて、

svg line {
  stroke: #000;
}

CSS で指定しても OK。カスタマイズ性を考慮するなら、CSS で装飾部分を指定した方がよさそうです。それでは線を装飾するために使う主なプロパティを紹介します!

stroke

fill プロパティが要素の中身の色を定義するのに対し、stroke プロパティは、要素のアウトラインの色を定義します。アウトラインのみを表示させたい場合は、fill: none を指定すれば OK。

stroke-width

線の太さを指定するプロパティ。単位がなくても 0 以上の数値で線が表示されます。マイナスの値はエラー。SVG で指定できる単位は em、ex、px、pt、pc、cm、mm、in。

stroke-opacity

線の半透明度を 0.0 ~ 1.0 でを指定します。0 が透明、1 が不透明。

stroke-linecap

線の端の部分をどのように表示するか指定できます。butt(端の部分が線の長さと等しく平ら)、round(丸)、square(端を四角く)の三種類。デフォルトは butt になっています。これは実際に見たほうがわかりやすいですね。

stroke-linejoin

線の頂点の部分のスタイルを指定します。miter(鋭角)、round(丸)、bevel(面取り)の 3 種類。デフォルトは miter です。stroke-linecap と合わせて指定したいですね。

stroke-dasharray

点線や破線のパターンを指定します。長さの数値をコンマまたはスペースで区切ることで、自由に表現できます。一緒に使う機会が多いであろう stroke-dashoffset プロパティでは、点線の始まりの位置を指定することができます。

応用 1:プロパティを組み合わせて丸ドットのラインを描画

CSS で border-style: dotted; を指定しても、きれいな丸いドットは表示できません。SVG なら stroke-linecap で端の部分を丸め、stroke-dasharray で点線を表現するだけで OK!

元の線を少しジグザグにしておくと、不揃いな感じでかわいい。

応用 2:徐々に描かれていくラインエフェクト

CSS3 のアニメーションと組み合わせて、線を徐々に描いていく様子を表現できます(※IE 非対応)。まずはイラストを表示。

次に stroke-dasharray で少し幅の広い破線を表示します。

stroke-dashoffset で破線の開始位置を変更し、CSS3 の animation@keyframes を使って破線を動かします。うにょうにょ。動いてないよ!って人はフレーム内の「Rerun」ボタンをクリックしてください。

最後に破線の長さをのばせば、すべてのオブジェクトを包み込めます。アニメーションの stroke-dashoffset を 0 にして完成!フレーム内の「Rerun」ボタンをクリック!

手書き風文字もこんな感じで表現できます。

作例いろいろ

SVG のラインエフェクトを用いた作例をいくつか紹介します。どれも素敵なものばかり!Codepen のものはフレーム内の「Rerun」ボタンをクリックしてご覧ください!

動くラインが美しい Web サイトいろいろ

PlayStation 4 Review | Polygon

初めて見たのがこのサイトだったかも?ゲーム機のアウトラインがじわーっと描かれていきます。

SVG Drawing Animation | Demo

アウトラインが描かれた後、写真がフェードインしてきます。コードはここからダウンロードできます。

LETTERS, INC.

モノクロでとってもミニマルなデザイン。スクロールに合わせてラインが動きます。

Garden

こちらもスクロールに合わせてラインが動き、イラストが描かれます。


描画していくアニメーションだけでなく、SVG のラインを使った表現は今後も増えていきそうな予感。要チェックです!

参考記事:How SVG Line Animation Works