Lenguaje de Hojas de Estilo

CSS

CSS es el lenguaje que controla cómo se ve y se distribuye tu HTML en la pantalla. Aquí tienes qué es, cómo funciona y cómo empezar a usarlo hoy mismo.

beginner14 min readUpdated 15 sept 2026
styles.css
css
/* styles.css */
:root {
  --brand: #2563eb;
}

.card {
  padding: 1.5rem;
  border-radius: 0.75rem;
  background: var(--brand);
  color: white;
}
Nombre completo
Cascading Style Sheets
Creado por
Håkon Wium Lie, 1996
Tipo
Lenguaje de hojas de estilo
Estándar
W3C Living Standard
Extensión de archivo
.css

Practico

Prueba CSS en vivo

Edita el HTML y el CSS para ver tus cambios en tiempo real.

Prueba CSS en vivo

Edita el HTML y el CSS para ver tus cambios en tiempo real.

Por que importa

Por qué CSS es importante

Accesibilidad

CSS controla la presentación visual: el tamaño de las fuentes, el espaciado, los indicadores de foco y los layouts responsivos dependen de estilos bien escritos que hagan que el contenido sea usable para todos.

Control de diseño

Desde colores y tipografía hasta animaciones y layout, CSS te brinda un control preciso sobre cómo se ve y se comporta cada elemento de la página.

Rendimiento

Un CSS limpio y bien organizado carga rápido, se renderiza eficientemente y es más fácil de mantener: hojas de estilo más pequeñas y páginas más fluidas.

La imagen completa

Las tres ideas detrás de CSS

Los selectores eligen los elementos, la cascada decide qué regla gana y el box model controla el espacio que ocupan.

Selectores

Coincidencia

Eliges a qué elementos se aplica una regla: por etiqueta, clase, atributo, estado o relación.

La cascada

Resolución

Cuando las reglas chocan, el origen, la especificidad y el orden deciden qué declaración gana.

El modelo de caja

Tamaño

Cada elemento es una caja de contenido, relleno, borde y margen: así ocupa espacio.

CSS de un vistazo

Lo que CSS te ofrece

Diseño visual

Colores, fuentes, espaciado y efectos de fondo.

Sistemas de layout

Flexbox y CSS Grid para disposiciones de página complejas.

Diseño responsivo

Las media queries adaptan los layouts a cualquier tamaño de pantalla.

Animaciones

Transiciones y animaciones de keyframes sin JavaScript.

Propiedades personalizadas

Variables de CSS para valores reutilizables y tematizables.

Soporte de accesibilidad

Estilos de foco, modos de alto contraste y reducción de movimiento.

Una breve historia

De los trucos con tablas al layout moderno

  1. 1996

    CSS1

    Håkon Wium Lie propone CSS y el W3C publica la primera especificación.

    96
  2. 1998

    CSS2

    Añade posicionamiento, z-index, tipos de medios y un mayor control del layout.

    98
  3. 2011

    CSS2.1

    Aclara y corrige CSS2; la versión que la mayoría de los desarrolladores aprendieron primero.

    11
  4. 2012

    Módulos de CSS3

    Se divide en módulos independientes: Flexbox, Grid, animaciones y más se lanzan uno a uno.

    12
  5. 2017

    Llega CSS Grid

    El soporte de los navegadores alcanza una masa crítica y Grid transforma el layout de las páginas.

    17
  6. Hoy

    Estándar vivo

    Nuevas características como container queries, :has() y subgrid llegan continuamente.

    Hoy

La guia completa

CSS: Todo lo que necesitas saber

¿Qué es CSS?

CSS significa Cascading Style Sheets (Hojas de Estilo en Cascada). Es el lenguaje estándar utilizado para controlar cómo se ven los elementos HTML en pantalla. Cada color, fuente, decisión de espaciado, disposición del diseño y animación en la web se define mediante CSS.

Mientras que HTML describe qué es el contenido —un encabezado, un párrafo, una imagen—, CSS describe cómo aparece: de qué color es ese encabezado, qué tamaño tiene la fuente, cuánto espacio rodea al párrafo y si la imagen flota a la izquierda o se ubica en una cuadrícula. Esa separación es el núcleo del desarrollo web. HTML proporciona la estructura, CSS proporciona la presentación y JavaScript proporciona el comportamiento. Cada capa tiene una función específica, y mantenerlas separadas hace que las páginas sean más fáciles de construir, probar y mantener.

