CSS — Cascading Style Sheets
El lenguaje de estilos que controla cómo se ve y cómo se dispone cada elemento HTML. Separa la presentación visual del contenido estructural, permitiendo que un mismo HTML tenga apariencias completamente distintas.
Playground — CSS en vivo
Escribe CSS en el editor y observa el resultado en tiempo real. El bloque
.caja es el elemento objetivo. Experimenta con cualquier propiedad.
¿Qué es CSS?
CSS (Cascading Style Sheets) es el lenguaje que describe la presentación visual de un documento HTML. Controla colores, tipografías, espaciados, tamaños, posiciones, animaciones y prácticamente cualquier aspecto visual de una página web.
La palabra clave es "cascada": cuando múltiples reglas compiten por estilizar el mismo elemento, el navegador resuelve el conflicto mediante un algoritmo determinista basado en origen, especificidad e importancia. Entender la cascada es fundamental para escribir CSS predecible.
CSS fue creado por Håkon Wium Lie en 1994 y se publicó como estándar W3C en 1996. Desde CSS3 (2011), el lenguaje se divide en módulos independientes (selectores, layout, colores, animaciones…) que evolucionan a su propio ritmo.
Anatomía de una regla CSS
Una regla CSS tiene dos partes: el selector (qué elemento se estiliza) y el bloque de declaraciones (qué estilos se aplican).
- Selector — identifica los elementos a los que se aplica la regla. Puede ser un tipo (
p), una clase (.card), un ID (#hero), un combinador (ul > li) o una pseudo-clase (:hover). - Propiedad — el aspecto visual a controlar (
color,font-size,margin…). Hay ~600 propiedades estándar. - Valor — qué valor toma esa propiedad. Puede ser un color, una longitud, una palabra clave o una función CSS (
calc(),clamp(),var()). - Declaración — par propiedad + valor separados por
:y terminados en;. - Regla — selector + bloque de declaraciones entre llaves
{ }.
La Cascada — cómo se resuelven los conflictos
Cuando múltiples reglas aplican a un mismo elemento, la cascada determina cuál gana. Se evalúan en este orden de prioridad (mayor número = mayor prioridad):
style="color: red" directamente en el HTML. Muy alta especificidad pero difícil de sobreescribir y mantener.
color, font-family o line-height se heredan del elemento padre si no se sobreescriben.
Propiedades heredables (se propagan a los hijos):
color, font-*, line-height, text-align,
cursor, visibility, list-style…
No heredables (deben declararse explícitamente):
margin, padding, border, background,
width, height, display, position…
Usa inherit para forzar herencia en cualquier propiedad.
Calculadora de Especificidad
La especificidad se representa como tres números (a, b, c): a = selectores ID, b = clases, atributos y pseudo-clases, c = tipos y pseudo-elementos. Un selector con mayor valor en a siempre gana sin importar los otros.
#id
.cls :pseu [attr]
div ::before
El Box Model
Todo elemento HTML es una caja rectangular. El Box Model define las cuatro capas que componen esa caja, de adentro hacia afuera:
width y height.
box-sizing: border-box).
*, *::before, *::after { box-sizing: border-box; } — hace que width incluya padding y border, evitando desbordamientos inesperados.
Unidades CSS
Las unidades CSS se dividen en absolutas (valor fijo en el mundo físico) y relativas (dependen de otro valor de referencia). Para diseño web se prefieren las relativas porque escalan con el usuario y el viewport.
pxPíxel CSS. Referencia en pantallas: 1px = 1/96 pulgada en pantallas estándar.ptPunto tipográfico. 1pt = 1.333px. Solo para impresión.cm / mmCentímetros / milímetros. Útiles en CSS para impresión.emRelativo al font-size del propio elemento. Se acumula en nesting.remRelativo al font-size del elemento raíz (html). No se acumula. Preferido para tamaños de texto.chAncho del carácter "0" en la fuente actual. Útil para limitar anchos de texto legible.exAltura de la x minúscula. Raramente usado en producción.vw1% del ancho del viewport. 100vw = ancho completo de la ventana.vh1% de la altura del viewport. Problema en móvil con barras del browser — usar dvh.dvhDynamic viewport height — incluye/excluye las barras móviles según estén visibles. Recomendado para alturas 100dvh.vmin / vmaxEl menor / mayor valor entre vw y vh. Útil para elementos cuadrados fluidos.%Relativo al valor del mismo atributo del padre. En width, al ancho del padre; en font-size, al del padre.calc()Mezcla unidades: calc(100% - 2rem). Operaciones: +, -, *, /.clamp()Valor entre un mínimo y máximo. Ideal para tipografía fluida: clamp(1rem, 2.5vw, 2rem).min() / max()Toma el menor / mayor entre dos valores. Ej: width: min(600px, 100%).Selectores más usados
Los selectores son el mecanismo por el que CSS identifica qué elementos estilizar. Combinados, permiten una precisión quirúrgica.
*universalTodos los elementos
divtipoElemento por nombre de tag
.claseclaseElementos con ese class
#ididEl elemento con ese id único
[attr]atributoTienen ese atributo; [href^="https"] comienza con
A BdescendienteB dentro de A (cualquier nivel)
A > BhijoB hijo directo de A
A + Bhermano adyacenteB inmediatamente después de A
A ~ Bhermano generalTodos los B hermanos de A
A, BlistaAplica la regla a A y a B
:hoverinteracciónCursor encima del elemento
:focusinteracciónElemento con foco de teclado
:activeinteracciónElemento siendo clicado
:checkedformularioCheckbox o radio seleccionado
:disabledformularioControl de formulario deshabilitado
:first-childposiciónPrimer hijo de su padre
:last-childposiciónÚltimo hijo de su padre
:nth-child(n)posición2n = pares, 2n+1 = impares, 3n = cada tercero
:not(sel)negaciónElementos que NO coinciden con el selector
:is(A, B)lista forgivingToma la especificidad del selector más específico
Propiedades por categoría
Las ~600 propiedades CSS se agrupan en módulos temáticos. Estas son las más usadas en cada categoría:
Box Model y Layout
width height min-width max-width
padding margin border box-sizing
overflow display position top/right/bottom/left
z-index float clear
Flexbox
display: flex flex-direction flex-wrap
justify-content align-items align-content
gap flex flex-grow flex-shrink
flex-basis order align-self
CSS Grid
display: grid grid-template-columns grid-template-rows
grid-template-areas gap grid-column grid-row
repeat() fr minmax() auto-fill auto-fit
place-items place-content
Tipografía
font-family font-size font-weight font-style
line-height letter-spacing word-spacing
text-align text-decoration text-transform
white-space word-break text-overflow
Colores y Fondos
color background background-color background-image
background-size background-position opacity
linear-gradient() radial-gradient() conic-gradient()
mix-blend-mode filter
Efectos y Animación
transition animation @keyframes transform
box-shadow text-shadow border-radius
clip-path backdrop-filter will-change
animation-delay animation-fill-mode
Responsive y @Rules
@media @layer @container @import
@font-face @supports
aspect-ratio object-fit object-position
Variables y Funciones
--nombre var() calc() clamp()
min() max() env() attr()
:root currentColor counter() counters()
Secciones de esta guía
11 secciones con documentación detallada, ejemplos visuales y playgrounds interactivos para cada módulo CSS:
box-sizing, collapse de márgenes, outline y playground interactivo del modelo de caja.
8 conceptos →
Display y Posición
display, position (static, relative, absolute, fixed, sticky), z-index, stacking context, float y overflow.
6 conceptos →
Flexbox
Contenedor y elementos flex, ejes principal y cruzado, alineación, ordenación y playground con todas las propiedades.
12 conceptos →
CSS Grid
Filas y columnas, fr, repeat(), minmax(), grid-template-areas, auto-fill, subgrid y playground.
14 conceptos →
Tipografía
font-family, font-size, line-height, text-decoration, tipografía fluida con clamp() y playground tipográfico.
14 conceptos →
Colores y Fondos
Formatos de color (HEX, RGB, HSL, oklch), gradientes, background avanzado, filter, mix-blend-mode y playground de colores.
10 conceptos →
Transiciones y Animaciones
transition, animation, @keyframes, transform, animation-fill-mode, will-change y ejemplos interactivos.
12 conceptos →
Variables y Funciones
Propiedades personalizadas (--var), var(), calc(), clamp(), @layer, @supports y playground de variables.
8 conceptos →
Pseudoclases y Pseudoelementos
Estado (:hover, :focus), estructurales (:nth-child), formularios (:valid), ::before, ::after, ::marker.
20 conceptos →
Responsive y @Rules
@media, @container, breakpoints, aspect-ratio, object-fit, @font-face y visualizador de media queries.
8 conceptos →
Reglas esenciales
- Siempre incluye
*, *::before, *::after { box-sizing: border-box; }como reset base. - Prefiere
rempara tipografía yempara espaciados relativos al componente. - Usa
clamp(min, ideal, max)para valores fluidos que no necesitan media queries. - Evita
!important— si lo necesitas, revisa la arquitectura de tus selectores. - Prefiere
:focus-visiblesobre:focuspara los estilos de foco del teclado. - Para layout usa Flexbox (componentes en una dimensión) o Grid (layouts en dos dimensiones).
- Usa variables CSS (
--color-primary) para valores que se repiten o que forman un sistema. - Respeta el principio de mobile-first: escribe los estilos base para móvil y añade
@media (min-width: ...)para escritorio. - Prefiere
100dvhsobre100vhen alturas de pantalla completa para evitar el problema de las barras del navegador móvil. - Usa las herramientas de desarrollo del navegador (DevTools) para inspeccionar la cascada y la especificidad en tiempo real.