Guía de repaso para el examen — Explicado desde cero con ejemplos
Todo fichero .html tiene siempre la misma estructura base. Es obligatoria. El navegador la usa para saber cómo interpretar el archivo.
HTML<!-- Le decimos al navegador que es HTML5 --> <!DOCTYPE html> <html lang="es"> <!-- Raíz de todo el documento --> <head> <!-- Metadatos (no se VEN en pantalla) --> <meta charset="UTF-8"> <!-- Soporte para tildes y ñ --> <title>Mi página</title> <!-- Título en la pestaña del navegador --> </head> <body> <!-- Aquí va todo lo que SE VE --> <h1>Hola mundo</h1> </body> </html>
<etiqueta> y se cierran </etiqueta>. Hay excepciones como <meta>, <br> o <img> que son etiquetas vacías (no tienen cierre).
Se pueden cargar recursos externos (hojas de estilo, fuentes, scripts) desde el <head>:
HTML<head> <!-- CSS externo: hoja de estilos propia --> <link rel="stylesheet" href="estilos.css"> <!-- CSS desde una CDN (p.ej. Font Awesome) --> <link rel="stylesheet" href="https://cdnjs.../font-awesome/all.min.css"> <!-- JavaScript interno (dentro del HTML) --> <script> // código JS aquí </script> </head>
<link> es para CSS. <script> es para JavaScript. Ambos se pueden incluir tanto dentro del <head> como al final del <body>.
HTML<h1>Título principal (el más grande)</h1> <h2>Subtítulo</h2> <h3>Subsección</h3> <!-- Hay hasta h6 --> <p>Esto es un párrafo de texto normal.</p>
Son las etiquetas más usadas para agrupar y organizar contenido.
div — bloque<!-- div ocupa toda la línea --> <div id="div-tablero"> <!-- Contenido agrupado --> </div>
span — en línea<!-- span va dentro del texto --> <p>Texto con <span class="rojo">color</span> </p>
| Etiqueta | Comportamiento | Uso típico |
|---|---|---|
<div> | Bloque (ocupa toda la fila) | Secciones, contenedores grandes |
<span> | En línea (dentro del texto) | Colorear palabras, iconos inline |
Las tablas se usan para datos tabulares (filas y columnas). En el tablero de ajedrez usamos una tabla para dibujar las celdas.
HTML<table> <!-- Contenedor de la tabla --> <tr> <!-- tr = table row = fila --> <td>Celda 1</td> <!-- td = table data = celda --> <td>Celda 2</td> </tr> <tr> <td>Celda 3</td> <td>Celda 4</td> </tr> </table>
unTablero.rows[i] accede a una fila <tr> y unTablero.rows[i].cells[j] accede a una celda <td>. Esto es clave para entender cómo se colocan las piezas.
HTML<!-- id: identifica un elemento ÚNICO en la página --> <table id="tablero-ajedrez"></table> <!-- class: aplica estilos a VARIOS elementos --> <td class="celda-blanca"></td> <td class="celda-negra"></td> <!-- style: estilos CSS directamente en el elemento --> <td style="color: yellow; font-size: 40px"></td>
| Atributo | Cuándo se usa | En JS se accede con... |
|---|---|---|
id | Un único elemento especial | document.getElementById("id") |
class | Grupo de elementos con mismo estilo | document.getElementsByClassName("clase") |
style | Estilo rápido y puntual | elemento.style.color = "red" |
CSS (Cascading Style Sheets) controla el aspecto visual de los elementos HTML: colores, tamaños, posiciones, fuentes...
CSS/* selector { propiedad: valor; } */ h1 { color: navy; /* color del texto */ font-family: Arial, sans-serif; /* tipo de fuente */ font-size: xx-large; /* tamaño de fuente */ text-align: center; /* centrar el texto */ }
;. El bloque de reglas va entre llaves { }.
| Propiedad | Qué controla | Ejemplo de valor |
|---|---|---|
color | Color del texto | red, navy, #fff |
background-color | Color de fondo | black, lightgray |
font-size | Tamaño de fuente | 40px, medium, xx-large |
font-weight | Grosor de la fuente | bold, normal |
text-align | Alineación del texto | center, left, right |
width / height | Ancho / alto del elemento | 50px, 100% |
border | Borde del elemento | 1px solid blue |
margin | Espacio FUERA del elemento | 10px auto |
text-shadow | Sombra del texto | 1px 1px black |
px — píxeles (lo más común)pt — puntos (tipografía)% — porcentaje del contenedorem — relativo al tamaño de fuenterem — relativo a la raíz (<html>)CSS/* 1. Selector de ETIQUETA — afecta a TODOS los h2 */ h2 { color: navy; } /* 2. Selector de CLASE — afecta a todos los que tienen class="celda-blanca" */ .celda-blanca { background-color: white; text-shadow: 1px 1px black; } /* 3. Selector de ID — afecta SÓLO al elemento con id="tablero-ajedrez" */ #tablero-ajedrez { border: 1px solid blue; margin: 10px auto; /* auto centra el tablero */ }
| Tipo | Símbolo en CSS | En HTML | Cuándo se aplica |
|---|---|---|---|
| Etiqueta | (sin símbolo) h1 | <h1> | A TODOS los h1 de la página |
| Clase | .nombre | class="nombre" | A todos los elementos con esa clase |
| ID | #nombre | id="nombre" | A ese único elemento específico |
Se pueden aplicar los mismos estilos a varios selectores separándolos con coma:
CSS/* Mismo estilo para celda-blanca Y celda-negra */ .celda-blanca, .celda-negra { font-weight: bold; height: 50px; text-align: center; width: 50px; } /* Luego cada una con su propio color de fondo */ .celda-blanca { background-color: white; text-shadow: 1px 1px black; } .celda-negra { background-color: black; text-shadow: 1px 1px white; }
JavaScript// const: valor que NO cambia (constante) const fichaPeon = '<i class="fa-solid fa-chess-pawn"></i>'; // let: valor que SÍ puede cambiar let celda_blanca = true; celda_blanca = false; // Puedo reasignarla // ❌ var está en desuso, evítalo en código moderno
const | let | |
|---|---|---|
| ¿Se puede reasignar? | ❌ No | ✅ Sí |
| ¿Scope de bloque? | ✅ Sí | ✅ Sí |
| Uso recomendado | Valores fijos | Contadores, flags |
Un array guarda múltiples valores en orden. Se accede a cada uno por su índice (empieza en 0).
JavaScript// Array de fichas de ajedrez const fichasPAw = [ '', // índice 0 — vacío '<i class="fa-chess-rook"></i>', // índice 1 — Torre '<i class="fa-chess-knight"></i>',// índice 2 — Caballo '<i class="fa-chess-bishop"></i>',// índice 3 — Alfil '<i class="fa-chess-queen"></i>', // índice 4 — Reina '<i class="fa-chess-king"></i>' // índice 5 — Rey ]; // Acceder a un elemento por su índice console.log(fichasPAw[1]); // Torre console.log(fichasPAw[4]); // Reina console.log(fichasPAw.length); // 6 — cuántos elementos tiene
[0], el segundo [1], etc. En el ajedrez, el índice 0 se deja vacío a propósito porque la columna 0 es para el número de fila.
Una función es un bloque de código con nombre que puedes llamar cuando quieras. Puede recibir parámetros y devolver un resultado.
JavaScript// Definición de la función function dibujarTablero(filas, columnas) { // 'filas' y 'columnas' son PARÁMETROS (entran como dato) let texto_html = ""; // ... construye el HTML ... return texto_html; // Devuelve el resultado } // Llamada a la función con argumentos concretos let html = dibujarTablero(8, 8); // 8 filas, 8 columnas
// Si no pasas ponerFichasBlancas, // se asume true automáticamente function ponerFichasEnTablero( unTablero, ponerFichasBlancas = true ) { // ... }
if (ponerFichasBlancas) { fila1 = tabla.rows.length - 2; color = "yellow"; } else { fila1 = 0; color = "red"; }
Permiten repetir código un número determinado de veces. Son clave para construir el tablero.
JavaScript// Bucle básico: de 1 a 8 (las filas del tablero) for (let i = 1; i <= filas; i++) { texto_html += "<tr>"; // Añade una fila // Bucle ANIDADO: las columnas de cada fila for (let j = 0; j <= filas; j++) { if (j == 0) texto_html += "<td class='celda-numfila'>" + i + "</td>"; else texto_html += "<td class='celda-" + (celda_blanca?"blanca":"negra") + "'></td>"; celda_blanca = !celda_blanca; // Alterna blanca/negra } texto_html += "</tr>"; }
! niega un booleano: !true = false, !false = true. Así se alterna el color de las celdas en cada iteración.
condicion ? valorSiTrue : valorSiFalse es un if-else en una línea. En el código: (celda_blanca ? "blanca" : "negra") → devuelve "blanca" si es true, "negra" si es false.
JavaScriptlet texto = ""; texto += "<tr>"; // texto = "<tr>" texto += "<td>A</td>"; // texto = "<tr><td>A</td>" texto += "</tr>"; // texto = "<tr><td>A</td></tr>" // Es equivalente a: texto = texto + "</tr>"
innerHTML.
El DOM (Document Object Model) es la representación en memoria de la página HTML. JavaScript puede leerlo y modificarlo en tiempo real.
JavaScript// Por ID — devuelve UN elemento (o null si no existe) let unDiv = document.getElementById("div-tablero"); // Por nombre de etiqueta — devuelve una colección let tablas = document.getElementsByTagName("table"); // Por clase — devuelve una colección let celdas = document.getElementsByClassName("celda-blanca"); // Selector CSS moderno — más flexible let tabla = document.querySelector("#tablero-ajedrez");
La propiedad innerHTML permite leer o escribir el contenido HTML de un elemento.
JavaScriptlet unDiv = document.getElementById("div-tablero"); // LEER el contenido actual console.log(unDiv.innerHTML); // ESCRIBIR / REEMPLAZAR el contenido con HTML generado unDiv.innerHTML = dibujarTablero(8, 8); // → El div ahora contiene la tabla del tablero // También se puede poner en una celda una pieza de ajedrez unTablero.rows[fila2].cells[j].innerHTML = fichaPeon;
innerHTML reemplaza TODO el contenido anterior. Si solo quieres añadir sin borrar lo anterior, usa innerHTML +=.
JavaScript// Acceder a la celda de la fila 'fila1', columna 'j' let celda = unTablero.rows[fila1].cells[j]; // Asignar estilo CSS directamente celda.style = "color: yellow"; // fichas blancas en amarillo celda.style = "color: red"; // fichas negras en rojo // También se puede así (propiedad por propiedad): celda.style.color = "yellow"; celda.style.fontSize = "40px"; // font-size → camelCase en JS
font-size, background-color) se escriben en camelCase en JavaScript: fontSize, backgroundColor.
Los elementos <table> tienen propiedades especiales para acceder a sus filas y celdas:
JavaScriptlet tabla = document.getElementById("tablero-ajedrez"); tabla.rows // Array con todas las filas <tr> tabla.rows.length // Número total de filas (ej: 9 — 8 filas + 1 letras) tabla.rows[0] // Primera fila (fila negras) tabla.rows[0].cells // Array de celdas de esa fila tabla.rows[0].cells[1] // Primera celda <td> (índice 0 = número de fila) // Para la última fila de la tabla: tabla.rows[tabla.rows.length - 1] // Última fila tabla.rows[tabla.rows.length - 2] // Penúltima fila (fichas blancas)
rows.length - 2 (fila de piezas) y rows.length - 3 (fila de peones).
El JavaScript del <head> se ejecuta antes de que el HTML esté construido. Si intentamos acceder a un <div> que aún no existe, obtenemos null. Para evitarlo, usamos el evento DOMContentLoaded.
JavaScript// Sintaxis: elemento.addEventListener(evento, función_manejadora) // Cuando el HTML esté completamente cargado, ejecuta la función document.addEventListener("DOMContentLoaded", listenerDeCargadelDoc); // 'listenerDeCargadelDoc' es la función que se ejecutará function listenerDeCargadelDoc() { // Ahora SÍ podemos acceder al DOM (ya está construido) let unDiv = document.getElementById("div-tablero"); unDiv.innerHTML = dibujarTablero(8, 8); }
function miHandler() { // código } document.addEventListener( "DOMContentLoaded", miHandler // sin () );
document.addEventListener( "DOMContentLoaded", function() { // código directamente aquí } );
addEventListener, no se ponen los paréntesis (). Escribir miHandler pasa la función como referencia. Escribir miHandler() la ejecutaría inmediatamente.
| Evento | Cuándo se dispara |
|---|---|
DOMContentLoaded | Cuando el HTML está listo (antes de imágenes/CSS) |
load | Cuando TODO (imágenes, CSS) ha cargado |
click | Al hacer clic en un elemento |
mouseover | Al pasar el ratón por encima |
keydown | Al pulsar una tecla |
Vamos a repasar cómo funciona el código del tablero entendiendo cada parte:
DOMContentLoaded → se llama a listenerDeCargadelDoc()
JavaScriptlet un_div = document.getElementById("div-tablero"); un_div.innerHTML = dibujarTablero(8, 8);
celda-blanca o celda-negra alternando. Al final devuelve una cadena de texto con todo el HTML de la tabla.
JavaScriptlet unaTabla = document.getElementById("tablero-ajedrez");
fichasPAw[] para saber qué icono poner en cada columna.
Font Awesome es una librería de iconos que funciona como una fuente tipográfica. Se incluye con <link> en el <head> y se usa con etiquetas <i>:
HTML / JavaScript<!-- En el HTML directamente --> <i class="fa-solid fa-chess-king"></i> <!-- Rey ♚ --> <i class="fa-solid fa-chess-queen"></i> <!-- Reina ♛ --> <i class="fa-solid fa-chess-pawn"></i> <!-- Peón ♟ --> // En JavaScript, como un string de HTML que se inyecta con innerHTML const fichaPeon = '<i class="fa-solid fa-chess-pawn"></i>'; celda.innerHTML = fichaPeon;
color: yellow; font-size: 40px.
JavaScript — Truco clave// La clase CSS se construye concatenando strings texto_html += "<td class='celda-" + (celda_blanca ? "blanca" : "negra") + "'></td>"; // Si celda_blanca es true → genera: <td class='celda-blanca'></td> // Si celda_blanca es false → genera: <td class='celda-negra'></td> // Al final de cada celda, se alterna: celda_blanca = !celda_blanca;