JavaScriptでテキストの幅を計算する


467

JavaScriptを使用して文字列の幅を計算したいのですが。固定幅フォントを使用せずにこれは可能ですか?

組み込みでない場合、私の唯一のアイデアは、各文字の幅のテーブルを作成することですが、これは、特にUnicodeとさまざまなタイプサイズ(およびすべてのブラウザー)をサポートすることは、かなり不合理です。


10
外部フォントを使用している場合は、ロード後に以下のテクニックを使用する必要があることに注意してください。それらがキャッシュされている場合、またはローカルバージョンがインストールされている場合、これに気付かない可能性があります。
Seth W. Klein

回答:


355

次のスタイルでスタイル設定されたDIVを作成します。JavaScriptで、測定しようとしているフォントサイズと属性を設定し、文字列をDIVに入れて、DIVの現在の幅と高さを読み取ります。コンテンツに合わせて伸縮し、サイズは文字列のレンダリングサイズの数ピクセル以内になります。

var fontSize = 12;
var test = document.getElementById("Test");
test.style.fontSize = fontSize;
var height = (test.clientHeight + 1) + "px";
var width = (test.clientWidth + 1) + "px"

console.log(height, width);
#Test
{
    position: absolute;
    visibility: hidden;
    height: auto;
    width: auto;
    white-space: nowrap; /* Thanks to Herb Caudill comment */
}
<div id="Test">
    abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
</div>


8
私が追加する唯一のことは、これはどのスタイルが使用されているかによって間違った寸法を与える可能性があることです。p {letter-spacing:0.1em; DIV要素が反映されないこと。適切なスタイルがテキストを使用する場所に適していることを確認する必要があります。
ジム

5
Ditto Jimのコメント-コンテナー(この場合はdiv)に、現時点では認識できないCSS選択ルールを介して他のスタイルが適用されていないことを確認してください。測定する前に、気になるものを適用する前に、コンテナからすべての関連するスタイルを削除します。
Jason Bunting

44
また、テキストがブラウザの幅を超えると思われる場合は、white-space:nowrapを入力する必要があります。
Herb Caudill、

5
@BBogは、すべてのハッキングについて、私が階下に別のハックの少ないアプローチを提案する理由です。それを見てみましょうここ
ドミ2014年

11
+1各ディメンションの目的を知りたいだけですか?
Kip

385

ではHTML 5、あなただけ使用することができますCanvas.measureText方法(詳しい説明ここを)。

このフィドルを試してください

/**
 * Uses canvas.measureText to compute and return the width of the given text of given font in pixels.
 * 
 * @param {String} text The text to be rendered.
 * @param {String} font The css font descriptor that text is to be rendered with (e.g. "bold 14px verdana").
 * 
 * @see /programming/118241/calculate-text-width-with-javascript/21015393#21015393
 */
function getTextWidth(text, font) {
    // re-use canvas object for better performance
    var canvas = getTextWidth.canvas || (getTextWidth.canvas = document.createElement("canvas"));
    var context = canvas.getContext("2d");
    context.font = font;
    var metrics = context.measureText(text);
    return metrics.width;
}

console.log(getTextWidth("hello there!", "bold 12pt arial"));  // close to 86

このフィドルは、このCanvasメソッドをBob MonteverdeのDOMベースのメソッドのバリエーションと比較するため、結果の精度を分析して比較できます。

このアプローチには、次のようないくつかの利点があります。

注:テキストをDOMに追加するときは、パディング、マージン、ボーダーも考慮してください。

注2:一部のブラウザーでは、このメソッドはサブピクセル精度を提供し(結果は浮動小数点数です)、他のブラウザーでは提供しません(結果はintのみです)。矛盾を避けるために、結果に対してMath.floor(またはMath.ceil)を実行することができます。DOMベースの方法はサブピクセル精度ではないため、この方法はここでの他の方法よりも高い精度を持っています。

このjsperf(コメントの寄稿者に感謝)によると、キャッシュがDOMベースのメソッドに追加されており、Firefoxを使用していない場合、CanvasメソッドDOMベースのメソッドはほぼ同じくらい高速です。Firefoxでは、何らかの理由で、このCanvasメソッドDOMベースのメソッドよりもはるかに高速です(2014年9月現在)。


7
これは素晴らしいオプションです、私はそれについて知りませんでした。これのパフォーマンスをDOMでの測定のパフォーマンスと比較したことがありますか?
SimplGy 2014

2
そのjsperfベンチマークにキャッシングを追加しました。現在、2つの方法はほぼ同じです:jsperf.com/measure-text-width/4
Brandon Bloom

1
@Martin Huh?「多くのHTML要素」は、ここで何かに関係しているのですか?この例のキャンバスオブジェクトは、DOMにアタッチされていません。それとは別に、キャンバスの描画コンテキストでフォントを変更しても、あなたstrokeText()またはまではキャンバスにまったく影響しませんfillText()。おそらく、別の答えについてコメントするつもりでしたか?
Ajedi32 2015

1
素晴らしい解決策。私はできるように、ドミの答えの周りにいくつかの他の方法を囲みました-指定されたスペースに収まらない場合は、末尾に省略記号(...)が付いた(潜在的に)切り捨てられた文字列を取得します可能な限り使用されます)-(おそらく切り捨てられた)文字列を含むJQuery要素を渡し、フォント属性を動的に決定するので、ハードコードする必要がなく、CSSフォント属性を壊すことなく変更できますレイアウト。JSFiddle Here:jsfiddle.net/brebey/1q94gLsu/6/embed
BRebey

