Je veux dire que cela va à l'encontre de la "sagesse conventionnelle", mais je préfère généralement utiliser la taille. La raison en est précisément la raison pour laquelle beaucoup de gens disent de ne pas le faire: la largeur du champ variera d'un navigateur à l'autre, selon la taille de la police. Plus précisément, il sera toujours suffisamment grand pour afficher le nombre de caractères spécifié, quels que soient les paramètres du navigateur.
Par exemple, si j'ai un champ de date, je veux généralement que le champ soit suffisamment large pour afficher 8 ou 10 caractères (mois et jour à deux chiffres et année à deux ou quatre chiffres, avec séparateurs). La définition de l'attribut size me garantit essentiellement que la date entière sera visible, avec un minimum d'espace perdu. De même pour la plupart des nombres - je connais la plage de valeurs attendues, je vais donc définir l'attribut size sur le bon nombre de chiffres, plus le point décimal le cas échéant.
Pour autant que je sache, aucun attribut CSS ne fait cela. La définition d'une largeur en em, par exemple, est basée sur la hauteur et non sur la largeur et n'est donc pas très précise si vous souhaitez afficher un nombre connu de caractères.
Bien sûr, cette logique ne s'applique pas toujours - un champ de saisie de nom, par exemple, peut contenir n'importe quel nombre de caractères. Dans ces cas, je reviens aux propriétés de largeur CSS, généralement en px. Cependant, je dirais que la majorité des champs que je crée ont une sorte de contenu connu, et en spécifiant l'attribut size, je peux m'assurer que la plupart du contenu, dans la plupart des cas, est affiché sans écrêtage.