HTML Flashcards

1
Q

What does a DOCTYPE do?

A

DOCTYPE is an abbreviation for Document Type. A DOCTYPE is always associated to a DTD - for Document Type Definition.

A DTD defines how documents of a certain type should be structured (i.e. a button can contain a span but not a div), whereas a DOCTYPE declares what DTD a document supposedly respects (i.e. this document respects the HTML DTD).

For webpages, the DOCTYPE declaration is required. It is used to tell user agents what version of the HTML specifications your document respects. Once a user agent has recognized a correct DOCTYPE, it will trigger the no-quirks mode matching this DOCTYPE for reading the document. If a user agent doesn’t recognize a correct DOCTYPE, it will trigger the quirks mode.

The DOCTYPE declaration for the HTML5 standards is <!DOCTYPE html>.

Traducción y Explicación:

¿Qué hace un DOCTYPE?

Definición de DOCTYPE:

El DOCTYPE (Declaración de tipo de documento) es una directiva que se coloca al principio de un documento HTML o XML para informar al navegador sobre la versión y el tipo de documento que se va a procesar. Esto ayuda al navegador a interpretar correctamente el contenido y mostrarlo según los estándares específicos de esa versión del lenguaje.

En HTML, el DOCTYPE se declara antes de la etiqueta <html>, y no es una etiqueta HTML, sino una declaración. En HTML5, la declaración es muy simple y se escribe como:

```html
<!DOCTYPE html>
~~~

¿Por qué es importante el DOCTYPE?

  1. Modo de renderización:
    • El DOCTYPE le indica al navegador si debe seguir el modo de estándares (en el que el navegador intenta cumplir con las especificaciones del HTML) o el modo quirks (modo antiguo, en el que el navegador emula el comportamiento de versiones anteriores para mantener la compatibilidad con sitios más antiguos).
    • Sin un DOCTYPE, el navegador puede entrar en modo quirks, lo que puede hacer que el sitio no se muestre correctamente debido a comportamientos heredados de navegadores antiguos.
  2. Compatibilidad:
    • Es esencial para asegurarse de que el navegador renderice la página correctamente según los estándares modernos de HTML y CSS. Sin el DOCTYPE, las características de estilo y funcionalidad podrían no ser aplicadas correctamente, especialmente en versiones de navegador más nuevas.
  3. Declaración de la versión de HTML:
    • El DOCTYPE también especifica qué versión del HTML se está utilizando (aunque en HTML5, <!DOCTYPE html> es suficiente para todos los casos). En versiones anteriores de HTML (como HTML 4.01 o XHTML), el DOCTYPE especificaba la versión y el tipo de documento en detalles, por ejemplo:
      html
      <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

Ejemplo del DOCTYPE en HTML5:
```html
<!DOCTYPE html>

<html>
<head>
<title>Mi Página Web</title>
</head>
<body>
<h1>Bienvenido</h1>
<p>Este es un ejemplo de una página HTML5.</p>
</body>
</html>

~~~

En este caso, <!DOCTYPE html> le indica al navegador que el documento está usando HTML5.

Resumen de lo que hace un DOCTYPE:
- Le dice al navegador cómo debe interpretar el contenido del archivo.
- Evita que el navegador entre en el modo quirks, lo cual puede afectar la visualización de la página.
- Ayuda a asegurar que el navegador utilice los estándares más actuales (o los definidos por una versión específica de HTML).

En resumen, el DOCTYPE es esencial para garantizar que un sitio web se renderice correctamente y sea compatible con los estándares de la web moderna.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

How do you serve a page with content in multiple languages?

A

I will assume that it is asking about the most common case, which is how to serve a page with content available in multiple languages, but the content within the page should be displayed only in one consistent language.

When an HTTP request is made to a server, the requesting user agent usually sends information about language preferences, such as in the Accept-Language header. The server can then use this information to return a version of the document in the appropriate language if such an alternative is available. The returned HTML document should also declare the lang attribute in the <html> tag, such as <html lang="en">…</html>.

Of course this is useless for letting a search engine know that the same content is available in different languages, and so you must also make use of the hreflang attribute in the <head>. Eg. <link></link>

In the back end, the HTML markup will contain i18n placeholders and content for the specific language stored in YML or JSON formats. The server then dynamically generates the HTML page with content in that particular language, usually with the help of a back end framework.

Traducción y Explicación:

¿Cómo sirves una página con contenido en varios idiomas?

Métodos para servir contenido en múltiples idiomas:

Cuando deseas crear un sitio web que sea accesible en varios idiomas, existen varias formas de organizar y servir el contenido en función de la preferencia del usuario. Aquí están los métodos más comunes para implementar páginas multilingües:

1. Uso de etiquetas lang en HTML:

El atributo lang en el HTML especifica el idioma del contenido de la página, lo cual es importante tanto para los motores de búsqueda como para las herramientas de accesibilidad (como los lectores de pantalla). Esto ayuda a los navegadores y otros servicios a saber cómo tratar el contenido.

Ejemplo:
```html

<html>
<head>
<meta></meta>
<title>Página en Español</title>
</head>
<body>
<h1>Bienvenido</h1>
<p>Este es un ejemplo de contenido en español.</p>
</body>
</html>

En este ejemplo, el atributo `lang="es"` indica que el contenido está en español.

---

**2. Estructura de directorios o subdominios**:

Cuando se sirve contenido en varios idiomas, una estrategia común es organizar los archivos de contenido en **directorios separados** o en **subdominios** para cada idioma. Esto ayuda a los motores de búsqueda a indexar el contenido de manera más efectiva y mantiene el sitio web organizado.

**Directorios**:
- **www.example.com/es/** para contenido en español
- **www.example.com/en/** para contenido en inglés

**Subdominios**:
- **es.example.com** para contenido en español
- **en.example.com** para contenido en inglés

Cada directorio o subdominio contendrá las versiones de la página correspondientes al idioma que debe ser servido.

---

**3. Etiquetas `<link rel="alternate">`**:

Para facilitar la indexación de las páginas multilingües y ayudar a los motores de búsqueda a detectar las diferentes versiones de un sitio, puedes usar la etiqueta **`<link rel="alternate">`** en el `<head>` de tus páginas HTML. Esto indica que hay versiones alternativas de la página en otros idiomas.

**Ejemplo**:
```html
<head>
  <link rel="alternate" href="https://www.example.com/es/" hreflang="es" />
  <link rel="alternate" href="https://www.example.com/en/" hreflang="en" />
</head>

Con esto, estás indicando que hay una versión en español (hreflang="es") y otra en inglés (hreflang="en").

4. Detección automática del idioma del navegador:

En algunos casos, puedes usar scripts para detectar automáticamente el idioma preferido del usuario mediante la configuración del navegador. Luego, puedes redirigir al usuario a la página en su idioma preferido. Esto se puede hacer usando JavaScript o configuraciones del servidor.

