Sesion 2 HTML - jesusgpa/2023-2024-CSAAI GitHub Wiki

Sesión 2: HTML

  • Tiempo: 2h (50 + 50min)
  • Fecha: Martes 6 de Febrero de 2024
  • Objetivos de la sesión:
    • Etiquetas básicas de HTML
    • Imágenes
    • Enlaces
    • Bloques
    • Tener unas nociones básicas de HTML para empezar a practicar

Contenido

Recursos

HTML: Estructurando los documentos

Ya sabemos cómo hacer el "hola mundo" en HTML.

Lo más importante es tener en la cabeza que HTML nos permite estructurar la información.

Esto significa que el contenido se puede colocar en las hojas de un árbol.

Esta representación en forma de árbol de un documento HTML se conoce como DOM (Modelo de Objeto del Documento).

El DOM es una representación jerárquica y estructurada de un documento HTML, XML o XHTML, que proporciona una interfaz de programación para interactuar con la estructura y el contenido del documento.

Algunas de las cosas que podemos hacer utilizando la representación en forma de árbol (DOM) de un documento HTML incluyen:

Manipulación del Contenido

Podemos acceder y modificar el contenido de elementos HTML, como cambiar el texto, agregar nuevos elementos, eliminar elementos existentes, etc.

Modificación de Atributos

Podemos cambiar los atributos de los elementos HTML, como modificar valores de atributos, agregar o quitar clases, cambiar IDs, etc.

Navegación en la Estructura

Podemos navegar a través del árbol DOM para moverse entre diferentes elementos, acceder a los elementos secundarios o padres de un elemento, y realizar acciones basadas en la estructura del documento.

Manejo de Eventos

Podemos agregar event listeners a elementos HTML para responder a eventos del usuario, como clics, teclas presionadas, cambios en el formulario, etc.

Manipulación de Estilos

Podemos cambiar los estilos de los elementos HTML, ya sea modificando directamente las propiedades de estilo o manipulando las clases que afectan el diseño.

Creación de Elementos Dinámicamente

Podemos crear nuevos elementos HTML y agregarlos al documento dinámicamente mediante scripting.

Validación y Verificación

Podemos realizar validaciones y verificaciones en el contenido del documento antes de realizar cambios o interacciones.

Interacción con Servidores

Podemos utilizar el DOM para realizar solicitudes AJAX y actualizar dinámicamente partes del contenido de la página sin necesidad de recargar toda la página.

La representación en forma de árbol de un documento HTML a través del DOM proporciona una interfaz para interactuar y manipular dinámicamente la estructura y el contenido de una página web mediante código JavaScript u otras tecnologías de scripting.

Limitaciones del DOM

Sin embargo, hay algunas limitaciones y consideraciones importantes a tener en cuenta.

Acceso a Recursos Externos

El DOM por sí mismo no proporciona la capacidad de acceder a recursos externos (como archivos en el sistema de archivos del usuario) por razones de seguridad.

Los navegadores restringen el acceso a recursos locales debido a políticas de seguridad del navegador (Política del mismo origen - Same Origin Policy).

Acceso a Datos del Usuario

Por razones de seguridad y privacidad, el DOM no permite acceder directamente a datos del usuario sin su consentimiento.

Los scripts en una página solo pueden acceder a datos específicos si han sido permitidos por el usuario o si siguen políticas de seguridad específicas (por ejemplo, el manejo de cookies).

Manipulación de Archivos en el Sistema de Archivos del Cliente

El DOM no permite la manipulación directa de archivos en el sistema de archivos del cliente debido a restricciones de seguridad.

Los navegadores limitan el acceso a sistemas de archivos locales para evitar posibles vulnerabilidades.

Acceso a Contenido de Otros Dominios

La política de seguridad del mismo origen impide que scripts en una página accedan al contenido de otro dominio directamente.

Esto ayuda a prevenir ataques de scripts entre sitios.

Manipulación de Documentos en Otros Marcos (iframes)

La manipulación de documentos en iframes de otros dominios también está restringida por la política del mismo origen por razones de seguridad.

Manipulación de Encabezados HTTP

El DOM no proporciona una forma directa de manipular encabezados HTTP de las solicitudes.

Para controlar encabezados HTTP, se requiere la utilización de tecnologías del lado del servidor o herramientas específicas en el lado del cliente.

Seguridad del Navegador

Algunas operaciones de manipulación del DOM pueden estar sujetas a restricciones de seguridad del navegador para prevenir vulnerabilidades como inyección de código malicioso (XSS) o ataques de manipulación del DOM.

