Ir al contenido

HTML y CSS

HTML usa marcas (tags) que definen el significado semántico del contenido. Cada marca abre <tag> y cierra </tag>. Las marcas vacías se escriben como <br/> o <img/>.

La estructura de un documento HTML es arborescente: cada elemento es un nodo, y los nodos se contienen unos dentro de otros formando el DOM (Document Object Model).

Documento HTML
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8"/>
<title>Título de la Página</title>
</head>
<body>
<h1>Encabezado nivel 1</h1>
<p>Un párrafo de texto.</p>
</body>
</html>
Resultado en el navegador

Árbol DOM:

  • Directoriohtml
    • Directoriohead
      • meta charset="UTF-8"
      • title “Título de la Página”
    • Directoriobody
      • h1 “Encabezado nivel 1”
      • p “Un párrafo de texto.”
Haz clic en un nodo:
<html>
<head>
<meta charset="UTF-8"/>
<title>Título de la Página</title>
</head>
<body>
<h1>Encabezado nivel 1</h1>
<p>Un párrafo de texto.</p>
</body>
</html>
Selecciona un nodo

Explorador del DOM

Haz clic en cualquier etiqueta de la izquierda para analizar sus propiedades y visibilidad en el navegador.

Un elemento HTML tiene un valor (el contenido entre las marcas) y puede tener atributos que configuran su comportamiento. El valor de los atributos siempre va entre comillas.

<a href="https://www.w3schools.com">Enlace a w3schools</a>

<table> define una tabla. <tr> es una fila (table row). <th> es celda de encabezado y <td> celda de datos.

Haz clic en una etiqueta:
<table>
<tr>
<th>Nombre</th>
<th>Apellido</th>
<th>Usuario</th>
</tr>
<tr>
<td>María</td>
<td>Díaz</td>
<td>maria.diaz</td>
</tr>
<tr>
<td>Juan</td>
<td>Castro</td>
<td>juan.castro</td>
</tr>
</table>
Selecciona una etiqueta

Anatomía de una tabla

Haz clic en cualquier etiqueta de la izquierda para ver qué hace y dónde aparece en la tabla que dibuja el navegador.

Resultado en el navegador, sin CSS:
NombreApellidoUsuario
MaríaDíazmaria.diaz
JuanCastrojuan.castro

<img> incrusta una imagen. src es la URL o ruta local, alt es el texto alternativo para accesibilidad, y width / height definen el tamaño en píxeles.

<img
src="https://picsum.photos/400/250"
alt="Paisaje de ejemplo"
width="400"
height="250"
/>
Resultado

<a> crea un enlace. El atributo href define el destino. Con target="_blank" el enlace se abre en una nueva pestaña.

<!-- Enlace en la misma pestaña -->
<a href="https://developer.mozilla.org">MDN Web Docs</a>
<!-- Abre en nueva pestaña -->
<a href="https://www.w3schools.com" target="_blank">W3Schools ↗</a>
Resultado

<form> agrupa campos de entrada. Cada <input> tiene type (text, email, submit…), name y opcionalmente value como valor por defecto. <br/> inserta un salto de línea.

<form>
Ciudad:
<br/><br/>
<input type="text" name="ciudad" value="Bogotá">
<br/><br/>
Zipcode:
<br/><br/>
<input type="text" name="zipcode" value="1101001">
<br/><br/>
<input type="submit" value="Enviar">
</form>
Resultado

Modifica el código y observa el renderizado en tiempo real. Algunas cosas concretas para probar:

  • Cambia value="Bogotá" por otra ciudad, y mira cómo cambia el texto del campo.
  • Cambia type="text" por type="date" o type="color": el navegador dibuja un control completamente distinto, sin que tú programes nada.
  • Prueba ahora type="email" y type="number". Se ven iguales a text, pero no son lo mismo: cambian la validación al enviar y el teclado que aparece en un celular. No todo lo que hace un atributo es visible.
  • Reemplaza value="Bogotá" por placeholder="Escribe tu ciudad" y compara. ¿En qué se diferencia un valor por defecto de un texto de ayuda?
  • Agrega disabled a un campo, sin valor: es un atributo booleano y el campo se ve deshabilitado de inmediato.
  • Agrega un campo nuevo, por ejemplo <input type="checkbox" checked>.
Editor HTML en Vivo
Vista Previa

CSS funciona con reglas. Cada regla tiene un selector (a qué elemento aplica) y un bloque de declaraciones con pares propiedad: valor separados por ;.

selector {
propiedad: valor;
otra-propiedad: otro-valor;
}

Antes y después: el mismo HTML, sin CSS y con CSS.

Sin CSS
El CSS aplicado en la versión con estilos
body { background-color: lightyellow; }
h1 { color: navy; text-align: center; }
p { font-family: Georgia, serif; color: #444; }
table { border-collapse: collapse; width: 100%; }
td, th { border: 1px solid #bbb; padding: 6px 10px; }
Con CSS

El selector determina a qué elementos HTML aplica cada regla CSS. Los tres tipos fundamentales son:

Selector de elemento, aplica a todos los elementos con esa etiqueta.

table { border-collapse: collapse; width: 100%; background: #f0f8ff; }
th, td { border: 2px solid steelblue; padding: 8px 12px; }
th { background: steelblue; color: white; }
Resultado

Selector por ID (#), se escribe con # en el CSS y se aplica con id="nombre" en el HTML. Identifica un elemento único en la página.

<!-- Solo este th tiene el id -->
<th id="titulotabla">Nombre</th>
#titulotabla {
color: darkred;
font-weight: bold;
font-family: Times, serif;
font-size: 14px;
font-style: italic;
}
Resultado

Selector por clase (.), se escribe con . en el CSS y se aplica con class="nombre". Se puede reutilizar en múltiples elementos y combinar varias clases en uno solo.

<p class="centrado colorazul">Centrado y azul.</p>
<p class="resaltado">Solo resaltado.</p>
<p>Sin clases.</p>
.centrado { text-align: center; }
.colorazul { color: steelblue; font-weight: bold; }
p.resaltado { background: lightyellow; padding: 8px 12px; border-radius: 4px; }
Resultado

Experimenta cómo interactúan y se superponen las reglas según el tipo de selector:

NombreApellidoUsuario
MaríaDíazmaria.diaz
JuanCastrojuan.castro
/* Selecciona una opción arriba para ver la regla CSS correspondiente */
1. ¿Cuál es la primera línea obligatoria de todo documento HTML?
2. ¿Qué sección del HTML contiene el contenido visible de la página?
3. ¿Cómo se escribe la etiqueta de cierre para <h1>?
4. ¿Qué etiqueta define una fila en una tabla HTML?
5. ¿Qué atributo de <a> define la URL de destino del enlace?
6. ¿Qué atributo hace que un enlace se abre en una nueva pestaña?
7. ¿Cuál es la sintaxis correcta de una regla CSS?
8. ¿Cómo se define un selector de clase en CSS?
9. Para que todos los <p> sean de color rojo, ¿cuál regla es correcta?
10. ¿Cuál es la mejor práctica para definir estilos CSS en un proyecto?