Ejemplo con JavaScript:
```javascript
var userLang = navigator.language || navigator.userLanguage;
if (userLang.startsWith(‘es’)) {
window.location.href = ‘https://www.example.com/es’;
} else {
window.location.href = ‘https://www.example.com/en’;
}
~~~
Este script redirige a los usuarios a la versión en español si su idioma es español (es).

5. Contenido dinámico con un sistema de gestión de contenido (CMS):

Si usas un CMS como WordPress, Joomla, o Drupal, la mayoría de ellos ofrecen soluciones integradas o plugins para manejar contenido multilingüe de forma sencilla. Estos sistemas permiten que los administradores gestionen diferentes versiones de contenido en varios idiomas sin tener que hacer demasiado trabajo manual.

  • WordPress: Usa plugins como WPML o Polylang para gestionar sitios multilingües.
  • Drupal: Ofrece módulos como Content Translation y Interface Translation.

Estos sistemas permiten traducir el contenido fácilmente y servir la versión correcta según el idioma preferido.

6. Almacenamiento y traducción de contenido:

Cuando gestionas contenido en varios idiomas, es fundamental almacenar las traducciones de manera eficiente. Puedes usar una base de datos o servicios de traducción automática para guardar los textos en diferentes idiomas y renderizarlos dinámicamente según el idioma que seleccione el usuario.

  • Base de datos: Guarda el contenido de cada idioma en diferentes tablas o columnas. Por ejemplo, en una tabla de productos, podrías tener una columna para el nombre del producto en inglés y otra en español.
  • Servicios de traducción automática: Herramientas como Google Translate API pueden ayudarte a traducir el contenido dinámicamente, pero siempre es mejor que una persona revise la traducción.

Resumen de Estrategias para Sitios Web Multilingües:

Conclusión:

Servir contenido en varios idiomas es una práctica esencial para hacer que tu sitio web sea accesible a un público global. Puedes elegir entre diferentes enfoques dependiendo de la estructura de tu sitio, el tipo de contenido y la experiencia del usuario que deseas proporcionar. La correcta implementación de etiquetas lang, estructura de URLs, detección de idioma y traducción eficiente ayudará a garantizar que tu página sea más accesible y amigable para usuarios de diferentes regiones.

Método | Descripción |
|—————————————–|—————————————————————————————————|
| Etiqueta lang | Indica el idioma del contenido en el HTML para mejorar la accesibilidad y SEO. |
| Estructura de directorios o subdominios | Organiza el contenido en directorios o subdominios específicos para cada idioma. |
| Etiquetas <link rel="alternate"> | Ayuda a los motores de búsqueda a encontrar las versiones alternativas de la página en diferentes idiomas. |
| Detección automática del idioma | Redirige a los usuarios a su idioma preferido según la configuración de su navegador. |
| CMS con soporte multilingüe | Utiliza un CMS como WordPress o Drupal con plugins o módulos para manejar contenido en varios idiomas. |
| Almacenamiento y traducción de contenido | Usa bases de datos o servicios de traducción para almacenar y gestionar contenido en diferentes idiomas. |

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

What kind of things must you be wary of when designing or developing for multilingual sites?

A

Use lang attribute in your HTML.
Directing users to their native language - Allow a user to change his country/language easily without hassle.
Text in raster-based images (e.g. png, gif, jpg, etc.), is not a scalable approach - Placing text in an image is still a popular way to get good-looking, non-system fonts to display on any computer. However, to translate image text, each string of text will need to have a separate image created for each language. Anything more than a handful of replacements like this can quickly get out of control.
Restrictive words/sentence length - Some content can be longer when written in another language. Be wary of layout or overflow issues in the design. It’s best to avoid designing where the amount of text would make or break a design. Character counts come into play with things like headlines, labels, and buttons. They are less of an issue with free-flowing text such as body text or comments.
Be mindful of how colors are perceived - Colors are perceived differently across languages and cultures. The design should use color appropriately.
Formatting dates and currencies - Calendar dates are sometimes presented in different ways. Eg. “May 31, 2012” in the U.S. vs. “31 May 2012” in parts of Europe.
Do not concatenate translated strings - Do not do anything like “The date today is “ + date. It will break in languages with different word order. Use a template string with parameters substitution for each language instead. For example, look at the following two sentences in English and Chinese respectively: I will travel on {% date %} and {% date %} 我会出发. Note that the position of the variable is different due to grammar rules of the language.
Language reading direction - In English, we read from left-to-right, top-to-bottom, in traditional Japanese, text is read up-to-down, right-to-left.
Useful-to-have - include the locale in the path (e.g en_US, zh_CN, etc).

Traducción y Explicación:

¿Qué cosas debes tener en cuenta al diseñar o desarrollar para sitios multilingües?

Cuando estás trabajando en un sitio web multilingüe, es fundamental ser consciente de varios desafíos que pueden surgir durante el diseño y desarrollo. Aquí te explico algunas consideraciones clave que debes tener en cuenta:

1. Diferencias de Longitud de Texto:

Cada idioma tiene una longitud de palabras y estructuras gramaticales distintas. Algunos idiomas, como el alemán o el finlandés, tienden a usar palabras más largas, mientras que otros, como el chino o el japonés, usan caracteres más compactos. Esto puede afectar el diseño y la presentación del contenido.

Consideraciones:
- Asegúrate de que los contenedores de texto (botones, menús, etc.) sean lo suficientemente grandes para acomodar las traducciones más largas.
- Prueba de texto en diferentes idiomas para ver cómo afecta al diseño y si el contenido se desborda o se ve mal.

2. Direccionalidad del Texto (LTR vs. RTL):

Algunos idiomas, como el árabe, hebreo, o persa, se leen de derecha a izquierda (RTL), mientras que la mayoría de los idiomas (como el inglés, español, francés) son de izquierda a derecha (LTR). Esto afecta no solo al contenido textual, sino también al diseño general.

Consideraciones:
- Utiliza la propiedad dir="rtl" en las etiquetas HTML para los idiomas que se leen de derecha a izquierda.
- Asegúrate de que el diseño se adapte correctamente a cambios en la dirección de lectura, como la posición de los menús, las barras de navegación y las imágenes.

3. Traducciones y Cultura Local:

Las traducciones literales no siempre funcionan. Las expresiones idiomáticas, referencias culturales o incluso el uso de imágenes pueden no ser apropiados para todas las culturas. Lo que es común en un país podría no tener sentido o ser inapropiado en otro.

Consideraciones:
- Localización (más allá de la traducción): adapta el contenido al contexto cultural del público objetivo. Esto puede incluir cambios en el diseño, las imágenes, los colores, y hasta los ejemplos utilizados.
- Trabaja con traductores profesionales que conozcan bien tanto el idioma como la cultura local para evitar malentendidos.

4. Gestión de Contenido Multilingüe:

Cuando tienes contenido en varios idiomas, necesitas una forma eficiente de gestionarlo. Si no se organiza adecuadamente, podrías terminar con versiones desactualizadas de contenido en ciertos idiomas o inconsistencia entre las traducciones.

Consideraciones:
- Usa un CMS con soporte multilingüe o plugins como WPML o Polylang en WordPress para organizar y mantener el contenido en múltiples idiomas.
- Mantén versiones sincronizadas de contenido: cuando se actualiza el contenido en un idioma, asegúrate de que los otros idiomas también se actualicen correctamente.

5. SEO Multilingüe:

El SEO para sitios multilingües es más complicado que para sitios en un solo idioma. Debes asegurarte de que los motores de búsqueda indexen correctamente las versiones en diferentes idiomas y de que no haya problemas con el contenido duplicado.

Consideraciones:
- Utiliza etiquetas hreflang para indicar a los motores de búsqueda cuál es la versión de la página adecuada para cada idioma y región. Por ejemplo:
```html

<link></link>

<link></link>

```
- Asegúrate de que cada página de un idioma tenga su propia URL única, como www.example.com/es/ para español y www.example.com/en/ para inglés.

6. Soporte de Caracteres Especiales:

Algunos idiomas usan caracteres especiales, acentos o símbolos que no están presentes en otros idiomas (como tildes, diacríticos, o caracteres como ç o ñ). Es importante asegurarse de que todos los caracteres se muestren correctamente en todas las versiones del sitio.

Consideraciones:
- Usa un juego de caracteres Unicode (UTF-8) en la metaetiqueta charset para garantizar la compatibilidad con todos los caracteres.
```html

<meta></meta>