Es importante tener en cuenta estas limitaciones al desarrollar aplicaciones web y seguir buenas prácticas de seguridad para proteger la integridad y privacidad del usuario.

Etiquetas básicas

Veremos algunas de las etiquetas más importantes de HTML.

Encabezados

Los encabezados se representan mediantes las etiquetas h1, h2, ..., h6.

Hay por tanto 6 niveles de encabezamiento.

La etiqueta h1 representa un encabezado más general: Capítulo, Tema...

Mientras que h6 es el encabezado más profundo

  • Ejemplo
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Ej-1: Encabezados</title>
</head>
<body>
    <h1>Encabezado H1</h1>
    <h2>Encabezado H2</h2>
    <h3>Encabezado H3</h3>
    <h4>Encabezado H4</h4>
    <h5>Encabezado H5</h5>
    <h6>Encabezado H6</h6>
</body>
</html>

Esta es su previsualización en VSCode:

Así es cómo se ve la página en un teléfono móvil:

El árbol que representa la estructura tendría esta pinta:

Párrafos

Se utilizan mucho.

Típicamente hay varios párrafos dentro del cuerpo.

Aunque en el HTML lo separemos en diferentes líneas, todo el texto que esté dentro del mismo párrafo se coloca en la misma línea.

También si hay varios espacios se eliminan y sólo se muestra uno

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Ej-2: Parrafos</title>
</head>
<body>
    <p>Esto es un párrafo. Puede ser todo lo extenso que se quiera.
        Aunque en el HTML lo coloquemos en varias
        líneas,
        en el renderizado se coloca en la misma línea
        y se ajusta al ancho de la pantalla
        del navegador
    </p>
    <p>Esto es otro párrafo.
        Se coloca separado del anterior
    </p>
    <p>Este párrafo tiene 3 líneas,
        pero el navegador las coloca juntas
        Otra línea...          y los espacios también
        se eliminan
    </p>
</body>
</html>

Se renderizaría de la siguiente manera:

Y la estructura del documento sería así (sólo se muestra desde el cuerpo hacia abajo)

En diseño web es muy habitual utilizar textos de relleno para los párrafos (Lorem Ipsum) durante el diseño para ver cómo interacciona con el resto de elementos.

Es importante No olvidar reemplazar estos textos de relleno con el texto final para dar una buena impresión a los usuarios del sitio web.

Listas

Las listas nos permiten colocar texto en líneas separadas.

Pueden ser listas ordenadas, no ordenadas o de de definición.

Para las primeras usamos las etiquetas:

<ol></ol>

para las segundas:

<ul></ul>

Los elementos colocados dentro de la lista, ordenadas o sin ordenar, se sitúan con la etiqueta:

 <li>Elemento de la lista</li>

Esta etiqueta debe estar siempre dentro de alguna de las anteriores.

Las **listas de definición, se utilizan para definir términos y sus descripciones asociadas.

<dl></dl>

Cada término se define con término de lista dt y cada descripción con dd descripción de lista.

<dt>Término de lista</dt>
<dd>Descripción de lista</dd>

Se pueden utilizar varios items de tipo término de lista seguido de un solo item de descripción.

Un solo item de término seguido de varios de descripción.

O emparejar items de término y descripción como una estructura del tipo clave/valor.

Ejemplo de uso de listas ordenadas, no ordenadas y descriptivas

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Ej-3: Listas</title>
</head>
<body>
    <h2>Lista ordenada Pasos:</h2>
    <ol>
        <li>Conectarse al servidor</li>
        <li>Solicitar documento</li>
        <li>Esperar respuesta</li>
    </ol>
    <h2>Lista no ordenada.</h2>
    <ul>
        <li>Leche</li>
        <li>Café</li>
        <li>Pan</li>
    </ul>
    <h2>Lista de definición</h2>
    <dl>
        <dt>Lácteo</dt>
        <dd>Leche</dd>
        <dt>Hidrato</dt>
        <dd>Pan</dd>
    </dl>

</body>
</html>

Queda renderizado de la siguiente manera:

Y la estructura del documento tiene la siguiente pinta

Y continúa con la estructura de la lista de descripción.

Tablas

