¿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?

Albañil
fuente

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>

kogakure
fuente
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.

Jan Werkhoven
fuente
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.

Píldoras de explosión
fuente
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).

Stan Rogers
fuente
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

Rohit Parte
fuente
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>
usuario470962
fuente
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 ().

AsifQadri
fuente
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?))

KajMagnus
fuente
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;  
}
}
Geoff Kendall
fuente
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%;
}
Nurealam Sabbir
fuente
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

alguien
fuente
-11

CSS


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

HTML


<textarea rows="4" cols="50">HELLO</textarea>
ASHU
fuente
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