7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SVGをHTMLに埋め込むときのあれこれ

Last updated at Posted at 2022-06-07

SVGをHTMLに埋め込むときのあれこれ

デザイナーからSVGデータで表示させてほしいと言われても実際は色々面倒。。。
何が面倒ってもらったSVGデータをキレイにすることが一番面倒。。。
何を消していいか、どうやったら使ったらいいか、あれやこれやを記述します

SVGデータから不要なデータを削除

STEP 1. イラストレータで不要なものを削除(ほんとはデザイナーにやってもらいたい)

  • 余白を削除(アートボードの調整)
    • SP/PCで同じSVGデータを利用して画像をPCでは大きく見せたりする場合に余白があると調整が難しいため
  • グループの解除
    • SVGデータを少しでも軽くするため
    • 色をCSSで調整する際にグループがあるとその部分だけ上手く反映されないことがあるため
  • パスの結合
    • 矢印の形などでデータを見ると三角▲と四角■のデータに分かれていることがあるが、SVGデータを少しでも軽くするためやCSSで色を変更するために結合することが望ましい
  • 不要なレイヤーの削除
    • 時々何も書かれていないレイヤーが含まれていることがあるが、SVGを軽量化するために削除をしている

STEP 2. ImageOptim のような画像軽量化アプリにいれる

  • STEP 1. を行った状態でもまだ下記のように使いづらい状態なのでImageOptimなどの画像軽量化アプリにいれて不要な部分を削除します
  • そうすすと下記のように改行がなくなったり、パスがシンプルになったりします

BEFORE

qiita.svg
<svg width="36" height="36" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="" y="" width="" height="" fill="#1B1B1B"/>
<path d="" fill="#1B1B1B"/>
<path d="" fill="#1B1B1B"/>
<path d="" fill="#1B1B1B"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="" fill="#1B1B1B"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="" fill="#1B1B1B"/>
<path d="" fill="#1B1B1B"/>
<path d="" fill="#1B1B1B"/>
<rect x="" y="" width="" height="" fill="#1B1B1B"/>
<path d="" fill="#1B1B1B"/>
</svg>

AFTER

qiita.svg
<svg fill="none" height="" viewBox="" width="" xmlns="http://www.w3.org/2000/svg"><g fill="#1b1b1b"><path d=""/><path d=""/><path d=""/><path d=""/><path clip-rule="evenodd" d="" fill-rule="evenodd"/><path clip-rule="evenodd" d="" fill-rule="evenodd"/><path d=""/><path d=""/><path d=""/></g></svg>

STEP 3. ソースコードを直に修正

それでもまだ不要な箇所が残るので、下記の情報を削除します

今回はありませんでしたが、下記の情報も不要です

  • id=""
  • class=""
  • enable-background=""
qiita.svg
<svg viewBox="" xmlns="http://www.w3.org/2000/svg"><path d=""/><path d=""/><path d=""/><path d=""/><path clip-rule="evenodd" d="" fill-rule="evenodd"/><path clip-rule="evenodd" d="" fill-rule="evenodd"/><path d=""/><path d=""/><path d=""/></svg>

HTMLで使用する方法

1. SVGをそのまま記述する

  • fill="#000" で色指定が可能です
qiita.svg
<svg fill="#000" viewBox="" xmlns="http://www.w3.org/2000/svg"><path d=""/><path d=""/><path d=""/><path d=""/><path clip-rule="evenodd" d="" fill-rule="evenodd"/><path clip-rule="evenodd" d="" fill-rule="evenodd"/><path d=""/><path d=""/><path d=""/></svg>

2. HTMLにSVGを直接記述し、CSSで色調整

  • svgにclassやidを指定して色調整
qiita.svg
<svg class="foo" viewBox="" xmlns="http://www.w3.org/2000/svg"><path d=""/><path d=""/><path d=""/><path d=""/><path clip-rule="evenodd" d="" fill-rule="evenodd"/><path clip-rule="evenodd" d="" fill-rule="evenodd"/><path d=""/><path d=""/><path d=""/></svg>
qiita.css
svg {
  fill: #000;
}

.foo {
  fill: #999;
}

3. useを使用する

  • svgにidを付与し、任意のフォルダ等に格納
qiita.svg
<svg id="foo" viewBox="" xmlns="http://www.w3.org/2000/svg"><path d=""/><path d=""/><path d=""/><path d=""/><path clip-rule="evenodd" d="" fill-rule="evenodd"/><path clip-rule="evenodd" d="" fill-rule="evenodd"/><path d=""/><path d=""/><path d=""/></svg>
  • 下記のようにhrefを用いてsvgを使用し、最後にidを記述する

xlink:href はSVG2で非推奨のため href に変更しました
検証したところiOS9では表示できませんでした

qiita.html
<div class="bar">
  <svg>
    <use href="./img/foo.svg#foo"></use>
  </svg>
</div>
qiita.css
.bar {
  color: red;
}

svg {
  fill: currentColor; /* 親要素の色を継承 */
}

4. mask-imageを使用する

  • svgにidを付与し、任意のフォルダ等に格納
qiita.html
<div class="background">
  <div class="svg"></div>
</div>
qiita.css
.svg{
  width: 36px; /* 表示したいサイズ */
  height: 36px; /* 表示したいサイズ */
  mask-repeat: no-repeat;
  mask-size: 36px; /* 表示したいサイズ */
  background-color: red; /* 表示させたい色 */
  mask-image: url('foo.svg#foo');
}

/* 背景色を変更したい場合は任意の親要素で変更してください*/
.background {
  background-color: yellow; /* 表示させたい色 */
}

以上

7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?