Bases HTML
Bases HTML
<!DOCTYPE html>
Etiquetas
<html> </html> esto sirve para abrir y cerrar las líneas de código, es
considerado como el elemento raíz ya que aquí dentro irá en sí el código.
Esto se debe colocar en cualquier documento de html para indicar donde
comienza y termina el código html. Aquí se le puede agregar el atributo
“Lang” para definir el idioma del sitio, aunque al parecer no hace falta,
quedaría: <html lang = “es”>
<head> </head> este se debe colocar después de la apertura del código con
<html> y antes del <body>. En esta parte se agrega información adicional
como el título del documento HTML y algunos otros metadatos que no se
suelen mostrar en el navegador (excepto el title, que se muestra en la
pestaña abierta.
<meta charset = “utf-8”> se agrega dentro del head y antes del title, y define
la codificación usada en el documento, por ejemplo para poder mostrar
acentos y demás. Se recomienda SIEMPRE incluirlo.
<br> Se puede colocar después de cualquier texto para saltar la línea (como
un enter). No se tiene que cerrar. Entonces puede estar dentro de
cualquier texto así tal cual.
<!--
Este es un comentario
que ocupa varias líneas
y explica una sección completa
-->
Enlaces y vínculos
<a></a> Viene de “anchor” y es un elemento que define un hipervínculo/enlace
el cual puede ser a otra página diferente, a otra página de nuestro mismo
sitio, a un elemento de la misma página (como un salto) o a contenido
descargable. Va de la mano con el atributo href (HyperText reference) que
sirve para especificar el destino del enlace, así que se usan juntos.
Imágenes
<img> Sirve para mostrar una imagen en la página web. La imagen NO se
"inserta" dentro del código: el navegador la carga desde un archivo o
desde internet. Es una etiqueta auto-contenida (no tiene etiqueta de
cierre).
<img src="URL o ruta del archivo" alt="Texto alternativo">
En src colocamos la ruta de la imagen si la cargamos desde una carpeta
local o bien el URL de la imagen. alt es el texto alternativo que se
muestra si la imagen no carga.
Listas
Una lista es un conjunto de elementos que queremos mostrar agrupados. Los
navegadores las muestran con puntos, números, o el estilo que tú les des
después. Son MUY útiles para:
✅ Menús de navegación
✅ Recetas
✅ Índices de contenido
✅ Listas de tareas
✅ Listas de enlaces
✅ Secciones de información
<ol></ol> esto sirve para crear una lista ordenada, en donde cada elemento
tiene un orden específico y es importante el orden. Por ejemplo, una serie
de pasos a seguir.
<ol>
<li> Texto </li>
<li> Texto </li>
<li> Texto </li>
</ol>
La etiqueta <li> significa List Item (Elemento de lista). Aquí se ponen
los diferentes elementos que tendrá la lista. Cada elemento de la lista se
pone entre <li> y </li>. El navegador muestra números por defecto.
<ul></ul> esto sirve para crear una lista no ordenada, donde el orden de los
ítems de la lista no importa, solo se busca agrupar elementos. Por
ejemplo, una lista de cosas cualquiera, como del super.
<ul>
<li>Pan</li>
<li>Leche</li>
<li>Huevos</li>
</ul>
Se colocan viñetas/bullets (círculo negro) por default. También se debe
usar <li> y </li>.
<ul>
<li>Comida favorita:
<ul>
<li>Tacos</li>
<li>Pizza</li>
<li>Sushi</li>
</ul>
</li>
<li>Deportes favoritos:
<ul>
<li>Fútbol</li>
<li>Natación</li>
</ul>
</li>
</ul>
Puedes poner una lista dentro de un elemento <li> para hacer sublistas
(listas anidadas). Siempre se debe poner las listas bien indentadas
(sangría) para que se vea limpio el código. Algo importante es que las
nuevas listas que se hagan deben quedar dentro de un <li> y no afuera (yo
me confundí cuando hice una lista la primera vez).
Tablas
<table></table> Esta es la etiqueta para definir una tabla. Se abre y se
cierra y puede ir en body. Es el contendor en sí de la tabla.
<tr></tr> Esto define una fila en la tabla (TableRow). Cada uno de estos
representa una fila.
<td></td> Esto define los datos que van en cada celda y viene de: Table Data
(dato de tabla). Es el texto normal que aparece en cada celda. Cada uno de
estos representa una celda dentro de una fila.
<table border="1"> Se puede usar este atributo para poner un borde sencillo.
Esto se pone al principio cuando se abre o se crea la tabla. Si no pones
border, la tabla sí existe, pero por defecto: no se ven los bordes (ni de
las filas, ni de las celdas). Los datos quedan alineados en columnas y
filas, pero todo se ve alineado hacia la izquierda y sin mucho formato,
como texto plano. El navegador sí entiende la estructura de la tabla
internamente, pero visualmente no la resalta. Este número se puede
incrementar y el borde exterior de la tabla es el que crece solamente (se
ve de un color gris). Border 1 sería una tabla sencilla y normal.
<header>
<h1>Mi sitio web</h1>
<p>Bienvenido a mi página</p>
</header>
2️
⃣ <nav>
Es el menú de navegación. Incluye enlaces para moverte entre páginas o
secciones. Suele ir después del header y es independiente de todo lo
demás.
<nav>
<ul>
<li><a href="[Link]">Inicio</a></li>
<li><a href="[Link]">Acerca de</a></li>
<li><a href="[Link]">Contacto</a></li>
</ul>
</nav>
3️
⃣ <main>
Es el contenido principal de la página. Debe usarse una sola vez por
página. Aquí dentro se suelen colocar las secciones (section) y los
article (artículos)
<main>
<h2>Noticias del día</h2>
<p>Hoy ha pasado algo importante...</p>
</main>
4️
⃣ <section>
Un bloque de contenido. Sirve para agrupar partes relacionadas (por
ejemplo: una sección de noticias, otra de videos, otra de fotos). Esto
generalmente se coloca dentro del main. Y a su vez dentro lleva diferentes
artículos (article)
<section>
<h2>Sección de Noticias</h2>
<p>Primera noticia...</p>
</section>
5️
⃣ <article>
Un contenido independiente que puede ser publicado por sí mismo (por
ejemplo: una sola noticia, un artículo de blog, un post). Suele ir uno por
uno por separado dentro de una sección (section), todo esto dentro del
main. Pero no es obligatorio que vaya dentro de un section, igual puede ir
directo dentro del main.
<article>
<h2>Artículo 1</h2>
<p>Este es el contenido del artículo.</p>
</article>
6️
⃣ <aside>
Contenido secundario. Ejemplo: una barra lateral, un bloque de publicidad,
enlaces relacionados, notas etc. Va después del main y es independiente,
aunque también podría ponerse dentro del main y no pasa nada. Lo mejor es
dejarlo después.
<aside>
<h3>Publicidad</h3>
<p>Compra ahora...</p>
</aside>
7️
⃣ <footer>
El pie de página. Normalmente incluye: derechos de autor, datos de
contacto, enlaces legales. Suele ir al final después de todo, también
suele ir solito fuera del main (sería lo más habitual), pero según el
diseño igual podría ir incluido dentro del main, justo antes de cerrarlo y
no está mal tampoco.
<footer>
<p>© 2025 Mi sitio web</p>
</footer>
Enlaces internos (anclas)
Cuando tienes una página larga (por ejemplo, con muchas secciones o un
largo texto), es útil que el usuario pueda saltar de un punto a otro
rápidamente. Para eso sirven los enlaces internos. Ejemplos de uso:
- Índice de contenidos que te lleva a distintas partes de la página
- Botón “Subir” que te regresa al principio
- Tabla de navegación de un documento largo
- Navegación en FAQs
Se usa la misma estructura de los enlaces normales. Enlace normal
(aprendido antes):
<body id="top">
O si tu <header> tiene un id:
<header id="top">
<h1>Mi sitio</h1>
</header>
Formularios
Un formulario es un bloque en tu página que sirve para que el usuario
pueda introducir información. Por ejemplo: un formulario de contacto, un
registro de usuario, un buscador, etc. Permiten tomar datos introducidos
por el usuario y enviarlos después a un destino que bien puede ser la base
de datos.
En cuanto a la estructura semántica, un form se debería colocar dentro del
main, y si queremos organizarlo aún mejor: dentro de un <section> que
agrupe ese formulario (porque un <section> representa un bloque de
contenido temáticamente [Link] tienes un formulario de registro,
contacto, encuesta, etc., todo eso puede considerarse una sección.)
<input type="text"> Esto se puede colocar dentro del formulario y lo que hace
es que dibuja un cuadro para escribir texto. <input> es una etiqueta auto-
contenida, es decir, no tiene etiqueta de cierre. Hay diferentes tipos de
cuadros para escribir que nos puede generar, que se señalan con la parte
de "type". El valor por defecto es "text" así que si no pusiera la parte
del type="text" aún así el navegador lo interpretará como "text".
<label>Nombre:</label>
<input type="text">
El resultado sería:
Nombre: [___________]
Comenzamos ahora con los tipos de campo de texto o inputs que se le pueden
ofrecer al usuario:
<input type="password">
Este tipo de campo de texto oculta lo que escribes. Lo que ves en la
pantalla son asteriscos o puntos, ocultando el texto real para que nadie
pueda verlo a simple vista. Pero internamente el navegador guarda y envía
el texto real que el usuario escribe, no los asteriscos.
Ejemplo: si escribes "miClaveSecreta", aunque veas **************, el
valor real es miClaveSecreta. Cuando el formulario se envía (por ejemplo a
un servidor o base de datos), se envía el texto tal cual lo escribió el
usuario.
Es importante aclarar que esta ocultación es solo visual para proteger la
privacidad en la pantalla, pero no cifra ni protege la contraseña. Por eso
la seguridad real depende del servidor y el manejo posterior.
<input type="email">
Sirve para que el usuario escriba un correo electrónico. El navegador
aplica una validación básica automática del formato del texto cuando el
usuario intenta enviar el formulario. Esta validación no acepta textos que
no tengan la forma mínima de un correo:
Debe contener al menos un carácter, luego una @, luego más caracteres,
luego un punto y al menos dos letras después del punto (por ejemplo, .com,
.mx, .es).
La validación ocurre antes de enviar el formulario. Si no pasa, el
formulario no se envía hasta que se corrija.
<input type="number">
Sirve para que el usuario solo pueda escribir números. Los navegadores
modernos evitan que escribas letras dentro de este campo: si intentas,
simplemente no aparecen o el campo no acepta el dato. En algunos
navegadores móviles se despliega un teclado numérico.
Igual aparecen unas flechas (arriba y abajo). Estas flechas se suelen
llamar spinner o incrementadores. Son controles que permiten incrementar o
disminuir el valor numérico del campo sin necesidad de escribirlo
manualmente. Al hacer clic en la flecha hacia arriba, el número aumenta.
Al hacer clic en la flecha hacia abajo, disminuye. El navegador añade
automáticamente estos controles cuando usas
<input type="number"> para facilitar la entrada de números. También puedes
escribir el número directamente con el teclado.
<input type="checkbox">
Crea una sola casilla de verificación que permite al usuario activar o
desactivar, marcándola con una palomita o tilde. Se puede usar por ejemplo
para marcar que se aceptan términos y condiciones o para seleccionar
varios hobbies o intereses de una lista.
<input type="radio">
Los radio buttons (botones de opción) permiten al usuario elegir solo una
opción de entre varias disponibles. Visualmente son círculos pequeños que
se marcan con un punto negro cuando están seleccionados. Al seleccionar
uno, los demás se desmarcan automáticamente. Se puede usar por ejemplo en:
Selección de género (Masculino, Femenino, Otro), Método de pago preferido
(Tarjeta, PayPal, Transferencia), Nivel de experiencia (Básico,
Intermedio, Avanzado), donde solo debería elegirse una opción.
<h3>Género:</h3>
<label><input type="radio" name="genero"> Masculino</label>
<label><input type="radio" name="genero"> Femenino</label>
<br><br>
<h3>Nivel de experiencia:</h3>
<label><input type="radio" name="nivel"> Básico</label>
<label><input type="radio" name="nivel"> Intermedio</label>
<label><input type="radio" name="nivel"> Avanzado</label>
En este último ejemplo, tengo dos diferentes grupos, uno para el género y
otro distinto para el nivel de experiencia.
<button type="submit">Enviar</button>
Necesitamos un botón para enviar el formulario, lo podemos crear usando
button type="submit" esto lo veremos más a fondo en la sección de botones.
<form>
<label>Nombre:</label>
<input type="text">
<br><br>
<label>Email:</label>
<input type="text">
<br><br>
<button type="submit">Enviar</button>
</form>
Con este ejemplo tendríamos dos campos, uno para poner nombre, otro Email
y al final un botón que diga "enviar".
<textarea></textarea>
Es similar al input, pero permite al usuario escribir varias frases o
incluso párrafos, por ejemplo para escribir un mensaje, comentarios, una
sugerencia etc. En cambio el input sirve para escribir texto corto, como
un nombre, una contraseña, una edad, etc. Esta etiqueta no se cierra sola
como <input>, sino que tiene una etiqueta de apertura y una de cierre. En
la esquina superior derecha suele salir una marca de redimensionado, que
permite que el usuario agrande o achique el tamaño visible del <textarea>
arrastrando con el mouse. Esta es una función integrada por el navegador.
No todos los campos la tienen, pero la mayoría de los navegadores modernos
la ofrecen por defecto en <textarea>, como una ayuda al usuario. Con CSS
se podrá modificar todo esto después.
Menús desplegables
Un menú desplegable es un campo que permite al usuario elegir una opción
entre varias. Sirve para limitar las respuestas a un conjunto específico,
como al elegir País de residencia, Ocupación, Género, Selección de idioma,
etc.
<label>País:</label>
<select>
<option>México</option>
<option>Argentina</option>
<option>España</option>
</select>
Esto crea un menú (lista desplegable) donde el usuario puede ver una
opción, y al hacer clic, desplegar las demás para elegir. En select se
ponen las option. Si dentro de select no se pone nada, el <select>
aparecerá vacío y el usuario no podrá seleccionar nada, lo cual es un
error de construcción. Siempre debes poner al menos una opción. Si el
usuario no selecciona nada, el navegador elige por defecto la primera
opción que aparece. La primera opción de la lista se va a mostrar siempre
antes de que se abra la lista desplegable.
Botones
En HTML, un botón es un elemento interactivo que el usuario puede
presionar. Sirve principalmente para: enviar formularios, reiniciar
formularios, ejecutar acciones (por ejemplo, con JavaScript) o activar
funciones, menús, eventos, etc.
En HTML existen dos formas principales de crear botones. Usando la
etiqueta <button> o bien mediante unos nuevos tipos de <input> (estudiado
anteriormente).
Historia:
HTML 2.0 (1995): ya incluía <input> con type="submit", type="reset" y
type="button".
HTML 4.0 (1997): es cuando apareció <button>. Fue parte del esfuerzo por
crear una web más semántica y más rica en interacción.
Durante los primeros años de HTML, solo existía <input> como forma de
crear botones. El <button> apareció después, y al principio no era bien
soportado por todos los navegadores, especialmente Internet Explorer.
Miles de sistemas viejos, y muchas bibliotecas de backend como PHP, ASP o
JSP están llenas de formularios con <input> como botón. Cambiar todo eso
por <button> no tiene sentido. Por eso es que existen ambos, pero en la
práctica diaria es mejor usar Button por las facilidades que ofrece.
<form>
<label>Nombre: <input type="text" name="nombre"></label><br><br>
<input type="submit" value="Enviar">
<input type="reset" value="Borrar">
<input type="button" value="Botón sin acción">
</form>
<button type="submit">Enviar</button>
Este tipo envía un formulario. Solo funciona dentro de un <form> , este es
el valor por defecto, así que si no se especifica nada, este sería el
valor (sin embargo, no es recomendado dejarlo sin especificar)
<button type="reset">Borrar</button>
Este tipo borra todo lo que se haya escrito en el formulario y lo reinicia
a su estado inicial. También solo funciona dentro de un <form>
<button type="button">Haz clic</button>
Este es un botón normal que no hace nada por sí solo. No envía formularios
ni borra nada. Se usa cuando quieres tener un botón que haga alguna acción
personalizada más adelante (por ejemplo, con JavaScript, pero eso aún no
lo veremos).
Si no se especifica type, el navegador asume por defecto type="submit". Si
pones un botón fuera de un <form>, no hará nada por sí solo. Pero aún se
puede usar para otras cosas (por ejemplo, cambiar de página o ejecutar una
acción con JavaScript más adelante).
<form>
<label>Nombre: <input type="text" name="nombre"></label><br><br>
<button type="submit">Enviar con button</button>
</form>
Este ejemplo crea un botón que dice "Enviar con button" y al presionarlo
envía el formulario.
id → Identificador único
<p id="parrafo-intro">Bienvenido a mi página</p>
Sirve para dar un nombre único a un elemento, como un identificador
personal. No debe repetirse dentro de una misma página.
<fieldset> y <legend>
<fieldset></fieldset> es una etiqueta de HTML que agrupa elementos dentro
de un formulario, como si hicieras una “sección” interna del formulario.
Su objetivo es:
- Organizar formularios largos.
- Ayudar a que los usuarios vean mejor qué campos están relacionados.
<legend>texto</legend> se utiliza dentro de un <fieldset> y sirve como el
título de ese grupo.
Aparece visualmente dentro del borde del <fieldset> (por defecto, en la
esquina superior izquierda). Es opcional, pero se recomienda incluirlo
siempre.
<fieldset>
<legend>Datos personales</legend>
<label>Nombre: <input type="text" name="nombre"></label>
<br><br>
<label>Edad: <input type="number" name="edad"></label>
</fieldset>
Esto se metería dentro de un <form> y puede llevar varios <fieldset>
dentro. Lo que hace el <fildset> es crear un recuadro (con borde)
alrededor del contenido agrupado. Se puede usar con CSS para personalizar
ese borde. Ayuda mucho a los usuarios a visualizar “bloques” lógicos.
<input type="time">
Muestra un selector de hora y minutos. En algunos casos, también segundos
(depende del navegador). Produce una hora en formato HH:MM o HH:MM:SS.
Ejemplo: 14:30.
<label>Hora de la cita:
<input type="time" name="hora_cita">
</label>
Este es un ejemplo de cómo lo podemos colocar. También se coloca dentro
del label para que estén conectados de forma automática.
<input type="time" step="900"> <!-- paso de 900 segundos = 15 minutos -->
step: intervalo de minutos o segundos. Step se mide en segundos, no
minutos. Por defecto, step = 60 (1 minuto). El valor step="1" permitiría
incluso seleccionar segundos.
<input type="time" name="hora" min="08:00" max="18:00">
min="08:00": evita que el usuario elija una hora anterior a las 8 de la
mañana.
max="18:00": evita que el usuario elija una hora después de las 6 de la
tarde. Esto mostrará un reloj (según el navegador), y limitará las
opciones entre 08:00 y 18:00.
<input type="color">
Muestra un cuadro de color, y al hacer clic aparece un selector visual
para elegir cualquier color. Produce un código hexadecimal de color:
#RRGGBB. Ejemplo: #ff0000 (rojo), #00ff00 (verde), #0000ff (azul).
<label>Elige un color:
<input type="color" name="color" value="#ff0000">
</label>
value: color predeterminado. Si no se especifica value, el color por
defecto es negro (#000000). Algunos dispositivos móviles muestran
selectores más limitados.
<input type="file">
Muestra un botón para elegir archivos desde tu dispositivo. Produce una
referencia interna al archivo (no se puede ver desde HTML por seguridad).
<label>Sube tu archivo:
<input type="file" name="documento">
</label>
Este sería el uso básico.
<input type="file" accept=".pdf,.docx">
<input type="file" multiple>
accept: restringe los tipos de archivo permitidos.
multiple: permite seleccionar más de un archivo.
El navegador no te deja acceder directamente al contenido del archivo por
seguridad. Para subir realmente el archivo, se necesita un formulario con
enctype="multipart/form-data" y un backend para recibirlo (tema para más
adelante). Si solo seleccionas archivo pero no haces nada con él, no pasa
nada.
<form name = “nombre” id = “nombre” method = “post” autocomplete = “on/off” > Con name le
podemos poner un nombre al formulario, con id podemos luego darle formato
con css al tener ese nombre identificador, method nos dice el método con
el que se toman los datos, puede ser get o post. El método GET envía la
información insertada al header directamente en la URL. La página web y la
información codificada se separan por un interrogante? Con el método
POST también se codifica la información, pero ésta se envía a través
del body, por lo que no aparece en la URL.
Dentro del form podemos agregar <input type= “text” name = “nombrequeleasigne” id =
“nombreIdentificador”> esto agrega la típica casilla para que el usuario
introduzca datos, información. En la parte que dice text esto me indica
que se va a poner texto cualquiera, pero aquí se puede poner diferentes
elementos los cuales son email, search, url, tel, date, week, month, time,
datetime. De esta forma por ejemplo si ponemos “email” en la forma se
debería poner un correo y el navegador verificará que efectivamente se
haya puesto un correo, y en caso de que no mostrará un mensaje de error y
pedirá que se ponga el correo. Podemos poner “number” para que solo se
acepten números en la casilla, y se le puede agregar además dentro de
<input type…> min = “1” y max = “100” para poner el valor mínimo y máximo
aceptado.
required con solo agregar esto haces que sea obligatorio el campo, y no se
envía nada hasta que no se rellene. “Es necesario”.
<dl>
<dt>Cabeza</dt><dd>Parte de arriba del cuerpo</dd>
<dt>Pies</dt><dd>Parte de abajo del cuerpo</dd>
<dt>Manos</dt><dd>Sirven para agarrar cosas</dd>
</ul>
<dl></dl> esto define una lista descriptiva en donde cada elemento tendrá su
explicación propia. Dentro de dl, se pone dt para cada elemento de la
lista y dd para la explicación de dicho elemento. Entonces quedaría:
En la hoja de estilos de CSS se puede cambiar la viñeta usando la
propiedad de list-style, (ver en CSS).
<ol start=”5”>
<li>elemento1</li>
<li>elemento2</li>
<li>elemento3</li>
</ul>
Si se coloca reversed dentro de la etiqueta ol, el orden será inverso,
empezando del número mayor al menor.
<div></div> crea un espacio en el que podemos escribir algo. Este espacio se
puede luego modificar, por ejemplo se le puede poner un color de fondo o
un tamaño, se pueden mostrar bordes etc. Es decir, se puede jugar tanto
con los bordes como con la ubicación, como con los elementos que lleva
dentro. Es literal como crear una caja aunque al inicio es invisible. A
este elemento se le puede poner que CSS propiedades como: width, height,
padding, border, margin. El elemento div tiene como característica por
default que ocupe una línea entera así que se pondrá uno sobre otro. A
diferencia del elemento span que los pone “inline” es decir uno al lado de
otro. Por default están en “bloque”
<span></span> lo mismo que div, pero se colocan en la misma línea. Están por
default en modo “inline”