Pourquoi textarea n'est-il pas une entrée [type = “textarea”]?

153

Pourquoi y a-t-il un élément <textarea>au lieu de <input type="textarea">?

Diogo Cardoso
la source
1
Il y a d'ailleurs aussi un <select>au lieu de <input type="select">. Le <input>just représente un élément d'entrée de base. L' typeattribut représente simplement le type de la valeur qu'il contient.
BalusC

Réponses:

176

Peut-être que ça va un peu trop loin mais…

De plus, j'aimerais suggérer que les champs de texte multiligne ont un type différent (par exemple, "textarea") que les champs sur une seule ligne ("texte"), car ils sont vraiment différents types de choses et impliquent des problèmes (sémantiques) différents pour gestion côté client.

- Marc Andreessen, 11 octobre 1993

Marcel
la source
18
Oui, "type différent", la même chose n'aurait-elle pas pu être obtenue via <input type = "textarea"> bla bla \ n \ n bla </input>? Pourquoi une balise distincte?
Serhiy
8
w3c est assez cohérent. c'était avant le w3c
Mark Cidade
10
Je me demande comment cela a suscité autant de votes positifs. La question ne concerne pas la différence entre «text» et «textarea», mais la raison pour laquelle le texte multiligne est inclus comme balise <textarea> plutôt que comme attribut «type = textarea» dans la balise <input>.
Foreever
6
@Foreever, c'est une réponse aussi directe que possible. La raison pour laquelle il y a un textareaélément est que Marc Andreessen l'a proposé en octobre 1993 pour les raisons citées ci-dessus.
Marcel
5
@Marcel Marc Andreessen a suggéré qu'il devrait y avoir un autre de type non étiquette . Il existe différents types d'entrée désignés par différentes valeurs d' typeattribut de inputbalise et ils partagent tous une seule et même inputbalise. Donc non, cette citation n'est pas une réponse à cette question.
Piotr Dobrogost
69

Pour que sa valeur puisse facilement contenir des guillemets et des caractères <> et respecter les espaces et les retours à la ligne.

Le code HTML suivant passe avec succès le validateur w3c et affiche <,> et & sans avoir besoin de les coder. Il respecte également les espaces blancs.

<!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
la source
16
Je préférerais un mythe d'origine w3c.
k au z
9
Textarea éléments ne sont pas définis comme contenant CDATA, vous avez encore besoin d'entités d'utilisation pour <, &etc. Il est juste de sorte qu'il peut gérer les espaces.
Quentin le
Je viens de le tester et oui, vous pouvez mettre <,> et & non codés dans une zone de texte. Et il passe avec succès le validateur w3c.
Guillaume Esquevin
@ktothez: Voir ma réponse .
Marcel
2
Il n'y a pas une seule bonne réponse ici. Comme pour la vie en général (c'est-à-dire en dehors d'une boîte), il y a de multiples raisons pour lesquelles quelque chose est tel qu'il est.
JohnK
49

Un textareapeut contenir plusieurs lignes de texte, donc on ne pourrait pas le pré-remplir à l'aide d'unvalue attribut.

De même, l' selectélément doit être son propre élément pour accueillir des optionsous-éléments.

Mark Cidade
la source
1
Pourquoi ne pourrait-on pas le remplir avec l' valueattr? Le débordement passe à la ligne suivante lors du redimensionnement du textareaquand même.
OJFord
3
vous ne pouvez pas utiliser de sauts de ligne dans les attributs
Mark Cidade
23

C'était une limitation de la technologie au moment où elle a été créée. Ma réponse copiée de Programmers.SE :

À partir de l'un des brouillons HTML d' origine :

REMARQUE: dans la conception initiale des formulaires, les champs de texte multiligne étaient pris en charge par l'élément d'entrée avec TYPE = TEXT. Malheureusement, cela pose des problèmes pour les champs avec des valeurs de texte longues. La valeur par défaut de SGML (Reference Quantity Set) limite la longueur des littéraux d'attribut à seulement 240 caractères. La déclaration SGML HTML 2.0 augmente la limite à 1024 caractères.

Izkata
la source
6

Je me rends compte qu'il s'agit d'un article plus ancien, mais j'ai pensé que cela pourrait être utile à quiconque se pose la même question:

Bien que les réponses précédentes soient sans aucun doute valables, il existe une raison plus simple à la distinction entre zone de texte et entrée.

Comme mentionné précédemment, HTML est utilisé pour décrire et donner autant de structure sémantique que possible au contenu Web, y compris les formulaires d'entrée. Une zone de texte peut être utilisée pour la saisie, mais une zone de texte peut également être marquée comme lecture seule via l'attribut readonly. L'existence d'un tel attribut n'aurait aucun sens pour un type d' entrée , et donc la distinction.

Chas Latch
la source
9
Cela semble raisonnable, sauf que cela input[type="text"]peut également prendre l' attribut readonly . Ce qui est assez étrange, maintenant que vous le faites remarquer! w3.org/TR/html-markup/input.text.html#input.text.attrs.readonly
Matt