¿Por qué textarea no es una entrada [type = "textarea"]?

153

¿Por qué hay un elemento en <textarea>lugar de <input type="textarea">?

Diogo Cardoso
fuente
1
Por cierto, también hay un en <select>lugar de <input type="select">. El <input>just representa un elemento básico de entrada. El typeatributo solo representa el tipo del valor que posee.
BalusC

Respuestas:

176

Tal vez esto está yendo demasiado atrás, pero ...

Además, me gustaría sugerir que los campos de texto de varias líneas tienen un tipo diferente (por ejemplo, "área de texto") que los campos de una sola línea ("texto"), ya que realmente son diferentes tipos de cosas e implican diferentes problemas (semántica) para manejo del lado del cliente.

- Marc Andreessen, 11 de octubre de 1993

Marcel
fuente
18
Sí, "tipo diferente", ¿no podría haberse logrado lo mismo a través de <input type = "textarea"> bla, bla, \ n \ n, bla, </input>? ¿Por qué una etiqueta distinta?
Serhiy
8
w3c es bastante consistente. esto fue antes de w3c
Mark Cidade
10
Me pregunto cómo esto obtuvo tanto voto. La pregunta no es sobre la diferencia entre 'texto' y 'área de texto', sino la razón para incluir el texto de varias líneas como etiqueta <textarea> en lugar de como un atributo 'type = textarea' en la etiqueta <input>.
Foreever
66
@Foreever esta es una respuesta tan directa como es posible. La razón por la que hay un textareaelemento es porque Marc Andreessen lo propuso en octubre de 1993 por las razones citadas anteriormente.
Marcel
55
@Marcel Marc Andreessen sugirió que debería haber un tipo diferente, no etiqueta . Existen diferentes tipos de entrada denotados por diferentes valores de typeatributo de inputetiqueta y todos comparten una misma inputetiqueta. Entonces no, esta cita no es una respuesta a esta pregunta.
Piotr Dobrogost
69

Para que su valor pueda contener fácilmente comillas y caracteres <> y respetar espacios en blanco y nuevas líneas.

El siguiente código HTML pasa con éxito el validador w3c y muestra <,> y & sin la necesidad de codificarlos. También respeta los espacios en blanco.

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <title>Yes I can</title>
</head>
<body>
    <textarea name="test">
        I can put < and > and & signs in 
        my textarea without any problems.
    </textarea>
</body>
</html>
Guillaume Esquevin
fuente
16
Prefiero un mito de origen w3c.
k to the z
9
Textarea elementos que no se definen como CDATA que contiene, todavía se necesita para uso entidades <, &etc. Es sólo por lo que puede manejar espacios en blanco.
Quentin
Lo acabo de probar y sí, puedes poner <,> y & sin codificar dentro de un área de texto. Y pasó con éxito el validador w3c.
Guillaume Esquevin
@ktothez: Mira mi respuesta .
Marcel
2
No hay una respuesta adecuada aquí. Al igual que con la vida en general (es decir, fuera de una caja), hay múltiples razones para que algo sea como es.
JohnK
49

A textareapuede contener varias líneas de texto, por lo que no se podría rellenar previamente con un valueatributo.

Del mismo modo, el selectelemento debe ser su propio elemento para acomodar optionsubelementos.

Mark Cidade
fuente
1
¿Por qué no se podría rellenar con el valueatributo? El desbordamiento se ajusta a la siguiente línea al cambiar el tamaño de textareatodos modos.
OJFord
3
no puedes usar saltos de línea en los atributos
Mark Cidade
23

Era una limitación de la tecnología en el momento en que se creó. Mi respuesta se copió de Programmers.SE :

De uno de los borradores HTML originales :

NOTA: En el diseño inicial de los formularios, los campos de texto de varias líneas fueron compatibles con el elemento Input con TYPE = TEXT. Desafortunadamente, esto causa problemas para los campos con valores de texto largos. El valor predeterminado de SGML (Conjunto de cantidad de referencia) limita la longitud de los literales de atributo a solo 240 caracteres. La declaración HTML 2.0 SGML aumenta el límite a 1024 caracteres.

Izkata
fuente
6

Me doy cuenta de que esta es una publicación anterior, pero pensé que podría ser útil para cualquiera que se pregunte la misma pregunta:

Si bien las respuestas anteriores son sin duda válidas, hay una razón más simple para la distinción entre textarea e input.

Como se mencionó anteriormente, el HTML se utiliza para describir y proporcionar la mayor estructura semántica al contenido web posible, incluidos los formularios de entrada. Se puede usar un área de texto para la entrada, sin embargo, un área de texto también se puede marcar como de solo lectura a través del atributo de solo lectura. La existencia de tal atributo no tendría ningún sentido para un tipo de entrada , y por lo tanto, la distinción.

Chas Latch
fuente
9
Esto suena razonable, excepto que también input[type="text"]puede tomar el atributo de solo lectura . ¡Lo cual es un poco extraño, ahora que lo señala! w3.org/TR/html-markup/input.text.html#input.text.attrs.readonly
Matt