Один из методов, который я нашел, состоял в том, чтобы иметь текстовую область, которая начинается с меньшей ширины и высоты, а затем динамически изменять ее размер.
function sz(t) {
a = t.value.split('\n');
b=1;
for (x=0;x < a.length; x++) {
if (a[x].length >= t.cols) b+= Math.floor(a[x].length/t.cols);
}
b+= a.length;
if (b > t.rows) t.rows = b;
}
тогда вы вызываете свою функцию с событием onclick
onclick="function sz(this)"
Я нашел это здесь
Fellgall Javascript
Одна проблема, которую он упоминает, заключается в том, что это работает только в браузерах, которые его поддерживают.