```

7. Formatos de Fechas, Hora y Moneda:

Los diferentes idiomas y regiones tienen formatos diferentes para fechas, horas, números y monedas. Lo que es estándar en una región podría ser completamente diferente en otra.

Consideraciones:
- Asegúrate de usar formatos locales para fechas y horas (por ejemplo, DD/MM/YYYY en muchos países de habla hispana, frente a MM/DD/YYYY en los EE.UU.).
- Ajusta el formato de las monedas: para una página en inglés, puedes mostrar un precio como $50.00, mientras que para una página en español, podrías usar 50,00 €.

8. Navegación y Estructura del Sitio:

La navegación del sitio debe ser flexible para adaptarse a los diferentes idiomas, y algunas palabras o conceptos podrían no existir en todos los idiomas, lo que puede afectar la estructura del menú.

Consideraciones:
- Revisa la jerarquía de la navegación para asegurarte de que sea clara y comprensible en todos los idiomas.
- Mantén un selector de idioma visible en todo momento para que los usuarios puedan cambiar de idioma fácilmente.

9. Accesibilidad:

Es importante que el sitio web sea accesible para usuarios de diferentes idiomas, especialmente si hay usuarios con discapacidades. Asegúrate de que el sitio sea usable con lectores de pantalla en varios idiomas.

Consideraciones:
- Asegúrate de que los elementos interactivos estén etiquetados correctamente y que el contenido sea comprensible a través de tecnologías de asistencia.
- Usa atributos alt adecuados para las imágenes en cada idioma y asegúrate de que los enlaces sean claros y fáciles de entender.

Resumen de Consideraciones para Sitios Multilingües:

Conclusión:

Al diseñar y desarrollar sitios multilingües, debes ser consciente de aspectos técnicos, culturales y de usabilidad. Es crucial asegurarte de que el contenido sea accesible y comprensible para todos los usuarios, sin importar su idioma o región. Además, una correcta organización y mantenimiento del contenido y la integración de prácticas de localización y accesibilidad mejorará la experiencia de usuario y la eficacia del sitio en múltiples idiomas.

Consideración | Descripción |
|——————————————|———————————————————————————————————-|
| Longitud de texto | Los textos pueden variar de longitud según el idioma; asegúrate de que el diseño sea flexible. |
| Direccionalidad (LTR vs. RTL) | Los idiomas de derecha a izquierda requieren ajustes en el diseño y la estructura. |
| Traducción y localización | La traducción debe ser precisa y adaptada a la cultura local, no solo una traducción literal. |
| Gestión de contenido | Usa un CMS adecuado o un sistema para gestionar contenido multilingüe de manera eficiente. |
| SEO multilingüe | Asegúrate de que los motores de búsqueda indexen correctamente las versiones de la página en diferentes idiomas. |
| Soporte de caracteres especiales | Asegúrate de que el sitio sea compatible con todos los caracteres y símbolos que usan los diferentes idiomas. |
| Formatos de fechas y moneda | Usa formatos locales para fechas, horas, números y monedas. |
| Navegación | Asegúrate de que la navegación sea clara y comprensible en todos los idiomas. |
| Accesibilidad | Asegúrate de que el sitio sea accesible para usuarios con discapacidades y compatible con lectores de pantalla. |

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

What are data- attributes good for?

A

Before JavaScript frameworks became popular, front end developers used data- attributes to store extra data within the DOM itself, without other hacks such as non-standard attributes, extra properties on the DOM. It is intended to store custom data private to the page or application, for which there are no more appropriate attributes or elements.

These days, using data- attributes is generally not encouraged. One reason is that users can modify the data attribute easily by using inspect element in the browser. The data model is better stored within JavaScript itself and stay updated with the DOM via data binding possibly through a library or a framework.

However, one perfectly valid use of data attributes, is to add a hook for end to end testing frameworks such as Selenium and Capybara without having to create a meaningless classes or ID attributes. The element needs a way to be found by a particular Selenium spec and something like data-selector=’the-thing’ is a valid way to do so without convoluting the semantic markup otherwise.

Traducción y Explicación:

¿Para qué sirven los atributos data-?

Los atributos data- en HTML son una forma de almacenar datos personalizados directamente en los elementos HTML. Estos atributos no tienen un impacto en la presentación o funcionalidad de la página, pero se pueden usar para almacenar información adicional que puede ser útil para JavaScript o para otros fines específicos.

¿Cómo funcionan los atributos data-?

Un atributo data- tiene la siguiente estructura:

```html

<div></div>

En este caso, el atributo `data-user-id` almacena el valor `"123"` y el atributo `data-role` almacena el valor `"admin"`. Puedes tener múltiples atributos `data-` en cualquier elemento HTML y asignarles cualquier valor que necesites.

**Acceder a los atributos `data-` con JavaScript**:

En JavaScript, puedes acceder a estos atributos mediante el **DOM** de la siguiente manera:

```javascript
// Seleccionamos el elemento
var element = document.querySelector('div');

// Accedemos al atributo data-user-id
var userId = element.dataset.userId; // "123"

// Accedemos al atributo data-role
var role = element.dataset.role; // "admin"

El objeto dataset proporciona acceso a los atributos data- de un elemento, y convierte el nombre del atributo de data-<nombre> a una propiedad accesible en JavaScript. En este caso, data-user-id se convierte en userId y data-role se convierte en role.

Usos comunes de los atributos data-:

  1. Almacenar información para la manipulación en JavaScript:
    Los atributos data- son útiles cuando necesitas almacenar información que no debe ser visible en el documento pero que necesita estar accesible para interactuar con el usuario o manipularla mediante JavaScript.Ejemplo:
    - Almacenar el ID de un producto en un carrito de compras para poder manipularlo dinámicamente con JavaScript.
    html
    <button data-product-id="456">Agregar al carrito</button>
  2. Pasar datos entre HTML y JavaScript:
    Si estás desarrollando una página dinámica, los atributos data- permiten almacenar datos en el HTML que luego pueden ser utilizados por JavaScript para actualizar el contenido, realizar peticiones AJAX o ejecutar otras funciones sin modificar el contenido de la página directamente.
  3. Mejorar la accesibilidad y mantener el HTML limpio:
    Los atributos data- permiten almacenar datos adicionales de una manera más limpia y accesible sin tener que utilizar clases, IDs o atributos adicionales que podrían confundir a otros desarrolladores o complicar el mantenimiento del código.
  4. Personalización de componentes:
    En aplicaciones web o bibliotecas como React, Vue o Angular, los atributos data- se usan para almacenar configuraciones o parámetros específicos para componentes o elementos sin interferir con otros atributos o funcionalidades del HTML.
  5. Controlar la lógica de diseño o interacciones:
    Los atributos data- se pueden utilizar para indicar si un elemento debe tener un comportamiento o estilo diferente según ciertas condiciones. Por ejemplo, indicar si un modal está abierto o cerrado, o si un formulario ha sido validado.

Ventajas de usar atributos data-:

  • Flexibilidad: Puedes agregar cualquier cantidad de datos a los elementos sin comprometer la estructura del HTML o el rendimiento.
  • No afectan la presentación: Los atributos data- son completamente invisibles para el usuario y no alteran el estilo visual de los elementos.
  • Interacción fácil con JavaScript: Los atributos data- son fácilmente accesibles desde JavaScript, lo que facilita la manipulación de datos y la interacción dinámica con el DOM.

Desventajas de los atributos data-:

  • No validación de datos: Los atributos data- no ofrecen validación sobre el tipo o formato de los datos almacenados, por lo que debes asegurarte de que los datos sean correctos al ser utilizados en JavaScript.
  • No se pueden usar para todas las necesidades: Si necesitas un almacenamiento más complejo o persistente, deberías usar otras tecnologías como bases de datos o almacenamiento local en el navegador.

Resumen:

Los atributos data- son útiles para almacenar datos adicionales en los elementos HTML, que pueden ser fácilmente accesibles y manipulados mediante JavaScript. Son ideales para almacenar configuraciones o información que no necesita ser visible en la interfaz del usuario, pero que es relevante para la interacción o funcionalidad del sitio web.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Consider HTML5 as an open web platform. What are the building blocks of HTML5?

A

Semantics - Allowing you to describe more precisely what your content is.
Connectivity - Allowing you to communicate with the server in new and innovative ways.
Offline and storage - Allowing webpages to store data on the client-side locally and operate offline more efficiently.
Multimedia - Making video and audio first-class citizens in the Open Web.
2D/3D graphics and effects - Allowing a much more diverse range of presentation options.
Performance and integration - Providing greater speed optimization and better usage of computer hardware.
Device access - Allowing for the usage of various input and output devices.
Styling - Letting authors write more sophisticated themes.

Traducción y Explicación:

Considerando HTML5 como una plataforma web abierta, ¿cuáles son los bloques de construcción de HTML5?

HTML5 se presenta como una plataforma web abierta que facilita el desarrollo de aplicaciones web ricas y dinámicas sin depender de tecnologías propietarias o complementos como Flash. Los bloques de construcción de HTML5 incluyen una serie de nuevas características, tecnologías y capacidades que permiten crear páginas web modernas, interactivas y accesibles. Aquí te explico los principales bloques de construcción de HTML5:

1. Nuevas Etiquetas Semánticas:

HTML5 introdujo una serie de etiquetas semánticas que mejoran la estructura y accesibilidad del contenido, al mismo tiempo que facilitan el trabajo de los motores de búsqueda y los desarrolladores. Estas etiquetas permiten describir de manera más clara y precisa la estructura del documento.

Ejemplos:
- <header>: Define la cabecera de una página o sección.
- <footer>: Define el pie de página.
- <article>: Representa un contenido autónomo o independiente.
- <section>: Representa una sección genérica de contenido.
- <nav>: Define una sección de navegación.
- <aside>: Representa contenido tangencial o relacionado.

Estas etiquetas semánticas permiten que el código sea más legible y comprensible, tanto para los desarrolladores como para las máquinas (como los motores de búsqueda o lectores de pantalla).

2. Nuevas APIs de JavaScript:

HTML5 introduce una serie de APIs (Interfaz de Programación de Aplicaciones) que permiten a los desarrolladores acceder a funcionalidades avanzadas del navegador, tales como la manipulación de contenido multimedia, almacenamiento local y comunicación en tiempo real.

Ejemplos de APIs clave:
- Canvas API: Permite dibujar gráficos 2D y 3D en el navegador.
- Geolocation API: Permite obtener la ubicación geográfica del usuario.
- LocalStorage y SessionStorage: Ofrecen almacenamiento local en el navegador sin necesidad de bases de datos.
- WebSockets: Permite la comunicación bidireccional en tiempo real entre el navegador y el servidor.

3. Soporte para Multimedia (Audio y Video):

HTML5 facilita la inclusión de contenido multimedia sin necesidad de plugins externos como Flash. Gracias a las etiquetas <audio> y <video>, es posible incluir y controlar archivos de audio y video directamente en la página web.

Ejemplo:
```html

