Menu

CSS en línea: el atributo style y 3 formas de agregar CSS

El CSS en línea pone las declaraciones directamente en un elemento con el atributo style. Aprende la sintaxis, cuándo conviene usar estilos en línea, por qué ganan a las hojas de estilo y cómo se comparan con el CSS interno y externo.

Esta página incluye editores ejecutables: edita, ejecuta y ve el resultado al instante.

Qué es el CSS en línea

El CSS en línea es CSS escrito directamente en un elemento HTML con el atributo style. El valor es una lista de declaraciones, property: value;, y se aplican solo a ese elemento.

No hay selector ni llaves: el objetivo es el elemento que lleva el atributo. Separa las declaraciones con punto y coma. El último punto y coma es opcional, pero mantenerlo hace que agregar la siguiente declaración sea seguro.

Sintaxis

<element style="property: value; property: value;">
ParteEjemploNotas
Atributostyle="..."Un atributo global: se permite en todos los elementos HTML
Declaracióncolor: #2563eb;La misma sintaxis que dentro de una regla de una hoja de estilo
Varias declaracionespadding: 8px; border: 1px solid #e5e7eb;Separadas por ;
Comillas dentrostyle="font-family: 'Courier New', monospace;"Usa comillas simples dentro del atributo entre comillas dobles

Todo lo que no sea una declaración no está permitido. :hover, ::before, @media y los selectores no tienen lugar en un atributo style.

Las 3 formas de agregar CSS a HTML

El CSS llega a una página de tres formas. Esta página trata la primera; el CSS externo e interno tiene su propia página.

MétodoDónde vive el CSSAlcanceUso típico
En líneaAtributo style en un elementoEse elementoValores puntuales, valores que pone JavaScript
InternoElemento <style> en la páginaEsa páginaDemos de una sola página, plantillas de email, CSS crítico
ExternoUn archivo .css, vinculado con <link>Todas las páginas que lo vinculanDar estilo a un sitio completo

El mismo párrafo con estilo de las tres formas (el archivo externo aparece como comentario, porque la vista previa no tiene un segundo archivo que cargar):

El tercer párrafo conserva el padding y el radio de la regla .note y solo reemplaza el fondo, porque el estilo en línea define únicamente esa propiedad.

Por qué ganan los estilos en línea

Cuando una regla de una hoja de estilo y un estilo en línea definen la misma propiedad, gana el estilo en línea. No importa qué tan específico sea el selector: incluso un selector de ID pierde.

La única excepción es !important. Una declaración de una hoja de estilo marcada con !important le gana a una declaración en línea normal, y un !important en línea le gana a ambas. Por eso los estilos en línea hacen que un sitio sea difícil de mantener: para cambiarlos desde una hoja de estilo necesitas !important, y eso inicia una escalada. La página de !important explica el orden completo.

Cuándo el CSS en línea es la herramienta correcta

Los estilos en línea encajan bien cuando el valor es un dato y no parte del diseño: cambia en cada elemento y lo escribe una plantilla o JavaScript.

El aspecto (colores, altura, radio) vive en la hoja de estilo. Solo el ancho, que es distinto en cada barra, va en línea. JavaScript escribe el mismo atributo a través de element.style:

Después del clic, el HTML del párrafo queda style="color: rgb(245, 158, 11); font-weight: bold;". Los nombres de propiedades con guion pasan a camelCase en JavaScript (font-weight es fontWeight).

Una variable CSS suele ser el punto medio más limpio: define solo la variable en línea, style="--progress: 35%", y deja que la hoja de estilo la use. Consulta variables CSS.

Dónde se queda corto el CSS en línea

  • Sin estados ni pseudoelementos. No puedes escribir :hover, :focus ni ::before en un atributo style.
  • Sin media queries. Un ancho en línea no puede cambiar en un teléfono.
  • Repetición. Diez botones con el mismo estilo en línea son diez lugares que editar.
  • Difícil de sobrescribir. Solo un !important en una hoja de estilo le gana.
  • Content Security Policy. Una CSP estricta sin 'unsafe-inline' en style-src bloquea los atributos style escritos en el HTML.

Errores comunes

  • Escribir un selector o llaves dentro de style. style="p { color: red }" se ignora. Ahí solo van declaraciones.
  • Usar = en vez de :. Es color: red, no color=red.
  • Anidar comillas dobles. style="font-family: "Arial"" cierra el atributo antes de tiempo. Usa comillas simples dentro.
  • Olvidar las unidades. style="width: 200" se ignora; escribe 200px. Una longitud de 0 es la única que puede omitir su unidad.
  • Dar estilo en línea a todo un sitio. Pasa los estilos repetidos a una clase en una hoja de estilo y deja los estilos en línea para valores de cada elemento.

Preguntas frecuentes

¿Qué es el CSS en línea?

Es CSS escrito en el atributo style de un elemento, como <p style="color: red;">. Las declaraciones se aplican solo a ese elemento, sin selector.

¿Cuáles son las 3 formas de agregar CSS a HTML?

En línea, con el atributo style en un elemento; interno, con un elemento <style> en la página; y externo, con un archivo .css aparte vinculado con <link rel="stylesheet" href="styles.css"> en el <head>. Para un sitio completo lo habitual es el archivo externo.

¿El CSS en línea sobrescribe al CSS externo?

Sí, en la mayoría de los casos. Una declaración en el atributo style le gana a cualquier selector de una hoja de estilo, sin importar su especificidad. La hoja de estilo solo gana con !important, y un !important en línea le gana también a ese.

¿Usar CSS en línea es una mala práctica?

Para dar estilo a un sitio completo, sí: se repite, no admite :hover ni media queries y es difícil de sobrescribir. Está bien para valores puntuales que pone JavaScript o una plantilla, como el ancho de una barra de progreso o un color elegido por el usuario.

¿Se puede usar hover en CSS en línea?

No. El atributo style solo acepta declaraciones, así que ahí no se pueden escribir pseudoclases como :hover, pseudoelementos como ::before ni reglas @media. Ponlos en un elemento <style> o en una hoja de estilo.

Coddy programming languages illustration

Aprende a programar con Coddy

COMENZAR