¿Cuál es la diferencia entre diseñar el sitio web usando JavaScript DOM o CSS?

Prácticamente no hay diferencia. Cualquier cosa, absolutamente cualquier cosa, que pueda hacer con CSS, también puede hacerlo mediante programación con JavaScript.

Tanto en el caso de CSS como de JavaScript, el momento exacto en que se aplica el estilo varía según el orden en que se cargan y se representan los activos.

Dicho esto, un programador que quizás quiera que el 100% de todas las aplicaciones sean “código ejecutable” está cometiendo un error al querer usar JavaScript “en lugar de” CSS. La web usa sintaxis declarativa para tratar con activos estáticos. Incluso cuando estos activos deben crearse dinámicamente, los “lenguajes” estáticos como CSS, HTML y JSON hacen que sea mucho más fácil reutilizar, estilizar y mantener el código de la interfaz de usuario.

Herramientas como SASS hacen que sea aún más fácil optimizar y mantener estilos.

No caigas en la tentación y declara tus estilos visuales en 100% JavaScript.

La diferencia es que uno es correcto y el otro no. Debe evitar diseñar elementos con JavaScript siempre que sea posible. La mejor manera de diseñar elementos programáticamente es con clases, ya que son más fáciles de mantener y razonar, y pueden tener nombres útiles. CSS es para diseñar, JS es para computación, automatización y procesamiento. Es el cerebro.

¿La razón para no diseñar usando JS? Actuación. Acceder al DOM es costoso, y manipular elementos puede ser complicado.

Javascript se aplica más tarde.

Además, la forma preferible (en mi libro) es definir clases CSS y luego aplicarlas estáticamente en HTML, pero si se necesita un comportamiento dinámico (y solo entonces), use Javascript directamente (className) o jQuery (addClass / removeClass).

Tenga en cuenta también que las animaciones CSS eliminan parte de la necesidad de usar Javascript para efectos dinámicos.

Evite agregar estilos explícitamente a través de Javascript (.style), ya que eso hace que cambiar look-n-feel más tarde sea un poco más difícil. Sin embargo, todavía lo uso para, por ejemplo, resaltar errores y demás, cambiando el color del texto o un campo.

Nada en realidad. Todavía estás usando CSS para hacer el cambio de estilo, solo estás apuntando al elemento de manera diferente. CSS es probablemente más simple y más eficiente por sí mismo, pero ambos pueden hacer el trabajo.

CSS funciona cuando JavaScript está desactivado.