La mejor manera de pensar en CSS es como la pintura y el mobiliario de una página. HTML es la casa —las paredes, las habitaciones y los marcos de las puertas— y CSS decide de qué color son las paredes, qué muebles van en cada lugar y cómo se ve todo el conjunto. Sin CSS, cada página sería simplemente texto negro sobre un fondo blanco. CSS es lo que hace que la web sea visualmente rica.

Cómo funciona CSS

CSS funciona a través de un sistema de selectores, propiedades y valores. Un selector apunta a un elemento HTML, una propiedad es el aspecto que deseas cambiar y un valor es la configuración que le asignas:

/* style.css */
h1 {
  color: blue;
  font-size: 2rem;
}

Aquí, h1 es el selector; le indica al navegador qué elemento debe estilizar. color y font-size son propiedades, es decir, las cosas que puedes cambiar. blue y 2rem son los valores, que es lo que les asignas. Todo el bloque, desde la llave de apertura hasta la de cierre, se denomina bloque de declaración o conjunto de reglas.

Cuando un navegador carga una página, analiza el HTML para convertirlo en el DOM y luego le aplica las reglas de CSS. Cada regla dice: “busca estos elementos y haz que se vean así”. El navegador evalúa cada regla, resuelve los conflictos mediante la cascada y la especificidad, y renderiza el resultado final. Este proceso ocurre cada vez que se carga la página y nuevamente cada vez que los estilos cambian.

Formas de añadir CSS

Existen tres maneras de incluir CSS en una página web, cada una con su propio caso de uso:

Estilos en línea (Inline styles)

Aplica CSS directamente a un elemento utilizando el atributo style:

<!-- index.html -->
<p style="color: red; font-size: 1.2rem;">This text is red.</p>

Los estilos en línea son útiles para experimentos rápidos o anulaciones puntuales, pero mezclan la presentación con la estructura y son difíciles de mantener a escala. Evítalos en producción.

Hoja de estilos interna

Coloca un bloque <style> dentro del <head> de tu documento HTML:

<!-- index.html -->
<head>
  <style>
    h1 {
      color: navy;
    }
  </style>
</head>

Los estilos internos funcionan bien para prototipos de una sola página o cuando una página necesita estilos únicos que ninguna otra página utiliza. Siguen estando limitados a un solo documento, por lo que compartir estilos entre páginas requiere repetición.

Hoja de estilos externa

Vincula un archivo .css independiente utilizando el elemento <link>:

<!-- index.html -->
<head>
  <link rel="stylesheet" href="styles.css" />
</head>

Este es el enfoque estándar para sitios web en producción. Un solo archivo CSS puede dar estilo a todas las páginas, el navegador lo almacena en caché después de la primera carga y tu HTML se mantiene limpio. La mayoría de los proyectos utilizan hojas de estilos externas.

Selectores de CSS

Los selectores son la forma en que le indicas a CSS qué elementos debe estilizar. Dominar los selectores es una de las habilidades más valiosas en CSS, ya que el uso de selectores precisos se traduce en menos marcado, menos sobrescrituras y hojas de estilo más limpias.

Selector de elemento

Apunta a todas las instancias de un elemento HTML:

/* style.css */
p {
  line-height: 1.6;
}

Selector de clase

Apunta a elementos con un atributo class específico. Las clases son reutilizables y son la forma más común de estilizar grupos de elementos:

/* style.css */
.card {
  padding: 1rem;
  border: 1px solid #e2e8f0;
}

Selector de ID

Apunta a un único elemento con un id específico. Los IDs son únicos dentro de una página y tienen una especificidad mayor que las clases:

/* style.css */
#hero {
  background: linear-gradient(135deg, #667eea, #764ba2);
}

Selector de atributo

Apunta a elementos basándose en sus atributos o en los valores de dichos atributos:

/* style.css */
a[target="_blank"] {
  color: #dc2626;
}

input[type="email"] {
  border-color: #3b82f6;
}

Selector de pseudo-clase

Apunta a elementos en un estado específico: cuando se pasa el cursor por encima (hover), cuando tienen el foco, el primer hijo o el n-ésimo elemento de una lista:

