SVG、すっかりどこでも見かけるようになりましたね。近年、僕が仕事で作るサイトでもロゴや主要なアイコン画像を中心に、積極的に使うようになりました。
ファイルサイズ、解像度、動的な扱いやすさ等で、これまでのJPEG、PNG、GIFに比べたメリットの多いSVGだけど、とにかく取扱がめんどうに感じるのが正直なところです。
Bootstrap3→4への変化でCSSへのインラインSVG埋め込みに変わった箇所をみつけた
HTML/CSS/JSフレームワークのBootstrapのバージョン3と4のコードを見比べてたとき、メニューボタンのアイコン( こんなの→ )がバージョン3まではこんな感じで「icon-bar」クラスが割り当てられたspanタグを3つ並べて線を描画されてました。
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button>
ところが、Bootstrap4からは、HTML部分は少しシンプルになり、
<button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarsExampleDefault" aria-controls="navbarsExampleDefault" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button>
CSS側でbackground-imageプロパティでURIエンコードされたSVGが直接埋め込まれれる様になりました。
.navbar-inverse .navbar-toggler-icon { background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)"); }
主にスマホブラウザ向け表示の箇所である事もあるだろうけど、広く使われている大きなフレームワーク内で活用されているのをみると、これからはこういった形でもどんどん使っていって良さそうな気がしてましたね。
けど、このコードを作るのが超めんどくせぇ!
SVGコードをCSSのbackground-image向けのコードにかんたん変換ツール
……と言うわけでつくってみました。
Illustrator内で作ったコードを極力らくちんにURIエンコードしたSVGを埋め込んだbackground-imageのコードを生成するようにしました。本当はイラレ内で動く拡張機能かスクリプトを作った方が良いのだけど、実務ですぐに欲しかったので、とりあえず今回は僕にとって身近な手法で済ませました。
使い方は、以下の操作をすれば何となく分かると思います。動作を分かりやすくするために、生成したコードをこのページの背景に適用させるようにしました(笑)
- とりあえず「サンプル1」のボタンを押す
- 「base64に変換 + CSSプロパティ生成」のボタンを押す
……ちなみに、今回のプログラム、肝となる変換部分は5分あれば十分書ける単純な物(ほぼencodeURIComponent()を使うのみ)だけど、プレビュー表示回りの調整がその何十倍も手間が掛かりました。
実務ですぐに使いたかったとか言ってたのにねぇ。