<video>
<source></source>
Tu navegador no soporta el elemento de video.
</video>

Estas etiquetas permiten que el contenido multimedia sea accesible de forma nativa y que los usuarios puedan interactuar con él sin la necesidad de herramientas adicionales.

---

**4. Formularios Mejorados:**

HTML5 introduce nuevos elementos y atributos para mejorar la funcionalidad y la validación de formularios. Esto permite crear formularios más intuitivos y accesibles.

Nuevas etiquetas y atributos:
- **`<input>`**: Nuevos tipos como `email`, `date`, `number`, etc., permiten una mejor validación y control en los formularios.
- **`<datalist>`**: Proporciona una lista de opciones predefinidas para un campo de entrada.
- **`<output>`**: Se utiliza para mostrar resultados de cálculos o interacciones de formularios.

Estos elementos hacen que la creación de formularios interactivos sea mucho más sencilla y efectiva, sin tener que depender de JavaScript para la validación básica.

---

**5. Almacenamiento Local y Web Storage:**

HTML5 introduce el **almacenamiento local** a través de la API de **LocalStorage** y **SessionStorage**, que permite almacenar datos en el navegador sin necesidad de enviar la información al servidor cada vez.

- **LocalStorage**: Permite almacenar datos de manera persistente en el navegador, incluso después de cerrar la página.
- **SessionStorage**: Almacena datos solo durante la sesión del navegador.

Ambos tipos de almacenamiento son clave para aplicaciones web modernas que requieren persistencia de datos entre sesiones de usuario.

---

**6. Diseño Responsivo:**

HTML5 facilita el diseño de sitios web que se adaptan a diferentes tamaños de pantalla mediante el uso de la etiqueta **`<meta name="viewport">`** y técnicas de diseño como **CSS3**. Esto asegura que las páginas se vean correctamente en dispositivos de cualquier tamaño, como móviles, tabletas y escritorios.

Ejemplo de uso de `viewport`:
```html
<meta name="viewport" content="width=device-width, initial-scale=1.0">

Este bloque es crucial para crear sitios web que sean responsivos y accesibles desde una amplia variedad de dispositivos.

7. Mejora en la Accesibilidad:

HTML5 pone un enfoque especial en la accesibilidad, asegurando que las páginas sean más fáciles de usar por personas con discapacidades. Las etiquetas semánticas ayudan a los lectores de pantalla a interpretar mejor el contenido, y nuevas funcionalidades como los atributos ARIA (Accessible Rich Internet Applications) permiten mejorar la experiencia de usuario en dispositivos de asistencia.

8. Nuevos Atributos y Mejoras en las Etiquetas Existentes:

HTML5 también ha introducido nuevos atributos que mejoran la funcionalidad de las etiquetas existentes, como el atributo placeholder para campos de entrada de texto, o el atributo autofocus para establecer un campo predeterminado en los formularios.

9. Mejoras en el Rendimiento y la Optimización:

HTML5 permite mejorar el rendimiento de las aplicaciones web con técnicas como la carga perezosa (lazy loading) de imágenes o la ejecución eficiente de scripts mediante la optimización de recursos. Además, HTML5 promueve el uso de las web workers para ejecutar procesos en segundo plano, lo que mejora la experiencia de usuario al no bloquear el hilo principal.

Resumen de los bloques de construcción de HTML5:

Conclusión:

HTML5 es una plataforma web abierta que integra diversas tecnologías y características que permiten a los desarrolladores crear sitios web interactivos, dinámicos y accesibles. Sus bloques de construcción incluyen mejoras en la semántica, soporte para multimedia, nuevas APIs, almacenamiento local, y optimización del rendimiento, lo que lo convierte en una herramienta fundamental para el desarrollo web moderno.

Bloque | Descripción |
|—————————————|———————————————————————————|
| Etiquetas semánticas | Mejora la estructura y accesibilidad del contenido. |
| APIs de JavaScript | Nuevas APIs que permiten funcionalidades avanzadas (Canvas, Geolocalización, etc.).|
| Soporte para multimedia | Etiquetas <audio> y <video> para incluir contenido multimedia sin plugins. |
| Formularios mejorados | Nuevos tipos de campos y validaciones nativas para formularios. |
| Almacenamiento local | Uso de LocalStorage y SessionStorage para almacenar datos en el navegador. |
| Diseño responsivo | Mejora de la adaptabilidad de los sitios a diferentes dispositivos. |
| Accesibilidad | Mejora de la accesibilidad mediante etiquetas semánticas y atributos ARIA. |
| Nuevos atributos | Nuevos atributos y mejoras de las etiquetas existentes. |
| Rendimiento y optimización | Técnicas de optimización y mejor rendimiento de la carga de contenido. |

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Describe the difference between a cookie, sessionStorage and localStorage.

A

All the above-mentioned technologies are key-value storage mechanisms on the client side. They are only able to store values as strings.
cookie localStorage sessionStorage
Initiator Client or server. Server can use Set-Cookie header Client Client
Expiry Manually set Forever On tab close
Persistent across browser sessions Depends on whether expiration is set Yes No
Sent to server with every HTTP request Cookies are automatically being sent via Cookie header No No
Capacity (per domain) 4kb 5MB 5MB
Accessibility Any window Any window Same tab

Note: If the user decides to clear browsing data via whatever mechanism provided by the browser, this will clear out any cookie, localStorage, or sessionStorage stored. It’s important to keep this in mind when designing for local persistance, especially when comparing to alternatives such as server side storing in a database or similar (which of course will persist despite user actions).

Traducción y Explicación:

Describe la diferencia entre una cookie, sessionStorage y localStorage.

1. Cookies

Las cookies son pequeños archivos de texto que el navegador almacena en el dispositivo del usuario. Se utilizan principalmente para almacenar datos que deben ser enviados al servidor con cada solicitud HTTP. Las cookies son enviadas con cada solicitud al servidor correspondiente y tienen un tamaño máximo limitado (generalmente 4 KB).

Características:
- Almacenamiento: Se almacenan como pares de clave-valor.
- Envío al servidor: Cada vez que se realiza una solicitud al servidor (como al cargar una página), las cookies asociadas a ese dominio se envían automáticamente al servidor.
- Expiración: Pueden tener una fecha de expiración o ser “de sesión” (expiran cuando se cierra el navegador).
- Uso común: Autenticación de usuario, preferencias del usuario, seguimiento de sesiones.

Ejemplo de una cookie:
```javascript
document.cookie = “username=Juan; expires=Fri, 31 Dec 2024 23:59:59 GMT; path=/”;
~~~

Ventajas:
- Se usan principalmente para seguimiento, almacenamiento de sesiones y autenticación.
- Pueden ser utilizadas por el servidor y el cliente.

Desventajas:
- Su tamaño está limitado (alrededor de 4 KB).
- Afectan el rendimiento debido a que se envían con cada solicitud HTTP.

2. sessionStorage

sessionStorage es un tipo de almacenamiento web proporcionado por HTML5 que permite almacenar datos en la sesión actual del navegador. A diferencia de las cookies, no se envía al servidor con cada solicitud, lo que lo hace más eficiente en términos de rendimiento.

Características:
- Almacenamiento: Almacena pares de clave-valor.
- Alcance: Los datos se almacenan durante la sesión de la página web, es decir, hasta que el usuario cierre la pestaña o el navegador.
- Tamaño: Permite almacenar más datos que las cookies, alrededor de 5 MB por dominio.
- Uso común: Almacenar datos temporales para una sesión (como un carrito de compras).

Ejemplo de sessionStorage:
```javascript
sessionStorage.setItem(‘username’, ‘Juan’);
~~~

Ventajas:
- No se envía al servidor, lo que mejora el rendimiento.
- Los datos se eliminan automáticamente cuando la pestaña o el navegador se cierra.

Desventajas:
- Los datos se pierden cuando se cierra la pestaña o el navegador.

3. localStorage

localStorage es otro tipo de almacenamiento web de HTML5 que permite almacenar datos de forma persistente en el navegador, incluso después de que el navegador se cierre o la computadora se reinicie. Los datos almacenados en localStorage no tienen fecha de expiración y persisten hasta que se eliminen explícitamente.

Características:
- Almacenamiento: Almacena pares de clave-valor.
- Alcance: Los datos persisten en el navegador hasta que el usuario los borre manualmente o el código lo elimine.
- Tamaño: Puede almacenar hasta 5 MB por dominio, mucho más que las cookies.
- Uso común: Almacenar configuraciones del usuario, preferencias a largo plazo, datos de formularios.

Ejemplo de localStorage:
```javascript
localStorage.setItem(‘theme’, ‘dark’);
~~~

