SVGの追加や変更のとき、その都度調べているので忘れがちなことをまとめておきます。
SVGスプライト
SVGスプライトは1つのSVGファイルに複数のアイコンを記述し、<use>
要素で参照する方法です。
必要なアイコンは1箇所にまとめられるため、HTMLファイルの煩雑化を防ぎつつ、アイコンの色変更などSVG自体が持つ恩恵を享受できることがメリットです。
SVGスプライトを作成するためのビルドプロセスが複雑になることがデメリットです。
ライセンス
ライセンスに抵触しないように。(CC BY 4.0、MIT License、Apache License 2.0など)
クレジット表記として提供元のライセンスやライセンスがあるURLを忘れずに書くこと。
また、ライセンス上クレジット表記の必要がなくても、保守性の観点から提供元の名前やURL、使用したSVGの名前、URLなどを記載した方がよいと考えます。
下のSVGのライセンスなど
Copyright (c) 2020-2024 Paweł Kuna
License:https://github.com/tabler/tabler-icons/blob/main/LICENSE
(MIT license)
Tabler Icons heart https://tablericons.com/icon/heart
SVG
元のSVG例:
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-linecap="round"
stroke-linejoin="round"
width="24"
height="24"
stroke-width="2"
>
<path
d="M19.5 12.572l-7.5 7.428l-7.5 -7.428a5 5 0 1 1 7.5 -6.566a5 5 0 1 1 7.5 6.572"
></path>
</svg>
元のSVGからsymbol
タグで利用するもの
path
タグの内容viewBox
属性と値
path
タグのほかにg
タグなどもある。
SVG 要素リファレンス - SVG: スケーラブルベクターグラフィック | MDN
fill
、stroke
、width
、height
などはCSSで指定する。
HTMLに直接記述する場合
ページのどこかで、SVGの呼び出し元コードを読み込んでおく。
ここでは表示しない、あくまで呼び出し元なので、symbol
タグでくくっておく。
symbol
タグは、その場で表示するのではなく、あとでuse
タグで呼び出す用として定義だけをするものです。
例:id="upVoteIcon"
を指定しているsymbol
タグの内容を、use
タグのhref="#upVoteIcon"
で呼び出す
SVGの呼び出し元:
<svg style="display: none" xmlns="http://www.w3.org/2000/svg">
<defs>
<symbol id="upVoteIcon" viewBox="0 0 24 24">
<path d="M19.5 12.572l-7.5 7.428l-7.5 -7.428a5 5 0 1 1 7.5 -6.566a5 5 0 1 1 7.5 6.572"></path>
</symbol>
</defs>
</svg>
use
タグで呼び出す:
<svg role="img" aria-label="いいねアイコン" class="upvote-icon" width="24" height="24">
<use href="#upVoteIcon"></use>
</svg>
JavaScript,CSSはclass="upvote-icon"
を指定して利用可能。
HTMLに直接記述する場合はxmlns="http://www.w3.org/2000/svg"
はなくてもいいらしです。
Webコンテンツをよりアクセシブルにするためのrole
、aria-*
属性は適宜指定。
Accessible Rich Internet Applications (WAI-ARIA) 1.1
HTML5 & CSS3 リファレンス - role属性 (要素の役割(WAI-ARIA))
defs
タグはアクセシビリティ、可読性のためにあったほうがいい。
xlink:href
属性があった場合、非推奨なので削除可能。
複数のSVGがある場合
複数のSVGがある場合、defs
タグの内側に書いていく。
<svg xmlns="http://www.w3.org/2000/svg">
<defs>
<symbol id="upVoteIcon" viewBox="0 0 24 24">
<path d="..."></path>
</symbol>
<symbol id="upVoteCounter" viewBox="0 0 24 24">
<path d="..."></path>
</symbol>
</defs>
</svg>
SVGのsymbolタグの設置場所
HTMLファイル内で<symbol>
タグを配置するのに最適な場所は、<body>
タグ内の先頭付近。
<body>
<svg style="display: none" xmlns="http://www.w3.org/2000/svg">
<defs>
<symbol id="upVoteIcon" viewBox="0 0 24 24">
<path d="M19.5 12.572l-7.5 7.428l-7.5 -7.428a5 5 0 1 1 7.5 -6.566a5 5 0 1 1 7.5 6.572"></path>
</symbol>
</defs>
</svg>
外部ファイルに記述する場合
icons.svg
ファイルに記述する場合
icons.svg
:
<svg xmlns="http://www.w3.org/2000/svg">
<defs>
<symbol id="upVoteIcon" viewBox="0 0 24 24">
<path d="M19.5 12.572l-7.5 7.428l-7.5 -7.428a5 5 0 1 1 7.5 -6.566a5 5 0 1 1 7.5 6.572"></path>
</symbol>
</defs>
</svg>
HTML:
<svg role="img" aria-label="いいねアイコン" class="upvote-icon" width="24" height="24">
<use href="icons.svg#upVoteIcon"></use>
</svg>
コメントなし:
コメントを投稿