Dois-je dimensionner une zone de texte avec des attributs CSS largeur / hauteur ou HTML cols / lignes?


307

Chaque fois que je développe un nouveau formulaire qui comprend un textareaj'ai le dilemme suivant quand j'ai besoin de préciser ses dimensions:

Utilisez CSS ou utilisez les textareaattributs de colset rows?

Quels sont les avantages et les inconvénients de chaque méthode?

Quelle est la sémantique de l'utilisation de ces attributs?

Comment cela se fait-il habituellement?

Réponses:


268

Je recommande d'utiliser les deux. Les lignes et les colonnes sont obligatoires et utiles si le client ne prend pas en charge CSS. Mais en tant que designer, je les écrase pour obtenir exactement la taille que je souhaite.

La façon recommandée de le faire est via une feuille de style externe, par exemple

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


4
C'est bien, mais vous devez vous rendre compte que l'espace arbitraire avec lequel vous définissez la taille va être gaspillé et est vraiment juste pour le spectacle.
Pilules d'explosion du

4
@tandu: Qu'entendez-vous par "va perdre et est vraiment juste pour le spectacle"?
BoltClock

2
row / cols est basé sur la taille des caractères de l'utilisateur. Donc, si vous avez une largeur / hauteur définie par CSS qui ne peut pas être divisée par les pixels d'un personnage dans la zone de texte, il restera beaucoup d'espace blanc verticalement et horizontalement. Personne ne le remarquera probablement jamais, mais juste dire.
Pilules d'explosion du

21
Vous pouvez utiliser "em" comme mesure, au lieu de pixels. 1em est la largeur du "M" dans n'importe quelle police et taille. Mais les cols ne sont pertinents que s'ils sont utilisés avec des polices monospace, ce qui n'est pas le cas dans la plupart des conceptions. Pour obtenir un ajustement parfait en hauteur, utilisez un multiple de line-heightpour la hauteur de votre zone de texte.
kogakure

5
@LeoGalleguillos "Obligatoire et utile si le client ne prend pas en charge CSS ". Personne n'a rien dit sur la validation.
Janus Bahs Jacquet

96

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

Cela déclenchera le navigateur pour définir la hauteur de la zone de texte EXACTEMENT au nombre de lignes plus les rembourrages qui l'entourent. La définition de la hauteur CSS sur une quantité exacte de pixels laisse des espaces blancs arbitraires.


4
Malheureusement, "La hauteur de la zone de texte ne correspond pas aux lignes dans Firefox" - c'est "lignes + 1" stackoverflow.com/q/7695945/1266880
apurkrt

2
Je ne sais pas si les choses ont changé depuis '13 ou s'il y a quelque chose de super non évident dans ma situation particulière, mais la configuration height: auto;en CSS ne semble pas du tout affecter ma zone de texte.
clozach

10

Selon le w3c, les cols et les lignes sont tous deux des attributs obligatoires pour les zones de texte. Les lignes et les colonnes sont le nombre de caractères qui vont tenir dans la zone de texte plutôt que des pixels ou une autre valeur potentiellement arbitraire. Allez avec les lignes / cols.


8
w3c schools indique que vous pouvez le définir via l'attribut row et cols mais que le réglage de la hauteur et de la largeur est préférable. Il n'y a aucune mention de lignes et de cols étant un attribut obligatoire pour textarea sur w3c.org. w3schools.com/tags/tag_textarea.asp w3.org/wiki/HTML/Elements/textarea
Michael Stramel

17
@MichaelStramel ma réponse a quatre ans :) - d'ailleurs ce ne sont pas des écoles w3c. Ils ne sont pas affiliés. Je ne suis pas sûr que HTML5 ait un concept d' attributs requis , mais je peux me tromper. Je ne vois toujours pas pourquoi le réglage de la largeur / hauteur serait mieux que les lignes / colonnes
Explosion Pills

3
Je me suis rendu compte qu'après avoir commenté, mais je pensais toujours que c'était pertinent pour quiconque lisait ce post. En outre, avec des conceptions réactives, les lignes et les colonnes peuvent provoquer des problèmes, sauf si elles sont définies via JavaScript. Cet IMO rend la configuration via CSS bien meilleure.
Michael Stramel