Ventajas:
- Los datos no se envían al servidor, lo que mejora el rendimiento.
- Los datos persisten entre sesiones, lo que permite almacenar configuraciones y preferencias del usuario.

  • No tiene mecanismo de expiración, por lo que los datos pueden ocupar espacio innecesario si no se gestionan correctamente.

Resumen de diferencias:

Conclusión:

  • Cookies son ideales para información que necesita ser enviada al servidor, como sesiones o preferencias del usuario que deben ser compartidas entre el servidor y el cliente.
  • sessionStorage es útil para almacenar datos temporales que solo deben existir durante la sesión actual del navegador.
  • localStorage es ideal para almacenar datos persistentes en el navegador sin necesidad de enviarlos al servidor, como configuraciones y preferencias del usuario a largo plazo.

Característica | Cookie | sessionStorage | localStorage |
|————————–|——————————–|———————————-|———————————|
| Duración | Puede ser persistente o de sesión. | Solo durante la sesión actual. | Persistente, hasta que se eliminen. |
| Envío al servidor | Se envía con cada solicitud. | No se envía al servidor. | No se envía al servidor. |
| Tamaño máximo | Alrededor de 4 KB. | Aproximadamente 5 MB. | Aproximadamente 5 MB. |
| Uso principal | Seguimiento, autenticación. | Datos temporales durante la sesión. | Preferencias a largo plazo, configuración. |
| Acceso | Solo en el cliente, pero enviado al servidor. | Solo en la sesión actual. | Accesible incluso después de cerrar el navegador. |

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Describe the difference between

, 
 and 
.
A
<script>
- HTML parsing is blocked, the script is fetched and executed immediately, HTML parsing resumes after the script is executed.
    <script async> - The script will be fetched in parallel to HTML parsing and executed as soon as it is available (potentially before HTML parsing completes). Use async when the script is independent of any other scripts on the page, for example, analytics.
    <script defer> - The script will be fetched in parallel to HTML parsing and executed when the page has finished parsing. If there are multiple of them, each deferred script is executed in the order they were encountered in the document. If a script relies on a fully-parsed DOM, the defer attribute will be useful in ensuring that the HTML is fully parsed before executing. A deferred script must not contain document.write.

Note: The async and defer attributes are ignored for scripts that have no src attribute.

Traducción y Explicación:

**Describe la diferencia entre `<script>`, `<script async>` y `<script defer>`.**

---

**1. `<script>` (Normal)**

El elemento `<script>` se utiliza para incluir código JavaScript dentro de una página web o para enlazar un archivo JavaScript externo. De manera predeterminada, cuando se utiliza `<script>`, el navegador **detiene la carga del HTML** hasta que el script se descarga y ejecuta.

Características:
- **Bloquea la carga**: Cuando el navegador encuentra un `<script>`, se detiene la descarga de otros recursos y el procesamiento de HTML hasta que el script se haya descargado y ejecutado.
- **Orden de ejecución**: Los scripts se ejecutan en el orden en que aparecen en el documento.

Ejemplo:
```html
<script src="script.js">
</script>
Desventajas:
- **Bloqueo de la renderización**: Si el archivo JavaScript es grande o el servidor es lento, esto puede retrasar la renderización de la página.
- **Retraso en la carga de otros recursos**: El navegador no podrá descargar otros recursos (como imágenes o CSS) hasta que el script se descargue y ejecute.

---

**2. `<script async>`**

El atributo `async` permite que el archivo JavaScript se descargue **de manera asíncrona**, sin bloquear la carga de otros recursos de la página, como el HTML, el CSS o las imágenes. **El script se ejecuta tan pronto como se descarga**, lo que puede hacer que la ejecución del script ocurra en un orden diferente al que aparece en el documento.

Características:
- **No bloquea la carga**: El navegador descarga el archivo JavaScript en paralelo con la carga de otros recursos, por lo que no se detiene el procesamiento del HTML.
- **Orden de ejecución**: El script se ejecuta tan pronto como se haya descargado, lo que significa que no garantiza que se ejecute en el orden en que se encuentra en el documento HTML.

Ejemplo:
```html
<script src="script.js" async></script>

Ventajas:
- Carga más rápida: Al no bloquear la descarga de otros recursos, puede mejorar el rendimiento y la velocidad de carga de la página.

  • Orden de ejecución no garantizado: Si tienes varios scripts con async, se ejecutarán tan pronto como se descarguen, lo que puede generar problemas si hay dependencias entre ellos.

3. <script defer>

El atributo defer también permite descargar el archivo JavaScript de manera asíncrona, pero garantiza que los scripts se ejecuten en el mismo orden en que aparecen en el HTML y después de que el HTML haya terminado de cargarse. Los scripts con defer se ejecutan cuando el DOM está completamente cargado, pero antes de que se dispare el evento load.

Características:
- No bloquea la carga: El navegador descarga el archivo JavaScript de manera asíncrona, pero no bloquea la carga del HTML.
- Ejecuta en orden: Los scripts con defer se ejecutan en el orden en que se encuentran en el HTML, después de que el DOM se haya cargado completamente.
- Ideal para scripts que dependen del DOM: Es útil cuando el script necesita manipular el DOM o depende de otros scripts cargados previamente.

Ejemplo:
```html



~~~

Ventajas:
- Carga rápida: Al no bloquear la carga del HTML ni otros recursos, mejora el rendimiento de la página.
- Ejecuta en el orden correcto: Los scripts se ejecutan en el orden en que aparecen en el documento, lo que es importante si dependen de otros scripts o del DOM.

Desventajas:
- Retraso en la ejecución: El script no se ejecuta hasta que el DOM esté completamente cargado, lo que podría generar una ligera demora si el script necesita ejecutarse antes.

Resumen de diferencias:

Conclusión:

  • <script> es el método más básico y tradicional, pero puede afectar negativamente al rendimiento debido al bloqueo de la carga de la página.
  • <script async> es ideal para scripts independientes que no dependen de otros, ya que permite que los scripts se descarguen y ejecuten de manera paralela sin bloquear la carga de la página.
  • <script defer> es ideal cuando los scripts dependen del DOM o necesitan ejecutarse en un orden específico, ya que permite que los scripts se descarguen sin bloquear la carga, pero asegura que se ejecuten después de que el DOM se haya cargado completamente.

Atributo | Comportamiento | Orden de ejecución | Usos comunes |
|——————|————————————————————————————|—————————————————|—————————————–|
| <script> | Bloquea la carga de la página hasta que el script se descarga y se ejecuta. | Se ejecuta en el orden en que aparece en el HTML. | Scripts que son esenciales para la carga inicial. |
| <script async> | Descarga el script de manera asíncrona, no bloquea la carga de otros recursos. | Se ejecuta tan pronto como se descarga, en orden no garantizado. | Scripts independientes, sin dependencias. |
| <script defer> | Descarga el script de manera asíncrona, no bloquea la carga, y se ejecuta después de cargar el DOM. | Se ejecuta en el orden en que aparece en el HTML, después de que el DOM esté cargado. | Scripts que dependen del DOM o de otros scripts. |

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Why is it generally a good idea to position CSS <link></link>s between <head></head> and JS

s just before </body>? Do you know any exceptions?
A

Placing <link></link>s in the <head>

Putting <link></link>s in the <head> is part of proper specification in building an optimized website. When a page first loads, HTML and CSS are being parsed simultaneously; HTML creates the DOM (Document Object Model) and CSS creates the CSSOM (CSS Object Model). Both are needed to create the visuals in a website, allowing for a quick “first meaningful paint” timing. This progressive rendering is a category optimization sites are measured in their performance scores. Putting stylesheets near the bottom of the document is what prohibits progressive rendering in many browsers. Some browsers block rendering to avoid having to repaint elements of the page if their styles change. The user is then stuck viewing a blank white page. Other times there can be flashes of unstyled content (FOUC), which show a webpage with no styling applied.

Placing

s just before </body>
<script>
tags block HTML parsing while they are being downloaded and executed which can slow down your page. Placing the scripts at the bottom will allow the HTML to be parsed and displayed to the user first.

An exception for positioning of <script>s at the bottom is when your script contains document.write(), but these days it's not a good practice to use document.write(). Also, placing <script>s at the bottom means that the browser cannot start downloading the scripts until the entire document is parsed. This ensures your code that needs to manipulate DOM elements will not throw an error and halt the entire script. If you need to put <script>s in the <head>, use the defer attribute, which will achieve the same effect of running the script only after the HTML is parsed but the browser can download the script earlier.

Keep in mind that putting scripts just before the closing </body> tag will create the illusion that the page loads faster on an empty cache (since the scripts won't block downloading the rest of the document). However, if you have some code you want to run during page load, it will only start executing after the entire page has loaded. If you put those scripts in the <head> tag, they would start executing before - so on a primed cache the page would actually appear to load faster.

<head> and <body> tags are now optional

As per the HTML5 specification, certain HTML tags like <head> and <body> are optional. Google's style guide even recommends removing them to save bytes. However, this practice is still not widely adopted and the performance gain is likely to be minimal and for most sites it's not likely going to matter.

Traducción y Explicación:

**¿Por qué es generalmente una buena idea colocar los `<link>` de CSS entre `<head></head>` y los `<script>` de JS justo antes de `</body>`? ¿Conoces alguna excepción?**

---

**1. Colocar `<link>` de CSS en `<head>`:**

El `<link>` que enlaza los archivos de **CSS** debe ir dentro de la etiqueta `<head>` del documento HTML. Esto asegura que el navegador pueda **cargar y procesar el estilo** de la página antes de que se muestre al usuario. Es una práctica recomendada por varias razones:

**Razones:**
- **Renderizado adecuado**: Los estilos se aplican antes de que la página sea renderizada, lo que evita el "parpadeo de contenido sin estilo" (FOUC, por sus siglas en inglés), que ocurre cuando el contenido HTML se muestra sin estilos y luego se actualiza con los estilos aplicados.
- **Priorización de carga**: Los navegadores comienzan a descargar los archivos CSS tan pronto como leen el `<head>`, lo que les permite aplicarlos al contenido tan pronto como esté disponible.
  
#### Ejemplo de uso adecuado:
```html
<head>
    <link rel="stylesheet" href="styles.css">