2
ユーザーには表示されないので良いです。
clabe45

110

ここに私が例なしで一緒にホイップしたものがあります。全員が同じページにいるようです。

String.prototype.width = function(font) {
  var f = font || '12px arial',
      o = $('<div></div>')
            .text(this)
            .css({'position': 'absolute', 'float': 'left', 'white-space': 'nowrap', 'visibility': 'hidden', 'font': f})
            .appendTo($('body')),
      w = o.width();

  o.remove();

  return w;
}

使い方は簡単です: "a string".width()

** white-space: nowrapウィンドウの幅より広い幅の文字列を計算できるように追加されました。


2
JordanCに感謝します。私が追加することの1つは、同じページでこれを何度も呼び出しており、パフォーマンスが問題である場合、DIVを永続化し、内容を変更して幅を確認するだけです。私はこのようにしてやっただけなので、いったんすべてのことを言い終えたら、DOMはあなたが始めたときと同じになります
ボブ・モンテヴェルデ

3
このメソッドはString、プログラムによる関心の分離(コアコードとUIコードの分離)を減らすため、ここには追加しません。非常に異なるUIフレームワークを備えたプラットフォームにコアコードを移植したいと想像してみてください
Domi

23
これは悪い設計です。モデルをビューに結合するだけでなく、jQueryに直接結合します。その上、これはリフロー地獄です。これは間違いなく適切にスケーリングされません。
ジェームズ

1
float値が必要な場合は、次のように使用できますo[0].getBoundingClientRect().widthstackoverflow.com/a/16072668/936397
Alexander Olsson

1
@virusは、100人以上の人がおそらくパフォーマンスについても気にしないとよく言っています...それでも、私が言ったことの有効性や真実性を損ないません。
James

30

jQuery:

(function($) {

 $.textMetrics = function(el) {

  var h = 0, w = 0;

  var div = document.createElement('div');
  document.body.appendChild(div);
  $(div).css({
   position: 'absolute',
   left: -1000,
   top: -1000,
   display: 'none'
  });

  $(div).html($(el).html());
  var styles = ['font-size','font-style', 'font-weight', 'font-family','line-height', 'text-transform', 'letter-spacing'];
  $(styles).each(function() {
   var s = this.toString();
   $(div).css(s, $(el).css(s));
  });

  h = $(div).outerHeight();
  w = $(div).outerWidth();

  $(div).remove();

  var ret = {
   height: h,
   width: w
  };

  return ret;
 }

})(jQuery);

27

これは私にとってはうまくいきます...

// Handy JavaScript to measure the size taken to render the supplied text;
// you can supply additional style information too if you have it.

function measureText(pText, pFontSize, pStyle) {
    var lDiv = document.createElement('div');

    document.body.appendChild(lDiv);

    if (pStyle != null) {
        lDiv.style = pStyle;
    }
    lDiv.style.fontSize = "" + pFontSize + "px";
    lDiv.style.position = "absolute";
    lDiv.style.left = -1000;
    lDiv.style.top = -1000;

    lDiv.innerHTML = pText;

    var lResult = {
        width: lDiv.clientWidth,
        height: lDiv.clientHeight
    };

    document.body.removeChild(lDiv);
    lDiv = null;

    return lResult;
}