6

La réponse est oui". Autrement dit, vous devez utiliser les deux. Sans lignes et colonnes (et il existe des valeurs par défaut même si vous ne les utilisez pas explicitement), la zone de texte est anormalement petite si CSS est désactivé ou remplacé par une feuille de style utilisateur. Gardez toujours à l'esprit les problèmes d'accessibilité. Cela étant dit, si votre feuille de style est autorisée à contrôler l'apparence de la zone de texte, vous vous retrouverez généralement avec quelque chose qui ressemble beaucoup mieux, s'intègre bien dans la conception globale de la page et qui peut être redimensionné pour suivre les entrées de l'utilisateur ( dans les limites du bon goût, bien sûr).


6

Pour la zone de texte, nous pouvons utiliser ci-dessous CSS pour fixer la taille

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

Testé en angularjs et angular7


1
Qu'est-ce que cela a à voir avec Angular? Et comment cela ajoute-t-il par rapport aux réponses existantes de 2010 /
Lazar Ljubenović

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

19
@ user470962 Ad hominem. Si vous corrigez l'erreur de syntaxe à '<textarea style = "width: 300px; height: 150px;">', le code est correct. Il n'est pas nécessaire d'insulter quelqu'un. Comme vous pouvez le voir, la réponse la plus populaire n'est pas différente de la sienne. +1
TAAPSogeking

1
@TAAPSogeking en toute équité, c'est la même réponse, 4 ans plus tard. -1
Rambatino

4

La taille d'une zone de texte peut être spécifiée par les attributs cols et row, ou mieux encore; à travers les propriétés de hauteur et de largeur de CSS. L'attribut cols est pris en charge dans tous les principaux navigateurs. Une différence principale est qu'il <TEXTAREA ...>s'agit d'une balise conteneur: elle a une balise de début ().


2

Je ne précise généralement pas height, mais spécifiez width: ...et rowset cols.

Habituellement, dans mes cas, seulement widthet rowssont nécessaires, pour que la zone de texte soit belle par rapport aux autres elems. (Et colsc'est une solution de rechange si quelqu'un n'utilise pas CSS, comme expliqué dans les autres réponses.)

((Spécifier les deux rowset heightressemble un peu à la duplication de données, je pense?))


2

Une caractéristique majeure des zones de texte est qu'elles sont extensibles. Sur une page Web, cela peut entraîner l'apparition de barres de défilement dans la zone de texte si la longueur du texte dépasse l'espace que vous définissez (que ce soit à l'aide de lignes ou à l'aide de CSS. Cela peut être un problème lorsqu'un utilisateur décide d'imprimer, en particulier avec 'impression' au format PDF - définissez donc une hauteur minimale confortable pour les zones de texte imprimées avec une règle CSS conditionnelle:

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

2

si vous n'utilisez pas à chaque fois utilisez line-height: '..'; sa propriété contrôle la hauteur de la zone de texte et la propriété width pour la largeur de la zone de texte.

ou vous pouvez utiliser la taille de police en suivant css:

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

2

Les lignes et les colonnes HTML ne répondent pas!

Je définis donc la taille en CSS. Un conseil: si vous définissez une petite taille pour les mobiles pensez à utilisertextarea:focus {};

Ajoutez de l'espace supplémentaire ici, qui ne se déploiera qu'au moment où un utilisateur souhaite réellement écrire quelque chose


-11

CSS


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

HTML


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

vous pouvez faire avec le css très facilement
ASHU

Vous pouvez le faire dans les deux sens par css ou vous pouvez alimenter manuellement comme ceci <textarea rows = "4" cols = "50"> BONJOUR </textarea>
ASHU

Pourquoi appliquer ces propriétés à tous les éléments?
blackmambo

Bien que ce code puisse répondre à la question, fournir un contexte supplémentaire sur la manière et / ou la raison pour laquelle il résout le problème améliorerait la valeur à long terme de la réponse.
Donald Duck Il y a
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.