</head>
~~~

---

**2. Colocar `<script>` justo antes de `</body>`:**

Los **scripts de JavaScript** suelen colocarse justo antes de la etiqueta de cierre `</body>`. Esto se hace para **evitar que los scripts bloqueen la carga del HTML**. El motivo de esta recomendación es que los scripts suelen ser más pesados o pueden necesitar tiempo de ejecución, y ponerlos al final de la página asegura que **el contenido HTML y CSS se carguen primero**, lo que mejora la experiencia del usuario.

**Razones:**
- **No bloquear el renderizado**: Los scripts no bloquean la carga del HTML, lo que mejora la rapidez con la que se muestra la página en el navegador.
- **Acceso completo al DOM**: Los scripts se ejecutan después de que todo el contenido HTML haya sido cargado y procesado, lo que les da acceso completo al DOM.

Ejemplo:
```html
<body>
    <!-- Contenido de la página -->
    <script src="script.js">
</script>

</body>
~~~

Excepciones:

Aunque estas prácticas son generalmente recomendadas, existen algunas excepciones o situaciones específicas en las que podrías querer modificar la ubicación de los <link> y <script>:

1. Colocar <link> dentro de <body>:
- En algunos casos muy raros, si el estilo de la página depende de contenido específico o si se necesitan diferentes hojas de estilo para distintas secciones de la página, puedes usar la carga dinámica de CSS dentro del cuerpo de la página. Sin embargo, no es recomendable para la mayoría de los casos porque puede causar retrasos en el renderizado inicial de la página.

  • Si colocas los scripts en el <head> pero usas los atributos async o defer, puedes no bloquear el renderizado de la página.
    • async: Los scripts se descargan de forma asíncrona y se ejecutan tan pronto como estén listos, sin bloquear la carga del HTML.
    • defer: Los scripts se descargan de forma asíncrona pero se ejecutan solo después de que el DOM haya sido completamente cargado.
    Estos dos atributos permiten que los scripts en el <head> no bloqueen la carga de la página.

Ejemplo con async:
```html

<head>



</head>
Ejemplo con `defer`:
```html
<head>
    <script src="script.js" defer></script>
</head>

Resumen:

  • CSS (<link>) se coloca en el <head> para garantizar que el estilo se aplique antes de renderizar la página, evitando el parpadeo de contenido sin estilo.
  • JavaScript (<script>) se coloca justo antes de </body> para asegurar que no bloquee la carga del HTML, lo que mejora la experiencia del usuario.

Sin embargo, si usas los atributos async o defer en los scripts, puedes colocar los <script> en el <head> sin afectar negativamente al rendimiento, y en casos muy específicos, podrías cargar dinámicamente CSS dentro del <body>, aunque esto no es lo más común ni lo más recomendable.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

What is progressive rendering?

A

Progressive rendering is the name given to techniques used to improve the performance of a webpage (in particular, improve perceived load time) to render content for display as quickly as possible.

It used to be much more prevalent in the days before broadband internet but it is still used in modern development as mobile data connections are becoming increasingly popular (and unreliable)!

Examples of such techniques:

Lazy loading of images - Images on the page are not loaded all at once. JavaScript will be used to load an image when the user scrolls into the part of the page that displays the image.
Prioritizing visible content (or above-the-fold rendering) - Include only the minimum CSS/content/scripts necessary for the amount of page that would be rendered in the users browser first to display as quickly as possible, you can then use deferred scripts or listen for the DOMContentLoaded/load event to load in other resources and content.
Async HTML fragments - Flushing parts of the HTML to the browser as the page is constructed on the back end. More details on the technique can be found here.

Traducción y Explicación:

¿Qué es el renderizado progresivo?

Renderizado progresivo es una técnica que permite mostrar el contenido de una página web de manera gradual a medida que se descarga, en lugar de esperar a que todo el contenido se cargue completamente antes de mostrarlo. Este enfoque mejora la experiencia del usuario, especialmente en conexiones lentas o cuando se cargan páginas con mucho contenido.

¿Cómo funciona el renderizado progresivo?
En lugar de esperar a que todos los recursos de la página (como imágenes, scripts y estilos) se descarguen completamente, el navegador muestra el contenido a medida que lo recibe. Esto permite que los usuarios empiecen a ver el contenido de la página mucho más rápido. A medida que los recursos adicionales se descargan, la página se va “completando” o actualizando.

Técnicas comunes de renderizado progresivo:

  1. HTML y CSS: El navegador puede empezar a mostrar el contenido HTML y aplicar los estilos de CSS tan pronto como estén disponibles, incluso si algunas partes de la página aún están descargándose.
  2. Imágenes progresivas: Las imágenes en formato JPEG pueden usarse de forma progresiva. Esto significa que, en lugar de cargar una imagen de forma estática, el navegador descarga una versión de baja calidad primero y luego la mejora gradualmente con más detalles a medida que se descarga completamente.
  3. Carga perezosa (Lazy loading): Se cargan solo los recursos que son visibles en la pantalla. Esto es comúnmente utilizado para imágenes o contenido que solo se muestra cuando el usuario hace scroll hacia abajo. Esto ayuda a acelerar el tiempo de carga inicial de la página.

Ventajas del renderizado progresivo:
- Mejora la percepción de la velocidad: Los usuarios ven algo en la pantalla mucho más rápido, lo que mejora la percepción de la velocidad de la página.
- Mejor experiencia en conexiones lentas: En lugar de esperar mucho tiempo para que todo se cargue, los usuarios pueden empezar a interactuar con la página mientras se siguen descargando recursos.
- Optimización para dispositivos móviles: En dispositivos móviles con conexiones lentas o inestables, el renderizado progresivo permite una experiencia más fluida.

Desventajas:
- Puede causar una experiencia de carga inconsistente: Si no se maneja bien, los elementos de la página pueden aparecer y desaparecer a medida que se cargan los recursos adicionales, lo que podría resultar en una experiencia menos predecible para el usuario.
- Mayor complejidad en la implementación: Se requieren técnicas adicionales, como la carga perezosa y la optimización de imágenes, para implementar el renderizado progresivo correctamente.

Resumen:

El renderizado progresivo es una estrategia que mejora la velocidad de carga y la experiencia de usuario mostrando el contenido de la página de manera gradual mientras se siguen descargando los recursos. Es especialmente útil en conexiones lentas y dispositivos móviles, pero requiere un manejo adecuado para evitar una experiencia inconsistente.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Why you would use a srcset attribute in an image tag? Explain the process the browser uses when evaluating the content of this attribute

A

You would use the srcset attribute when you want to serve different images to users depending on their device display width - serve higher quality images to devices with retina display enhances the user experience while serving lower resolution images to low-end devices increase performance and decrease data wastage (because serving a larger image will not have any visible difference). For example: <img></img> tells the browser to display the small, medium or large .jpg graphic depending on the client’s resolution. The first value is the image name and the second is the width of the image in pixels. For a device width of 320px, the following calculations are made:

500 / 320 = 1.5625
1000 / 320 = 3.125
2000 / 320 = 6.25

If the client’s resolution is 1x, 1.5625 is the closest, and 500w corresponding to small.jpg will be selected by the browser.

If the resolution is retina (2x), the browser will use the closest resolution above the minimum. Meaning it will not choose the 500w (1.5625) because it is greater than 1 and the image might look bad. The browser would then choose the image with a resulting ratio closer to 2 which is 1000w (3.125).

srcsets solve the problem whereby you want to serve smaller image files to narrow screen devices, as they don’t need huge images like desktop displays do — and also optionally that you want to serve different resolution images to high density/low-density screens.

Traducción y Explicación:

¿Por qué usarías el atributo srcset en una etiqueta <img>? Explica el proceso que usa el navegador al evaluar el contenido de este atributo.

Uso del atributo srcset en una etiqueta <img>

El atributo srcset se utiliza dentro de la etiqueta <img> para proporcionar diferentes versiones de una misma imagen, con distintos tamaños o resoluciones, permitiendo que el navegador elija la imagen más adecuada según el contexto del dispositivo y las características de la pantalla. Este enfoque es particularmente útil en el diseño web responsivo y optimización para dispositivos móviles.

¿Por qué usar el atributo srcset?

  • Optimización de imágenes: Permite cargar imágenes más pequeñas para dispositivos con pantallas de baja resolución o conexión lenta, mientras que se cargan imágenes más grandes en dispositivos con pantallas de alta resolución, como pantallas retina, para asegurar una mejor calidad visual.
  • Rendimiento: Al elegir la imagen adecuada según el tamaño de pantalla o las capacidades del dispositivo, se mejora el tiempo de carga y se ahorra ancho de banda.
  • Diseño responsivo: El srcset permite que una misma imagen se adapte a diferentes tamaños de pantalla, asegurando una buena apariencia sin importar el dispositivo utilizado.

Ejemplo del uso del atributo srcset:

```html
<img></img>
~~~

