Hojas de estilo en cascada (CSS)

**Hoja de estilo en cascada** o **CSS** (siglas en inglés de *cascading style sheets*) es un lenguaje usado para definir y crear la presentación de un documento estructurado escrito en HTML o XML2 (y por extensión en XHTML). El World Wide Web Consortium (W3C) es el encargado de formular la especificación de las hojas de estilo que servirán de estándar para los agentes de usuario o navegadores.

La idea que se encuentra detrás del desarrollo de CSS es separar la estructura de un documento de su presentación.

La información de estilo puede ser definida en un documento separado o
 en el mismo documento HTML. En este último caso podrían definirse
estilos generales con el elemento «style» o en cada etiqueta particular
mediante el atributo «style».

## Niveles e historia

CSS
 se ha creado en varios niveles y perfiles. Cada nivel de CSS se
construye sobre el anterior, generalmente añadiendo funciones al previo.
Los perfiles son, generalmente, parte de uno o varios niveles de CSS
definidos para un dispositivo o interfaz particular. Actualmente, pueden
 usarse perfiles para dispositivos móviles, impresoras o televisiones.

### CSS1

La primera especificación oficial de CSS, recomendada por la W3C fue CSS1, publicada en diciembre 1995,3 y abandonada en abril de 2008.3
Algunas de las funcionalidades que ofrece son:

* Propiedades de las Fuente, como tipo, tamaño, énfasis...
* Color de texto, fondos, bordes u otros elementos.
* Atributos del texto, como espaciado entre palabras, letras, líneas, etcétera.
* Alineación de textos, imágenes, tablas u otros.
* Propiedades de caja, como margen, borde, relleno o espaciado.
* Propiedades de identificación y presentación de listas.

### CSS2

La
especificación CSS2 fue desarrollada por la W3C y publicada como
recomendación en mayo de 1998, y abandonada en abril de 2008.4
Como ampliación de CSS1, se ofrecieron, entre otras:

* Las funcionalidades propias de las capas (<div>) como de posicionamiento relativo/absoluto/fijo, niveles (z-index), etcétera.
* El concepto de "*media types*".
* Soporte para las hojas de estilo auditivas
* Texto bidireccional, sombras, etcétera.

#### CSS 2.1

La
primera revisión de CSS2, usualmente conocida como "CSS 2.1", corrige
algunos errores encontrados en CSS2, elimina funcionalidades poco
soportadas o inoperables en los navegadores y añade alguna nueva
especificación.
De acuerdo al sistema de estandarización técnica de las especificaciones, CSS2.1 tuvo el estatus de "candidato" (*candidate recommendation*) durante varios años,5
 pero la propuesta fue rechazada en junio de 2005; en junio de 2007 fue
propuesta una nueva versión candidata, y ésta actualizada en 2009, pero
en diciembre de 2010 fue nuevamente rechazada.

En abril de 2011, CSS 2.1 volvió a ser propuesta como candidata,6 y después de ser revisada por el *W3C Advisory Committee*, fue finalmente publicada como recomendación oficial el 7 de junio de 2011.7

### CSS3

A diferencia
de CSS2, que fue una única especificación que definía varias
funcionalidades, CSS3 está dividida en varios documentos separados,
llamados "módulos".
Cada módulo añade nuevas funcionalidades a las definidas en CSS2, de
manera que se preservan las anteriores para mantener la compatibilidad.

Los trabajos en el CSS3, comenzaron a la vez que se publicó la
recomendación oficial de CSS2, y los primeros borradores de CSS3 fueron
liberados en junio de 1999.8

Debido a la modularización del CSS3, diferentes módulos pueden encontrarse en diferentes estados de su desarrollo,9 de forma que a fechas de noviembre de 2011, hay alrededor de cincuenta módulos publicados,8 tres de ellos se convirtieron en recomendaciones oficiales de la W3C en 2011: *"Selectores"*, *"Espacios de nombres"* y *"Color"*.

Algunos módulos, como *"Fondos y colores"*, *"Consultas de medios"* o *"Diseños multicolumna"*
 están en fase de "candidatos", y considerados como razonablemente
estables, a finales de 2011, y sus implementaciones en los diferentes
navegadores son señaladas con los prefijos del motor del mismo.10

## Limitaciones y ventajas de usar CSS

### Limitaciones

Algunas limitaciones que se encuentran en el uso del CSS hasta la versión CSS2.1, vigente, pueden ser:

* Los selectores no pueden usarse en orden ascendente según la

jerarquía del DOM (hacia padres u otros ancestros) como se hace mediante
 XPath

La razón que se ha usado para justificar esta carencia por parte de la
W3C, es para proteger el rendimiento del navegador, que de otra manera,
podría verse comprometido. XSLT soporta en la actualidad un mayor número
 de sistemas operativos. Así mismo, también es mejor para trabajar con
la mayoría de buscadores de Internet.11 [*cita requerida*]

* Dificultad para el alineamiento vertical; así como el centrado

horizontal se hace de manera evidente en CSS2.1, el centrado vertical
requiere de diferentes reglas en combinaciones no evidentes, o no
estándares.

* Ausencia de expresiones de cálculo numérico para especificar valores (por ejemplo `margin-left: 10% – 3em + 4px;`).

Un borrador de la W3C para CSS3, propone `calc()` para solventar esta limitación.12

* Las *pseudo-clases* dinámicas (como `:hover`) no se

pueden controlar o deshabilitar desde el navegador, lo que las hace
susceptibles de abuso por parte de los diseñadores en banners, o ventana emergentes.

### Ventajas

Algunas ventajas de utilizar CSS (u otro lenguaje de estilo) son:

* Control centralizado de la presentación de un sitio web completo con

 lo que se agiliza de forma considerable la actualización del mismo.

* Optimización del ancho de banda

 de la conexión, pues pueden definirse los mismos estilos para muchos
elementos con un sólo selector; o porque un mismo archivo CSS puede
servir para una multitud de documentos.

* Mejora en la accesibilidad

 del documento, pues con el uso del CSS se evitan antiguas prácticas
necesarias para el control del diseño (como las tablas), y que iban en
perjuicio de ciertos usos de los documentos, por parte de navegadores
orientados a personas con algunas limitaciones sensoriales.