Estoy llenando un área de texto con contenido para que el usuario lo edite.
¿Es posible hacer que se estire para que se ajuste al contenido con CSS (como overflow:show
para un div)?
Estoy llenando un área de texto con contenido para que el usuario lo edite.
¿Es posible hacer que se estire para que se ajuste al contenido con CSS (como overflow:show
para un div)?
Respuestas:
Realmente no. Esto normalmente se hace usando javascript.
hay una buena discusión sobre las formas de hacer esto aquí ...
solo una línea
<textarea name="text" oninput='this.style.height = "";this.style.height = this.scrollHeight + "px"'></textarea>
this.scrollHeight + "px"
a this.scrollHeight + 3 + "px"
hace que el área de texto sea lo suficientemente grande como para que no muestre la barra de desplazamiento.
Aquí hay una función que funciona con jQuery (solo para la altura, no para el ancho):
function setHeight(jq_in){
jq_in.each(function(index, elem){
// This line will work with pure Javascript (taken from NicB's answer):
elem.style.height = elem.scrollHeight+'px';
});
}
setHeight($('<put selector here>'));
Nota: El operador solicitó una solución que no use Javascript, sin embargo, esto debería ser útil para muchas personas que se encuentren con esta pregunta.
Esta es una solución muy simple, pero me funciona:
<!--TEXT-AREA-->
<textarea id="textBox1" name="content" TextMode="MultiLine" onkeyup="setHeight('textBox1');" onkeydown="setHeight('textBox1');">Hello World</textarea>
<!--JAVASCRIPT-->
<script type="text/javascript">
function setHeight(fieldId){
document.getElementById(fieldId).style.height = document.getElementById(fieldId).scrollHeight+'px';
}
setHeight('textBox1');
</script>
<style> textarea { resize: none; overflow: auto; } </style> <!--TEXT-AREA--> <textarea onkeyup="setHeight.call(this);">Hello World</textarea> <!--JAVASCRIPT--> <script type="text/javascript"> function setHeight(){ this.style.height = '1px'; this.style.height = this.scrollHeight + 'px'; } </script>
básicamente, primero debe establecer la altura en 1px, debido a esto: stackoverflow.com/questions/10722058/…
Otra solución simple para el control dinámico del área de texto.
<!--JAVASCRIPT-->
<script type="text/javascript">
$('textarea').on('input', function () {
this.style.height = "";
this.style.height = this.scrollHeight + "px";
});
</script>