En este ejemplo, el navegador puede elegir entre tres versiones de la imagen según el tamaño de la pantalla y las condiciones de visualización del dispositivo.

Proceso de evaluación del atributo srcset por el navegador

Cuando el navegador procesa el atributo srcset, sigue un proceso específico para seleccionar la imagen que debe mostrar, dependiendo de factores como el ancho de la ventana de visualización, la densidad de píxeles (resolución de la pantalla) y otros parámetros del dispositivo. Aquí está el proceso:

  1. Evaluación de las imágenes en el srcset:
    • El srcset contiene una lista de imágenes con sus respectivos tamaños o resoluciones, como en el ejemplo anterior (400w, 800w, 1200w).
    • Cada opción en el srcset tiene un tamaño de imagen (en píxeles o en ancho de imagen, como 400w) y una URL de la imagen.
  2. Determinación de la densidad de píxeles y el tamaño de la ventana de visualización:
    • El navegador determina la anchura del viewport (la ventana visible de la página web) y la densidad de píxeles de la pantalla (por ejemplo, una pantalla Retina tiene una mayor densidad de píxeles).
    • El navegador también evalúa la relación entre el tamaño del dispositivo y la resolución de la pantalla, lo que influye en la elección de la imagen.
  3. Selección de la imagen más adecuada:
    • El navegador compara los valores en srcset con las condiciones actuales del dispositivo y la página.
    • Si la resolución de la pantalla es más alta (por ejemplo, una pantalla Retina), el navegador seleccionará una imagen con una mayor densidad de píxeles, incluso si esto significa una imagen más grande.
    • Si el ancho de la ventana de visualización es más pequeño (por ejemplo, un teléfono móvil), el navegador elegirá una imagen con un tamaño más adecuado al espacio disponible.
  4. Cargar la imagen seleccionada:
    • Una vez que el navegador selecciona la imagen más adecuada de acuerdo a las condiciones de visualización, carga esa imagen y la muestra en la página.

Ejemplo práctico:

