問題点
textareaの高さと幅を動的に変化させるJavaScriptを作成しようとしています。
<textarea>を表示させる段階で、必要な高さと幅を計算して表示すれば、
定義範囲をはみ出さないように(オーバーフローせずに)表示できると考えたのですが、
予め決めたコンテンツの高さに余分な余白をつけた高さを、ブラウザが付加してしまい、
表示させるつもりがなかったスクロールバーが表示されてしまい、困っています。
(margin, border, paddingを0にしたとしても、です。)
文章での説明が難しいので、
実験的に以下URLにあるようなコードを作成しました。
margin, border, paddingを0にして、
コンテンツ表示域を100px、コンテンツの高さを200pxにしてわざとオーバーフローさせ、
その時のscrollHeightがいくつなのかを確認するものです。
すると、以下画像のように、ブラウザによって付加する高さが、img要素とテキスト要素によって異なるようです。
Chrome ver68の場合
Firefox ver61の場合
ie ver11の場合
(Cope Penに対応していないためPJをダウンロードしてローカルで起動しています)

解決したいこと
- このように余分な高さが付加される原因は何でしょうか?
- 余分な高さを付加させないようにするには、どうしたらよいでしょうか?
よろしくおねがいします
補足
<textarea>の定義についてMDNの情報を調べてみたところ、
以下の内容を見つけました。
どうやら、<textarea>内にテキストをどのようにレンダリングするのかは、
ブラウザにより異なる(baselineの扱いがブラウザにより異なるという事は、テキスト1行が占有する領域の算出もブラウザにより異なる)ようです。
勝手な想像ですが、**「ScrollHeightの値もブラウザにより異なるのは、共通の仕様が無いから」**と思い始めました、、。
どなたか、この考えが正しいかどうかわかる方がいますかね、、?
とりあえずは、
「一旦<textArea>をレンダリングした後、
scrollheightを取得して<textarea>のheightより大きければ、scrollHeightの値でheightを再調整する」
という機能を組み込めば、期待通りの動作をする事はわかりましたが、
もっとスマートな方法は無いものでしょうか、、、、
回答2件
あなたの回答
tips
プレビュー


バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/12 09:25
2018/08/12 13:02