🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

1回答

2935閲覧

テキストエリアの幅を文字数に合わせて自動調整したい

rei78087487

総合スコア12

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2021/03/05 07:19

テキストエリアの幅を文字数に合わせて自動調整したい

テキストエリア入力内の文字数が増えたらテキストエリアの幅が広がり、
反対に文字数が減ったらテキストエリアの幅が縮小される。

JavaScriptで上記の内容を実行できるようにしたいです。
ですが、調べてみるとテキストエリアの高さを自動調整するというのはたくさん検索できるのですが、
テキストエリアの幅の自動調整となると見つかりません。
Teratail内でも探してみましたがありませんでした。

どなたか教えて頂きたくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

int32_t

2021/03/05 07:23

高さの自動調整をする仕組みをそのまま幅に応用すればできそうに思えますが、ためしてみましたか? ためしてみて、問題が起きたらその問題を聞いてみてください。
m.ts10806

2021/03/05 07:29

widthかheightの違いではないでしょうか
m.ts10806

2021/03/05 07:30

ただ、無限に広がることになりえるので、大抵は行にあわせて広がる作りになっているだけではと。 改行できるテキストエリアのメリットを消すことになるわけですし
yambejp

2021/03/05 07:55

命題の理論だと、文字が入ってないと幅が0になりませんか?
rei78087487

2021/03/07 00:43

int32.t 様 m.ts10806 様 ご存知かもしれませんが、高さの自動調整はautosize.jsというライブラリを現在使用しています。 幅もできるかもしれないと応用を試みましたが、問題があるとすればライブラリ自体に幅の自動調整機能は無いかもしれません。 前述の通り、他の方法も試みてみましたがわかりません。 もし、調べ方も悪いのではという事もありましたら、 調べ方も含め色々ご教示頂けたらと思います。 yambe.jp 様 文字が入っていなくてもデフォルト値がありますので、ある程度の幅の固定されたテキストエリアになるみたいです。 試しに0pxにしてその状態で文字を入力してみましたが、文字数に合わせて幅が広がることはありませんでした。細い状態で縦に文字が入力された状態になります。
think49

2021/03/07 10:09

@m.ts10806 さん 一応、手動改行は効くのでtextareaのメリットは残っています。 …が、無限にウインドウサイズが横に広がる(横スクロールバーが延びる)実装が良いとは私も思いません。 例えば、teratailの [修正依頼] 欄で同実装を行うと、右端のボックスが永遠に右に逃げていくわけで見るのが大変…というわけでレイアウトに制約が発生します。 textarea要素にあった横スクロールバーをウインドウの横スクロールバーに変換するのはデメリットしかない気がします。
int32_t

2021/03/07 23:39

rei78087487さん、 autosize.jsのソースを読んで、どういう仕組で高さの自動調整をしているのか理解して、それを幅に応用すればよいのです。
guest

回答1

0

CSSのボックスモデルを踏まえれば、自ずと答えが出ると思います。

計算式は「letter-spacing * (文字数-1) + font-size * 文字数 = width」となるので、

  1. value プロパティでtextarea要素の文字列 S を得る
  2. SString#split で改行毎に区切り、Array#reduce で1行あたりの最大文字数を得る
  3. getComputedStyle()でtextarea要素の letter-spacing, width を得る
  4. letter-spacing * (文字数-1) + font-size * 文字数」を算出し、textarea要素の width 値とする

Re: rei78087487 さん

投稿2021/03/07 10:00

編集2021/03/07 10:02
think49

総合スコア18189

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問