Bonjour à tous,

j'utilise une zone de texte dont je ne connais pas la taille du contenu à l'avance (contenu variable géneré par une requête ajax).

J'aimerais que cette zone s'adapte à son contenu sans génerer d'ascenseur.

Quelqu'un a-t-il une solution simple?
Modifié par migli (18 Dec 2006 - 13:36)
Salut,

as tu essayer height: auto ? (attention ,je dis peut etre une annerie...)

En tout cas ne pas fixer de taille en hauteur a ton textarea.
...ça ne fonctionne pas...

je vois bien une solution : detecter le nombre de caractères de la chaine retournée en php, diviser le tout en lignes et colonnes,... mais j'aurais aimé trouver plus simple.
migli a écrit :
je vois bien une solution : detecter le nombre de caractères de la chaine retournée en php, diviser le tout en lignes et colonnes,... mais j'aurais aimé trouver plus simple.

Et surtout plus fiable, ou tout simplement plus réalisable. Car, sans maitrise totale de la taille du texte et de la fonte utilisée par le navigateur pour le rendu, il est impossible de prédire la taille (en pixels ou en em) que prendra un bloc de texte.

Pour revenir au height: auto sur le textarea, cela ne semble pas marcher. Il semblerait que chaque navigateur a un style par défaut pour l'élément textarea, et que la mise en forme de cet élément soit bridée (comme souvent pour les éléments de formulaire). On peut modifier la hauteur, mais pas demander « pas de hauteur fixe »...
a écrit :
il est impossible de prédire la taille (en pixels ou en em) que prendra un bloc de texte

j'avais pensé qu'avec les attributs 'cols' et 'rows', on pouvait faire quelque chose en javascript. je me trompe?
migli a écrit :
il est impossible de prédire la taille (en pixels ou en em) que prendra un bloc de texte

j'avais pensé qu'avec les attributs 'cols' et 'rows', on pouvait faire quelque chose en javascript. je me trompe?
L'attribut rows permet d'indiquer le nombre de lignes... mais celui-ci dépendra de la taille du texte, du dessin de la fonte (cf. la différence entre une Verdana et une Arial, à corps égal), etc.
Pour l'attribut cols, je ne sais pas trop. L'unité est censée être la lettre, mais les lettres n'ont pas toutes la même largeur (sauf dans les fontes à chasse fixe).
...
Après test, je viens de réussir à caser :
- 26 lettres dans un textarea de largeur 24, avec la police par défaut (chasse fixe) ;
- 28 lettres dans un textarea de largeur 24, avec la police Verdana (chasse variable).

Je dirais donc que l'unité utilisée pour l'attribut cols est approximativement la lettre, mais que ça n'est pas assez précis -- et surtout c'est trop variable -- pour être fiable.
Pour être plus précis, il s'agit de l'administration d'un site multilingue, et les textarea permettent de modifier chaque texte dans les trois langues (français, anglais et russe).

Ils peuvent donc contenir une seule ligne, ou un paragraphe entier.

J'ai experimenté le même genre de choses sur les cols et rows, mais je ne connaissais pas tous les détails que tu me donnes. Le site est justement en verdana.

Pour l'instant, je vois donc une seule "solution", si on peut appeler ça comme ça : définir un nombre de colonnes fixe, estimer le nombre de lignes en fonction du texte, et en ajouter quelques unes pour compenser la marge d'incertitude.

Un peu compliqué et approximatif. Je ne vois pourtant pas autre chose.
migli a écrit :
Un peu compliqué et approximatif. Je ne vois pourtant pas autre chose.

Il y a pourtant des choses toutes simples et pas prise de tête : déterminer deux ou trois hauteurs de textarea « standard » (quelques mots, deux paragraphes, un texte un peu long), et suivant la quantité de contenu appliquer les styles pour ces deux ou trois hauteurs standard, en acceptant (horreur !) la barre de défilement du textarea le cas échéant.

Je veux dire... ne pas avoir de barre de défilement sur le textarea, c'est un impératif ergonomique, ou juste une envie de chocolat ?
a écrit :
juste une envie de chocolat ?


non, le problème est juste de ne pas avoir un texte de 100 lignes avec 2 lignes visibles.

Effectivement, la solution des classes est pas mal, elle évite bien des complications. Je vais m'arrêter là dessus et je considère le problème résolu.

Merci de ton aide, mpop.