Por que a área de texto não é uma entrada [type = "textarea"]?

153

Por que existe um elemento em <textarea>vez de <input type="textarea">?

Diogo Cardoso
fonte
1
A propósito, também há um em <select>vez de <input type="select">. O <input>just representa um elemento de entrada básico. O typeatributo apenas representa o tipo do valor que possui.
BalusC

Respostas:

176

Talvez isso esteja indo muito longe, mas…

Além disso, eu gostaria de sugerir que os campos de texto com várias linhas tenham um tipo diferente (por exemplo, “área de texto”) que os campos de linha única (“texto”), pois eles realmente são tipos diferentes de coisas e implicam problemas diferentes (semântica) para manipulação do lado do cliente.

- Marc Andreessen, 11 de outubro de 1993

Marcel
fonte
18
Sim, "tipo diferente", o mesmo não poderia ter sido alcançado através de <input type = "textarea"> blá blá \ n \ n blá </input>? Por que uma marca distinta?
Serhiy
8
O w3c é bastante consistente. isso foi antes do w3c
Mark Cidade
10
Eu me pergunto como isso ficou tão votado. A questão não é sobre a diferença entre 'text' e 'textarea', mas o motivo da inclusão do texto de várias linhas como tag <textarea>, em vez de como um atributo 'type = textarea' na tag <input>.
Foreever 12/03
6
@ Antes disso, essa é a resposta mais direta possível. A razão pela qual existe um textareaelemento é que Marc Andreessen o propôs em outubro de 1993 pelos motivos citados acima.
Marcel
5
@Marcel Marc Andreessen sugeriu que deveria haver um diferente tipo não tag . Existem diferentes tipos de entrada denotados por diferentes valores do typeatributo da inputtag e todos compartilham uma e a mesma inputtag. Portanto, não, esta citação não é uma resposta para esta pergunta.
Piotr Dobrogost
69

Para que seu valor possa facilmente conter aspas e <> caracteres e respeitar espaços em branco e novas linhas.

O código HTML a seguir passa com êxito o validador w3c e exibe <,> e & sem a necessidade de codificá-los. Também respeita os espaços em branco.

<!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
fonte
16
Eu preferiria um mito de origem w3c.
k para o z
9
Textarea elementos não são definidos como contendo CDATA, você ainda precisa de entidades de uso para <, &, etc. É apenas para que ele possa lidar com espaços em branco.
Quentin
Acabei de testar e, sim, você pode colocar <,> e & não codificados em uma área de texto. E passou com sucesso o validador w3c.
Guillaume Esquevin
@ktothez: Veja minha resposta .
Marcel
2
Não há uma resposta adequada aqui. Como na vida em geral (ou seja, fora de uma caixa), existem várias razões para que algo seja do jeito que é.
JohnK
49

A textareapode conter várias linhas de texto, portanto, não seria possível preenchê-lo previamente usando um valueatributo.

Da mesma forma, o selectelemento precisa ser seu próprio elemento para acomodar optionsubelementos.

Mark Cidade
fonte
1
Por que não seria possível preenchê-lo com o valueattr? O estouro passa para a próxima linha no redimensionamento de textareaqualquer maneira.
OJFord 17/08/14
3
você não pode usar quebras de linha em atributos
Mark Cidade
23

Era uma limitação da tecnologia no momento em que foi criada. Minha resposta foi copiada do Programmers.SE :

De um dos rascunhos HTML originais :

NOTA: No design inicial para formulários, os campos de texto com várias linhas eram suportados pelo elemento Input com TYPE = TEXT. Infelizmente, isso causa problemas para campos com valores longos de texto. O padrão do SGML (conjunto de quantidade de referência) limita o comprimento dos literais de atributo a apenas 240 caracteres. A declaração SGML HTML 2.0 aumenta o limite para 1024 caracteres.

Izkata
fonte
6

Sei que este é um post antigo, mas achei que isso poderia ser útil para qualquer pessoa que se perguntasse a mesma pergunta:

Embora as respostas anteriores sejam sem dúvida válidas, há uma razão mais simples para a distinção entre área de texto e entrada.

Como mencionado anteriormente, o HTML é usado para descrever e fornecer o máximo possível de estrutura semântica para o conteúdo da Web, incluindo formulários de entrada. Uma área de texto pode ser usada para entrada, no entanto, uma área de texto também pode ser marcada como somente leitura através do atributo readonly. A existência desse atributo não faria sentido para um tipo de entrada e, portanto, a distinção.

Chas Latch
fonte
9
Isso parece razoável, exceto que também input[type="text"]pode levar o atributo readonly . O que é meio estranho, agora que você aponta! w3.org/TR/html-markup/input.text.html#input.text.attrs.readonly
Matt