El enésimo hijo

facebook-svg gplus-svg twitter-svg

Seleccionar al enésimo hijo con  :nth-child()

En el CSS3 podemos seleccionar al enésimo hijo de una caja padre utilizando el selector :nth-child ( de hecho una pseudo-clase ). Por ejemplo: dada una lista <ul> de 5 artículos,  li:nth-child(3) selecciona el tercer artículo de la lista.


#ul1 li:nth-child( 3 ){ background-color:LightSkyBlue;}

  • artículo 1
  • artículo 2
  • artículo 3
  • artículo 4
  • artículo 5
  • artículo 1
  • artículo 2
  • artículo 3
  • artículo 4
  • artículo 5

Pero el selector :nth-child puede hacer mucho más que esto.

Utilizando palabras clave

Podemos seleccionar los hijos impares ( odd ) o pares ( even ) utilizando las palabras clave odd o even. Por ejemplo: dada la misma lista <ul> de 5 artículos ,  li:nth-child( even ) selecciona los artículos 2 y 4, ( los amarillos ) mientras que li:nth-child( odd ) selecciona los artículos 1, 3 y 5 ( los azules ).


#ul2 li:nth-child( even ){ background-color:Gold;}
#ul2 li:nth-child( odd ){ background-color:LightSkyBlue;}

  • artículo 1
  • artículo 2
  • artículo 3
  • artículo 4
  • artículo 5
  • artículo 1
  • artículo 2
  • artículo 3
  • artículo 4
  • artículo 5

Utilizando fórmulas :nth-child( an+b )

También podemos utilizar fórmulas, lo que es fantástico e inusual si pensamos que esto es CSS. Por ejemplo li:nth-child(2n) selecciona todos los hijos pares, mientras que li:nth-child(3n) selecciona cada hijo cuyo índice es un múltiplo de 3.


#ul3 li:nth-child( 2n ){ background-color:LightSkyBlue;}
#ul3 li:nth-child( 3n ){ background-color:Gold;}

  • artículo 1
  • artículo 2
  • artículo 3
  • artículo 4
  • artículo 5
  • artículo 1
  • artículo 2
  • artículo 3
  • artículo 4
  • artículo 5

Pero podemos hacer cosas todavía más complicadas y más interesantes: li:nth-child(2n+1) selecciona los elementos 1, 3, 5 y 7 de la siguiente lista.


#ul4 li:nth-child( 2n+1 ){ background-color:LightSkyBlue;}

  • artículo 1
  • artículo 2
  • artículo 3
  • artículo 4
  • artículo 5
  • artículo 6
  • artículo 7
  • artículo 1
  • artículo 2
  • artículo 3
  • artículo 4
  • artículo 5
  • artículo 6
  • artículo 7

¿Como lo hace? y ¿qué significa n? El parámetro n es un contador que empieza a 0. Para entender porque li:nth-child(2n+1) selecciona los elementos 1, 3, 5 y 7 miremos la siguiente tabla:

El parámetro n 2n+1 =
0 2*0+1 1
1 2*1+1 3
2 2*2+1 5
3 2*3+1 7

La formula que hemos utilizado se puede escribir así: nth-child(an+b). En el ejemplo anterior a = 2, y b=1. Los parámetros a y b son números enteros y pueden tomar tanto valores positivos como negativos.
www.sitepoint.com  pública, en un artículo interesante acerca del selector nth-child, esta tabla muy útil con los valores resultantes para nth-child(an+b):

n 2n+1 4n+1 4n+4 4n 5n-2 -n+3
0 1 1 4 - - 3
1 3 5 8 4 3 2
2 5 9 12 8 8 1
3 7 13 16 12 13 -
4 9 17 20 16 18 -
5 11 21 24 20 23 -

Utilizando varios selectores nth-child concatenados

En el siguiente ejemplo utilizamos dos selectores nth-child concatenados. El primer selector

li:nth-child(-n+16)

selecciona las primeras 16 autonomías de la lista. Si concatenamos otro selector, por ejemplo:

li:nth-child(-n+16):nth-child( 2n+4 )

de las primeras 16 autonomías ( el primer selector ) seleccionamos solo los elementos pares ( 2n+4 ) , empezando con el cuarto ( 2n+4 ).


