« ^ »

PugでSVGをインクルードする

所要時間: 約 1分

includeを使ってSVGファイルをHTMLの内部に埋め込見ます。

div: div: include cc.svg

pugコマンドでhtmlを生成します。`–pretty` は出力するHTMLを整形するオプションです。

node_modules/.bin/pug example.pug --pretty

このようなHTMLが出力されます。

<div>
  <div><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
  <circle cx="50" cy="50" r="43" fill="none" stroke="#000" stroke-width="9"/>
  <path d="M50,42c-6-9-20-9,-25,0c-2,5-2,11,0,16c5,9,19,9,25,0l-6-3c-2,5-9,5-11,0c-1-1-1-9,0-10c2-5,9-4,11,0z"/>
  <path d="M78,42c-6-9-20-9,-25,0c-2,5-2,11,0,16c5,9,19,9,25,0l-6-3c-2,5-9,5-11,0c-1-1-1-9,0-10c2-5,9-4,11,0z"/>
</svg>

  </div>
</div>

サイズを指定してSVGを埋め込み

includeを使ってSVGファイルをHTMLの内部に埋め込見ます。

div: div(style="width: 30px"): include cc.svg

このようなHTMLが出力されます。

<div>
  <div style="width: 30px;"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
  <circle cx="50" cy="50" r="43" fill="none" stroke="#000" stroke-width="9"/>
  <path d="M50,42c-6-9-20-9,-25,0c-2,5-2,11,0,16c5,9,19,9,25,0l-6-3c-2,5-9,5-11,0c-1-1-1-9,0-10c2-5,9-4,11,0z"/>
  <path d="M78,42c-6-9-20-9,-25,0c-2,5-2,11,0,16c5,9,19,9,25,0l-6-3c-2,5-9,5-11,0c-1-1-1-9,0-10c2-5,9-4,11,0z"/>
</svg>

  </div>
</div>

div タグのスタイルが指定されています。 div でなくてもブロック要素であれば大丈夫です。

CSSでサイズを指定してSVGを埋め込み

埋め込んだSVGのサイズはCSSでも指定できます。

link(href="example.css" type="text/css" rel="stylesheet")
div: div.include_svg: include cc.svg

example.css::

.include_svg {
    width: 30px;
}

このようなHTMLが出力されます。

<link href="example.css" type="text/css" rel="stylesheet"/>
<div>
  <div class="include_svg"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
  <circle cx="50" cy="50" r="43" fill="none" stroke="#000" stroke-width="9"/>
  <path d="M50,42c-6-9-20-9,-25,0c-2,5-2,11,0,16c5,9,19,9,25,0l-6-3c-2,5-9,5-11,0c-1-1-1-9,0-10c2-5,9-4,11,0z"/>
  <path d="M78,42c-6-9-20-9,-25,0c-2,5-2,11,0,16c5,9,19,9,25,0l-6-3c-2,5-9,5-11,0c-1-1-1-9,0-10c2-5,9-4,11,0z"/>
</svg>

  </div>
</div>

CSSで指定されているのでそのサイズが使われます。

おわりに

使用したpackage.jsonを載せておきます。

{
  "name": "include-svg",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "pug": "^2.0.0-beta7",
    "pug-cli": "^1.0.0-alpha6"
  }
}

またQiita記事には埋め込みSVGが使えないようでした。