Generalmente, CSS (Cascading Style Sheets) no se considera un lenguaje de programación en el sentido tradicional o completo, como lo serían JavaScript, Python o Java. Se clasifica más precisamente como un lenguaje de hojas de estilo o un lenguaje declarativo.
La principal razón de esta distinción radica en su propósito y capacidades:
- Naturaleza Declarativa vs. Imperativa:
- CSS es declarativo: Tú describes el resultado final que deseas obtener, es decir, cómo quieres que se vean los elementos HTML (su color, tamaño, posición, etc.). El navegador interpreta estas declaraciones y se encarga de renderizar la página de acuerdo a ellas. No especificas una secuencia de pasos o comandos para lograr ese resultado.
- Los lenguajes de programación suelen ser imperativos: Escribes una secuencia de instrucciones o comandos que el ordenador debe ejecutar paso a paso para realizar una tarea y alcanzar un resultado.
- Ausencia de Lógica de Programación Tradicional:
CSS carece de muchas de las estructuras de control y capacidades fundamentales que caracterizan a los lenguajes de programación:- Bucles (como
for o while) para repetir tareas. - Condicionales complejas (si bien
@media queries, @supports o el selector :has() introducen cierta lógica condicional, no es equiparable a un if/else programático completo). - Funciones definidas por el usuario con lógica interna y parámetros (las funciones de CSS como
calc() son predefinidas y limitadas en su alcance). - Variables con manipulación compleja (las variables CSS son para almacenar valores, no para operaciones algorítmicas complejas).
- Capacidad para realizar operaciones algorítmicas generales o manipular estructuras de datos complejas.
- No es Turing completo:
En términos formales, CSS (incluso con sus adiciones más recientes) generalmente no se considera Turing completo, lo que significa que no puede, por sí solo, resolver cualquier problema computable que un lenguaje de programación de propósito general sí podría.
Aunque CSS ha evolucionado enormemente y ha incorporado características muy potentes que permiten comportamientos dinámicos y «lógicos» hasta cierto punto (como las variables, funciones de cálculo, selectores avanzados, transiciones y animaciones), su función primordial sigue siendo la de describir la presentación y el estilo de los documentos web, no la de ejecutar lógica de programación de propósito general. Es una herramienta de diseño y presentación, no de computación algorítmica.