こんにちは、あなたの答えは本当に参考になっただしIE 8をサポートして下げる代わりに.styleの.cssTextを使用します。..
ディリップラジクマール

この答えは素晴らしいですが、大きなテキストを生成すると、数ピクセルが不正確になります。幅が整数ではないからですか?
Bobtroopo

20

ExtJSのJavaScriptライブラリは、「あなたが正確にどのように高く決定することができ、幅、ピクセル単位で、テキストの特定のブロックがされるように、テキストのブロックの正確なピクセル測定を提供」することをExt.util.TextMetricsと呼ばれる偉大なクラスがあります。これを直接使用するか、ソースをコードに表示して、これがどのように行われるかを確認できます。

http://docs.sencha.com/extjs/6.5.3/modern/Ext.util.TextMetrics.html


1
ExtJSには奇妙なライセンスがあります。現在のメンテナ、Sencha Companyに使用料を支払うか、アプリケーション内のすべての関連コードをオープンソースにする必要があります。これは、ほとんどの企業のショーストッパーです。一方、jQueryは、非常に寛容なMITライセンスを使用します。
devdanke

1
JavaScriptは自動的にオープンソースの要件を満たしませんか?ページを表示するすべての人にソースを提供します。
PatrickO

10
ソースコードを表示できることと、ライセンスによって定義されているオープンソースを表示できることには違いがあります。
パーカーアルト2012

ExtJSを引き続き使用している私たちのおかげで:-)
モナークワディア

1
あなたはExtJSを平和に休ませるべきでした
canbax

19

静的な文字幅マップを実行するだけの「唯一のアイデア」が好きです。それは私の目的のために実際にうまくいきます。場合によっては、パフォーマンス上の理由から、またはDOMに簡単にアクセスできないため、単一のフォントに合わせて調整されたハックのスタンドアロンの計算機が必要な場合があります。これがHelveticaに合わせて調整されたものです。文字列と(オプションで)フォントサイズを渡します:

function measureText(str, fontSize = 10) {
  const widths = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.2796875,0.2765625,0.3546875,0.5546875,0.5546875,0.8890625,0.665625,0.190625,0.3328125,0.3328125,0.3890625,0.5828125,0.2765625,0.3328125,0.2765625,0.3015625,0.5546875,0.5546875,0.5546875,0.5546875,0.5546875,0.5546875,0.5546875,0.5546875,0.5546875,0.5546875,0.2765625,0.2765625,0.584375,0.5828125,0.584375,0.5546875,1.0140625,0.665625,0.665625,0.721875,0.721875,0.665625,0.609375,0.7765625,0.721875,0.2765625,0.5,0.665625,0.5546875,0.8328125,0.721875,0.7765625,0.665625,0.7765625,0.721875,0.665625,0.609375,0.721875,0.665625,0.94375,0.665625,0.665625,0.609375,0.2765625,0.3546875,0.2765625,0.4765625,0.5546875,0.3328125,0.5546875,0.5546875,0.5,0.5546875,0.5546875,0.2765625,0.5546875,0.5546875,0.221875,0.240625,0.5,0.221875,0.8328125,0.5546875,0.5546875,0.5546875,0.5546875,0.3328125,0.5,0.2765625,0.5546875,0.5,0.721875,0.5,0.5,0.5,0.3546875,0.259375,0.353125,0.5890625]
  const avg = 0.5279276315789471
  return str
    .split('')
    .map(c => c.charCodeAt(0) < widths.length ? widths[c.charCodeAt(0)] : avg)
    .reduce((cur, acc) => acc + cur) * fontSize
}

その巨大な醜い配列は、文字コードで索引付けされたASCII文字幅です。したがって、これはASCIIをサポートするだけです(そうでない場合は、平均的な文字幅を想定しています)。さいわい、幅は基本的にフォントサイズに比例して変化するため、どのフォントサイズでも非常にうまく機能します。カーニングや合字などの認識が著しく不足しています。

「調整」するには、svgでcharCode 126(強力なチルダ)までのすべての文字をレンダリングし、バウンディングボックスを取得してこの配列に保存しました。より多くのコードと説明とデモはこちら