/* style.css */
a:hover {
  text-decoration: underline;
}

li:first-child {
  font-weight: bold;
}

input:focus {
  outline: 2px solid #3b82f6;
}

Selectores combinados

Los selectores se pueden combinar para lograr mayor precisión. Un espacio apunta a los descendientes, un > apunta a los hijos directos y un + apunta al hermano siguiente:

/* style.css */
nav a {
  color: white;
}

nav > ul {
  list-style: none;
}

h2 + p {
  margin-top: 0;
}

La cascada y la especificidad

Cuando varias reglas de CSS afectan al mismo elemento, el navegador necesita una forma de decidir cuál prevalece. Ese proceso se llama cascada y sigue un orden de prioridad claro.

Jerarquía de especificidad

La especificidad se calcula basándose en cuatro niveles, evaluados de izquierda a derecha:

  1. Estilos en líneastyle="..." — prioridad más alta
  2. IDs#header
  3. Clases, atributos y pseudo-clases.nav, [type="text"], :hover
  4. Elementos y pseudo-elementosdiv, ::before — prioridad más baja

Una regla con un selector de ID siempre gana a una regla que solo tiene selectores de clase, independientemente de cuántos selectores de clase tenga la segunda regla. Cuando la especificidad es igual, gana la regla que aparece más tarde en el código fuente.

La cascada

Más allá de la especificidad, la cascada considera:

  • Origen — los valores predeterminados del navegador, los estilos del autor y los estilos del usuario tienen cada uno un nivel. Los estilos del autor prevalecen sobre los del navegador; !important en los estilos de usuario pueden anular los estilos del autor.
  • Herencia — algunas propiedades como color, font-family y line-height son heredadas por los elementos hijos. Otras como margin, padding y border no lo son.
  • !important — añadir !important a una declaración anula todas las demás declaraciones con la misma propiedad, independientemente de la especificidad. Úsalo con moderación porque rompe la cascada natural y dificulta la depuración.

Consejos prácticos

  • Mantén la especificidad baja prefiriendo el uso de clases sobre los IDs.
  • Evita !important a menos que estés creando una capa de utilidades o anulando una hoja de estilos de terceros.
  • Cuando un estilo no se aplique, revisa la cascada: inspecciona el elemento, observa qué reglas coinciden y cuál es la que gana.

Conceptos básicos del box model

Cada elemento HTML es una caja rectangular, y el box model describe cómo se calcula su tamaño. Existen cuatro capas, desde el interior hacia el exterior:

  1. Content — el texto, imagen o elementos hijos dentro de la caja.
  2. Padding — espacio transparente entre el contenido y el borde.
  3. Border — una línea visible que rodea el padding.
  4. Margin — espacio transparente fuera del borde, que aleja el elemento de sus vecinos.

Por defecto, width y height definen únicamente el área de contenido. Agregar padding y border aumenta el tamaño total de la caja. La propiedad box-sizing: border-box cambia este comportamiento para que el ancho y el alto incluyan el padding y el border, lo que hace que el layout sea mucho más predecible:

/* reset.css */
*,
*::before,
*::after {
  box-sizing: border-box;
}

Para profundizar en cómo el box model afecta al layout, consulta la guía dedicada al box model.

Conceptos básicos de Flexbox

Flexbox es un sistema de diseño unidimensional diseñado para organizar elementos en una fila o columna. Facilita la alineación, el espaciado y la distribución del espacio entre elementos, incluso cuando sus tamaños son desconocidos o dinámicos.

Para activar flexbox, establece display: flex en un contenedor:

/* style.css */
.container {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 1rem;
}

Las propiedades clave son:

  • flex-direction — row, row-reverse, column o column-reverse.
  • justify-content — alineación a lo largo del eje principal (start, end, center, space-between, space-around).
  • align-items — alineación a lo largo del eje transversal (start, end, center, stretch).
  • gap — espacio entre los elementos flex sin usar márgenes.
  • flex-wrap — define si los elementos saltan a una nueva línea cuando se desbordan.

Flexbox es ideal para barras de navegación, filas de tarjetas, centrado de contenido y cualquier diseño donde los elementos se ubiquen en una sola línea o columna. Para diseños bidimensionales, CSS Grid es la mejor opción. Consulta la guía dedicada a flexbox para más información.

