Sans images, c'est une question difficile.
Le meilleur pari : placer un deuxième zone de texte avec des paramètres identiques (taille de la police, hauteur des lignes, espacement...) mais avec un style différent (pas de couleur d'arrière-plan, pas de bordures) à gauche de votre zone de texte d'origine. Mettez-le en lecture seule, retirez-le de la rotation des onglets ( tabindex=99999
pourrait faire l'affaire ou simplement le désactiver ) et d'y inscrire des numéros de ligne. Cela devrait fonctionner correctement, pour autant que je sache, et même survivre à des situations telles que le redimensionnement manuel de la police par le client dans son navigateur.
Vous pouvez même utiliser position: relative
et un grand padding-left:
dans la zone de texte d'origine pour déplacer la zone de texte du compteur dans la zone d'origine.
Les inconvénients : Le compteur de lignes ne suit pas le défilement vertical du textarea. Voir les commentaires ci-dessous.