1
それはスマートな解決策です、素晴らしいものです:)私は常に同じフォント/サイズを使用しているので、それは私によく合います。DOM / Canvasソリューションのパフォーマンスが本当の問題であることがわかりました。
mikeapr4 2018

1
キャンバスの必要性を取り除きます+1
フランジュ

あなたはそれを取り除くことができ* fontSize、単に「em」を使用することができます
Matt Fletcher

なんて素晴らしい答えでしょう!
almosnow


7

キャンバスを使用できるので、cssプロパティをそれほど扱う必要はありません。

var canvas = document.createElement("canvas");
var ctx = canvas.getContext("2d");
ctx.font = "20pt Arial";  // This can be set programmaticly from the element's font-style if desired
var textWidth = ctx.measureText($("#myElement").text()).width;

DOM要素を作成してcssプロパティを指定するよりも(2dコンテキストの取得などで)かなり重いのではないですか?
Pharao2k

1
すでにキャンバスを使用している場合、これはクリーンなアプローチです。しかし、非常に遅い。measureTextの呼び出しだけで約8〜10ミリ秒かかります(Chromeを使用)。
Rui Marques

6
<span id="text">Text</span>

<script>
var textWidth = document.getElementById("text").offsetWidth;
</script>

<span>タグに他のスタイルが適用されていない限り、これは機能するはずです。offsetWidthには、ボーダーの幅、水平パディング、垂直スクロールバーの幅などが含まれます。


これが多かれ少なかれ上位の解決策ですが、テキストが複数の行に分割される可能性があるため、CSSスタイルをテキストに追加して、実際の完全なテキスト幅を取得します。
Adrian Maire、2014年

2

以下のコードの抜粋では、スパンタグの幅を「計算」し、長すぎる場合は「...」を追加し、親に収まるまで(または、千回)

CSS

div.places {
  width : 100px;
}
div.places span {
  white-space:nowrap;
  overflow:hidden;
}

HTML

<div class="places">
  <span>This is my house</span>
</div>
<div class="places">
  <span>And my house are your house</span>
</div>
<div class="places">
  <span>This placename is most certainly too wide to fit</span>
</div>

JavaScript(jQueryを使用)

// loops elements classed "places" and checks if their child "span" is too long to fit
$(".places").each(function (index, item) {
    var obj = $(item).find("span");
    if (obj.length) {
        var placename = $(obj).text();
        if ($(obj).width() > $(item).width() && placename.trim().length > 0) {
            var limit = 0;
            do {
                limit++;
                                    placename = placename.substring(0, placename.length - 1);
                                    $(obj).text(placename + "...");
            } while ($(obj).width() > $(item).width() && limit < 1000)
        }
    }
});

2
代わりに、一度に1つの文字をループのバイナリ検索をお試しください:にアレックスの答えに私のコメントを参照してくださいstackoverflow.com/questions/536814/...
StanleyH

@StanleyH:良い考え-できるだけ早くあなたの提案を実装します。
Techek

2

要素を表示する直前にテキストが収まるかどうかを検出することをお勧めします。したがって、要素が画面上にあることを必要としないこの関数を使用できます。

function textWidth(text, fontProp) {
    var tag = document.createElement("div");
    tag.style.position = "absolute";
    tag.style.left = "-999em";
    tag.style.whiteSpace = "nowrap";
    tag.style.font = fontProp;
    tag.innerHTML = text;

    document.body.appendChild(tag);

    var result = tag.clientWidth;

    document.body.removeChild(tag);

    return result;
}

使用法:

if ( textWidth("Text", "bold 13px Verdana") > elementWidth) {
    ...
}

2

場合、誰が、両方の文字列の幅を測定する方法を探してここに来た、特定の幅に収まる最大のフォントサイズだか知っている方法を、ここではバイナリサーチとドミのソリューション@上に構築機能があります:

