ゆう's Blog
stroke-width

指定しない場合 → 1px が自動適用される
SVG の仕様で、線幅はスケールに影響されません

width/height を変えても stroke-width は変わらない
viewBox を使っても stroke-width は変わらない
transform="scale()" を使っても stroke-width は変わらない
SVG の線幅は常に「画面上のピクセル基準」で描かれる

<line> を <rect> で代用すること自体は技術的には可能で、実際に UI デザインやアイコン制作の現場でも「線を太くしたい」「スケールに応じて線幅も変わってほしい」という理由で使われることがあります。

SVG はデフォルトで 中央寄せ & アスペクト比維持 の表示を行う

・viewBox と実際の width/height の比率が違うと、自然にセンタリングされたように見える

・挙動は preserveAspectRatio で自由に変更できる

SVGをそのままファビコンとして埋め込む

<link rel="icon" href="data:image/svg+xml;charset=UTF-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><circle cx='50' cy='50' r='40' fill='red'/></svg>" type="image/svg+xml">

<link rel="icon" href="data:image/svg+xml;charset=UTF-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><circle cx='50' cy='50' r='40' fill='%23ff0000'/></svg>" type="image/svg+xml">

ポイント:
# → %23
" → %22(属性値の中で使うなら ' で囲むとエスケープ不要になることも)
スペース → %20(気をつけるべきは「属性値の中」と「テキストノードの中」のスペース。それ以外の構文上のスペースは、そのままで大丈夫。)

なので、viewBox='0 0 100 100' の中のスペース
0 0 100 100 → 0%200%20100%20100 にするのが安全!

SVG に テキストを追加する

ここにテキスト

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 468 60" style="width:60%; height:auto;"> <rect x="1" y="1" rx="10" ry="10" width="466" height="58" stroke="black" stroke-width="2" fill="khaki"/> <text x="10" y="30" fill="black" font-size="16">ここにテキスト</text> </svg>

水平中央テキスト

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 468 60" style="width:60%; height:auto;"> <rect x="1" y="1" rx="10" ry="10" width="466" height="58" stroke="black" stroke-width="2" fill="khaki"/> <text x="50%" y="30" text-anchor="middle" fill="black" font-size="18">水平中央テキスト</text> </svg>

上下中央テキスト

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 468 60" style="width:60%; height:auto;"> <rect x="1" y="1" rx="10" ry="10" width="466" height="58" stroke="black" stroke-width="2" fill="khaki"/> <text x="50%" y="50%" text-anchor="middle" dominant-baseline="middle" font-size="18" fill="black"> 上下中央テキスト </text> </svg>

サンプルテキスト

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 468 60" style="width:60%; height:auto;"> <rect x="1" y="1" rx="10" ry="10" width="466" height="58" stroke="black" stroke-width="2" fill="khaki"/> <text x="50%" y="50%" text-anchor="middle" dominant-baseline="middle" font-size="18" fill="#222" font-family="Noto Sans JP, sans-serif" font-weight="600"> サンプルテキスト </text> </svg>

横幅に合わせて高さを自動調整する

<svg xmlns="http://www.w3.org/2000/svg" style="width: 250px; height:auto;" viewBox="0 0 700 370">

「style=」で「height:auto;」を指定。

.svgファイルで内容が、href="data:image/png;base64,~

これは SVG ではありません。「href="data:image/png;base64,~"」は「データURLスキーム」と呼ばれるもので、画像データを直接HTMLやCSSに埋め込むための形式です。

この形式では、「data:」の後にメディアタイプ(この場合は「image/png」)、次にデータのエンコーディング(この場合は「base64」)、そして実際のエンコードされたデータ(この場合は「~」)が続きます。

したがって、このデータURLはPNG画像を表しています。SVGとは異なり、PNGはラスターグラフィックス形式で、ピクセルデータを直接エンコードします。一方、SVGはベクターグラフィックス形式で、画像を数学的な形状とパスで記述します。

transformの4つの値

移動(translate)
縮尺(scale)
回転(rotate)
傾斜(skew)

/* transformの複数指定の方法 */
transform: scale(0.5, 0.5) rotate(-45deg) translate(-256px,500px);

これ、svgに使えて便利。

/* 左右に反転 */
transform: scale(-1, 1);
/* 上下に反転 */
transform: scale(1, -1);