¿Debería dimensionar un área de texto con CSS ancho / alto o HTML cols / filas atributos?


307

Cada vez que desarrollo un nuevo formulario que incluye un textarea, tengo el siguiente dilema cuando necesito especificar sus dimensiones:

Use CSS o use los textareaatributos de colsy rows?

¿Cuáles son los pros y los contras de cada método?

¿Cuáles son las semánticas del uso de estos atributos?

¿Cómo se hace generalmente?

Respuestas:


268

Recomiendo usar ambos. Las filas y los cols son obligatorios y útiles si el cliente no admite CSS. Pero como diseñador los sobrescribo para obtener exactamente el tamaño que deseo.

La forma recomendada de hacerlo es a través de una hoja de estilo externa, por ejemplo

textarea {
  width: 300px;
  height: 150px;
}
<textarea> </textarea>


44
Esto está bien, pero debes darte cuenta de que cualquier espacio arbitrario con el que estés configurando el tamaño se desperdiciará y es solo para mostrar.
Píldoras de explosión

44
@tandu: ¿Qué quieres decir con "se va a desperdiciar y realmente es solo para mostrar"?
BoltClock

2
rows / cols se basa en el tamaño de los caracteres del usuario. Por lo tanto, si tiene un ancho / alto definido por CSS que no se puede dividir por los píxeles de un carácter en el área de texto, quedará una gran cantidad de espacio en blanco vertical y horizontalmente. Probablemente nadie se dará cuenta, pero solo diciendo.
Píldoras de explosión

21
Puede usar "em" como medida, en lugar de píxeles. 1em es el ancho de la "M" en cualquier fuente y tamaño. Pero los cols solo son relevantes si se usan con fuentes monoespaciales, que en la mayoría de los diseños no es el caso. Para obtener un ajuste perfecto en altura, use un múltiplo de line-heightla altura de su área de texto.
kogakure

55
@LeoGalleguillos "Requerido y útil si el cliente no admite CSS ". Nadie dijo nada sobre la validación.
Janus Bahs Jacquet

96

textarea { height: auto; }
<textarea rows="10"></textarea>

Esto hará que el navegador establezca la altura del área de texto EXACTAMENTE en la cantidad de filas más los rellenos a su alrededor. Establecer la altura CSS en una cantidad exacta de píxeles deja espacios en blanco arbitrarios.


44
Desafortunadamente, "La altura del área de texto no coincide con las filas en Firefox" - es "filas + 1" stackoverflow.com/q/7695945/1266880
apurkrt

2
No estoy seguro si las cosas han cambiado desde el '13 o si hay algo súper no obvio sobre mi situación particular, pero configurar height: auto;CSS no parece afectar mi área de texto en absoluto.
clozach 01 de

10

Según el w3c, las columnas y las filas son atributos obligatorios para las áreas de texto. Las filas y las columnas son el número de caracteres que caben en el área de texto en lugar de píxeles o algún otro valor potencialmente arbitrario. Ir con las filas / cols.


8
Las escuelas w3c afirman que puede establecerlo a través del atributo filas y cols, pero que la configuración de alto y ancho es mejor. No se menciona que las filas y los cols sean un atributo obligatorio para textarea en w3c.org. w3schools.com/tags/tag_textarea.asp w3.org/wiki/HTML/Elements/textarea
Michael Stramel

17
@MichaelStramel mi respuesta tiene cuatro años :), por cierto, no son las escuelas w3c. No están afiliados. No estoy seguro de que HTML5 ya tenga un concepto de atributos requeridos , pero podría estar equivocado al respecto. Sin embargo, todavía no veo por qué establecer el ancho / alto sería mejor que las filas / cols
Explosion Pills

3
Me di cuenta de eso después de comentar, pero aún sentía que era relevante para cualquiera que leyera esta publicación. Además, con diseños receptivos, las filas y columnas pueden causar problemas a menos que se configuren a través de JavaScript. Esa OMI hace que configurarlo a través de CSS sea una forma mucho mejor.
Michael Stramel