Conceptos básicos de CSS Grid

CSS Grid es un sistema de diseño bidimensional que gestiona filas y columnas simultáneamente. Es la herramienta de maquetación más potente de CSS y está diseñada para estructuras a nivel de página y diseños de componentes complejos.

Para activar el grid, establece display: grid en un contenedor y define las columnas y filas:

/* style.css */
.page {
  display: grid;
  grid-template-columns: 250px 1fr 250px;
  grid-template-rows: auto 1fr auto;
  gap: 2rem;
}

Las propiedades clave son:

  • grid-template-columns — define las pistas de las columnas. Utiliza unidades fr, repeat() y auto-fit/auto-fill para grids responsivos.
  • grid-template-rows — define las pistas de las filas.
  • gap — espacio entre los elementos del grid.
  • grid-area — coloca elementos en regiones nombradas del grid.
  • grid-column y grid-row — extiende los elementos a través de múltiples pistas.

Grid combina perfectamente con las media queries para crear diseños responsivos que se reajustan de forma natural. Para un recorrido completo, consulta la guía dedicada de CSS Grid.

Diseño responsivo con media queries

El diseño responsivo significa que tu página se ve y funciona bien en cualquier dispositivo: teléfonos, tablets, laptops y monitores grandes. Las media queries son la herramienta que utiliza CSS para aplicar estilos basados en el ancho, alto o otras características del dispositivo del viewport.

/* responsive.css */
/* Base styles for mobile */
.container {
  padding: 1rem;
}

/* Tablet and above */
@media (min-width: 768px) {
  .container {
    padding: 2rem;
    max-width: 720px;
    margin: 0 auto;
  }
}

/* Desktop */
@media (min-width: 1024px) {
  .container {
    max-width: 960px;
  }
}

El enfoque anterior se llama mobile-first: escribes los estilos base para pantallas pequeñas y los mejoras progresivamente con min-width queries. Esto produce un CSS más ligero, un mejor rendimiento en dispositivos móviles y una progresión natural desde diseños simples hacia otros más complejos.

Otras características útiles de las media queries incluyen:

  • max-width — aplica estilos por debajo de un breakpoint.
  • prefers-color-scheme — detecta el modo oscuro.
  • prefers-reduced-motion — respeta las preferencias del usuario respecto a las animaciones.
  • orientation — responde a la orientación portrait vs landscape.

Combina las media queries con unidades flexibles como %, rem, em y fr para lograr diseños que se adapten de forma fluida.

Propiedades personalizadas de CSS

Las propiedades personalizadas de CSS —también llamadas variables de CSS— te permiten almacenar valores reutilizables y hacer referencia a ellos en toda tu hoja de estilos. Se declaran con -- y se acceden mediante var():

/* variables.css */
:root {
  --color-primary: #2563eb;
  --color-text: #1e293b;
  --space-md: 1rem;
  --font-body: system-ui, sans-serif;
}

body {
  color: var(--color-text);
  font-family: var(--font-body);
}

.button {
  background: var(--color-primary);
  padding: var(--space-md);
}

Las propiedades personalizadas tienen el alcance (scope) del elemento en el que se declaran y se heredan hacia los elementos hijos, lo que las hace ideales para crear temas. Puedes sobrescribirlas dentro de una media query, una clase o un atributo de datos para cambiar de tema sin necesidad de duplicar reglas:

/* variables.css */
[data-theme="dark"] {
  --color-primary: #60a5fa;
  --color-text: #f1f5f9;
}

