SVG → Vue

SVG から Vue コンポーネントへ

どんな SVG も .vue 単一ファイルコンポーネントに — あるいはテンプレートブロックだけを取り出して、既存のコンポーネントに貼り付けられます。

SVG → Vue

☞ すべてブラウザ内で処理 — アップロードは一切ありません

ここに SVG をドロップ

またはクリックして選択 — SVG のみ

改名は不要

この作業が React より Vue で楽な理由

Vue のテンプレートは HTML として解析されるため、SVG は書かれたままの形で入れられます。stroke-width は stroke-width のまま、class は class のまま、インラインの style 属性もそのまま効きます。変換はほぼファイルを包むだけの作業で、出力が入力とほとんど同じに見えるのはそのためです。

あとは属性のフォールスルーが引き受けます。ルート要素が 1 つなら、コンポーネントに付けた属性はそのまま svg タグに渡るので、width も class もクリックハンドラーも、prop を 1 つも宣言せずに動きます。

3 ステップ

SVG を Vue コンポーネントに変換する手順

01

SVG をドロップ

.svg ファイルを選びます。ファイルは端末内に留まります。

02

必要なブロックをコピー

.vue ファイル全体、またはテンプレートだけ。

03

プロジェクトに置く

ほかのコンポーネントと同じように import し、大きさは外側から指定します。

かんたん回答

SVG から Vue のよくある質問

props の宣言がないのはなぜですか?

必要ないからです。ルートが 1 つのコンポーネントは、渡された属性をそのまま svg タグに引き渡すので、width・height・class・イベントリスナーはすでに動きます。props を宣言するのは、その値から何かを計算したいときだけで十分です。

script setup ブロックは何のためにありますか?

コンポーネントに名前を付けるためだけです。この名前は Vue devtools や警告メッセージに表示されます。なくても描画結果は同じなので、削除してもまったく問題ありません。

SVG にあった style 要素はどこへ行きましたか?

コンポーネント下部の scoped style ブロックに移動しています。Vue はテンプレート内の style タグと script タグを破棄するため、インラインのスタイルシートをほぼ必ず含む Illustrator や Figma 書き出しの SVG は、そのままだと色がすべて失われた状態で描画されてしまいます。CSS を外に出すことで動作を保ち、scoped によってアプリの他の部分に漏れることもありません。

アイコンの色を変えるには?

直書きの fill や stroke を currentColor に置き換え、親要素の CSS で色を指定します。変換前に SVG カラーチェンジャーを使えば、ファイル内のすべての色を currentColor にまとめて変えられます。

Vue 3 が必要ですか?

この出力に関しては必要です。script setup と defineOptions は Vue 3 の機能だからです。Vue 2 でもテンプレートブロックはそのまま使えます。通常の Options API コンポーネントの template に貼り付けてください。

ファイルはアップロードされますか?

いいえ。変換はブラウザ内での単なる文字列処理です。