Selectores y la cascada
Cuando dos reglas le dan colores distintos al mismo elemento, CSS no adivina. Compara los selectores, y un id le gana a cualquier cantidad de clases.
Elegir elementos
Un selector es un patrón que coincide con elementos de la página. Los más sencillos coinciden por nombre de elemento, por clase o por id. p es un selector de tipo y coincide con todos los párrafos. .note es un selector de clase y coincide con todo elemento que tenga class="note"; un elemento puede tener varias clases separadas por espacios, y una clase puede usarse en muchos elementos. #intro es un selector de id y coincide con el único elemento que tiene id="intro". *, el selector universal, coincide con todo.
p { line-height: 1.5; } /* every p */
.note { background: #fff4d6; } /* class="note" */
#intro { font-size: 20px; } /* id="intro" */
h1, h2 { font-weight: 600; } /* group: h1 and h2 */
nav a { text-decoration: none; } /* a anywhere inside nav */
ul > li { margin: 4px 0; } /* li that is a direct child of ul */
a:hover { text-decoration: underline; }
input[type="email"] { width: 20em; }Combinar selectores
Una coma agrupa selectores que comparten las mismas declaraciones, así que h1, h2 da estilo a ambos. Un espacio es el combinador de descendientes: nav a coincide con los enlaces que estén en cualquier lugar dentro de un nav, a cualquier profundidad. > es más estricto y solo coincide con los hijos directos. Escribir dos selectores simples juntos, sin espacio, como en a.active, significa que un mismo elemento debe cumplir ambos: un enlace que además tiene la clase active. Los selectores de atributo, entre corchetes, coinciden según un atributo, como input[type="email"].
Las pseudoclases, que se escriben con dos puntos simples, seleccionan elementos en cierto estado o posición: :hover mientras el puntero está encima, :focus-visible cuando tiene el foco del teclado, :first-child cuando es el primer hijo de su padre. Los pseudoelementos, que se escriben con dos pares de dos puntos, dan estilo a una parte de un elemento, como ::first-line o ::placeholder.
Cuando las reglas no coinciden
Muchas veces varias reglas fijan la misma propiedad en el mismo elemento. La cascada, la C de CSS, decide cuál gana. Dejando de lado los estilos propios del navegador y !important, dos preguntas resuelven casi todos los casos. Primero, ¿qué selector es más específico? La especificidad se cuenta con tres números: ids, luego clases (incluidos los selectores de atributo y las pseudoclases), luego nombres de elemento. #menu a suma 1-0-1, .active suma 0-1-0 y nav a suma 0-0-2. Los números se comparan desde la izquierda, así que un id le gana a cualquier cantidad de clases. Segundo, si la especificidad es igual, gana la regla que aparece después en la hoja de estilos.
Los atributos style en línea le ganan a cualquier selector, y una declaración marcada con !important le gana a las normales. Las dos son soluciones rápidas tentadoras, pero hacen más difícil el siguiente cambio, porque la única forma de anularlas es con más de lo mismo. La mayoría de los equipos mantiene la especificidad baja y pareja, dando estilo sobre todo con clases, para que el orden en el archivo baste para predecir el resultado.
Herencia
Algunas propiedades pasan de padre a hijo de forma automática. Fija color o font-family en body y todos los párrafos, listas y celdas de tabla de dentro lo toman, a menos que una regla les fije el suyo. Las propiedades relacionadas con el texto suelen heredarse; las relacionadas con la caja, como width, padding, border y margin, no. Por eso un borde en una sección no aparece alrededor de cada párrafo que hay dentro. La palabra clave inherit obliga a una propiedad a copiar el valor de su padre.
Ponle nombre a las clases según lo que algo es, no según cómo se ve. .warning sigue teniendo sentido cuando el diseñador cambia el color de rojo a naranja; .red-text no. Los id son únicos, así que conviene reservarlos para destinos de enlaces y etiquetas de formulario en lugar de usarlos para dar estilo. Así la especificidad se mantiene baja.
| selector de tipo | p, h1, a: todos los elementos con ese nombre |
| selector de clase | .nombre: todos los elementos con esa clase |
| selector de id | #nombre: el único elemento con ese id |
| combinador de descendientes | Un espacio: nav a = a en cualquier lugar dentro de nav |
| pseudoclase | :hover, :focus-visible: un estado o una posición |
| especificidad | ids-clases-tipos, comparados desde la izquierda |
| cascada | Las reglas que deciden qué declaración gana |
| herencia | Las propiedades de texto pasan de padre a hijo |
- ¿Qué selector coincide con
<p class="note">?- .note
- #note
- note
- ¿Con qué coincide
nav a?- Con los enlaces en cualquier lugar dentro de un nav
- Con los elementos nav y todos los enlaces
- Solo con los enlaces que son hijos directos de nav
- ¿Qué hace
h1, h2?- Aplica la regla a h1 y a h2
- Coincide con h2 dentro de h1
- No coincide con nada
- ¿Cuál es la especificidad de
#menu .item a?- 1-1-1
- 0-2-1
- 1-0-2
.a.b.c(0-3-0) y#x(1-0-0) fijan colores distintos en un mismo elemento. ¿Cuál gana?- #x
- .a.b.c
- The one written later
- Dos reglas tienen la misma especificidad. ¿Cuál gana?
- La que va después en la hoja de estilos
- La que va antes
- No se aplica ninguna
- ¿Qué propiedad se hereda de forma predeterminada?
- color
- border
- padding
- ¿Qué pseudoclase da estilo a un elemento que tiene el foco del teclado?
- :focus-visible
- :hover
- :first-child
- ¿Con qué coincide
a.active?- Con un enlace que tiene la clase active
- Con cualquier elemento con clase active dentro de un enlace
- Con todos los enlaces y todos los elementos .active
- ¿Por qué evitar !important para los arreglos de todos los días?
- Solo se puede anular con más !important, así que los cambios posteriores se complican
- No es CSS válido
- Hace más lento el navegador
- p, .clase, #id; la coma agrupa; el espacio significa descendiente; > significa hijo.
- Decide la especificidad ids-clases-tipos; en caso de empate gana la regla posterior.
- Las propiedades de texto se heredan; las de caja no.
Fuentes de este curso (6)
- W3C CSS Working Group specifications: CSS Snapshot 2025, Selectors Level 4, CSS Cascading and Inheritance Level 5, CSS Color Level 4, CSS Values and Units Level 4, CSS Box Model Level 3, CSS Box Sizing Level 3, CSS Fonts Level 4, CSS Flexible Box Layout Level 1, CSS Grid Layout Level 2, Media Queries Level 4 and Level 5 (w3.org/TR/, checked 2026-10-17)
- MDN Web Docs, Learn web development: CSS styling basics and CSS layout, and the CSS reference (developer.mozilla.org/en-US/docs/Learn_web_development/Core/Styling_basics, .../Core/CSS_layout, developer.mozilla.org/en-US/docs/Web/CSS, checked 2026-10-17)
- W3C, CSS history and CSS1 Recommendation of 17 December 1996 (w3.org/Style/CSS20/history.html, w3.org/press-releases/1996/css1-rec, checked 2026-10-17)
- W3C WCAG 2.2, success criteria 1.4.3 Contrast (Minimum)
- 1.4.8 Visual Presentation, 1.4.10 Reflow, 1.4.12 Text Spacing (w3.org/TR/WCAG22/, checked 2026-10-17)
- every code exercise checked with a Playwright probe against a reference solution.
Fecha de consulta: 2026-10-17