6

La respuesta es sí". Es decir, debes usar ambos. Sin filas y columnas (y hay valores predeterminados incluso si no los usa explícitamente), el área de texto es inutilizable si CSS está deshabilitado o anulado por una hoja de estilo de usuario. Siempre tenga en cuenta las preocupaciones de accesibilidad. Dicho esto, si su hoja de estilo puede controlar la apariencia del área de texto, generalmente terminará con algo que se ve mucho mejor, encaja bien en el diseño general de la página y que puede cambiar el tamaño para mantenerse al día con la entrada del usuario ( dentro de los límites del buen gusto, por supuesto).


6

Para el área de texto podemos usar debajo de CSS para arreglar el tamaño

    <textarea  class="form-control" style=" min-width:500px; max-width:100%;min-height:50px;height:100%;width:100%;" ></textarea>

Probado en angularjs y angular7


1
¿Qué tiene esto que ver con Angular? ¿Y cómo se agrega esto en comparación con las respuestas existentes de 2010 /
Lazar Ljubenović

5
 <textarea style="width:300px; height:150px;" ></textarea>

19
@ user470962 Anuncio hominem. Si corrige el error de sintaxis a '<textarea style = "width: 300px; height: 150px;">', entonces el código está bien. No hay necesidad de insultar a alguien. Como puede ver, la respuesta más popular no es diferente a la suya. +1
TAAPSogeking

1
@TAAPSogeking en equidad, esta es la misma respuesta, 4 años después. -1
Rambatino

4

El tamaño de un área de texto puede especificarse mediante los atributos de columnas y filas, o incluso mejor; a través de las propiedades de alto y ancho de CSS. El atributo cols es compatible con todos los principales navegadores. Una diferencia principal es que <TEXTAREA ...>es una etiqueta de contenedor: tiene una etiqueta de inicio ().


2

Usualmente no especifico height, pero sí especifico width: ...y rowsy cols.

Por lo general, en mis casos, solo widthy rowsson necesarios, para que el área de texto se vea bien en relación con otros elementos. (Y colses una alternativa si alguien no usa CSS, como se explica en las otras respuestas).

((¿Especifica ambas cosas rowsy se heightsiente un poco como duplicar datos, creo?))


2

Una característica importante de las áreas de texto es que son expandibles. En una página web, esto puede dar lugar a que aparezcan barras de desplazamiento en el área de texto si la longitud del texto sobrepasa el espacio establecido (ya sea usando filas o usando CSS. Eso puede ser un problema cuando un usuario decide imprimir, particularmente con 'imprimir' a PDF: establezca una altura mínima cómodamente grande para las áreas de texto impresas con una regla de CSS condicional:

@media print { 
textarea {
min-height: 900px;  
}
}

2

si no usa cada vez use line-height: '..'; propiedad su control de la altura de textarea y ancho de propiedad para el ancho de textarea.

o puede utilizar el tamaño de fuente siguiendo css:

#sbr {
  font-size: 16px;
  line-height:1.4;
  width:100%;
}

2

¡Las filas y columnas HTML no responden!

Entonces defino el tamaño en CSS. Como consejo: si define un tamaño pequeño para móviles, piense en usartextarea:focus {};

Agregue un poco de espacio extra aquí, que solo se desplegará en el momento en que un usuario quiera escribir algo


-11

CSS


input
{
    width: 300px;
    height: 40px;
} 

HTML


<textarea rows="4" cols="50">HELLO</textarea>

puedes hacer con el CSS muy fácilmente
ASHU

Puede hacerlo en ambos sentidos mediante css o puede alimentarlo manualmente de esta manera <textarea rows = "4" cols = "50"> HOLA </textarea>
ASHU

¿Por qué aplicarías esas propiedades a todos los elementos?
blackmambo

Si bien este código puede responder la pregunta, proporcionar un contexto adicional con respecto a cómo y / o por qué resuelve el problema mejoraría el valor a largo plazo de la respuesta.
Pato Donald
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.