#autonomias li:nth-child(-n+16){ background-color:Gold;}
#autonomias li:nth-child(-n+16):nth-child(2n+4){ background-color:LightSkyBlue;}

  • Andalucía
  • Cataluña
  • Comunidad de Madrid
  • Comunidad Valenciana
  • Galicia
  • Castilla y León
  • País Vasco
  • Canarias
  • Castilla-La Mancha
  • Región de Murcia
  • Aragón
  • Islas Baleares
  • Extremadura
  • Principado de Asturias
  • Navarra
  • Cantabria
  • La Rioja
  • Ceuta
  • Melilla
  • Andalucía
  • Cataluña
  • Comunidad de Madrid
  • Comunidad Valenciana
  • Galicia
  • Castilla y León
  • País Vasco
  • Canarias
  • Castilla-La Mancha
  • Región de Murcia
  • Aragón
  • Islas Baleares
  • Extremadura
  • Principado de Asturias
  • Navarra
  • Cantabria
  • La Rioja
  • Ceuta
  • Melilla

Alternancia de etiquetas

Utilizar una lista puede ser bastante ilustrativo, pero veamos que pasa si utilizamos una alternancia de títulos ( headers ) y párrafos.


Hijo 1 ( encabezado h6 )

hijo 2 ( párafo 1 )

hijo 3 ( párafo 2 )

hijo 4 ( párafo 3 )

Hijo 5 ( encabezado h6 )

hijo 6 ( párafo 4 )

hijo 7 ( párafo 5 )


div#enesimoHijo{width:200px; margin:0 auto; padding:3px; border:1px solid #d9d9d9;}
div#enesimoHijo p, div#enesimoHijo h6{ padding:2px 10px; margin:2px 0;}
#enesimoHijo p:nth-child(2n+1){border: 1px solid red;background-color:Chartreuse;}
Hijo 1 ( encabezado h6 )

hijo 2 ( párafo 1 )

hijo 3 ( párafo 2 )

hijo 4 ( párafo 3 )

Hijo 5 ( encabezado h6 )

hijo 6 ( párafo 4 )

hijo 7 ( párafo 5 )

Mirando la tabla de arriba llegamos a la conclusión que p:nth-child(2n+1) tiene que seleccionar los hijos 1, 3, 5 y 7. ¿Qué pasó? Los encabezados son también hijos del <div id="enesimoHijo">, pero nosotros seleccionamos solo los parafos que cumplen la condición.
Si queremos seleccionar los párrafos  1, 3, 5. . .  tenemos que utilizar otro selector :nth-of-type ( el enésimo de su tipo ).


div#enesimoDeSuTipo{width:200px; margin:0 auto; padding:3px; border:1px solid #d9d9d9;}
div#enesimoDeSuTipo p, div#enesimoHijo h6{ padding:2px 10px; margin:2px 0;}
#enesimoDeSuTipo p:nth-of-type(2n+1){border: 1px solid red;background-color:Chartreuse;}

Hijo 1 ( encabezado h6 )

hijo 2 ( párafo 1 )

hijo 3 ( párafo 2 )

hijo 4 ( párafo 3 )

Hijo 5 ( encabezado h6 )

hijo 6 ( párafo 4 )

hijo 7 ( párafo 5 )

Hijo 1 ( encabezado h6 )

hijo 2 ( párafo 1 )

hijo 3 ( párafo 2 )

hijo 4 ( párafo 3 )

Hijo 5 ( encabezado h6 )

hijo 6 ( párafo 4 )

hijo 7 ( párafo 5 )

Otras pseudo-clases

En el CSS3 hay otras pseudo-clases que permiten seleccionar de la misma manera múltiples elementos según su posición en el DOM ( Document Object Model ). Estas pseudo-clases son:

Selector Ejemplo Descripción
:nth-child(n) p:nth-child(2) Selecciona cada <p> que sea el segundo hijo de su padre.
:nth-last-child(n) p:nth-last-child(2) Selecciona todos los <p> que sean el penúltimo hijo de su padre. ( El segundo a partir del último )
:nth-of-type(n) p:nth-of-type(2) Selecciona cada <p> que sea el segundo <p> hijo de su padre.
:nth-last-of-type(n) p:nth-last-of-type(2) Selecciona todos los <p> que sean el penúltimo <p> hijo de su padre. ( El segundo a partir del último )