La propiedad resize
En CSS existe una propiedad llamada resize ( redimensionar ), y los elementos <textarea>, por definición tienen resize: both;. O sea: podemos redimensionar tanto la altura como la anchura del elemento agarrando y estirando la esquina abajo derecha de este.
Podemos desactivar este comportamiento utilizando resize: none.
textarea {
resize: none;
}
Por de otra parte los demás elementos tienen por defecto resize: none, o sea: no son redimensionables; pero podemos transformar casi cualquier otro elemento en un elemento redimensionable con dos condiciones:
1. El overflow del elemento NO tiene que ser visible.
2. La propiedad resize tiene que tomar uno de estos valores: horizontal, vertical o both ( redimensionable en ambas direcciones ).
.redimensionable {
width:10em;
height:6em;
margin:1em;
border:1px solid #d9d9d9;
/* overflow puede tomar cualquier valor excepto visible*/
overflow:hidden;
/*resize puede ser: horizontal, vertical o both */
resize:both;
}
Un falso textarea
Ahora podemos fácilmente transformar el div.redimensionable en un falso textarea utilizando el atributo contenteditable="true". Esto hace que el contenido de este div sea editable.
<div class="redimensionable" contenteditable="true" ></div>
Hay excepciones
Un elemento <img> no puede ser transformado en un elemento redimensionable, pero podemos ponerlo dentro de otro elemento redimensionable, un <div> por ejemplo.
See the Pen CSS resize & contenteditable by Gabi (@enxaneta) on CodePen.
En JavaScript
Por lastima en este momento en JavaScript no existe ningún evento que detecte si el tamaño de un elemento ha cambiado.