También admiten valores de respaldo (fallback): var(--color-primary, #2563eb). Las propiedades personalizadas son una de las características más prácticas del CSS moderno y deberían formar parte de cualquier proyecto.

Mejores prácticas

Escribir un buen CSS no consiste en memorizar cada propiedad, sino en crear estilos que sean predecibles, mantenibles y fáciles de extender. Estos hábitos se aplican a proyectos de cualquier tamaño:

  • Usa hojas de estilo externas para cualquier cosa que no sea un prototipo rápido.
  • Prefiere los selectores de clase sobre los selectores de elemento o ID para dar estilo.
  • Mantén la especificidad baja para que las anulaciones sean poco frecuentes e intencionadas.
  • Usa propiedades personalizadas de CSS para colores, espaciado y tipografía.
  • Sigue una convención de nomenclatura consistente: BEM, clases de utilidad o un sistema como Tailwind CSS.
  • Escribe estilos responsivos mobile-first utilizando min-width media queries.
  • Usa box-sizing: border-box en cada proyecto.
  • Evita !important; esto oculta los errores en lugar de solucionarlos.
  • Organiza los estilos de forma lógica: estilos base, componentes y utilidades.
  • Prueba en múltiples navegadores y en diferentes tamaños de viewport.
  • Usa el inspector de las DevTools del navegador para depurar problemas de diseño rápidamente.

Errores comunes

  • Usar estilos inline en lugar de clases para ajustes puntuales.
  • Depender excesivamente de !important para forzar la aplicación de estilos.
  • Escribir selectores demasiado específicos que resultan imposibles de sobrescribir.
  • No configurar box-sizing: border-box, lo que provoca anchos impredecibles.
  • Duplicar valores de color y espaciado en lugar de utilizar propiedades personalizadas.
  • Ignorar el diseño responsive y asumir que todos los usuarios utilizan un ordenador de escritorio.
  • Escribir estilos desktop-first con max-width en lugar de optar por un enfoque mobile-first.
  • Mezclar convenciones de nomenclatura o no contar con ningún sistema de nombrado.
  • Olvidar realizar pruebas en modo oscuro o con la opción de movimiento reducido activada.
  • Dejar estilos sin usar en la hoja de estilos, aumentando el tamaño del archivo sin motivo.

¿Sigue valiendo la pena aprender CSS en 2026?

Absolutamente. CSS no va a desaparecer: cada sitio web, aplicación web y progressive web app se renderiza a través de él. El CSS moderno cuenta con container queries, el selector :has(), subgrid, cascade layers y nesting nativo. Es más potente que nunca. Frameworks como Tailwind, Bootstrap y las librerías de CSS-in-JS abstraen CSS, pero nunca lo reemplazan; comprender los fundamentos te hace más rápido y efectivo con cualquiera de ellos. Como primer lenguaje de estilos es imbatible: ves resultados visuales en cuestión de minutos, la curva de aprendizaje es suave y cualquier habilidad posterior en el desarrollo frontend se beneficia de un conocimiento sólido de CSS. Apréndelo bien una vez y lo usarás durante el resto de tu carrera.

Cómo aprender CSS

CSS es sencillo de empezar, pero infinitamente profundo de dominar. Un camino práctico sería:

  1. Aprende el box model, los selectores y la cascada.
  2. Construye una página sencilla con colores, fuentes y espaciado.
  3. Aprende flexbox y úsalo para navbars, filas de tarjetas y centrado.
  4. Aprende CSS Grid para layouts de página y diseños bidimensionales.
  5. Añade diseño responsivo con media queries.
  6. Usa custom properties para crear un sistema de diseño consistente.
  7. Estudia la accesibilidad: estilos de foco, contraste y reduced motion.
  8. Construye proyectos: una landing page, el layout de un blog, un dashboard… hasta que los patrones se vuelvan automáticos.

A partir de ahí, explora las animaciones, Grid avanzado, container queries y funcionalidades modernas. Nuestro tutorial interactivo de CSS te guía en cada paso con ejercicios prácticos.

Sobrescribir un estilo

Mantén la especificidad baja y usa clases. !important es el último recurso y dificulta las sobrescrituras futuras.

Preferir
.button--danger {
  background: #dc2626;
}
Evitar
button {
  background: #dc2626 !important;
}

Estilizar un elemento

Una clase reutilizable es más fácil de mantener que un estilo en línea disperso por todo el marcado.

Preferir
<a class="nav-link" href="/docs">Docs</a>
Evitar
<a style="color: #60a5fa; text-decoration: none"
   href="/docs">Docs</a>

Preguntas frecuentes

Preguntas frecuentes

Keep learning

Related topics from the roadmap.

$ comienza a aprender

Listo para aprender CSS Basics?

Nuestro tutorial interactivo te guia a traves de CSS Basics paso a paso — con quizzes y codigo real que puedes ejecutar en el navegador.