Quiero decir que esto va en contra de la "sabiduría convencional", pero generalmente prefiero usar el tamaño. La razón de esto es precisamente la razón por la que muchas personas dicen que no: el ancho del campo variará de un navegador a otro, dependiendo del tamaño de la fuente. Específicamente, siempre será lo suficientemente grande como para mostrar el número especificado de caracteres, independientemente de la configuración del navegador.
Por ejemplo, si tengo un campo de fecha, normalmente quiero que el campo sea lo suficientemente ancho como para mostrar 8 o 10 caracteres (mes y día de dos dígitos y año de dos o cuatro dígitos, con separadores). Establecer el atributo de tamaño esencialmente me garantiza que la fecha completa será visible, con un mínimo espacio desperdiciado. De manera similar para la mayoría de los números: conozco el rango de valores esperado, por lo que estableceré el atributo de tamaño en el número adecuado de dígitos, más el punto decimal si corresponde.
Por lo que puedo decir, ningún atributo CSS hace esto. Establecer un ancho en em, por ejemplo, se basa en la altura, no en el ancho, y por lo tanto no es muy preciso si desea mostrar un número conocido de caracteres.
Por supuesto, esta lógica no siempre se aplica: un campo de entrada de nombre, por ejemplo, podría contener cualquier número de caracteres. En esos casos, recurriré a las propiedades de ancho de CSS, generalmente en px. Sin embargo, diría que la mayoría de los campos que hago tienen algún tipo de contenido conocido, y al especificar el atributo de tamaño puedo asegurarme de que la mayor parte del contenido, en la mayoría de los casos, se muestre sin recortar.