Las tablas se construyen usando 4 etiquetas:

  • <table> / </table>: Delimitar la tabla

  • <tr> / </tr> : Fila

  • <td> / </td>: Dato (elemento de la celda)

  • <th> / </th>: Encabezado

  • Ejemplo: Tabla de 4 filas y 3 columnas, con los nombres de personajes famosos

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <table>
        <tr>
            <th>Nombre</th>
            <th>Apellidos</th>
            <th>Descripcion</th>
        </tr>
        <tr>
            <td>Chuck</td>
            <td>Norris</td>
            <td>Creó a Dios</td>
        </tr>
        <tr>
            <td>Trollface</td>
            <td>....</td>
            <td>Eres un troll</td>
        </tr>
        <tr>
            <td>Ecce</td>
            <td>Homo</td>
            <td>Genialidad artística</td>
        </tr>
    </table>
</body>
</html>

Esta es la previsualización

Y esta es la estructura del documento

Botones

Los botones se definen con la etiqueta button.

Los usaremos junto a javascript para generar eventos al ser pulsados, y esos eventos a su vez ejecutarán un cierto código para realizar una acción

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Ej-4: Botones</title>
</head>
<body>
    <h2>Botones</h2>
    <button>Botón 1</button>
    <button>Botón 2</button>
</body>
</html>

Este es el renderizado de los botones:

Y el árbol de la estructura:

Etiquetas básicas con atributos

Dentro las etiquetas se pueden introducir atributos, que nos permiten cambiar sus propiedades.

En algunas etiquetas hay que usar atributos obligatoriamente, como en el caso de las imágenes y los enlaces

Links

Los enlaces se establecen con la etiqueta a y el atributo href, que indica la URL del enlace.

Se colocan en los mismos sitios donde iría cualquier texto.

Por defecto se renderizan unos a continuación de otros.

Para que estén en líneas diferentes se deben poner en párrafos (o estructuras) diferentes.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Ej-5: Enlaces</title>
</head>
<body>
    <h2>Apuntes de CSAAI</h2>
    <p>
        <a href="https://github.com/jesusgpa/2023-2024-CSAAI/wiki">Página principal</a>
        : en Github
    </p>
    <h3>Temas que estamos viendo</h3>
    <p>
        <a href="https://github.com/jesusgpa/2023-2024-CSAAI/wiki/Sesion-1-Introduccion-a-las-tecnologias-web">[Tema 1]</a>
        <a href="https://github.com/jesusgpa/2023-2024-CSAAI/wiki/Sesion-2-HTML">[Tema 2]</a>
    </p>
</body>
</html>

El renderizado quedaría así:

Y esta es la estructura:

Imágenes

Las imágenes se añaden con la etiqueta img.

Mediante el atributo src indicamos el fichero a mostrar.

Puede ser una URL.

Cuando es un fichero, que tiene que estar en el mismo directorio que el fichero html.

Mediante el atributo alt especificamos un texto a colocar en caso de que la imagen no se pueda renderizar por el motivo que sea.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Ej-6: Imagen</title>
</head>
<body>
    <h2>Universidad Rey Juan Carlos</h2>
    <img src="Logo-urjc.png" alt="Imagen: Logo-urjc">
    <p>Ejemplo de colocar una imagen</p>
</body>
</html>

Este es el renderizado:

Y esta es la estructura

Elementos bloque y en línea

Todas las etiquetas HTML definen elementos que se pueden clasificar en dos tipos:

  • Elementos bloque: Empiezan en una línea nueva y tienden a ocupar todo el ancho que puedan
    • Encabezados: h1, h2...h6
    • Listas: ol, ul, li
    • Párrafos: p
  • Elementos en línea (inline): Se colocan a continuación del elemento anterior y tienden a ocupar la mínima anchura
    • Botones: button
    • Imágenes: img
    • Enlaces: a

Creando secciones genéricas

Para estructurar mejor nuestros documentos HTML, podemos definir secciones genéricas.

Disponemos de dos elementos para ello:

  • div: Definición de una sección genérica de tipo bloque. Es un contenedor: dentro de él podemos usar otros elementos de tipo bloque
  • span: Definición de una sección genérica de tipo inline

En este ejemplo se definen 3 secciones tipo bloque, una de ellas dentro de otra, y dos secciones de tipo inline dentro del bloque 2.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Ej-7: Secciones genéricas</title>
</head>
<body>
    <div>
        Bloque 1
        <div>
            Bloque 1.1
        </div>
    </div>
    <div>
        Bloque 2
        <span>(Inline 1)</span>
        <span>(Inline 2)</span>
    </div>
</body>
</html>

En el renderizado podemos ver el resultado.

Todos los texto se ven con el mismo estilo, porque no se ha definido ninguno particular para cada elemento.

Los tres bloques div están en tres líneas separadas.

Mientras que los dos bloques span se sitúan a continuación del bloque 2, en la misma línea