/**
 * Find the largest font size (in pixels) that allows the string to fit in the given width.
 * 
 * @param {String} text The text to be rendered.
 * @param {String} font The css font descriptor that text is to be rendered with (e.g. "bold ?px verdana") -- note the use of ? in place of the font size.
 * @param {width} the width in pixels the string must fit in
 * @param {minFontPx} the smallest acceptable font size in pixels
 * @param {maxFontPx} the largest acceptable font size in pixels
**/
function GetTextSizeForWidth( text, font, width, minFontPx, maxFontPx )
{
    for ( ; ; )
    {
        var s = font.replace( "?", maxFontPx );
        var w = GetTextWidth( text, s );
        if ( w <= width )
        {
            return maxFontPx;
        }

        var g = ( minFontPx + maxFontPx ) / 2;

        if ( Math.round( g ) == Math.round( minFontPx ) || Math.round( g ) == Math.round( maxFontPx ) )
        {
            return g;
        }

        s = font.replace( "?", g );
        w = GetTextWidth( text, s );
        if ( w >= width )
        {
            maxFontPx = g;
        }
        else
        {
            minFontPx = g;
        }
    }
}

これは驚くほど機能します(Domiの回答のコードと相まって)
r3wt

1

このコードを試してください:

function GetTextRectToPixels(obj)
{
var tmpRect = obj.getBoundingClientRect();
obj.style.width = "auto"; 
obj.style.height = "auto"; 
var Ret = obj.getBoundingClientRect(); 
obj.style.width = (tmpRect.right - tmpRect.left).toString() + "px";
obj.style.height = (tmpRect.bottom - tmpRect.top).toString() + "px"; 
return Ret;
}

1

テキストの幅と高さは、clientWidthおよびで取得できます。clientHeight

var element = document.getElementById ("mytext");

var width = element.clientWidth;
var height = element.clientHeight;

スタイルの位置プロパティが絶対に設定されていることを確認してください

element.style.position = "absolute";

ないの内側にあることが要求div内ですることができ、pまたはspan


1

オフ構築ディーパックナダールの答え、私はテキストとフォントスタイルを受け入れるための関数のパラメータの変更を。要素を参照する必要はありません。また、にfontOptionsはデフォルトがあるため、すべてを指定する必要はありません。

(function($) {
  $.format = function(format) {
    return (function(format, args) {
      return format.replace(/{(\d+)}/g, function(val, pos) {
        return typeof args[pos] !== 'undefined' ? args[pos] : val;
      });
    }(format, [].slice.call(arguments, 1)));
  };
  $.measureText = function(html, fontOptions) {
    fontOptions = $.extend({
      fontSize: '1em',
      fontStyle: 'normal',
      fontWeight: 'normal',
      fontFamily: 'arial'
    }, fontOptions);
    var $el = $('<div>', {
      html: html,
      css: {
        position: 'absolute',
        left: -1000,
        top: -1000,
        display: 'none'
      }
    }).appendTo('body');
    $(fontOptions).each(function(index, option) {
      $el.css(option, fontOptions[option]);
    });
    var h = $el.outerHeight(), w = $el.outerWidth();
    $el.remove();
    return { height: h, width: w };
  };
}(jQuery));

var dimensions = $.measureText("Hello World!", { fontWeight: 'bold', fontFamily: 'arial' });

// Font Dimensions: 94px x 18px
$('body').append('<p>').text($.format('Font Dimensions: {0}px x {1}px', dimensions.width, dimensions.height));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


0

これはDepakのエントリとかなり似ていると思いますが、impressivewebsページの記事で公開されたLouis Lazarisの作品に基づいています

(function($){

        $.fn.autofit = function() {             

            var hiddenDiv = $(document.createElement('div')),
            content = null;

            hiddenDiv.css('display','none');

            $('body').append(hiddenDiv);

            $(this).bind('fit keyup keydown blur update focus',function () {
                content = $(this).val();

                content = content.replace(/\n/g, '<br>');
                hiddenDiv.html(content);

                $(this).css('width', hiddenDiv.width());

            });

            return this;

        };
    })(jQuery);

関数がコントロールに関連付けられた直後に関数呼び出しを実行するために、fitイベントが使用されます。

例:$( 'input')。autofit()。trigger( "fit");


0

jQueryなし:

String.prototype.width = function (fontSize) {
    var el,
        f = fontSize + " px arial" || '12px arial';
    el = document.createElement('div');
    el.style.position = 'absolute';
    el.style.float = "left";
    el.style.whiteSpace = 'nowrap';
    el.style.visibility = 'hidden';
    el.style.font = f;
    el.innerHTML = this;
    el = document.body.appendChild(el);
    w = el.offsetWidth;
    el.parentNode.removeChild(el);
    return w;
}

