Quero dizer que isso vai contra a "sabedoria convencional", mas geralmente prefiro usar tamanho. A razão para isso é precisamente a razão pela qual muitas pessoas dizem que não: a largura do campo varia de navegador para navegador, dependendo do tamanho da fonte. Especificamente, sempre será grande o suficiente para exibir o número especificado de caracteres, independentemente das configurações do navegador.
Por exemplo, se eu tiver um campo de data, normalmente desejo que o campo seja amplo o suficiente para exibir 8 ou 10 caracteres (mês e dia com dois dígitos e ano com dois ou quatro dígitos, com separadores). Definir o atributo size essencialmente me garante que toda a data estará visível, com o mínimo de espaço desperdiçado. Da mesma forma, para a maioria dos números - eu sei o intervalo de valores esperado, portanto, definirei o atributo size como o número adequado de dígitos, mais o ponto decimal, se aplicável.
Até onde eu sei, nenhum atributo CSS faz isso. Definir uma largura em em, por exemplo, baseia-se na altura, não na largura e, portanto, não é muito preciso se você deseja exibir um número conhecido de caracteres.
Obviamente, essa lógica nem sempre se aplica - um campo de entrada de nome, por exemplo, pode conter qualquer número de caracteres. Nesses casos, voltarei às propriedades de largura do CSS, normalmente em px. No entanto, eu diria que a maioria dos campos que eu faço tem algum tipo de conteúdo conhecido e, especificando o atributo size, posso garantir que a maior parte do conteúdo, na maioria dos casos, seja exibida sem recorte.