Este es el árbol son su estructura:

Agrupando e identificando elementos

Para referenciar un elemento HTML usamos el atributo id.

Este identificador debe ser único: no puede haber dos elementos con el mismo identificador.

Lo usaremos por ejemplo para identificar a cada botón, o a cada elemento de la interfaz gráfica.

También para dar un estilo único a un elemento

<div id="seccion2">...</div)

El atributo class nos permite agrupar dos o más elementos, de forma que los podemos referenciar a todos a la vez usando un único nombre.

Esto es muy útil si por ejemplo queremos dar el mismo estilo a dos o más secciones.

<div class="grupo1">...</div>
...
<div class="grupo1">...</div>

En este ejemplo se crean 4 secciones. Tres tienen un identificador, y dos están agrupadas.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Ej-8: Grupos</title>
</head>
<body>
    <h2 class="Grupo1" id="E1">Encabezado</h2>
    <div class="Grupo1" id="S1">
        Sección 1
    </div>
    <div id="S2">
        Sección 2
    </div>
    <p>Párrafo</p>
</body>
</html>

El elemento h2 y la sección 1 están agrupadas en la clase Grupo1.

Esto nos permitiría, por ejemplo, ponerles a las dos el mismo estilo de letra.

La sección 2 se identifica como S2.

Así quedaría el renderizado.

Y esta es la estructura

Comentarios

Como en cualquier lenguaje de programación, se pueden colocar comentarios (¡y se deben!) para dar explicaciones y hacer más legible el código.

Los comentarios son ignorados por el navegador

<!-- Este es un comentario en una línea -->
<!-- Este es un comentario en
     Varias líneas. Dentro puede haber código html que queremos
     desactivar, como por ejemplo el siguiente encabezado
    <h1>Encabezado 1</h1>
-->

Nuevo en HTML5

La especificación HTML5 ha introducido muchas otras características y mejoras destinadas a hacer que el desarrollo web sea más rico y eficiente.

Multimedia: Audio + Video

La introducción de las etiquetas <audio> y <video> en HTML5 proporciona una manera estándar de incorporar y reproducir contenido multimedia directamente en las páginas web sin depender de tecnologías de terceros como Flash.

SVG (Scalable Vector Graphics)

SVG es un formato de gráficos vectoriales basado en XML que permite la creación de gráficos escalables e interactivos.

Se puede integrar directamente en documentos HTML y se utiliza para representar gráficos vectoriales, como logotipos, iconos y gráficos complejos.

Canvas

La etiqueta <canvas> proporciona una superficie de dibujo mediante JavaScript.

Permite a los desarrolladores crear gráficos y animaciones dinámicas directamente en el navegador.

WebGL (Web Graphics Library)

WebGL es una API de gráficos 3D para navegadores web.

Permite la representación de gráficos 3D de alto rendimiento utilizando la GPU del dispositivo.

Geolocalización (API)

La API de Geolocalización permite a las aplicaciones web acceder a la ubicación física del usuario.

Utiliza información de GPS, torres de telefonía móvil y redes Wi-Fi para determinar la ubicación.

CSS3

HTML5 y CSS3 suelen utilizarse juntos para el desarrollo web moderno.

CSS3 introduce muchas características nuevas, como transiciones, animaciones, sombras y bordes redondeados, que mejoran la presentación y la estética de las páginas web.

Web Workers

Los Web Workers son scripts en JavaScript que se ejecutan en segundo plano para realizar tareas que no bloquean la interfaz de usuario principal.

Esto mejora la capacidad de respuesta y la eficiencia en la ejecución de tareas intensivas.

Almacenamiento Temporal

HTML5 introduce mecanismos de almacenamiento local como localStorage y sessionStorage.

Estos permiten a las aplicaciones web almacenar datos de manera persistente o temporal en el lado del cliente.

Appcache

La API de Application Cache (AppCache) permite a las aplicaciones web funcionar sin conexión al almacenar en caché archivos específicos.

Aunque está en desuso, se utilizó para crear aplicaciones web que podían funcionar sin conexión.

Interfaz Drag and Drop

HTML5 proporciona una interfaz nativa para arrastrar y soltar elementos dentro de una página web.

Esto facilita la implementación de operaciones de arrastrar y soltar sin depender de soluciones externas.

Todas estas mejoras han contribuido a la mejora de la experiencia de desarrollo y la funcionalidad de las aplicaciones web modernas.

Autor

Jesús Parrado Alameda (jesusgpa)

Creditos

Licencia

Enlaces

⚠️ **GitHub.com Fallback** ⚠️