```html
<img></img>
~~~

  • srcset: Contiene las diferentes imágenes disponibles con sus respectivos tamaños en píxeles.
  • sizes: Especifica las condiciones bajo las cuales cada imagen debe ser utilizada (por ejemplo, para pantallas de menos de 600px de ancho, se carga la imagen de 400px, y para pantallas más grandes, la de 1200px).

Resumen:

El atributo srcset en la etiqueta <img> permite a los navegadores seleccionar la imagen más adecuada según las características del dispositivo (resolución de pantalla, ancho de la ventana de visualización). Esto mejora la optimización de la carga de imágenes, especialmente para dispositivos con pantallas de alta resolución (como las pantallas Retina) y en contextos de diseño responsivo. El navegador evalúa el contenido del srcset, seleccionando la mejor imagen disponible basándose en las condiciones actuales del dispositivo.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Have you used different HTML templating languages before?

A

Yes, Pug (formerly Jade), ERB, Slim, Handlebars, Jinja, Liquid, and EJS just to name a few. In my opinion, they are more or less the same and provide similar functionality of escaping content and helpful filters for manipulating the data to be displayed. Most templating engines will also allow you to inject your own filters in the event you need custom processing before display.

Traducción y Explicación:

¿Has utilizado diferentes lenguajes de plantillas HTML antes?

Lenguajes de plantillas HTML

Un lenguaje de plantillas HTML es una herramienta que facilita la creación de páginas web dinámicas, permitiendo insertar variables, condiciones, bucles, o incluir fragmentos reutilizables de HTML. En lugar de escribir HTML estático, estos lenguajes permiten generar contenido de manera más eficiente y estructurada.

Lenguajes de plantillas más comunes:

  1. Jinja2 (usado con Python):
    • Descripción: Jinja2 es un motor de plantillas ampliamente utilizado en aplicaciones web que emplean el framework Flask o Django (aunque Django también tiene su propio motor de plantillas). Permite insertar variables, realizar bucles e incluso estructurar bloques de código reutilizables.
    • Uso:
      ```html
      <h1>{{ title }}</h1><ul>
      {% for item in items %}
      <li>{{ item }}</li>
      {% endfor %}
      </ul>```
  2. EJS (Embedded JavaScript):
    • Descripción: EJS es un motor de plantillas que se utiliza en aplicaciones Node.js. Es similar a HTML, pero permite insertar JavaScript dentro de las plantillas.
    • Uso:
      ```html
      <h1><%= title %></h1><ul>
      <% items.forEach(function(item) { %>
      <li><%= item %></li>
      <% }); %>
      </ul>```
  3. Pug (antes conocido como Jade):
    • Descripción: Pug es un motor de plantillas para Node.js que utiliza una sintaxis concisa y más legible que el HTML. Se enfoca en la indentación y evita las etiquetas de cierre.
    • Uso:
      pug
      h1= title
      ul
        each item in items
          li= item
  4. Handlebars:
    • Descripción: Handlebars es un motor de plantillas que se utiliza en aplicaciones tanto del lado del servidor como del cliente. Se basa en una sintaxis más simple para insertar variables y bloques condicionales.
    • Uso:
      ```html
      <h1>{{title}}</h1><ul>
      {{#each items}}
      <li>{{this}}</li>
      {{/each}}
      </ul>```
  5. Mustache:
    • Descripción: Similar a Handlebars, Mustache es un motor de plantillas ligero y sin lógica, lo que significa que no puedes usar operaciones complejas como bucles o condicionales directamente en las plantillas. Sin embargo, es ideal para aplicaciones simples.
    • Uso:
      ```html
      <h1>{{title}}</h1><ul>
      {{#items}}
      <li>{{.}}</li>
      {{/items}}
      </ul>```

¿Cuándo usar un lenguaje de plantillas?

  • Páginas dinámicas: Si necesitas generar contenido de manera dinámica desde el servidor (por ejemplo, en una aplicación web de Node.js o Python), un motor de plantillas es útil para insertar datos en el HTML y estructurarlo.
  • Reutilización de componentes: Muchos motores de plantillas permiten usar fragmentos o componentes reutilizables, lo que ayuda a mantener un código más limpio y organizado.
  • Aplicaciones con datos variables: Cuando la información que se muestra en una página cambia con frecuencia, como las listas de productos, las publicaciones de blog o las cuentas de usuario, los lenguajes de plantillas permiten mantener el HTML limpio y fácil de modificar.

Resumen:

Los lenguajes de plantillas HTML como Jinja2, EJS, Pug, Handlebars y Mustache se usan para generar contenido dinámico en páginas web, permitiendo insertar variables, condicionales, bucles y reutilizar componentes. Son esenciales cuando se necesita generar HTML dinámicamente desde el servidor, lo que facilita la creación de páginas web interactivas y adaptadas a los datos del usuario.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

What is the difference between canvas and SVG?

A

Canvas is raster-based, working with pixels, while SVG is vector-based, employing mathematical descriptions of shapes. Canvas employs imperative drawing, where each step is specified with JavaScript, ideal for dynamic and interactive graphics like animations and games.

Conversely, SVG uses declarative drawing, with shapes and paths defined directly in HTML, making it more accessible and SEO-friendly. Canvas is optimal for complex scenes due to its lower overhead, but scaling may lead to image quality loss. SVG, being resolution-independent, adapts to various screen sizes without sacrificing quality.

Ultimately, canvas suits dynamic, performance-intensive graphics, while SVG excels in scalable, resolution-independent graphics, with inherent accessibility and SEO advantages.

Traducción y Explicación:

¿Cuál es la diferencia entre canvas y SVG?

Canvas

El canvas es un elemento HTML <canvas> que permite dibujar gráficos de manera dinámica mediante JavaScript. Este elemento ofrece un área sobre la que se pueden realizar dibujos (como líneas, formas, imágenes, etc.) en tiempo real. Los gráficos dibujados en el canvas son rasterizados, lo que significa que se representan como píxeles en una cuadrícula.

Características del Canvas:
- Dibujo basado en píxeles: El contenido del canvas se genera a través de comandos JavaScript y es un conjunto de píxeles. No puedes manipular los elementos individualmente después de dibujarlos (a diferencia de SVG).
- Uso de JavaScript: Para dibujar en el canvas, debes usar JavaScript. No es una solución declarativa como SVG, sino que implica crear gráficos de manera imperativa, modificando píxeles a medida que se generan.
- Animaciones y juegos: Es ideal para animaciones o aplicaciones interactivas como juegos porque puede actualizar rápidamente los gráficos.
- Rendimiento: Dado que se basa en píxeles, el canvas puede ser más eficiente para renderizar gráficos complejos o de alta frecuencia, como animaciones o gráficos en 3D, especialmente cuando se tiene mucha información visual que cambia constantemente.

Ejemplo de Canvas:
```html

<canvas></canvas>

<script>
var canvas = document.getElementById("myCanvas");
  var ctx = canvas.getContext("2d");
  ctx.fillStyle = "blue";
  ctx.fillRect(50, 50, 150, 100);
</script>
**SVG (Scalable Vector Graphics)**

El **SVG** es un formato gráfico basado en **vectores**, lo que significa que los gráficos se definen por ecuaciones matemáticas en lugar de píxeles. SVG es un **lenguaje XML** utilizado para describir imágenes en dos dimensiones. Los gráficos vectoriales se pueden escalar sin perder calidad, lo que hace a SVG ideal para diseños que requieren **alta resolución** y **escalabilidad**.

**Características de SVG**:
- **Gráficos vectoriales**: Los gráficos en SVG están definidos por formas geométricas, lo que permite escalarlos a cualquier tamaño sin perder resolución.
- **Manipulación sencilla con CSS y JavaScript**: A diferencia de canvas, los elementos SVG son accesibles y manipulables directamente desde el **DOM** (Document Object Model). Esto significa que puedes modificar fácilmente las propiedades de los elementos (como el color, tamaño o posición) mediante CSS o JavaScript.
- **Ideal para gráficos estáticos y animaciones simples**: SVG es muy adecuado para gráficos estáticos, como iconos, logotipos y diagramas. También puede usarse para animaciones, pero su rendimiento puede no ser tan alto como el de canvas en escenarios más complejos.
- **Accesibilidad**: Dado que los elementos SVG son parte del DOM, son fácilmente accesibles para herramientas de accesibilidad, como lectores de pantalla.

**Ejemplo de SVG**:
```html
<svg width="100" height="100">
  <circle cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="blue" />
</svg>

Diferencias clave entre Canvas y SVG:

Resumen:

  • Canvas es adecuado para gráficos dinámicos, como animaciones y juegos, que requieren una manipulación rápida de píxeles. Se dibuja imperativamente con JavaScript y no permite interactuar fácilmente con los elementos individuales una vez creados.
  • SVG es ideal para gráficos estáticos o interactivos basados en vectores, como íconos, diagramas o logotipos. Permite manipular fácilmente los elementos gráficos con CSS y JavaScript y es ideal cuando se requiere escalabilidad sin pérdida de calidad.

Ambos tienen sus usos dependiendo del tipo de gráfico que se desea crear: canvas para gráficos dinámicos de alto rendimiento y SVG para gráficos estáticos o interactivos más simples.

Característica | Canvas | SVG |
|————————-|————————————–|—————————————|
| Tipo de gráfico | Basado en píxeles (rasterizado) | Basado en vectores (escalable) |
| Interactividad | No es fácil interactuar con objetos individuales una vez dibujados | Cada elemento es un objeto DOM interactuable |
| Renderizado | Dibujo dinámico con JavaScript | Declarativo (definido en el HTML/XML) |
| Uso ideal | Animaciones, juegos, gráficos complejos | Iconos, gráficos estáticos, interfaces de usuario |
| Escalabilidad | No escalable sin perder calidad | Escalable sin perder calidad |
| Manipulación | Requiere redibujar al cambiar contenido | Se puede manipular fácilmente con CSS y JavaScript |

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

What are empty elements in HTML?

A

Empty elements in HTML are elements that do not contain any content between their opening and closing tags. Instead, they are self-closing tags, meaning they have a forward slash (/) before the closing angle bracket (>). Some common examples of empty elements include:

<img>: Used to embed images into the document.
<input>: Used to accept user input.
<br>: Used to insert line breaks or forced line breaks.
<hr>: Used to create horizontal rules or separators.

Traducción y Explicación:

¿Qué son los elementos vacíos en HTML?

Elementos vacíos en HTML

En HTML, un elemento vacío es un tipo de etiqueta que no tiene contenido entre la etiqueta de apertura y la de cierre. Es decir, estos elementos no contienen texto ni otros elementos dentro de ellos, y generalmente se utilizan para insertar contenido o realizar una acción específica en la página, sin necesidad de contenido textual o de otros elementos.

Características de los elementos vacíos:
- No tienen contenido de texto: Los elementos vacíos no tienen contenido entre su etiqueta de apertura y cierre, a diferencia de otros elementos como <p>, <div>, <span>, etc., que sí contienen texto o elementos dentro de ellos.
- Auto-cerrados: En HTML5, algunos de estos elementos no requieren una etiqueta de cierre, aunque aún se pueden cerrar explícitamente. Estos elementos se consideran auto-cerrados, ya que su función no depende de una etiqueta de cierre.
- Se usan para insertar elementos funcionales: A menudo se utilizan para insertar imágenes, enlaces, líneas horizontales, formularios, etc.

Ejemplos de elementos vacíos:

  1. <img>: Utilizado para insertar imágenes en una página. Este elemento no tiene contenido entre sus etiquetas, solo un atributo que define la imagen a mostrar.
    html
    <img src="image.jpg" alt="Descripción de la imagen">
  2. <br>: Representa un salto de línea. No tiene contenido entre sus etiquetas y se utiliza para dividir texto en líneas diferentes.
    ```html
    <p>Esto es una línea.<br></br>Y esto es otra línea.</p>```
  3. <hr>: Se utiliza para insertar una línea horizontal, generalmente para separar secciones de contenido.
    ```html
    <hr></hr>```
  4. <input>: Se usa en formularios para crear campos interactivos, como cuadros de texto, botones, etc. No contiene texto, solo atributos que definen su comportamiento.
    html
    <input type="text" placeholder="Introduce tu nombre">
  5. <link>: Se utiliza en el <head> del documento HTML para vincular archivos externos, como hojas de estilo CSS o iconos de la página.
    ```html
    <link></link>```
  6. <meta>: Utilizado para proporcionar metadatos (como la codificación de caracteres, la descripción de la página, etc.).
    ```html
    <meta></meta>```
  7. <source>: Especifica múltiples fuentes para un <video> o <audio>, y no tiene contenido entre sus etiquetas.
    ```html
    <video>
    <source></source>
    <source></source>
    </video>```

Resumen:

Los elementos vacíos en HTML son etiquetas que no tienen contenido entre su etiqueta de apertura y cierre. Se utilizan principalmente para insertar elementos funcionales, como imágenes, saltos de línea, formularios y metadatos. A menudo se autoclavan, lo que significa que no es necesario incluir una etiqueta de cierre explícita en HTML5. Esto los hace esenciales para estructurar páginas web y mejorar la funcionalidad sin necesidad de contenido adicional.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly