以前にSVGのレスポンシブ対応の記事を投稿したことがありますが、その時の方法より簡単に対応できそうかつcanvasでもレスポンシブ対応できそうだったので、対応方法をメモ。
サンプルコード
まずはSVGの場合です。
今回は1600×900(16:9)のサイズのSVGを作成します。
<svg class="svg" width="1600" height="900" viewBox="0 0 1600 900"> <rect width="1600" height="900" x="0" y="0" fill="black"></rect> <rect width="1500" height="800" x="50" y="50" fill="darkgray"></rect> <rect width="1400" height="700" x="100" y="100" fill="gray"></rect> <rect width="1300" height="600" x="150" y="150" fill="lightgray"></rect> <text x="800" y="450" text-anchor="middle" font-size="72">テキスト</text> </svg>
レスポンシブ対応として、aspect-ratioでSVGと同じ比率を指定すればOKです。
.svg { display: block; width: 100%; height: auto; aspect-ratio: 16 / 9; }
これで画面幅に合わせてSVGが拡大・縮小されるようになりました。
SVGのレスポンシブ対応のデモページ
次にcanvasの場合を試してみます。
SVGの時と同じ1600×900のサイズです。
<canvas id="canvas" width="1600" height="900"></canvas>
SVGと同じような見た目になるように描画します。
var canvas = document.getElementById('canvas'); var ctx = canvas.getContext('2d'); ctx.fillStyle = 'black'; ctx.fillRect(0, 0, 1600, 900); ctx.fillStyle = 'darkgray'; ctx.fillRect(50, 50, 1500, 800); ctx.fillStyle = 'gray'; ctx.fillRect(100, 100, 1400, 700); ctx.fillStyle = 'lightgray'; ctx.fillRect(150, 150, 1300, 600); ctx.font = '72px serif'; ctx.fillStyle = 'black'; ctx.textAlign = 'center'; ctx.textBaseline = 'middle'; ctx.fillText('テキスト', 800, 450);
最後にCSSです。
SVGの時と同じく、aspect-ratioでcanvasの比率を指定します。
#canvas { display: block; width: 100%; height: auto; aspect-ratio: 16 / 9; }
これでcanvasでもレスポンシブ対応ができました。
canvasのレスポンシブ対応のデモページ
コメントが承認されるまで時間がかかります。