問題点
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