Hola a todos, hoy os voy a explicar como podemos crear un tablero de ajedrez con CSS Grid paso a paso.
Una buena práctica para CSS es hacer un tablero de ajedrez con todas sus piezas como imágenes, en nuestro caso lo vamos a hacer usando CSS Grid.
Base de nuestro tablero CSS Grid
Esta será nuestra estructura base:

Te dejo la base en github. Incluye las imágenes.
HTML
Lo primero es ponernos con la parte del HTML, esta parte es sencilla.
Tendremos una clase wrapper donde lo definiremos como un grid.
Después, tendremos 64 divs (8×8) con la clase item y en algunos de ellos, le pondremos la imagen asociada.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 |
lang="en"> charset="UTF-8"> http-equiv="X-UA-Compatible" content="IE=edge"> name="viewport" content="width=device-width, initial-scale=1.0"> rel="stylesheet" href="./includes/css/style.css"> class="wrapper"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> class="item"> |
CSS Grid
Vamos con el CSS, como hemos dicho, la clase wrapper le pondremos un display grid, además le definiremos sus filas y columnas.
Usando la función repeat le indicamos que el numero de filas o columnas y su medida, en nuestro caso, 1fr que es util para responsive.
La propiedad gap nos da un poco de espacio entre las casillas.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
body { margin: 40px; } .wrapper{ display: grid; grid-template-rows: repeat(8, 1fr); grid-template-columns: repeat(8, 1fr); gap: 10px; } .item { background-color: #ccc; padding: 5px; border-radius: 4px; text-align: center; } .item img { max-width: 100%; } |
Así se nos queda de momento.

Coloreando nuestro tablero CSS Grid
Solo nos queda ir alternando de color en las casillas, ¿Cuál es el problema? Que no hay un patrón fijo ya que en algunas empiezan en negro y otras en blanco.
Empecemos con la primera fila, en nuestro CSS le agregamos lo siguiente:
|
1 2 3 |
div.item:nth-child(-2n+8) { background-color: #000; } |
Este es el resultado:

¿Porque -2n+8? Significa que empieza desde el final hasta el principio, el truco esta en cambiar el n por 0,1,2,3,etc. hasta que sea negativo o cero el resultado, por ejemplo:
(n=0) -2 * 0 + 8 = 8
(n=1) -2 * 1 + 8 = 6
(n=2) -2 * 2 + 8 = 4
(n=3) -2 * 3 + 8 = 2
(n=4) -2 * 4 + 8 = 0 (ya no se muestra)
Para la segunda fila es parecido pero tenemos que indicarle que no pase a la anterior fila. Lo podemos hacer con un selector hermano.
|
1 2 3 4 |
div.item:nth-child(-2n+8), div.item:nth-child(8) ~ div.item:nth-child(-2n+15) { background-color: #000; } |
Le estoy diciendo que solo afecte a aquellos que estén por delante del div numero 8, también usamos la misma formular pero no seria 16 sino 15.
Este es el resultado:

Mismo calculo:
(n=0) -2 * 0 + 15 = 15
(n=1) -2 * 1 + 15 = 13
(n=2) -2 * 2 + 15 = 11
(n=3) -2 * 3 + 15 = 9
(n=4) -2 * 4 + 15 = 7 (con el selector de hermano, no lo pinta)
Y así seria con el resto de filas, haciendo uno más y otro menos.
|
1 2 3 4 5 6 7 8 9 10 |
div.item:nth-child(-2n+8), /* 1 fila */ div.item:nth-child(8) ~ div.item:nth-child(-2n+15), /* 2 fila */ div.item:nth-child(16) ~ div.item:nth-child(-2n+24), /* 3 fila */ div.item:nth-child(24) ~ div.item:nth-child(-2n+31), /* 4 fila */ div.item:nth-child(32) ~ div.item:nth-child(-2n+40), /* 5 fila */ div.item:nth-child(40) ~ div.item:nth-child(-2n+47), /* 6 fila */ div.item:nth-child(48) ~ div.item:nth-child(-2n+56), /* 7 fila */ div.item:nth-child(56) ~ div.item:nth-child(-2n+63){ /* 8 fila */ background-color: #000; } |
Recursos
Recordar que tenemos un curso de HTML5 y CSS3 con prácticas de este tipo para practicar.
Curso Udemy – Aprende HTML y CSS: Domina las habilidades esenciales
Os dejo un video explicando el proceso paso a paso.
También el repositorio de github.
https://github.com/DiscoDurodeRoer/tablero-ajedrez-css-grid
Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.
Deja una respuesta