// Usage
"MyString".width(12);

数値を設定しても機能しません。スペースは必要ないため、削除しても問題なく機能します:fontSize + "px arial"-> fontSize + "px arial"、それだけです。
AlbertoAcuña2017年

0

作業例のフィドル:http : //jsfiddle.net/tdpLdqpo/1/

HTML:

<h1 id="test1">
    How wide is this text?
</h1>
<div id="result1"></div>
<hr/>
<p id="test2">
    How wide is this text?
</p>
<div id="result2"></div>
<hr/>
<p id="test3">
    How wide is this text?<br/><br/>
    f sdfj f sdlfj lfj lsdk jflsjd fljsd flj sflj sldfj lsdfjlsdjkf sfjoifoewj flsdjfl jofjlgjdlsfjsdofjisdojfsdmfnnfoisjfoi  ojfo dsjfo jdsofjsodnfo sjfoj ifjjfoewj fofew jfos fojo foew jofj s f j
</p>
<div id="result3"></div>

JavaScriptコード:

function getTextWidth(text, font) {
    var canvas = getTextWidth.canvas ||
        (getTextWidth.canvas = document.createElement("canvas"));
    var context = canvas.getContext("2d");
    context.font = font;
    var metrics = context.measureText(text);
    return metrics.width;
};

$("#result1")
.text("answer: " +
    getTextWidth(
             $("#test1").text(),
             $("#test1").css("font")) + " px");

$("#result2")
    .text("answer: " +
        getTextWidth(
             $("#test2").text(),
             $("#test2").css("font")) + " px");

$("#result3")
    .text("answer: " +
        getTextWidth(
             $("#test3").text(),
             $("#test3").css("font")) + " px");

0

このElement.getClientRects()メソッドはDOMRect、クライアントの各CSS境界ボックスの外接する四角形を示すオブジェクトのコレクションを返します。戻り値はDOMRect、要素に関連付けられているCSS境界ボックスごとに1つずつ、オブジェクトのコレクションです。各DOMRectオブジェクトは、読み取り専用含まlefttoprightおよびbottom左上のビューポートのに左上相対有する画素に境界ボックスを記述するプロパティ、、。

MozillaコントリビューターによるElement.getClientRects()は、CC-BY-SA 2.5の下でライセンスされています。

返されたすべての長方形の幅を合計すると、ピクセル単位の合計テキスト幅が得られます。

document.getElementById('in').addEventListener('input', function (event) {
    var span = document.getElementById('text-render')
    span.innerText = event.target.value
    var rects = span.getClientRects()
    var widthSum = 0
    for (var i = 0; i < rects.length; i++) {
        widthSum += rects[i].right - rects[i].left
    }
    document.getElementById('width-sum').value = widthSum
})
<p><textarea id='in'></textarea></p>
<p><span id='text-render'></span></p>
<p>Sum of all widths: <output id='width-sum'>0</output>px</p>


0

私は小さなES6モジュールを作成しました(jQueryを使用):

import $ from 'jquery';

const $span=$('<span>');
$span.css({
    position: 'absolute',
    display: 'none'
}).appendTo('body');

export default function(str, css){
    $span[0].style = ''; // resetting the styles being previously set
    $span.text(str).css(css || {});
    return $span.innerWidth();
}

使いやすい:

import stringWidth from './string_width';
const w = stringWidth('1-3', {fontSize: 12, padding: 5});

あなたが気づくかもしれないクールなこと-それはすべてのCSS属性、さらにはパディングを考慮に入れることを可能にします!


0

また、これは、テキストの複製手法よりも正確なcreateRangeを使用して行うこともできます。

function getNodeTextWidth(nodeWithText) {
    var textNode = $(nodeWithText).contents().filter(function () {
        return this.nodeType == Node.TEXT_NODE;
    })[0];
    var range = document.createRange();
    range.selectNode(textNode);
    return range.getBoundingClientRect().width;
}

-1
var textWidth = (function (el) {
    el.style.position = 'absolute';
    el.style.top = '-1000px';
    document.body.appendChild(el);

    return function (text) {
        el.innerHTML = text;
        return el.clientWidth;
    };
})(document.createElement('div'));
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.