[Javascript] 任意の文字列で、レンダリングに必要な横幅を計算する
こんにちは、@yoheiMuneです。
今日は、任意の文字列に対して、その横幅がHTML上で何pxになるかを計算したい場合の、実装についてブログに書きたいと思います。
最後になりますが本ブログでは、フロントエンド、Python、PHP、サーバー、インフラ、Swift、Node.js、Java、Linux、機械学習、などの技術トピックを発信をしていきます。「プログラミングで困ったその時の、解決の糸口に!」そんな目標でブログを書き続けています。ぜひ、本ブログのRSSやTwitterをフォローして貰えたら嬉しいです ^ ^
最後までご覧頂きましてありがとうございました!
今日は、任意の文字列に対して、その横幅がHTML上で何pxになるかを計算したい場合の、実装についてブログに書きたいと思います。
何がしたいのか
例えば、「あいうえお」という文字列があった場合に、それをレンダリングする際に、何pxの横幅が必要かを計算したいというお話です。計算する上で、font-size
やletter-padding
などのcssの適用結果も考慮して、表示横幅を計算します。方法1:spanタグを用いて、文字列の横幅を計算する
さっそく実装方法です。span
タグを生成して、それに必要なスタイルなどを設定し、spanの長さを計算します。// spanを生成. var span = document.createElement('span'); // 現在の表示要素に影響しないように、画面外に飛ばしておく. span.style.position = 'absolute'; span.style.top = '-1000px'; span.style.left = '-1000px'; // 折り返しはさせない. span.style.whiteSpace = 'nowrap'; // 計測したい文字を設定する. span.innerHTML = 'あいうえお'; // 必要に応じてスタイルを適用する. span.style.fontSize = '14px'; span.style.letterSpacing = '2em'; // DOMに追加する(追加することで、ブラウザで領域が計算されます) document.body.appendChild(span); // 横幅を取得します. var width = span.clientWidth; console.log('width:', width) // 終わったらDOMから削除します. span.parentElement.removeChild(span);これで文字の横幅を計算することができました。
方法2:canvasを用いて、文字列の横幅を計算する
方法1に比べて設定可能なスタイル(css)は少ないですが、canvasを使っても、計測することができます。// canvasを生成. var canvas = document.createElement('canvas'); // コンテキストを取得. var context = canvas.getContext('2d'); // フォントを指定. context.font = '14px'; // 計測する. var metrics = context.measureText('あいうえお'); // 横幅を取得する. var width = metrics.width; console.log('width:', width);
最後に
今日は、JavaScriptで文字列の横幅を計算する方法でした。ゲームやスケジュール表など、複雑なものを作るとき以外は使わないかもしれませんが、メモとしても残しておきたいのでブログに書きました。最後になりますが本ブログでは、フロントエンド、Python、PHP、サーバー、インフラ、Swift、Node.js、Java、Linux、機械学習、などの技術トピックを発信をしていきます。「プログラミングで困ったその時の、解決の糸口に!」そんな目標でブログを書き続けています。ぜひ、本ブログのRSSやTwitterをフォローして貰えたら嬉しいです ^ ^
最後までご覧頂きましてありがとうございました!