` da un nombre de categoría para el grupo de opciones.
+
+```
+Choose a dinosaur:
+
+
+ Tyrannosaurus
+ Velociraptor
+ Deinonychus
+
+
+ Diplodocus
+ Saltasaurus
+ Apatosaurus
+
+
+```
+
+## Las barras de herramientas deben ser etiquetadas cuando haya más de una barra
+
+Si se define más una barra de herramientas en una aplicación web utilizando el rol ARIA `toolbar`, se debe usar el atributo [`aria-label`](/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-label_attribute) para etiquetar cada una de ellas de manera que pueda ser descrita por la tecnología de asistencia. Es una buena práctica etiquetar una barra de herramientas aún cuando solo haya una en la página
+
+### Ver también
+
+- [Ejemplo de una barra de herramienta W3C ARIA (W3C ARIA toolbar example)](https://www.w3.org/TR/wai-aria-practices/examples/toolbar/toolbar.html)
+
+## Criterios de aprobación relacionados a WCAG
+
+- [1.1.1 Contenido no textual (A)](https://www.w3.org/TR/WCAG21/#non-text-content)
+ - : Todo contenido no textual que es presentado al usuario tiene un texto alternativo que sirve un propósito similar, excepto para las situaciones listadas en el enlace anterior.
+- [2.4.4 Propósito del enlace (en contexto) (A)](https://www.w3.org/TR/WCAG21/#link-purpose-in-context)
+ - : El propósito de cada enlace puede determinarse a partir del texto del enlace o del texto del enlace en conjunto con contexto determinado programáticamente, salvo cuando el propósito del enlace sea ambiguo para los usuarios en general.
+- [2.4.9 Propósito del enlace (sólo el enlace) (AAA)](https://www.w3.org/TR/WCAG21/#link-purpose-link-only)
+ - : Se dispone de un mecanismo que permite identificar el propósito de cada enlace a partir del texto del enlace solamente, excepto cuando el propósito del enlace es ambiguo para los usuarios en general.
diff --git a/files/es/web/events/index.html b/files/es/web/events/index.html
deleted file mode 100644
index eb47e52c560ae8..00000000000000
--- a/files/es/web/events/index.html
+++ /dev/null
@@ -1,1976 +0,0 @@
----
-title: Referencia de Eventos
-slug: Web/Events
-translation_of: Web/Events
----
- Los eventos se envían para notificar al código de cosas interesantes que han ocurrido. Cada evento está representado por un objeto que se basa en la interfaz {{domxref("Event")}}, y puede tener campos y/o funciones personalizadas adicionales para obtener más información acerca de lo sucedido. Los eventos pueden representar cualquier cosa desde las interacciones básicas del usuario para notificaciones automatizadas de las cosas que suceden en el modelo de representación.
-
-Este artículo ofrece una lista de eventos que se pueden enviar; algunos son eventos estándar definidos en las especificaciones oficiales, mientras que otros son eventos usados internamente por los navegadores específicos; por ejemplo, Eventos específicos de Mozilla se enumeran de manera que los complementos pueden usarlos para interactuar con el navegador.
-
-Eventos Estándar
-
-Estos eventos se definen en las especificaciones Web oficiales, y deben ser comunes en todos los navegadores. Cada evento aparece junto con la interfaz que representa el objeto enviado a los destinatarios del evento ( por lo que puede encontrar información sobre los datos que se incluyen en cada caso ), así como un enlace a la especificación o especificaciones que definen el evento.
-
-
-
-
-
-
-
-
-
-
- {{event("abort")}}
- {{domxref("UIEvent")}}
- DOM L3
- La carga de un recurso ha sido abortada.
-
-
- abort
- {{domxref("ProgressEvent")}}
- Progress and XMLHttpRequest
- La progresión se ha terminado (no debido a un error).
-
-
-
- abort
- {{domxref("Event")}}
- IndexedDB
- Una transacción ha sido abortada.
-
-
- {{event("afterprint")}} {{gecko_minversion_inline("6")}}
- {{domxref("Event")}}
- HTML5
- El documento asociado ha iniciado la impresión o la vista previa de impresión de ha cerrado
-
-
- {{event("animationend")}}
- {{domxref("AnimationEvent")}}
- CSS Animations
- Una animation de CSS ha terminado.
-
-
- {{event("animationiteration")}}
- {{domxref("AnimationEvent")}}
- CSS Animations
- Una animation de CSS se repite.
-
-
- {{event("animationstart")}}
- {{domxref("AnimationEvent")}}
- CSS Animations
- Una animation de CSS ha iniciado.
-
-
- {{event("audioprocess")}}
- {{domxref("AudioProcessingEvent")}}
- {{SpecName('Web Audio API', '#AudioProcessingEvent', 'audioprocess')}}
- El búfer de entrada de un {{domxref("ScriptProcessorNode")}} está listo para ser procesado.
-
-
- {{event("beforeprint")}} {{gecko_minversion_inline("6")}}
- {{domxref("Event")}}
- HTML5
- El documento asociado está a punto de ser impreso o previsualizado para imprimir.
-
-
- {{event("beforeunload")}}
- {{domxref("BeforeUnloadEvent")}}
- HTML5
-
-
-
- {{event("beginEvent")}}
- {{domxref("TimeEvent")}}
- SVG
- Inicia un elemento de animación SMIL .
-
-
- blocked
-
- IndexedDB
- Una conexión abierta en la base de datos está bloqueando una transacción versionchange
en la misma base de datos.
-
-
- {{event("blur")}}
-
-
- {{domxref("FocusEvent")}}
-
-
-
-
- DOM L3
-
-
- Un elemento ha perdido el foco (does not bubble).
-
-
- {{event("cached")}}
- {{domxref("Event")}}
- Offline
- Los recursosn que aparecen en el manifiesto se han descargado, y la aplicación está ahora almacenada en caché.
-
-
- {{event("canplay")}}
- {{domxref("Event")}}
- HTML5 media
- La aplicación del usuario puede reproducir los medios, pero se estima que no hay datos suficientes, han sido cargados para reproducir el medio hasta el final sin tener que parar para una mayor amortiguación del contenido.
-
-
- {{event("canplaythrough")}}
- {{domxref("Event")}}
- HTML5 media
- La aplicación de usuario puede reproducir los medios, y se estima que hay datos suficientes, han sido cargados para reproducir el medio hasta el final sin tener que parar para una mayor amortiguación del contenido
-
-
- {{event("change")}}
- {{domxref("Event")}}
- DOM L2 , HTML5
- Un elemento perdió el foco y su valor cambio desde que obtuvo el foco.
-
-
- {{event("chargingchange")}}
- {{domxref("Event")}}
- Battery status
- La batería inició o dejo de cargar
-
-
- {{event("chargingtimechange")}}
- {{domxref("Event")}}
- Battery status
- El atributo chargingTime
se ha actualizado.
-
-
- {{event("checking")}}
- {{domxref("Event")}}
- Offline
- La aplicación de usuario está comprobando una actualización o intenta descargar el manifiesto de caché por primera vez.
-
-
- {{event("click")}}
- {{domxref("MouseEvent")}}
- DOM L3
- Un botón en el dispositivo señalador se ha pulsado y soltado en un elemento.
-
-
- close
- {{domxref("Event")}}
- WebSocket
- Una conexión WeSocket se ha cerrado.
-
-
- {{event("compassneedscalibration")}}
- {{domxref("SensorEvent")}}
- Orientation
- La brujula usada para obtener los datos de la orientación en que está necesita calibración.
-
-
- complete
-
- IndexedDB
-
-
-
- {{event("complete")}}
- {{domxref("OfflineAudioCompletionEvent")}}
- {{SpecName('Web Audio API', '#OfflineAudioCompletionEvent-section', 'OfflineAudioCompletionEvent')}}
- El renderizado de un {{domxref("OfflineAudioContext")}} finaliza.
-
-
- {{event("compositionend")}} {{gecko_minversion_inline("9")}}
- {{domxref("CompositionEvent")}}
- DOM L3
- La composición de un pasaje de texto se ha completado o cancelado.
-
-
- {{event("compositionstart")}} {{gecko_minversion_inline("9")}}
- {{domxref("CompositionEvent")}}
- DOM L3
- La composición de un pasaje de un texto está preparado (similar a KeyDown para una entrada de teclado, sino que trabaja con otros insumos, como el reconocimiento de voz ) .
-
-
- {{event("compositionupdate")}} {{gecko_minversion_inline("9")}}
- {{domxref("CompositionEvent")}}
- DOM L3
- Un carácter se añade a un pasaje de texto que está siendo compuesto .
-
-
- {{event("contextmenu")}}
- {{domxref("MouseEvent")}}
- HTML5
- Se hace clic en el botón derecho del ratón ( antes de que aparezca el menú contextual) .
-
-
- {{event("copy")}}
- {{domxref("ClipboardEvent")}}
- Clipboard
- El texto seleccionado se ha agregado al porta papeles.
-
-
- {{event("cut")}}
- {{domxref("ClipboardEvent")}}
- Clipboard
- El texto seleccionado ha sido borrado del documento y agregado al portapapeles.
-
-
- {{event("dblclick")}}
- {{domxref("MouseEvent")}}
- DOM L3
- Un botón del dispositivo señalador hace click dos veces en un elemento.
-
-
- {{event("devicelight")}}
- {{domxref("DeviceLightEvent")}}
- Ambient Light Events
- Datos nuevos están disponibles desde un sensor de luz.
-
-
- {{event("devicemotion")}}
- {{domxref("DeviceMotionEvent")}}
- Device Orientation Events
- Datos nuevos están disponibles desde un sesor de movimiento.
-
-
- {{event("deviceorientation")}}
- {{domxref("DeviceOrientationEvent")}}
- Device Orientation Events
- Datos nuevos están disponibles desde un sensor de orientación.
-
-
- {{event("deviceproximity")}}
- {{domxref("DeviceProximityEvent")}}
- Proximity Events
- Datos nuevos están disponibles desde un sensor de proximidad (indica una distancia aproximada entre el dispositivo y un objeto cercano ).
-
-
- {{event("dischargingtimechange")}}
- {{domxref("Event")}}
- Battery status
- El atributo dischargingTime
se ha actualizado.
-
-
- DOMActivate
{{deprecated_inline}}
- {{domxref("UIEvent")}}
- DOM L3
- Un botón, enlace o elemento de estado cambiante esta activado (usa {{event("click")}} en su lugar).
-
-
- DOMAttributeNameChanged
{{deprecated_inline}}
- {{domxref("MutationNameEvent")}}
- DOM L3 Removed
- El nombre de un atributo cambiado (usa mutation observers en su lugar).
-
-
- DOMAttrModified
{{deprecated_inline}}
- {{domxref("MutationEvent")}}
- DOM L3
- El valor de un atributo ha sido cambiado (usa mutation observers en su lugar).
-
-
- DOMCharacterDataModified
{{deprecated_inline}}
- {{domxref("MutationEvent")}}
- DOM L3
- Un texto u otro CharacterData ha sido cambiado (usa mutation observers en su lugar).
-
-
- {{event("DOMContentLoaded")}}
- {{domxref("Event")}}
- HTML5
- El documento ha terminado de cargar (pero no sus recursos dependientes ) .
-
-
- DOMElementNameChanged
{{deprecated_inline}}
- {{domxref("MutationNameEvent")}}
- DOM L3 Removed
- El nombre de un elemento dependiente (usa mutation observers en su lugar).
-
-
- DOMFocusIn
{{deprecated_inline}}
- {{domxref("FocusEvent")}}
- DOM L3
- Un elemento ha recibido el foco (usa {{event("focus")}} o {{event("focusin")}} en su lugar).
-
-
- DOMFocusOut
{{deprecated_inline}}
- {{domxref("FocusEvent")}}
- DOM L3
- Un elemento ha perdido el foco (usa {{event("blur")}} o {{event("focusout")}} en su lugar).
-
-
- DOMNodeInserted
{{deprecated_inline}}
- {{domxref("MutationEvent")}}
- DOM L3
- Un nodo ha sido añadido como un hijo de otro nodo (usa mutation observers en su lugar).
-
-
- DOMNodeInsertedIntoDocument
{{deprecated_inline}}
- {{domxref("MutationEvent")}}
- DOM L3
- Un nodo ha sido insertado en el documento (usa mutation observers en su lugar).
-
-
- DOMNodeRemoved
{{deprecated_inline}}
- {{domxref("MutationEvent")}}
- DOM L3
- Un nodo ha sido eliminado de su nodo padre A node has been removed from its parent node (usa mutation observers en su lugar).
-
-
- DOMNodeRemovedFromDocument
{{deprecated_inline}}
- {{domxref("MutationEvent")}}
- DOM L3
- Un nodo ha sido eliminado del documento (usa mutation observers en su lugar).
-
-
- DOMSubtreeModified
{{deprecated_inline}}
- {{domxref("MutationEvent")}}
- DOM L3
- Ocurrio un cambio en el documento (usa mutation observers en su lugar).
-
-
- {{event("downloading")}}
- {{domxref("Event")}}
- Offline
- La aplicación de usuario ha encontrado una actualización y está buscando o descargando los recursos enumerados en el caché del manifiesto por primera vez.
-
-
- {{event("drag")}}
- {{domxref("DragEvent")}}
- HTML5
- Un elemento o texto seleccionato está siendo arrastrado (cada 35ms).
-
-
- {{event("dragend")}}
- {{domxref("DragEvent")}}
- HTML5
- Una operación de arrastre ha finalizado ( al pulsar un botón del ratón o pulsando la tecla escape) .
-
-
- {{event("dragenter")}}
- {{domxref("DragEvent")}}
- HTML5
- Un elemento arrastrado o un texto seleccionado entró en un destino válido.
-
-
- {{event("dragleave")}}
- {{domxref("DragEvent")}}
- HTML5
- Un elemento arrastrado o un texto seleccionado salió de un destino válido.
-
-
- {{event("dragover")}}
- {{domxref("DragEvent")}}
- HTML5
- Un elemento o texto seleccionado es arrastrado encima de un destino válido (cada 50ms).
-
-
- {{event("dragstart")}}
- {{domxref("DragEvent")}}
- HTML5
- El usuario empezó a arrastrar un elemento o un texto seleccionado.
-
-
- {{event("drop")}}
- {{domxref("DragEvent")}}
- HTML5
- Un elemento es soltado en un destino válido.
-
-
- {{event("durationchange")}}
- {{domxref("Event")}}
- HTML5 media
- El atributo duration
se ha actualizado.
-
-
- {{event("emptied")}}
- {{domxref("Event")}}
- HTML5 media
- Los medios de comunicación se ha convertido en vacío , por ejemplo , este evento se envía si los medios de comunicación ya se ha cargado (o parcialmente cargado) , y el método load()
es llamado para volver a cargarlo.
-
-
- {{event("ended")}}
- {{domxref("Event")}}
- HTML5 media
- La reproducción se ha detenido porque se ha alcanzado el final de los medios de comunicación.
-
-
- {{event("ended_(Web_Audio)", "ended")}}
- {{domxref("Event")}}
- {{SpecName("Web Audio API")}}
-
-
-
- {{event("endEvent")}}
- {{domxref("TimeEvent")}}
- SVG
- Un elento de animación SMIL termina.
-
-
- {{event("error")}}
- {{domxref("UIEvent")}}
- DOM L3
- Un recurso no se pudo cargar.
-
-
- {{event("error")}}
- {{domxref("ProgressEvent")}}
- Progress and XMLHttpRequest
- La progresión a fallado.
-
-
-
- {{event("error")}}
- {{domxref("Event")}}
- Offline
- Se ha producido un error al descargar el manifiesto de caché o actualizar el contenido de la aplicación.
-
-
- {{event("error")}}
- {{domxref("Event")}}
- WebSocket
- A WebSocket connection has been closed with prejudice (some data couldn't be sent for example).
-
-
- {{event("error")}}
- {{domxref("Event")}}
- Server Sent Events
- An event source connection has been failed.
-
-
- {{event("error")}}
- {{domxref("Event")}}
- IndexedDB
- A request caused an error and failed.
-
-
- {{event("focus")}}
- {{domxref("FocusEvent")}}
- DOM L3
- An element has received focus (does not bubble).
-
-
- {{event("focusin")}}
- {{domxref("FocusEvent")}}
- DOM L3
- An element is about to receive focus (bubbles).
-
-
- {{event("focusout")}}
- {{domxref("FocusEvent")}}
- DOM L3
- An element is about to lose focus (bubbles).
-
-
- {{event("fullscreenchange")}}
- {{domxref("Event")}}
- Full Screen
- An element was turned to fullscreen mode or back to normal mode.
-
-
- {{event("fullscreenerror")}}
- {{domxref("Event")}}
- Full Screen
- It was impossible to switch to fullscreen mode for technical reasons or because the permission was denied.
-
-
- {{event("gamepadconnected")}}
- {{domxref("GamepadEvent")}}
- Gamepad
- A gamepad has been connected.
-
-
- {{event("gamepaddisconnected")}}
- {{domxref("GamepadEvent")}}
- Gamepad
- A gamepad has been disconnected.
-
-
- {{event("hashchange")}}
- {{domxref("HashChangeEvent")}}
- HTML5
- The fragment identifier of the URL has changed (the part of the URL after the #).
-
-
- {{event("input")}}
- {{domxref("Event")}}
- HTML5
- The value of an element changes or the content of an element with the attribute contenteditable is modified.
-
-
- {{event("invalid")}}
- {{domxref("Event")}}
- HTML5
- A submittable element has been checked and doesn't satisfy its constraints.
-
-
- {{event("keydown")}}
- {{domxref("KeyboardEvent")}}
- DOM L3
- A key is pressed down.
-
-
- {{event("keypress")}}
- {{domxref("KeyboardEvent")}}
- DOM L3
- A key is pressed down and that key normally produces a character value (use input instead).
-
-
- {{event("keyup")}}
- {{domxref("KeyboardEvent")}}
- DOM L3
- A key is released.
-
-
- {{event("levelchange")}}
- {{domxref("Event")}}
- Battery status
- The level
attribute has been updated.
-
-
- {{event("load")}}
- {{domxref("UIEvent")}}
- DOM L3
- A resource and its dependent resources have finished loading.
-
-
- load
- {{domxref("ProgressEvent")}}
- Progress and XMLHttpRequest
- Progression has been successful.
-
-
- {{event("loadeddata")}}
- {{domxref("Event")}}
- HTML5 media
- The first frame of the media has finished loading.
-
-
- {{event("loadedmetadata")}}
- {{domxref("Event")}}
- HTML5 media
- The metadata has been loaded.
-
-
- {{event("loadend")}}
- {{domxref("ProgressEvent")}}
- Progress and XMLHttpRequest
- Progress has stopped (after "error", "abort" or "load" have been dispatched).
-
-
- {{event("loadstart")}}
- {{domxref("ProgressEvent")}}
- Progress and XMLHttpRequest
- Progress has begun.
-
-
- message
- {{domxref("MessageEvent")}}
- WebSocket
- A message is received through a WebSocket.
-
-
- message
- {{domxref("MessageEvent")}}
- Web Workers
- A message is received from a Web Worker.
-
-
- message
- {{domxref("MessageEvent")}}
- Web Messaging
- A message is received from a child (i)frame or a parent window.
-
-
- message
- {{domxref("MessageEvent")}}
- Server Sent Events
- A message is received through an event source.
-
-
- {{event("mousedown")}}
- {{domxref("MouseEvent")}}
- DOM L3
- A pointing device button (usually a mouse) is pressed on an element.
-
-
- {{event("mouseenter")}}
- {{domxref("MouseEvent")}}
- DOM L3
- A pointing device is moved onto the element that has the listener attached.
-
-
- {{event("mouseleave")}}
- {{domxref("MouseEvent")}}
- DOM L3
- A pointing device is moved off the element that has the listener attached.
-
-
- {{event("mousemove")}}
- {{domxref("MouseEvent")}}
- DOM L3
- A pointing device is moved over an element.
-
-
- {{event("mouseout")}}
- {{domxref("MouseEvent")}}
- DOM L3
- A pointing device is moved off the element that has the listener attached or off one of its children.
-
-
- {{event("mouseover")}}
- {{domxref("MouseEvent")}}
- DOM L3
- A pointing device is moved onto the element that has the listener attached or onto one of its children.
-
-
- {{event("mouseup")}}
- {{domxref("MouseEvent")}}
- DOM L3
- A pointing device button is released over an element.
-
-
- {{event("noupdate")}}
- {{domxref("Event")}}
- Offline
- The manifest hadn't changed.
-
-
- {{event("obsolete")}}
- {{domxref("Event")}}
- Offline
- The manifest was found to have become a 404 or 410 page, so the application cache is being deleted.
-
-
- {{event("offline")}}
- {{domxref("Event")}}
- HTML5 offline
- The browser has lost access to the network.
-
-
- {{event("online")}}
- {{domxref("Event")}}
- HTML5 offline
- The browser has gained access to the network (but particular websites might be unreachable).
-
-
- open
- {{domxref("Event")}}
- WebSocket
- A WebSocket connection has been established.
-
-
- open
- {{domxref("Event")}}
- Server Sent Events
- An event source connection has been established.
-
-
- {{event("orientationchange")}}
- {{domxref("Event")}}
- Screen Orientation
- The orientation of the device (portrait/landscape) has changed
-
-
- {{event("pagehide")}}
- {{domxref("PageTransitionEvent")}}
- HTML5
- A session history entry is being traversed from.
-
-
- {{event("pageshow")}}
- {{domxref("PageTransitionEvent")}}
- HTML5
- A session history entry is being traversed to.
-
-
- {{event("paste")}}
- {{domxref("ClipboardEvent")}}
- Clipboard
- Data has been transfered from the system clipboard to the document.
-
-
- {{event("pause")}}
- {{domxref("Event")}}
- HTML5 media
- Playback has been paused.
-
-
- {{event("pointerlockchange")}}
- {{domxref("Event")}}
- Pointer Lock
- The pointer was locked or released.
-
-
- {{event("pointerlockerror")}}
- {{domxref("Event")}}
- Pointer Lock
- It was impossible to lock the pointer for technical reasons or because the permission was denied.
-
-
- {{event("play")}}
- {{domxref("Event")}}
- HTML5 media
- Playback has begun.
-
-
- {{event("playing")}}
- {{domxref("Event")}}
- HTML5 media
- Playback is ready to start after having been paused or delayed due to lack of data.
-
-
- {{event("popstate")}}
- {{domxref("PopStateEvent")}}
- HTML5
- A session history entry is being navigated to (in certain cases).
-
-
- {{event("progress")}}
- {{domxref("ProgressEvent")}}
- Progress and XMLHttpRequest
- In progress.
-
-
- progress
- {{domxref("ProgressEvent")}}
- Offline
- The user agent is downloading resources listed by the manifest.
-
-
- {{event("ratechange")}}
- {{domxref("Event")}}
- HTML5 media
- The playback rate has changed.
-
-
- {{event("readystatechange")}}
- {{domxref("Event")}}
- HTML5 and XMLHttpRequest
- The readyState attribute of a document has changed.
-
-
- {{event("repeatEvent")}}
- {{domxref("TimeEvent")}}
- SVG
- A SMIL animation element is repeated.
-
-
- {{event("reset")}}
- {{domxref("Event")}}
- DOM L2 , HTML5
- A form is reset.
-
-
- {{event("resize")}}
- {{domxref("UIEvent")}}
- DOM L3
- The document view has been resized.
-
-
- {{event("scroll")}}
- {{domxref("UIEvent")}}
- DOM L3
- The document view or an element has been scrolled.
-
-
- {{event("seeked")}}
- {{domxref("Event")}}
- HTML5 media
- A seek operation completed.
-
-
- {{event("seeking")}}
- {{domxref("Event")}}
- HTML5 media
- A seek operation began.
-
-
- {{event("select")}}
- {{domxref("UIEvent")}}
- DOM L3
- Some text is being selected.
-
-
- {{event("show")}}
- {{domxref("MouseEvent")}}
- HTML5
- A contextmenu event was fired on/bubbled to an element that has a contextmenu attribute
-
-
- {{event("stalled")}}
- {{domxref("Event")}}
- HTML5 media
- The user agent is trying to fetch media data, but data is unexpectedly not forthcoming.
-
-
- {{event("storage")}}
- {{domxref("StorageEvent")}}
- Web Storage
- A storage area (localStorage or sessionStorage ) has changed.
-
-
- {{event("submit")}}
- {{domxref("Event")}}
- DOM L2 , HTML5
- A form is submitted.
-
-
- success
- {{domxref("Event")}}
- IndexedDB
- A request successfully completed.
-
-
- {{event("suspend")}}
- {{domxref("Event")}}
- HTML5 media
- Media data loading has been suspended.
-
-
- {{event("SVGAbort")}}
- {{domxref("SVGEvent")}}
- SVG
- Page loading has been stopped before the SVG was loaded.
-
-
- {{event("SVGError")}}
- {{domxref("SVGEvent")}}
- SVG
- An error has occurred before the SVG was loaded.
-
-
- {{event("SVGLoad")}}
- {{domxref("SVGEvent")}}
- SVG
- An SVG document has been loaded and parsed.
-
-
- {{event("SVGResize")}}
- {{domxref("SVGEvent")}}
- SVG
- An SVG document is being resized.
-
-
- {{event("SVGScroll")}}
- {{domxref("SVGEvent")}}
- SVG
- An SVG document is being scrolled.
-
-
- {{event("SVGUnload")}}
- {{domxref("SVGEvent")}}
- SVG
- An SVG document has been removed from a window or frame.
-
-
- {{event("SVGZoom")}}
- {{domxref("SVGZoomEvent")}}
- SVG
- An SVG document is being zoomed.
-
-
- {{event("timeout")}}
- {{domxref("ProgressEvent")}}
- XMLHttpRequest
-
-
-
- {{event("timeupdate")}}
- {{domxref("Event")}}
- HTML5 media
- The time indicated by the currentTime
attribute has been updated.
-
-
- {{event("touchcancel")}}
- {{domxref("TouchEvent")}}
- Touch Events
- A touch point has been disrupted in an implementation-specific manners (too many touch points for example).
-
-
- {{event("touchend")}}
- {{domxref("TouchEvent")}}
- Touch Events
- A touch point is removed from the touch surface.
-
-
- {{event("touchenter")}}
- {{domxref("TouchEvent")}}
- Touch Events Removed
- A touch point is moved onto the interactive area of an element.
-
-
- {{event("touchleave")}}
- {{domxref("TouchEvent")}}
- Touch Events Removed
- A touch point is moved off the interactive area of an element.
-
-
- {{event("touchmove")}}
- {{domxref("TouchEvent")}}
- Touch Events
- A touch point is moved along the touch surface.
-
-
- {{event("touchstart")}}
- {{domxref("TouchEvent")}}
- Touch Events
- A touch point is placed on the touch surface.
-
-
- {{event("transitionend")}}
- {{domxref("TransitionEvent")}}
- CSS Transitions
- A CSS transition has completed.
-
-
- {{event("unload")}}
- {{domxref("UIEvent")}}
- DOM L3
- The document or a dependent resource is being unloaded.
-
-
- {{event("updateready")}}
- {{domxref("Event")}}
- Offline
- The resources listed in the manifest have been newly redownloaded, and the script can use swapCache()
to switch to the new cache.
-
-
- upgradeneeded
-
- IndexedDB
- An attempt was made to open a database with a version number higher than its current version. A versionchange
transaction has been created.
-
-
- {{event("userproximity")}}
- {{domxref("SensorEvent")}}
- Sensor
- Fresh data is available from a proximity sensor (indicates whether the nearby object is near
the device or not).
-
-
- versionchange
-
- IndexedDB
- A versionchange
transaction completed.
-
-
- {{event("visibilitychange")}}
- {{domxref("Event")}}
- Page visibility
- The content of a tab has become visible or has been hidden.
-
-
- {{event("volumechange")}}
- {{domxref("Event")}}
- HTML5 media
- The volume has changed.
-
-
- {{event("waiting")}}
- {{domxref("Event")}}
- HTML5 media
- Playback has stopped because of a temporary lack of data.
-
-
- {{event("wheel")}} {{gecko_minversion_inline("17")}}
- {{domxref("WheelEvent")}}
- DOM L3
- A wheel button of a pointing device is rotated in any direction.
-
-
-
-
-Eventos no estándar
-
-
-
-
-
-
-
-
-
-
- {{event("afterscriptexecute")}}
- {{domxref("Event")}}
- Mozilla Specific
- A script has been executed.
-
-
- {{event("beforescriptexecute")}}
- {{domxref("Event")}}
- Mozilla Specific
- A script is about to be executed.
-
-
- {{event("cardstatechange")}}
-
- Firefox OS specific
- The {{domxref("MozMobileConnection.cardState")}} property changes value.
-
-
- {{event("change")}}
- {{domxref("DeviceStorageChangeEvent")}}
- Firefox OS specific
- This event is triggered each time a file is created, modified or deleted on a given storage area.
-
-
- {{event("connectionInfoUpdate")}}
-
- Firefox OS specific
- The informations about the signal strength and the link speed have been updated.
-
-
- {{event("cfstatechange")}}
-
- Firefox OS specific
- The call forwarding state changes.
-
-
- {{event("datachange")}}
-
- Firefox OS specific
- The {{domxref("MozMobileConnection.data")}} object changes values.
-
-
- {{event("dataerror")}}
-
- Firefox OS specific
- The {{domxref("MozMobileConnection.data")}} object receive an error from the RIL .
-
-
- {{event("DOMMouseScroll")}} {{deprecated_inline}}
-
- Mozilla specific
- The wheel button of a pointing device is rotated (detail attribute is a number of lines). (use {{event("wheel")}} instead)
-
-
- dragdrop
{{deprecated_inline}}
- DragEvent
- Mozilla specific
- An element is dropped (use {{event("drop")}} instead).
-
-
- dragexit
{{deprecated_inline}}
- DragEvent
- Mozilla specific
- A drag operation is being ended(use {{event("dragend")}} instead).
-
-
- draggesture
{{deprecated_inline}}
- DragEvent
- Mozilla specific
- The user starts dragging an element or text selection (use {{event("dragstart")}} instead).
-
-
- {{event("icccardlockerror")}}
-
- Firefox OS specific
- the {{domxref("MozMobileConnection.unlockCardLock()")}} or {{domxref("MozMobileConnection.setCardLock()")}} methods fails.
-
-
- {{event("iccinfochange")}}
-
- Firefox OS specific
- The {{domxref("MozMobileConnection.iccInfo")}} object changes.
-
-
- {{event("localized")}}
-
- Mozilla Specific
- The page has been localized using data-l10n-* attributes.
-
-
- {{event("mousewheel")}} {{deprecated_inline}}
-
- IE invented
- The wheel button of a pointing device is rotated.
-
-
- {{event("MozAudioAvailable")}}
- {{domxref("Event")}}
- Mozilla specific
- The audio buffer is full and the corresponding raw samples are available.
-
-
- {{event("mozbrowserclose")}}
-
- Firefox OS specific
- Sent when window.close() is called within a browser iframe.
-
-
- {{event("mozbrowsercontextmenu")}}
-
- Firefox OS specific
- Sent when a browser {{HTMLElement("iframe")}} try to open a context menu.
-
-
- {{event("mozbrowsererror")}}
-
- Firefox OS specific
- Sent when an error occured while trying to load a content within a browser iframe
-
-
- {{event("mozbrowsericonchange")}}
-
- Firefox OS specific
- Sent when the favicon of a browser iframe changes.
-
-
- {{event("mozbrowserlocationchange")}}
-
- Firefox OS specific
- Sent when an browser iframe's location changes.
-
-
- {{event("mozbrowserloadend")}}
-
- Firefox OS specific
- Sent when the browser iframe has finished loading all its assets.
-
-
- {{event("mozbrowserloadstart")}}
-
- Firefox OS specific
- Sent when the browser iframe starts to load a new page.
-
-
- {{event("mozbrowseropenwindow")}}
-
- Firefox OS specific
- Sent when {{domxref("window.open()")}} is called within a browser iframe.
-
-
- {{event("mozbrowsersecuritychange")}}
-
- Firefox OS specific
- Sent when the SSL state changes within a browser iframe.
-
-
- {{event("mozbrowsershowmodalprompt")}}
-
- Firefox OS specific
- Sent when {{domxref("window.alert","alert()")}}, {{domxref("window.confirm","confirm()")}} or {{domxref("window.prompt","prompt()")}} are called within a browser iframe
-
-
- {{event("mozbrowsertitlechange")}}
-
- Firefox OS specific
- Sent when the document.title changes within a browser iframe.
-
-
- {{event("MozGamepadButtonDown")}}
-
- To be specified
- A gamepad button is pressed down.
-
-
- {{event("MozGamepadButtonUp")}}
-
- To be specified
- A gamepad button is released.
-
-
- {{event("MozMousePixelScroll")}} {{deprecated_inline}}
-
- Mozilla specific
- The wheel button of a pointing device is rotated (detail attribute is a number of pixels). (use wheel instead)
-
-
- {{event("MozOrientation")}} {{deprecated_inline}}
-
- Mozilla specific
- Fresh data is available from an orientation sensor (see deviceorientation).
-
-
- {{event("MozScrolledAreaChanged")}}
- {{domxref("UIEvent")}}
- Mozilla specific
- The document view has been scrolled or resized.
-
-
- {{event("moztimechange")}}
-
- Mozilla specific
- The time of the device has been changed.
-
-
- MozTouchDown {{deprecated_inline}}
-
- Mozilla specific
- A touch point is placed on the touch surface (use touchstart instead).
-
-
- MozTouchMove {{deprecated_inline}}
-
- Mozilla specific
- A touch point is moved along the touch surface (use touchmove instead).
-
-
- MozTouchUp {{deprecated_inline}}
-
- Mozilla specific
- A touch point is removed from the touch surface (use touchend instead).
-
-
- {{event("alerting")}}
- {{domxref("CallEvent")}}
- To be specified
- The correspondent is being alerted (his/her phone is ringing).
-
-
- {{event("busy")}}
- {{domxref("CallEvent")}}
- To be specified
- The line of the correspondent is busy.
-
-
- {{event("callschanged")}}
- {{domxref("CallEvent")}}
- To be specified
- A call has been added or removed from the list of current calls.
-
-
- onconnected {{event("connected")}}
- {{domxref("CallEvent")}}
- To be specified
- A call has been connected.
-
-
- {{event("connecting")}}
- {{domxref("CallEvent")}}
- To be specified
- A call is about to connect.
-
-
- {{event("delivered")}}
- {{domxref("SMSEvent")}}
- To be specified
- An SMS has been successfully delivered.
-
-
- {{event("dialing")}}
- {{domxref("CallEvent")}}
- To be specified
- The number of a correspondent has been dialed.
-
-
- {{event("disabled")}}
-
- Firefox OS specific
- Wifi has been disabled on the device.
-
-
- {{event("disconnected")}}
- {{domxref("CallEvent")}}
- To be specified
- A call has been disconnected.
-
-
- {{event("disconnecting")}}
- {{domxref("CallEvent")}}
- To be specified
- A call is about to disconnect.
-
-
- {{event("enabled")}}
-
- Firefox OS specific
- Wifi has been enabled on the device.
-
-
- {{event("error_(Telephony)","error")}}
- {{domxref("CallEvent")}}
- To be specified
- An error occurred.
-
-
- {{event("held")}}
- {{domxref("CallEvent")}}
- To be specified
- A call has been held.
-
-
- {{event("holding")}}
- {{domxref("CallEvent")}}
- To be specified
- A call is about to be held.
-
-
- {{event("incoming")}}
- {{domxref("CallEvent")}}
- To be specified
- A call is being received.
-
-
- {{event("received")}}
- {{domxref("SMSEvent")}}
- To be specified
- An SMS has been received.
-
-
- {{event("resuming")}}
- {{domxref("CallEvent")}}
- To be specified
- A call is about to resume.
-
-
- {{event("sent")}}
- {{domxref("SMSEvent")}}
- To be specified
- An SMS has been sent.
-
-
- {{event("statechange")}}
- {{domxref("CallEvent")}}
- To be specified
- The state of a call has changed.
-
-
- {{event("statuschange")}}
-
- Firefox OS specific
- The status of the Wifi connection changed.
-
-
- {{event("overflow")}}
- {{domxref("UIEvent")}}
- Mozilla specific
- An element has been overflowed by its content or has been rendered for the first time in this state (only works for elements styled with overflow
!= visible
).
-
-
- {{event("smartcard-insert")}}
-
- Mozilla specific
- A smartcard has been inserted.
-
-
- {{event("smartcard-remove")}}
-
- Mozilla specific
- A smartcard has been removed.
-
-
- {{event("stkcommand")}}
-
- Firefox OS specific
- The STK Proactive Command is issued from ICC .
-
-
- {{event("stksessionend")}}
-
- Firefox OS specific
- The STK Session is terminated by ICC .
-
-
- text
-
- Mozilla Specific
- A generic composition event occurred.
-
-
- {{event("underflow")}}"
- {{domxref("UIEvent")}}
- Mozilla specific
- An element is no longer overflowed by its content (only works for elements styled with overflow
!= visible
).
-
-
- uploadprogress
{{deprecated_inline}}
- {{domxref("ProgressEvent")}}
- Mozilla Specific
- Upload is in progress (see {{event("progress")}}).
-
-
- {{event("ussdreceived")}}
-
- Firefox OS specific
- A new USSD message is received
-
-
- {{event("voicechange")}}
-
- Firefox OS specific
- The {{domxref("MozMobileConnection.voice")}} object changes values.
-
-
-
-
-Eventos específicos de Mozilla
-
-
-
Nota : los eventos nunca están expuestos a contenidos web y sólo se pueden utilizar en el contexto de contenido de chrome .
-
-
-Eventos XUL
-
-
-
-
-
-
-
-
-
-
- {{event("broadcast")}}
-
- XUL
- An observer
noticed a change to the attributes of a watched broadcaster.
-
-
- {{event("CheckboxStateChange")}}
-
- XUL
- The state of a checkbox
has been changed either by a user action or by a script (useful for accessibility).
-
-
- close
-
- XUL
- The close button of the window has been clicked.
-
-
- {{event("command")}}
-
- XUL
- An element has been activated.
-
-
- {{event("commandupdate")}}
-
- XUL
- A command update occurred on a commandset
element.
-
-
- {{event("DOMMenuItemActive")}}
-
- XUL
- A menu or menuitem has been hovered or highlighted.
-
-
- {{event("DOMMenuItemInactive")}}
-
- XUL
- A menu or menuitem is no longer hovered or highlighted.
-
-
- {{event("popuphidden")}}
- PopupEvent
- XUL
- A menupopup, panel or tooltip has been hidden.
-
-
- {{event("popuphiding")}}
- PopupEvent
- XUL
- A menupopup, panel or tooltip is about to be hidden.
-
-
- {{event("popupshowing")}}
- PopupEvent
- XUL
- A menupopup, panel or tooltip is about to become visible.
-
-
- {{event("popupshown")}}
- PopupEvent
- XUL
- A menupopup, panel or tooltip has become visible.
-
-
- {{event("RadioStateChange")}}
-
- XUL
- The state of a radio
has been changed either by a user action or by a script (useful for accessibility).
-
-
- {{event("ValueChange")}}
-
- XUL
- The value of an element has changed (a progress bar for example, useful for accessibility).
-
-
-
-
-Eventos específicos de complementos
-
-
-
-
-
-
-
-
-
-
- MozSwipeGesture
-
- Addons specific
- A touch point is swiped across the touch surface
-
-
- MozMagnifyGestureStart
-
- Addons specific
- Two touch points start to move away from each other.
-
-
- MozMagnifyGestureUpdate
-
- Addons specific
- Two touch points move away from each other (after a MozMagnifyGestureStart).
-
-
- MozMagnifyGesture
-
- Addons specific
- Two touch points moved away from each other (after a sequence of MozMagnifyGestureUpdate).
-
-
- MozRotateGestureStart
-
- Addons specific
- Two touch points start to rotate around a point.
-
-
- MozRotateGestureUpdate
-
- Addons specific
- Two touch points rotate around a point (after a MozRotateGestureStart).
-
-
- MozRotateGesture
-
- Addons specific
- Two touch points rotate around a point (after a sequence of MozRotateGestureUpdate).
-
-
- MozTapGesture
-
- Addons specific
- Two touch points are tapped on the touch surface.
-
-
- MozPressTapGesture
-
- Addons specific
- A "press-tap" gesture happened on the touch surface (first finger down, second finger down, second finger up, first finger up).
-
-
- MozEdgeUIGesture
-
- Addons specific
- A touch point is swiped across the touch surface to invoke the edge UI (Win8 only).
-
-
- MozAfterPaint
-
- Addons specific
- Content has been repainted.
-
-
- MozBeforeResize
-
- Addons specific
- A window is about to be resized.
-
-
- DOMPopupBlocked
-
- Addons specific
- A popup has been blocked
-
-
- DOMWindowCreated
-
- Addons specific
- A window has been created.
-
-
- DOMWindowClose
-
- Addons specific
- A window is about to be closed.
-
-
- DOMTitleChanged
-
- Addons specifc
- The title of a window has changed.
-
-
- DOMLinkAdded
-
- Addons specifc
- A link has been added a document.
-
-
- DOMLinkRemoved
-
- Addons specifc
- A link has been removed inside from a document.
-
-
- DOMMetaAdded
-
- Addons specific
- A meta
element has been added to a document.
-
-
- DOMMetaRemoved
-
- Addons specific
- A meta
element has been removed from a document.
-
-
- DOMWillOpenModalDialog
-
- Addons specific
- A modal dialog is about to open.
-
-
- DOMModalDialogClosed
-
- Addons specific
- A modal dialog has been closed.
-
-
- DOMAutoComplete
-
- Addons specific
- The content of an element has been auto-completed.
-
-
- DOMFrameContentLoaded
-
- Addons specific
- The frame has finished loading (but not its dependent resources).
-
-
- AlertActive
-
- Addons specific
- A notification
element is shown.
-
-
- AlertClose
-
- Addons specific
- A notification
element is closed.
-
-
- fullscreen
-
- Addons specific
- Browser fullscreen mode has been entered or left.
-
-
- sizemodechange
-
- Addons specific
- Window has entered/left fullscreen mode, or has been minimized/unminimized.
-
-
- MozEnteredDomFullscreen
-
- Addons specific
- DOM fullscreen mode has been entered.
-
-
- SSWindowClosing
-
- Addons specific
- The session store will stop tracking this window.
-
-
- SSTabClosing
-
- Addons specific
- The session store will stop tracking this tab.
-
-
- SSTabRestoring
-
- Addons specific
- A tab is about to be restored.
-
-
- SSTabRestored
-
- Addons specific
- A tab has been restored.
-
-
- SSWindowStateReady
-
- Addons specific
- A window state has switched to "ready".
-
-
- SSWindowStateBusy
-
- Addons specific
- A window state has switched to "busy".
-
-
- tabviewsearchenabled
-
- Addons specific
- The search feature of Panorama has been activated
-
-
- tabviewsearchdisabled
-
- Addons specific
- The search feature of Panorama has been deactivated
-
-
- tabviewframeinitialized
-
- Addons specific
- The frame container of Panorama has been initialized
-
-
- tabviewshown
-
- Addons specific
- The Panorama tab has been shown
-
-
- tabviewhidden
-
- Addons specific
- The Panorama tab has been hidden
-
-
- TabOpen
-
- Addons specific
- A tab has been opened.
-
-
- TabClose
-
- Addons specific
- A tab has been closed.
-
-
- TabSelect
-
- Addons specific
- A tab has been selected.
-
-
- TabShow
-
- Addons specific
- A tab has been shown.
-
-
- TabHide
-
- Addons specific
- A tab has been hidden.
-
-
- TabPinned
-
- Addons specific
- A tab has been pinned.
-
-
- TabUnpinned
-
- Addons specific
- A tab has been unpinned.
-
-
-
-
-Eventos específicos de la herramienta para desarrolladores
-
-
-
-
-
-
-
-
-
-
- CssRuleViewRefreshed
-
- devtools specific
- The "Rules" view of the style inspector has been updated.
-
-
- CssRuleViewChanged
-
- devtools specific
- The "Rules" view of the style inspector has been changed.
-
-
- CssRuleViewCSSLinkClicked
-
- devtools specific
- A link to a CSS file has been clicked in the "Rules" view of the style inspector.
-
-
-
-
-Categorías
-
-Eventos de Animación
-
-{{event("animationend")}}, {{event("animationiteration")}}, {{event("animationstart")}}, {{event("beginEvent")}}, {{event("endEvent")}}, {{event("repeatEvent")}}
-
-Eventos de Batería
-
-{{event("chargingchange")}}, {{event("chargingtimechange")}}, {{event("dischargingtimechange")}}, {{event("levelchange")}}
-
-Eventos de Llamadas
-
-{{event("alerting")}}, {{event("busy")}}, {{event("callschanged")}}, {{event("cfstatechange")}}, onconnected {{event("connected")}}, {{event("connecting")}}, {{event("dialing")}}, {{event("disconnected")}}, {{event("disconnecting")}}, {{event("error_(Telephony)","error")}}, {{event("held")}}, {{event("holding")}}, {{event("incoming")}}, {{event("resuming")}}, {{event("statechange")}}, {{event("voicechange")}}
-
-Eventos CSS
-
-CssRuleViewRefreshed , CssRuleViewChanged , CssRuleViewCSSLinkClicked , {{event("transitionend")}}
-
-Eventos de Bases de datos
-
-abort
, blocked
, complete
, {{event("error")}}, success
, upgradeneeded
, versionchange
-
-Eventos de Documento
-
-DOMLinkAdded , DOMLinkRemoved , DOMMetaAdded , DOMMetaRemoved , DOMWillOpenModalDialog , DOMModalDialogClosed , {{event("unload")}}
-
-Eventos de mutación DOM
-
-code>DOMAttributeNameChanged , DOMAttrModified
, DOMCharacterDataModified
, {{event("DOMContentLoaded")}}, DOMElementNameChanged
, DOMNodeInserted
, DOMNodeInsertedIntoDocument
, DOMNodeRemoved
, DOMNodeRemovedFromDocument
, DOMSubtreeModified
-
-Eventos de Arrastre
-
-{{event("drag")}}, dragdrop
, {{event("dragend")}}, {{event("dragenter")}}, dragexit
, draggesture
, {{event("dragleave")}}, {{event("dragover")}}, {{event("dragstart")}}, {{event("drop")}}
-
-Eventos de Elemento
-
-{{event("invalid")}}, {{event("overflow")}}, {{event("underflow")}}", DOMAutoComplete , {{event("command")}}, {{event("commandupdate")}}
-
-Eventos de Foco
-
-{{event("blur")}}, {{event("change")}}, DOMFocusIn
, DOMFocusOut
, {{event("focus")}}, {{event("focusin")}}, {{event("focusout")}}
-
-
-
-{{event("reset")}}, {{event("submit")}}
-
-Eventos de Fotograma
-
-{{event("mozbrowserclose")}}, {{event("mozbrowsercontextmenu")}}, {{event("mozbrowsererror")}}, {{event("mozbrowsericonchange")}}, {{event("mozbrowserlocationchange")}}, {{event("mozbrowserloadend")}}, {{event("mozbrowserloadstart")}}, {{event("mozbrowseropenwindow")}}, {{event("mozbrowsersecuritychange")}}, {{event("mozbrowsershowmodalprompt")}}, {{event("mozbrowsertitlechange")}}, DOMFrameContentLoaded
-
-Eventos de dispositivo de entrada
-
-{{event("click")}}, {{event("contextmenu")}}, {{event("DOMMouseScroll")}}, {{event("dblclick")}}, {{event("gamepadconnected")}}, {{event("gamepaddisconnected")}}, {{event("keydown")}}, {{event("keypress")}}, {{event("keyup")}}, {{event("MozGamepadButtonDown")}}, {{event("MozGamepadButtonUp")}}, {{event("mousedown")}}, {{event("mouseenter")}}, {{event("mouseleave")}}, {{event("mousemove")}}, {{event("mouseout")}}, {{event("mouseover")}}, {{event("mouseup")}}, {{event("mousewheel")}}, {{event("MozMousePixelScroll")}}, {{event("pointerlockchange")}}, {{event("pointerlockerror")}},{{event("wheel")}}
-
-Eventos de Medios
-
-{{event("audioprocess")}}, {{event("canplay")}}, {{event("canplaythrough")}}, {{event("durationchange")}}, {{event("emptied")}}, {{event("ended")}}, {{event("ended_(Web_Audio)", "ended")}}, {{event("loadeddata")}}, {{event("loadedmetadata")}}, {{event("MozAudioAvailable")}}, {{event("pause")}}, {{event("play")}}, {{event("playing")}}, {{event("ratechange")}}, {{event("seeked")}}, {{event("seeking")}}, {{event("stalled")}}, {{event("suspend")}}, {{event("timeupdate")}}, {{event("volumechange")}}, {{event("waiting")}}, {{event("complete")}}
-
-Eventos de Menú
-
-{{event("DOMMenuItemActive")}}, {{event("DOMMenuItemInactive")}}
-
-Eventos de Red
-
-{{event("datachange")}}, {{event("dataerror")}}, {{event("disabled")}}, {{event("enabled")}}, {{event("offline")}}, {{event("online")}}, {{event("statuschange")}}, {{event("connectionInfoUpdate")}},
-
-Eventos de Notificación
-
-AlertActive , AlertClose
-
-
-
-{{event("popuphidden")}}, {{event("popuphiding")}}, {{event("popupshowing")}}, {{event("popupshown")}}, DOMPopupBlocked
-
-Eventos de Impresión
-
-{{event("afterprint")}}, {{event("beforeprint")}}
-
-Eventos de Progreso
-
-abort
, {{event("error")}}, load
, {{event("loadend")}}, {{event("loadstart")}}, {{event("progress")}}, progress
, {{event("timeout")}}, uploadprogress
-
-Eventos de Recursos
-
-{{event("abort")}}, {{event("cached")}}, {{event("error")}}, {{event("load")}}
-
-Eventos de Secuencia de Comandos
-
-{{event("afterscriptexecute")}}, {{event("beforescriptexecute")}}
-
-Eventos de Sensor
-
-{{event("compassneedscalibration")}}, {{event("devicelight")}}, {{event("devicemotion")}}, {{event("deviceorientation")}}, {{event("deviceproximity")}}, {{event("MozOrientation")}}, {{event("orientationchange")}}, {{event("userproximity")}}
-
-Eventos del Historial de sesión
-
-{{event("pagehide")}}, {{event("pageshow")}}, {{event("popstate")}}
-
-Eventos de Tarjeta de memoria
-
-{{event("icccardlockerror")}}, {{event("iccinfochange")}}, {{event("smartcard-insert")}}, {{event("smartcard-remove")}}, {{event("stkcommand")}}, {{event("stksessionend")}}, {{event("cardstatechange")}}
-
-Eventos SMS y USSD
-
-{{event("delivered")}}, {{event("received")}}, {{event("sent")}}, {{event("ussdreceived")}}
-
-Eventos de almacenamiento
-
-{{event("change")}}, {{event("storage")}}
-
-Eventos SVG
-
-{{event("SVGAbort")}}, {{event("SVGError")}}, {{event("SVGLoad")}}, {{event("SVGResize")}}, {{event("SVGScroll")}}, {{event("SVGUnload")}}, {{event("SVGZoom")}}
-
-Eventos de Pestañas
-
-tabviewsearchenabled , tabviewsearchdisabled , tabviewframeinitialized , tabviewshown , tabviewhidden , TabOpen , TabClose , TabSelect , TabShow , TabHide , TabPinned , TabUnpinned , SSTabClosing , SSTabRestoring , SSTabRestored , {{event("visibilitychange")}}
-
-Eventos de Texto
-
-{{event("compositionend")}}, {{event("compositionstart")}}, {{event("compositionupdate")}}, {{event("copy")}}, {{event("cut")}}, {{event("paste")}}, {{event("select")}}, text
-
-Eventos de Toque
-
-MozEdgeUIGesture , MozMagnifyGesture , MozMagnifyGestureStart , MozMagnifyGestureUpdate , MozPressTapGesture , MozRotateGesture , MozRotateGestureStart , MozRotateGestureUpdate , MozSwipeGesture , MozTapGesture , MozTouchDown , MozTouchMove , MozTouchUp ,4 {{event("touchcancel")}}, {{event("touchend")}}, {{event("touchenter")}}, {{event("touchleave")}}, {{event("touchmove")}}, {{event("touchstart")}}
-
-Eventos de Actualización
-
-{{event("checking")}}, {{event("downloading")}}, {{event("error")}}, {{event("noupdate")}}, {{event("obsolete")}}, {{event("updateready")}}
-
-Eventos de Cámbio de valor
-
-{{event("broadcast")}}, {{event("CheckboxStateChange")}}, {{event("hashchange")}}, {{event("input")}}, {{event("RadioStateChange")}}, {{event("readystatechange")}}, {{event("ValueChange")}}
-
-Eventos de Visualización
-
-fullscreen , {{event("fullscreenchange")}}, {{event("fullscreenerror")}}, MozEnteredDomFullscreen , {{event("MozScrolledAreaChanged")}}, {{event("resize")}}, {{event("scroll")}}, sizemodechange
-
-Eventos de Websocket
-
-close
, {{event("error")}}, message
, open
-
-Eventos de Ventana
-
-DOMWindowCreated , DOMWindowClose , DOMTitleChanged , MozBeforeResize , SSWindowClosing , SSWindowStateReady , SSWindowStateBusy , close
-
-Eventos sin categorizar
-
-{{event("beforeunload")}}, {{event("localized")}}, message
, message
, message
, MozAfterPaint , {{event("moztimechange")}}, open
, {{event("show")}}
-
-Ver también
-
-
diff --git a/files/es/web/events/index.md b/files/es/web/events/index.md
new file mode 100644
index 00000000000000..d62ba95dd19f67
--- /dev/null
+++ b/files/es/web/events/index.md
@@ -0,0 +1,482 @@
+---
+title: Referencia de Eventos
+slug: Web/Events
+translation_of: Web/Events
+---
+Los eventos se envían para notificar al código de cosas interesantes que han ocurrido. Cada evento está representado por un objeto que se basa en la interfaz {{domxref("Event")}}, y puede tener campos y/o funciones personalizadas adicionales para obtener más información acerca de lo sucedido. Los eventos pueden representar cualquier cosa desde las interacciones básicas del usuario para notificaciones automatizadas de las cosas que suceden en el modelo de representación.
+
+Este artículo ofrece una lista de eventos que se pueden enviar; algunos son eventos estándar definidos en las especificaciones oficiales, mientras que otros son eventos usados internamente por los navegadores específicos; por ejemplo, Eventos específicos de Mozilla se enumeran de manera que los [complementos](/es/docs/Mozilla/Add-ons) pueden usarlos para interactuar con el navegador.
+
+## Eventos Estándar
+
+Estos eventos se definen en las especificaciones Web oficiales, y deben ser comunes en todos los navegadores. Cada evento aparece junto con la interfaz que representa el objeto enviado a los destinatarios del evento (por lo que puede encontrar información sobre los datos que se incluyen en cada caso), así como un enlace a la especificación o especificaciones que definen el evento.
+
+| Nombre del evento | Tipo de evento | Especificación | Se activa al... |
+| --------------------------------------------------------------------------------------------- | -------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| {{event("abort")}} | {{domxref("UIEvent")}} | [DOM L3](http://www.w3.org/TR/DOM-Level-3-Events/#event-type-abort) | La carga de un recurso ha sido abortada. |
+| [`abort`]() | {{domxref("ProgressEvent")}} | [Progress](http://www.w3.org/TR/progress-events/) and [XMLHttpRequest](http://www.w3.org/TR/XMLHttpRequest/#event-xhr-abort) | La progresión se ha terminado (no debido a un error). |
+| [`abort`](/en-US/docs/Web/Reference/Events/abort_indexedDB) | {{domxref("Event")}} | [IndexedDB](http://www.w3.org/TR/IndexedDB/#database-interface) | Una transacción ha sido abortada. |
+| {{event("afterprint")}} {{gecko_minversion_inline("6")}} | {{domxref("Event")}} | [HTML5](http://www.w3.org/TR/html5/webappapis.html#printing) | El documento asociado ha iniciado la impresión o la vista previa de impresión de ha cerrado |
+| {{event("animationend")}} | {{domxref("AnimationEvent")}} | [CSS Animations](http://www.w3.org/TR/css3-animations/#animation-events) | Una [animation de CSS](/es/docs/CSS/CSS_animations) ha terminado. |
+| {{event("animationiteration")}} | {{domxref("AnimationEvent")}} | [CSS Animations](http://www.w3.org/TR/css3-animations/#animation-events) | Una [animation de CSS](/es/docs/CSS/CSS_animations) se repite. |
+| {{event("animationstart")}} | {{domxref("AnimationEvent")}} | [CSS Animations](http://www.w3.org/TR/css3-animations/#animation-events) | Una [animation de CSS](/es/docs/CSS/CSS_animations) ha iniciado. |
+| {{event("audioprocess")}} | {{domxref("AudioProcessingEvent")}} | {{SpecName('Web Audio API', '#AudioProcessingEvent', 'audioprocess')}} | El búfer de entrada de un {{domxref("ScriptProcessorNode")}} está listo para ser procesado. |
+| {{event("beforeprint")}} {{gecko_minversion_inline("6")}} | {{domxref("Event")}} | [HTML5](http://www.w3.org/TR/html5/webappapis.html#printing) | El documento asociado está a punto de ser impreso o previsualizado para imprimir. |
+| {{event("beforeunload")}} | {{domxref("BeforeUnloadEvent")}} | [HTML5](http://www.w3.org/TR/html5/browsers.html#unloading-documents) | |
+| {{event("beginEvent")}} | {{domxref("TimeEvent")}} | [SVG](http://www.w3.org/TR/SVG/interact.html#SVGEvents) | Inicia un elemento de animación [SMIL](/es/docs/SVG/SVG_animation_with_SMIL). |
+| [`blocked`](/en-US/docs/Web/Reference/Events/blocked_indexedDB) | | [IndexedDB](http://www.w3.org/TR/IndexedDB/#request-api) | Una conexión abierta en la base de datos está bloqueando una transacción `versionchange` en la misma base de datos. |
+| {{event("blur")}} | {{domxref("FocusEvent")}} | [DOM L3](http://www.w3.org/TR/DOM-Level-3-Events/#event-type-blur) | Un elemento ha perdido el foco (does not bubble). |
+| {{event("cached")}} | {{domxref("Event")}} | [Offline](http://dev.w3.org/html5/spec/offline.html) | Los recursosn que aparecen en el manifiesto se han descargado, y la aplicación está ahora almacenada en caché. |
+| {{event("canplay")}} | {{domxref("Event")}} | [HTML5 media](http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#event-media-canplay) | La aplicación del usuario puede reproducir los medios, pero se estima que no hay datos suficientes, han sido cargados para reproducir el medio hasta el final sin tener que parar para una mayor amortiguación del contenido. |
+| {{event("canplaythrough")}} | {{domxref("Event")}} | [HTML5 media](http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#event-media-canplaythrough) | La aplicación de usuario puede reproducir los medios, y se estima que hay datos suficientes, han sido cargados para reproducir el medio hasta el final sin tener que parar para una mayor amortiguación del contenido |
+| {{event("change")}} | {{domxref("Event")}} | [DOM L2](http://www.w3.org/TR/DOM-Level-2-Events/events.html), [HTML5](http://www.whatwg.org/specs/web-apps/current-work/multipage/common-input-element-attributes.html#event-input-change) | Un elemento perdió el foco y su valor cambio desde que obtuvo el foco. |
+| {{event("chargingchange")}} | {{domxref("Event")}} | [Battery status](https://dvcs.w3.org/hg/dap/raw-file/tip/battery/Overview.html) | La batería inició o dejo de cargar |
+| {{event("chargingtimechange")}} | {{domxref("Event")}} | [Battery status](https://dvcs.w3.org/hg/dap/raw-file/tip/battery/Overview.html) | El atributo `chargingTime` se ha actualizado. |
+| {{event("checking")}} | {{domxref("Event")}} | [Offline](http://dev.w3.org/html5/spec/offline.html) | La aplicación de usuario está comprobando una actualización o intenta descargar el manifiesto de caché por primera vez. |
+| {{event("click")}} | {{domxref("MouseEvent")}} | [DOM L3](http://www.w3.org/TR/DOM-Level-3-Events/#event-type-click) | Un botón en el dispositivo señalador se ha pulsado y soltado en un elemento. |
+| [`close`](/en-US/docs/Web/Reference/Events/close_websocket) | {{domxref("Event")}} | [WebSocket](http://www.w3.org/TR/websockets/) | Una conexión WeSocket se ha cerrado. |
+| {{event("compassneedscalibration")}} | {{domxref("SensorEvent")}} | [Orientation](http://www.w3.org/TR/orientation-event/#compassneedscalibration) | La brujula usada para obtener los datos de la orientación en que está necesita calibración. |
+| [`complete`](/en-US/docs/Web/Reference/Events/complete_indexedDB) | | [IndexedDB](http://www.w3.org/TR/IndexedDB/#transaction) | |
+| {{event("complete")}} | {{domxref("OfflineAudioCompletionEvent")}} | {{SpecName('Web Audio API', '#OfflineAudioCompletionEvent-section', 'OfflineAudioCompletionEvent')}} | El renderizado de un {{domxref("OfflineAudioContext")}} finaliza. |
+| {{event("compositionend")}} {{gecko_minversion_inline("9")}} | {{domxref("CompositionEvent")}} | [DOM L3](http://www.w3.org/TR/DOM-Level-3-Events/#event-type-compositionend) | La composición de un pasaje de texto se ha completado o cancelado. |
+| {{event("compositionstart")}} {{gecko_minversion_inline("9")}} | {{domxref("CompositionEvent")}} | [DOM L3](http://www.w3.org/TR/DOM-Level-3-Events/#event-type-compositionstart) | La composición de un pasaje de un texto está preparado (similar a KeyDown para una entrada de teclado, sino que trabaja con otros insumos, como el reconocimiento de voz). |
+| {{event("compositionupdate")}} {{gecko_minversion_inline("9")}} | {{domxref("CompositionEvent")}} | [DOM L3](http://www.w3.org/TR/DOM-Level-3-Events/#event-type-compositionupdate) | Un carácter se añade a un pasaje de texto que está siendo compuesto. |
+| {{event("contextmenu")}} | {{domxref("MouseEvent")}} | [HTML5](http://www.w3.org/TR/html5/interactive-elements.html#context-menus) | Se hace clic en el botón derecho del ratón (antes de que aparezca el menú contextual). |
+| {{event("copy")}} | {{domxref("ClipboardEvent")}} | [Clipboard](http://www.w3.org/TR/clipboard-apis/#copy-event) | El texto seleccionado se ha agregado al porta papeles. |
+| {{event("cut")}} | {{domxref("ClipboardEvent")}} | [Clipboard](http://www.w3.org/TR/clipboard-apis/#cut-event) | El texto seleccionado ha sido borrado del documento y agregado al portapapeles. |
+| {{event("dblclick")}} | {{domxref("MouseEvent")}} | [DOM L3](http://www.w3.org/TR/DOM-Level-3-Events/#event-type-dblclick) | Un botón del dispositivo señalador hace click dos veces en un elemento. |
+| {{event("devicelight")}} | {{domxref("DeviceLightEvent")}} | [Ambient Light Events](http://dvcs.w3.org/hg/dap/raw-file/tip/light/Overview.html) | Datos nuevos están disponibles desde un sensor de luz. |
+| {{event("devicemotion")}} | {{domxref("DeviceMotionEvent")}} | [Device Orientation Events](http://dev.w3.org/geo/api/spec-source-orientation.html) | Datos nuevos están disponibles desde un sesor de movimiento. |
+| {{event("deviceorientation")}} | {{domxref("DeviceOrientationEvent")}} | [Device Orientation Events](http://dev.w3.org/geo/api/spec-source-orientation.html) | Datos nuevos están disponibles desde un sensor de orientación. |
+| {{event("deviceproximity")}} | {{domxref("DeviceProximityEvent")}} | [Proximity Events](http://dvcs.w3.org/hg/dap/raw-file/tip/proximity/Overview.html) | Datos nuevos están disponibles desde un sensor de proximidad (indica una distancia aproximada entre el dispositivo y un objeto cercano). |
+| {{event("dischargingtimechange")}} | {{domxref("Event")}} | [Battery status](https://dvcs.w3.org/hg/dap/raw-file/tip/battery/Overview.html) | El atributo `dischargingTime` se ha actualizado. |
+| `DOMActivate` {{deprecated_inline}} | {{domxref("UIEvent")}} | [DOM L3](http://www.w3.org/TR/DOM-Level-3-Events/#event-type-DOMActivate) | Un botón, enlace o elemento de estado cambiante esta activado (usa {{event("click")}} en su lugar). |
+| [`DOMAttributeNameChanged`](/en-US/docs/DOM/Mutation_events) {{deprecated_inline}} | {{domxref("MutationNameEvent")}} | [DOM L3](http://www.w3.org/TR/2011/WD-DOM-Level-3-Events-20110531/#event-type-DOMAttributeNameChanged) Removed | El nombre de un atributo cambiado (usa [mutation observers](/es/docs/DOM/MutationObserver) en su lugar). |
+| [`DOMAttrModified`](/en-US/docs/DOM/Mutation_events) {{deprecated_inline}} | {{domxref("MutationEvent")}} | [DOM L3](http://www.w3.org/TR/DOM-Level-3-Events/#event-type-DOMAttrModified) | El valor de un atributo ha sido cambiado (usa [mutation observers](/es/docs/DOM/MutationObserver) en su lugar). |
+| [`DOMCharacterDataModified`](/en-US/docs/DOM/Mutation_events) {{deprecated_inline}} | {{domxref("MutationEvent")}} | [DOM L3](http://www.w3.org/TR/DOM-Level-3-Events/#event-type-DOMCharacterDataModified) | Un texto u otro [CharacterData](/es/docs/DOM/CharacterData) ha sido cambiado (usa [mutation observers](/es/docs/DOM/MutationObserver) en su lugar). |
+| {{event("DOMContentLoaded")}} | {{domxref("Event")}} | [HTML5](http://www.whatwg.org/specs/web-apps/current-work/multipage/the-end.html#the-end) | El documento ha terminado de cargar (pero no sus recursos dependientes). |
+| [`DOMElementNameChanged`](/en-US/docs/DOM/Mutation_events) {{deprecated_inline}} | {{domxref("MutationNameEvent")}} | [DOM L3](http://www.w3.org/TR/2011/WD-DOM-Level-3-Events-20110531/#event-type-DOMElementNameChanged) Removed | El nombre de un elemento dependiente (usa [mutation observers](/es/docs/DOM/MutationObserver) en su lugar). |
+| `DOMFocusIn` {{deprecated_inline}} | {{domxref("FocusEvent")}} | [DOM L3](http://www.w3.org/TR/DOM-Level-3-Events/#event-type-DOMFocusIn) | Un elemento ha recibido el foco (usa {{event("focus")}} o {{event("focusin")}} en su lugar). |
+| `DOMFocusOut` {{deprecated_inline}} | {{domxref("FocusEvent")}} | [DOM L3](http://www.w3.org/TR/DOM-Level-3-Events/#event-type-DOMFocusOut) | Un elemento ha perdido el foco (usa {{event("blur")}} o {{event("focusout")}} en su lugar). |
+| [`DOMNodeInserted`](/en-US/docs/DOM/Mutation_events) {{deprecated_inline}} | {{domxref("MutationEvent")}} | [DOM L3](http://www.w3.org/TR/DOM-Level-3-Events/#event-type-DOMNodeInserted) | Un nodo ha sido añadido como un hijo de otro nodo (usa [mutation observers](/es/docs/DOM/MutationObserver) en su lugar). |
+| [`DOMNodeInsertedIntoDocument`](/en-US/docs/DOM/Mutation_events) {{deprecated_inline}} | {{domxref("MutationEvent")}} | [DOM L3](http://www.w3.org/TR/DOM-Level-3-Events/#event-type-DOMNodeInsertedIntoDocument) | Un nodo ha sido insertado en el documento (usa [mutation observers](/es/docs/DOM/MutationObserver) en su lugar). |
+| [`DOMNodeRemoved`](/en-US/docs/DOM/Mutation_events) {{deprecated_inline}} | {{domxref("MutationEvent")}} | [DOM L3](http://www.w3.org/TR/DOM-Level-3-Events/#event-type-DOMNodeRemoved) | Un nodo ha sido eliminado de su nodo padre A node has been removed from its parent node (usa [mutation observers](/es/docs/DOM/MutationObserver) en su lugar). |
+| [`DOMNodeRemovedFromDocument`](/en-US/docs/DOM/Mutation_events) {{deprecated_inline}} | {{domxref("MutationEvent")}} | [DOM L3](http://www.w3.org/TR/DOM-Level-3-Events/#event-type-DOMNodeRemovedFromDocument) | Un nodo ha sido eliminado del documento (usa [mutation observers](/es/docs/DOM/MutationObserver) en su lugar). |
+| [`DOMSubtreeModified`](/en-US/docs/DOM/Mutation_events) {{deprecated_inline}} | {{domxref("MutationEvent")}} | [DOM L3](http://www.w3.org/TR/DOM-Level-3-Events/#event-type-DOMSubtreeModified) | Ocurrio un cambio en el documento (usa [mutation observers](/es/docs/DOM/MutationObserver) en su lugar). |
+| {{event("downloading")}} | {{domxref("Event")}} | [Offline](http://dev.w3.org/html5/spec/offline.html) | La aplicación de usuario ha encontrado una actualización y está buscando o descargando los recursos enumerados en el caché del manifiesto por primera vez. |
+| {{event("drag")}} | {{domxref("DragEvent")}} | [HTML5](http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html#event-drag) | Un elemento o texto seleccionato está siendo arrastrado (cada 35ms). |
+| {{event("dragend")}} | {{domxref("DragEvent")}} | [HTML5](http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html#event-dragend) | Una operación de arrastre ha finalizado (al pulsar un botón del ratón o pulsando la tecla escape). |
+| {{event("dragenter")}} | {{domxref("DragEvent")}} | [HTML5](http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html#event-dragenter) | Un elemento arrastrado o un texto seleccionado entró en un destino válido. |
+| {{event("dragleave")}} | {{domxref("DragEvent")}} | [HTML5](http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html#event-dragleave) | Un elemento arrastrado o un texto seleccionado salió de un destino válido. |
+| {{event("dragover")}} | {{domxref("DragEvent")}} | [HTML5](http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html#event-dragover) | Un elemento o texto seleccionado es arrastrado encima de un destino válido (cada 50ms). |
+| {{event("dragstart")}} | {{domxref("DragEvent")}} | [HTML5](http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html#event-dragstart) | El usuario empezó a arrastrar un elemento o un texto seleccionado. |
+| {{event("drop")}} | {{domxref("DragEvent")}} | [HTML5](http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html#event-drop) | Un elemento es soltado en un destino válido. |
+| {{event("durationchange")}} | {{domxref("Event")}} | [HTML5 media](http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#event-media-durationchange) | El atributo `duration` se ha actualizado. |
+| {{event("emptied")}} | {{domxref("Event")}} | [HTML5 media](http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#event-media-emptied) | Los medios de comunicación se ha convertido en vacío, por ejemplo, este evento se envía si los medios de comunicación ya se ha cargado (o parcialmente cargado), y el método [`load()`](/es/docs/XPCOM_Interface_Reference/NsIDOMHTMLMediaElement) es llamado para volver a cargarlo. |
+| {{event("ended")}} | {{domxref("Event")}} | [HTML5 media](http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#event-media-ended) | La reproducción se ha detenido porque se ha alcanzado el final de los medios de comunicación. |
+| {{event("ended_(Web_Audio)", "ended")}} | {{domxref("Event")}} | {{SpecName("Web Audio API")}} | |
+| {{event("endEvent")}} | {{domxref("TimeEvent")}} | [SVG](http://www.w3.org/TR/SVG/interact.html#SVGEvents) | Un elento de animación [SMIL](/es/docs/SVG/SVG_animation_with_SMIL) termina. |
+| {{event("error")}} | {{domxref("UIEvent")}} | [DOM L3](http://www.w3.org/TR/DOM-Level-3-Events/#event-type-error) | Un recurso no se pudo cargar. |
+| {{event("error")}} | {{domxref("ProgressEvent")}} | [Progress](http://www.w3.org/TR/progress-events/) and [XMLHttpRequest](http://www.w3.org/TR/XMLHttpRequest/#event-xhr-error) | La progresión a fallado. |
+| {{event("error")}} | {{domxref("Event")}} | [Offline](http://dev.w3.org/html5/spec/offline.html) | Se ha producido un error al descargar el manifiesto de caché o actualizar el contenido de la aplicación. |
+| {{event("error")}} | {{domxref("Event")}} | [WebSocket](http://www.w3.org/TR/websockets/) | A WebSocket connection has been closed with prejudice (some data couldn't be sent for example). |
+| {{event("error")}} | {{domxref("Event")}} | [Server Sent Events](http://dev.w3.org/html5/eventsource/) | An event source connection has been failed. |
+| {{event("error")}} | {{domxref("Event")}} | [IndexedDB](http://www.w3.org/TR/IndexedDB/#request-api) | A request caused an error and failed. |
+| {{event("focus")}} | {{domxref("FocusEvent")}} | [DOM L3](http://www.w3.org/TR/DOM-Level-3-Events/#event-type-focus) | An element has received focus (does not bubble). |
+| {{event("focusin")}} | {{domxref("FocusEvent")}} | [DOM L3](http://www.w3.org/TR/DOM-Level-3-Events/#event-type-focusIn) | An element is about to receive focus (bubbles). |
+| {{event("focusout")}} | {{domxref("FocusEvent")}} | [DOM L3](http://www.w3.org/TR/DOM-Level-3-Events/#event-type-focusout) | An element is about to lose focus (bubbles). |
+| {{event("fullscreenchange")}} | {{domxref("Event")}} | [Full Screen](https://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html#api) | An element was turned to fullscreen mode or back to normal mode. |
+| {{event("fullscreenerror")}} | {{domxref("Event")}} | [Full Screen](https://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html#api) | It was impossible to switch to fullscreen mode for technical reasons or because the permission was denied. |
+| {{event("gamepadconnected")}} | {{domxref("GamepadEvent")}} | [Gamepad](http://www.w3.org/TR/gamepad/#the-gamepadconnected-event) | A gamepad has been connected. |
+| {{event("gamepaddisconnected")}} | {{domxref("GamepadEvent")}} | [Gamepad](http://www.w3.org/TR/gamepad/#the-gamepaddisconnected-event) | A gamepad has been disconnected. |
+| {{event("hashchange")}} | {{domxref("HashChangeEvent")}} | [HTML5](http://www.whatwg.org/specs/web-apps/current-work/multipage/history.html#event-hashchange) | The fragment identifier of the URL has changed (the part of the URL after the #). |
+| {{event("input")}} | {{domxref("Event")}} | [HTML5](http://www.w3.org/TR/html5/forms.html#common-event-behaviors) | The value of an element changes or the content of an element with the attribute [contenteditable](/es/docs/DOM/Element.contentEditable) is modified. |
+| {{event("invalid")}} | {{domxref("Event")}} | [HTML5](http://www.whatwg.org/specs/web-apps/current-work/multipage/association-of-controls-and-forms.html#constraint-validation) | A submittable element has been checked and doesn't satisfy its constraints. |
+| {{event("keydown")}} | {{domxref("KeyboardEvent")}} | [DOM L3](http://www.w3.org/TR/DOM-Level-3-Events/#event-type-keydown) | A key is pressed down. |
+| {{event("keypress")}} | {{domxref("KeyboardEvent")}} | [DOM L3](http://www.w3.org/TR/DOM-Level-3-Events/#event-type-keypress) | A key is pressed down and that key normally produces a character value (use input instead). |
+| {{event("keyup")}} | {{domxref("KeyboardEvent")}} | [DOM L3](http://www.w3.org/TR/DOM-Level-3-Events/#event-type-keyup) | A key is released. |
+| {{event("levelchange")}} | {{domxref("Event")}} | [Battery status](https://dvcs.w3.org/hg/dap/raw-file/tip/battery/Overview.html) | The `level` attribute has been updated. |
+| {{event("load")}} | {{domxref("UIEvent")}} | [DOM L3](http://www.w3.org/TR/DOM-Level-3-Events/#event-type-load) | A resource and its dependent resources have finished loading. |
+| [`load`]() | {{domxref("ProgressEvent")}} | [Progress](http://www.w3.org/TR/progress-events/) and [XMLHttpRequest](http://www.w3.org/TR/XMLHttpRequest/#event-xhr-load) | Progression has been successful. |
+| {{event("loadeddata")}} | {{domxref("Event")}} | [HTML5 media](http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#event-media-loadeddata) | The first frame of the media has finished loading. |
+| {{event("loadedmetadata")}} | {{domxref("Event")}} | [HTML5 media](http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#event-media-loadedmetadata) | The metadata has been loaded. |
+| {{event("loadend")}} | {{domxref("ProgressEvent")}} | [Progress](http://www.w3.org/TR/progress-events/) and [XMLHttpRequest](http://www.w3.org/TR/XMLHttpRequest/#event-xhr-loadend) | Progress has stopped (after "error", "abort" or "load" have been dispatched). |
+| {{event("loadstart")}} | {{domxref("ProgressEvent")}} | [Progress](http://www.w3.org/TR/progress-events/)and [XMLHttpRequest](http://www.w3.org/TR/XMLHttpRequest/#event-xhr-loadstart) | Progress has begun. |
+| [`message`](/en-US/docs/Web/Reference/Events/message_websocket) | {{domxref("MessageEvent")}} | [WebSocket](http://www.w3.org/TR/websockets/) | A message is received through a WebSocket. |
+| [`message`](/en-US/docs/Web/Reference/Events/message_webworker) | {{domxref("MessageEvent")}} | [Web Workers](http://www.w3.org/TR/workers/#communicating-with-a-dedicated-worker) | A message is received from a Web Worker. |
+| [`message`](/en-US/docs/Web/Reference/Events/message_webmessaging) | {{domxref("MessageEvent")}} | [Web Messaging](http://www.w3.org/TR/webmessaging/) | A message is received from a child (i)frame or a parent window. |
+| [`message`](/en-US/docs/Web/Reference/Events/message_serversentevents) | {{domxref("MessageEvent")}} | [Server Sent Events](http://dev.w3.org/html5/eventsource/) | A message is received through an event source. |
+| {{event("mousedown")}} | {{domxref("MouseEvent")}} | [DOM L3](http://www.w3.org/TR/DOM-Level-3-Events/#event-type-mousedown) | A pointing device button (usually a mouse) is pressed on an element. |
+| {{event("mouseenter")}} | {{domxref("MouseEvent")}} | [DOM L3](http://www.w3.org/TR/DOM-Level-3-Events/#event-type-mouseenter) | A pointing device is moved onto the element that has the listener attached. |
+| {{event("mouseleave")}} | {{domxref("MouseEvent")}} | [DOM L3](http://www.w3.org/TR/DOM-Level-3-Events/#event-type-mouseleave) | A pointing device is moved off the element that has the listener attached. |
+| {{event("mousemove")}} | {{domxref("MouseEvent")}} | [DOM L3](http://www.w3.org/TR/DOM-Level-3-Events/#event-type-mousemove) | A pointing device is moved over an element. |
+| {{event("mouseout")}} | {{domxref("MouseEvent")}} | [DOM L3](http://www.w3.org/TR/DOM-Level-3-Events/#event-type-mouseout) | A pointing device is moved off the element that has the listener attached or off one of its children. |
+| {{event("mouseover")}} | {{domxref("MouseEvent")}} | [DOM L3](http://www.w3.org/TR/DOM-Level-3-Events/#event-type-mouseover) | A pointing device is moved onto the element that has the listener attached or onto one of its children. |
+| {{event("mouseup")}} | {{domxref("MouseEvent")}} | [DOM L3](http://www.w3.org/TR/DOM-Level-3-Events/#event-type-mouseup) | A pointing device button is released over an element. |
+| {{event("noupdate")}} | {{domxref("Event")}} | [Offline](http://dev.w3.org/html5/spec/offline.html) | The manifest hadn't changed. |
+| {{event("obsolete")}} | {{domxref("Event")}} | [Offline](http://dev.w3.org/html5/spec/offline.html) | The manifest was found to have become a 404 or 410 page, so the application cache is being deleted. |
+| {{event("offline")}} | {{domxref("Event")}} | [HTML5 offline](http://www.whatwg.org/specs/web-apps/current-work/multipage/offline.html#event-offline) | The browser has lost access to the network. |
+| {{event("online")}} | {{domxref("Event")}} | [HTML5 offline](http://www.whatwg.org/specs/web-apps/current-work/multipage/offline.html#event-online) | The browser has gained access to the network (but particular websites might be unreachable). |
+| [`open`](/en-US/docs/Web/Reference/Events/open_websocket) | {{domxref("Event")}} | [WebSocket](http://www.w3.org/TR/websockets/) | A WebSocket connection has been established. |
+| [`open`](/en-US/docs/Web/Reference/Events/open_serversentevents) | {{domxref("Event")}} | [Server Sent Events](http://dev.w3.org/html5/eventsource/) | An event source connection has been established. |
+| {{event("orientationchange")}} | {{domxref("Event")}} | [Screen Orientation](http://www.w3.org/TR/screen-orientation/) | The orientation of the device (portrait/landscape) has changed |
+| {{event("pagehide")}} | {{domxref("PageTransitionEvent")}} | [HTML5](http://www.whatwg.org/specs/web-apps/current-work/multipage/history.html#event-pagehide) | A session history entry is being traversed from. |
+| {{event("pageshow")}} | {{domxref("PageTransitionEvent")}} | [HTML5](http://www.whatwg.org/specs/web-apps/current-work/multipage/history.html#event-pageshow) | A session history entry is being traversed to. |
+| {{event("paste")}} | {{domxref("ClipboardEvent")}} | [Clipboard](http://www.w3.org/TR/clipboard-apis/#paste-event) | Data has been transfered from the system clipboard to the document. |
+| {{event("pause")}} | {{domxref("Event")}} | [HTML5 media](http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#event-media-pause) | Playback has been paused. |
+| {{event("pointerlockchange")}} | {{domxref("Event")}} | [Pointer Lock](http://www.w3.org/TR/pointerlock/#pointerlockchange-and-pointerlockerror-events) | The pointer was locked or released. |
+| {{event("pointerlockerror")}} | {{domxref("Event")}} | [Pointer Lock](http://www.w3.org/TR/pointerlock/#pointerlockchange-and-pointerlockerror-events) | It was impossible to lock the pointer for technical reasons or because the permission was denied. |
+| {{event("play")}} | {{domxref("Event")}} | [HTML5 media](http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#event-media-play) | Playback has begun. |
+| {{event("playing")}} | {{domxref("Event")}} | [HTML5 media](http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#event-media-playing) | Playback is ready to start after having been paused or delayed due to lack of data. |
+| {{event("popstate")}} | {{domxref("PopStateEvent")}} | [HTML5](http://www.whatwg.org/specs/web-apps/current-work/multipage/history.html#event-popstate) | A session history entry is being navigated to (in certain cases). |
+| {{event("progress")}} | {{domxref("ProgressEvent")}} | [Progress](http://www.w3.org/TR/progress-events/) and [XMLHttpRequest](http://www.w3.org/TR/XMLHttpRequest/#event-xhr-progress) | In progress. |
+| [`progress`]() | {{domxref("ProgressEvent")}} | [Offline](http://dev.w3.org/html5/spec/offline.html) | The user agent is downloading resources listed by the manifest. |
+| {{event("ratechange")}} | {{domxref("Event")}} | [HTML5 media](http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#event-media-ratechange) | The playback rate has changed. |
+| {{event("readystatechange")}} | {{domxref("Event")}} | HTML5 and [XMLHttpRequest](http://www.w3.org/TR/XMLHttpRequest/#event-xhr-readystatechange) | The readyState attribute of a document has changed. |
+| {{event("repeatEvent")}} | {{domxref("TimeEvent")}} | [SVG](http://www.w3.org/TR/SVG/interact.html#SVGEvents) | A [SMIL](/es/docs/SVG/SVG_animation_with_SMIL) animation element is repeated. |
+| {{event("reset")}} | {{domxref("Event")}} | [DOM L2](http://www.w3.org/TR/DOM-Level-2-Events/events.html), [HTML5](http://www.whatwg.org/specs/web-apps/current-work/multipage/association-of-controls-and-forms.html#form-submission-0#resetting-a-form) | A form is reset. |
+| {{event("resize")}} | {{domxref("UIEvent")}} | [DOM L3](http://www.w3.org/TR/DOM-Level-3-Events/#event-type-resize) | The document view has been resized. |
+| {{event("scroll")}} | {{domxref("UIEvent")}} | [DOM L3](http://www.w3.org/TR/DOM-Level-3-Events/#event-type-scroll) | The document view or an element has been scrolled. |
+| {{event("seeked")}} | {{domxref("Event")}} | [HTML5 media](http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#event-media-seeked) | A _seek_ operation completed. |
+| {{event("seeking")}} | {{domxref("Event")}} | [HTML5 media](http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#event-media-seeking) | A _seek_ operation began. |
+| {{event("select")}} | {{domxref("UIEvent")}} | [DOM L3](http://www.w3.org/TR/DOM-Level-3-Events/#event-type-select) | Some text is being selected. |
+| {{event("show")}} | {{domxref("MouseEvent")}} | [HTML5](http://www.w3.org/TR/html5/interactive-elements.html#context-menus) | A contextmenu event was fired on/bubbled to an element that has a [contextmenu](/es/docs/DOM/element.contextmenu) attribute |
+| {{event("stalled")}} | {{domxref("Event")}} | [HTML5 media](http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#event-media-stalled) | The user agent is trying to fetch media data, but data is unexpectedly not forthcoming. |
+| {{event("storage")}} | {{domxref("StorageEvent")}} | [Web Storage](http://www.w3.org/TR/webstorage/#the-storage-event) | A storage area ([localStorage](/es/docs/DOM/Storage#localStorage) or [sessionStorage](/es/docs/DOM/Storage#sessionStorage)) has changed. |
+| {{event("submit")}} | {{domxref("Event")}} | [DOM L2](http://www.w3.org/TR/DOM-Level-2-Events/events.html), [HTML5](http://www.whatwg.org/specs/web-apps/current-work/multipage/association-of-controls-and-forms.html#form-submission-algorithm) | A form is submitted. |
+| [`success`](/en-US/docs/Web/Reference/Events/success_indexedDB) | {{domxref("Event")}} | [IndexedDB](http://www.w3.org/TR/IndexedDB/#request-api) | A request successfully completed. |
+| {{event("suspend")}} | {{domxref("Event")}} | [HTML5 media](http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#event-media-suspend) | Media data loading has been suspended. |
+| {{event("SVGAbort")}} | {{domxref("SVGEvent")}} | [SVG](http://www.w3.org/TR/SVG/interact.html#SVGEvents) | Page loading has been stopped before the [SVG](/es/docs/SVG) was loaded. |
+| {{event("SVGError")}} | {{domxref("SVGEvent")}} | [SVG](http://www.w3.org/TR/SVG/interact.html#SVGEvents) | An error has occurred before the [SVG](/es/docs/SVG) was loaded. |
+| {{event("SVGLoad")}} | {{domxref("SVGEvent")}} | [SVG](http://www.w3.org/TR/SVG/interact.html#SVGEvents) | An [SVG](/es/docs/SVG) document has been loaded and parsed. |
+| {{event("SVGResize")}} | {{domxref("SVGEvent")}} | [SVG](http://www.w3.org/TR/SVG/interact.html#SVGEvents) | An [SVG](/es/docs/SVG) document is being resized. |
+| {{event("SVGScroll")}} | {{domxref("SVGEvent")}} | [SVG](http://www.w3.org/TR/SVG/interact.html#SVGEvents) | An [SVG](/es/docs/SVG) document is being scrolled. |
+| {{event("SVGUnload")}} | {{domxref("SVGEvent")}} | [SVG](http://www.w3.org/TR/SVG/interact.html#SVGEvents) | An [SVG](/es/docs/SVG) document has been removed from a window or frame. |
+| {{event("SVGZoom")}} | {{domxref("SVGZoomEvent")}} | [SVG](http://www.w3.org/TR/SVG/interact.html#SVGEvents) | An [SVG](/es/docs/SVG) document is being zoomed. |
+| {{event("timeout")}} | {{domxref("ProgressEvent")}} | [XMLHttpRequest](http://www.w3.org/TR/XMLHttpRequest/#event-xhr-timeout) | |
+| {{event("timeupdate")}} | {{domxref("Event")}} | [HTML5 media](http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#event-media-timeupdate) | The time indicated by the `currentTime` attribute has been updated. |
+| {{event("touchcancel")}} | {{domxref("TouchEvent")}} | [Touch Events](http://www.w3.org/TR/touch-events/) | A touch point has been disrupted in an implementation-specific manners (too many touch points for example). |
+| {{event("touchend")}} | {{domxref("TouchEvent")}} | [Touch Events](http://www.w3.org/TR/touch-events/#the-touchend-event) | A touch point is removed from the touch surface. |
+| {{event("touchenter")}} | {{domxref("TouchEvent")}} | [Touch Events](http://www.w3.org/TR/touch-events/) Removed | A touch point is moved onto the interactive area of an element. |
+| {{event("touchleave")}} | {{domxref("TouchEvent")}} | [Touch Events](http://www.w3.org/TR/touch-events/) Removed | A touch point is moved off the interactive area of an element. |
+| {{event("touchmove")}} | {{domxref("TouchEvent")}} | [Touch Events](http://www.w3.org/TR/touch-events/#the-touchmove-event) | A touch point is moved along the touch surface. |
+| {{event("touchstart")}} | {{domxref("TouchEvent")}} | [Touch Events](http://www.w3.org/TR/touch-events/#the-touchstart---------event) | A touch point is placed on the touch surface. |
+| {{event("transitionend")}} | {{domxref("TransitionEvent")}} | [CSS Transitions](http://www.w3.org/TR/css3-transitions/#transition-events) | A [CSS transition](/es/docs/CSS/CSS_transitions) has completed. |
+| {{event("unload")}} | {{domxref("UIEvent")}} | [DOM L3](http://www.w3.org/TR/DOM-Level-3-Events/#event-type-unload) | The document or a dependent resource is being unloaded. |
+| {{event("updateready")}} | {{domxref("Event")}} | [Offline](http://dev.w3.org/html5/spec/offline.html) | The resources listed in the manifest have been newly redownloaded, and the script can use `swapCache()` to switch to the new cache. |
+| [`upgradeneeded`](/en-US/docs/Web/Reference/Events/upgradeneeded_indexedDB) | | [IndexedDB](http://www.w3.org/TR/IndexedDB/#request-api) | An attempt was made to open a database with a version number higher than its current version. A `versionchange` transaction has been created. |
+| {{event("userproximity")}} | {{domxref("SensorEvent")}} | [Sensor](https://dvcs.w3.org/hg/dap/raw-file/tip/proximity/Overview.html) | Fresh data is available from a proximity sensor (indicates whether the nearby object is `near` the device or not). |
+| [`versionchange`](/en-US/docs/Web/Reference/Events/versionchange_indexedDB) | | [IndexedDB](http://www.w3.org/TR/IndexedDB/#database-interface) | A `versionchange` transaction completed. |
+| {{event("visibilitychange")}} | {{domxref("Event")}} | [Page visibility](http://www.w3.org/TR/page-visibility/#sec-visibilitychange-event) | The content of a tab has become visible or has been hidden. |
+| {{event("volumechange")}} | {{domxref("Event")}} | [HTML5 media](http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#event-media-volumechange) | The volume has changed. |
+| {{event("waiting")}} | {{domxref("Event")}} | [HTML5 media](http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#event-media-waiting) | Playback has stopped because of a temporary lack of data. |
+| {{event("wheel")}} {{gecko_minversion_inline("17")}} | {{domxref("WheelEvent")}} | [DOM L3](http://www.w3.org/TR/DOM-Level-3-Events/#event-type-wheel) | A wheel button of a pointing device is rotated in any direction. |
+
+## Eventos no estándar
+
+| Nombre del evento | Tipo de evento | Especificación | Se activa al... |
+| --------------------------------------------------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| {{event("afterscriptexecute")}} | {{domxref("Event")}} | _Mozilla Specific_ | A script has been executed. |
+| {{event("beforescriptexecute")}} | {{domxref("Event")}} | _Mozilla Specific_ | A script is about to be executed. |
+| {{event("cardstatechange")}} | | _Firefox OS specific_ | The {{domxref("MozMobileConnection.cardState")}} property changes value. |
+| {{event("change")}} | {{domxref("DeviceStorageChangeEvent")}} | _Firefox OS specific_ | This event is triggered each time a file is created, modified or deleted on a given storage area. |
+| {{event("connectionInfoUpdate")}} | | [_Firefox OS specific_](http://mxr.mozilla.org/mozilla-central/source/dom/wifi/nsIWifi.idl?rev=3e586802f478#176) | The informations about the signal strength and the link speed have been updated. |
+| {{event("cfstatechange")}} | | _Firefox OS specific_ | The call forwarding state changes. |
+| {{event("datachange")}} | | _Firefox OS specific_ | The {{domxref("MozMobileConnection.data")}} object changes values. |
+| {{event("dataerror")}} | | _Firefox OS specific_ | The {{domxref("MozMobileConnection.data")}} object receive an error from the RIL. |
+| {{event("DOMMouseScroll")}} {{deprecated_inline}} | | _Mozilla specific_ | The wheel button of a pointing device is rotated (detail attribute is a number of lines). (use {{event("wheel")}} instead) |
+| `dragdrop` {{deprecated_inline}} | `DragEvent` | _Mozilla specific_ | An element is dropped (use {{event("drop")}} instead). |
+| `dragexit` {{deprecated_inline}} | `DragEvent` | _Mozilla specific_ | A drag operation is being ended(use {{event("dragend")}} instead). |
+| `draggesture` {{deprecated_inline}} | `DragEvent` | _Mozilla specific_ | The user starts dragging an element or text selection (use {{event("dragstart")}} instead). |
+| {{event("icccardlockerror")}} | | _Firefox OS specific_ | the {{domxref("MozMobileConnection.unlockCardLock()")}} or {{domxref("MozMobileConnection.setCardLock()")}} methods fails. |
+| {{event("iccinfochange")}} | | _Firefox OS specific_ | The {{domxref("MozMobileConnection.iccInfo")}} object changes. |
+| {{event("localized")}} | | _[Mozilla Specific](https://github.com/fabi1cazenave/webL10n)_ | The page has been localized using data-l10n-\* attributes. |
+| {{event("mousewheel")}} {{deprecated_inline}} | | [_IE invented_](http://msdn.microsoft.com/en-us/library/ie/ms536951%28v=vs.85%29.aspx) | The wheel button of a pointing device is rotated. |
+| {{event("MozAudioAvailable")}} | {{domxref("Event")}} | _Mozilla specific_ | The audio buffer is full and the corresponding raw samples are available. |
+| {{event("mozbrowserclose")}} | | _Firefox OS specific_ | Sent when window\.close() is called within a browser iframe. |
+| {{event("mozbrowsercontextmenu")}} | | _Firefox OS specific_ | Sent when a browser {{HTMLElement("iframe")}} try to open a context menu. |
+| {{event("mozbrowsererror")}} | | _Firefox OS specific_ | Sent when an error occured while trying to load a content within a browser iframe |
+| {{event("mozbrowsericonchange")}} | | _Firefox OS specific_ | Sent when the favicon of a browser iframe changes. |
+| {{event("mozbrowserlocationchange")}} | | _Firefox OS specific_ | Sent when an browser iframe's location changes. |
+| {{event("mozbrowserloadend")}} | | _Firefox OS specific_ | Sent when the browser iframe has finished loading all its assets. |
+| {{event("mozbrowserloadstart")}} | | _Firefox OS specific_ | Sent when the browser iframe starts to load a new page. |
+| {{event("mozbrowseropenwindow")}} | | _Firefox OS specific_ | Sent when {{domxref("window.open()")}} is called within a browser iframe. |
+| {{event("mozbrowsersecuritychange")}} | | _Firefox OS specific_ | Sent when the SSL state changes within a browser iframe. |
+| {{event("mozbrowsershowmodalprompt")}} | | _Firefox OS specific_ | Sent when {{domxref("window.alert","alert()")}}, {{domxref("window.confirm","confirm()")}} or {{domxref("window.prompt","prompt()")}} are called within a browser iframe |
+| {{event("mozbrowsertitlechange")}} | | _Firefox OS specific_ | Sent when the document.title changes within a browser iframe. |
+| {{event("MozGamepadButtonDown")}} | | _To be specified_ | A gamepad button is pressed down. |
+| {{event("MozGamepadButtonUp")}} | | _To be specified_ | A gamepad button is released. |
+| {{event("MozMousePixelScroll")}} {{deprecated_inline}} | | _Mozilla specific_ | The wheel button of a pointing device is rotated (detail attribute is a number of pixels). (use wheel instead) |
+| {{event("MozOrientation")}} {{deprecated_inline}} | | _Mozilla specific_ | Fresh data is available from an orientation sensor (see deviceorientation). |
+| {{event("MozScrolledAreaChanged")}} | {{domxref("UIEvent")}} | _Mozilla specific_ | The document view has been scrolled or resized. |
+| {{event("moztimechange")}} | | _Mozilla specific_ | The time of the device has been changed. |
+| [MozTouchDown]() {{deprecated_inline}} | | _Mozilla specific_ | A touch point is placed on the touch surface (use touchstart instead). |
+| [MozTouchMove]() {{deprecated_inline}} | | _Mozilla specific_ | A touch point is moved along the touch surface (use touchmove instead). |
+| [MozTouchUp]() {{deprecated_inline}} | | _Mozilla specific_ | A touch point is removed from the touch surface (use touchend instead). |
+| {{event("alerting")}} | {{domxref("CallEvent")}} | _To be specified_ | The correspondent is being alerted (his/her phone is ringing). |
+| {{event("busy")}} | {{domxref("CallEvent")}} | _To be specified_ | The line of the correspondent is busy. |
+| {{event("callschanged")}} | {{domxref("CallEvent")}} | _To be specified_ | A call has been added or removed from the list of current calls. |
+| [onconnected](/es/docs/DOM/onconnected) {{event("connected")}} | {{domxref("CallEvent")}} | _To be specified_ | A call has been connected. |
+| {{event("connecting")}} | {{domxref("CallEvent")}} | _To be specified_ | A call is about to connect. |
+| {{event("delivered")}} | {{domxref("SMSEvent")}} | _To be specified_ | An SMS has been successfully delivered. |
+| {{event("dialing")}} | {{domxref("CallEvent")}} | _To be specified_ | The number of a correspondent has been dialed. |
+| {{event("disabled")}} | | [_Firefox OS specific_](http://mxr.mozilla.org/mozilla-central/source/dom/wifi/nsIWifi.idl?rev=3e586802f478#182) | Wifi has been disabled on the device. |
+| {{event("disconnected")}} | {{domxref("CallEvent")}} | _To be specified_ | A call has been disconnected. |
+| {{event("disconnecting")}} | {{domxref("CallEvent")}} | _To be specified_ | A call is about to disconnect. |
+| {{event("enabled")}} | | [_Firefox OS specific_](http://mxr.mozilla.org/mozilla-central/source/dom/wifi/nsIWifi.idl?rev=3e586802f478#182) | Wifi has been enabled on the device. |
+| {{event("error_(Telephony)","error")}} | {{domxref("CallEvent")}} | _To be specified_ | An error occurred. |
+| {{event("held")}} | {{domxref("CallEvent")}} | _To be specified_ | A call has been held. |
+| {{event("holding")}} | {{domxref("CallEvent")}} | _To be specified_ | A call is about to be held. |
+| {{event("incoming")}} | {{domxref("CallEvent")}} | _To be specified_ | A call is being received. |
+| {{event("received")}} | {{domxref("SMSEvent")}} | _To be specified_ | An SMS has been received. |
+| {{event("resuming")}} | {{domxref("CallEvent")}} | _To be specified_ | A call is about to resume. |
+| {{event("sent")}} | {{domxref("SMSEvent")}} | _To be specified_ | An SMS has been sent. |
+| {{event("statechange")}} | {{domxref("CallEvent")}} | _To be specified_ | The state of a call has changed. |
+| {{event("statuschange")}} | | [_Firefox OS specific_](http://mxr.mozilla.org/mozilla-central/source/dom/wifi/nsIWifi.idl?rev=3e586802f478#156) | The status of the Wifi connection changed. |
+| {{event("overflow")}} | {{domxref("UIEvent")}} | _Mozilla specific_ | An element has been overflowed by its content or has been rendered for the first time in this state (only works for elements styled with `overflow` != `visible`). |
+| {{event("smartcard-insert")}} | | _Mozilla specific_ | A [smartcard](/es/docs/JavaScript_crypto) has been inserted. |
+| {{event("smartcard-remove")}} | | _Mozilla specific_ | A [smartcard](/es/docs/JavaScript_crypto) has been removed. |
+| {{event("stkcommand")}} | | _Firefox OS specific_ | The STK Proactive Command is issued from ICC. |
+| {{event("stksessionend")}} | | _Firefox OS specific_ | The STK Session is terminated by ICC. |
+| `text` | | _Mozilla Specific_ | A generic composition event occurred. |
+| {{event("underflow")}}" | {{domxref("UIEvent")}} | _Mozilla specific_ | An element is no longer overflowed by its content (only works for elements styled with `overflow` != `visible`). |
+| `uploadprogress` {{deprecated_inline}} | {{domxref("ProgressEvent")}} | _Mozilla Specific_ | Upload is in progress (see {{event("progress")}}). |
+| {{event("ussdreceived")}} | | _Firefox OS specific_ | A new USSD message is received |
+| {{event("voicechange")}} | | _Firefox OS specific_ | The {{domxref("MozMobileConnection.voice")}} object changes values. |
+
+## Eventos específicos de Mozilla
+
+> **Nota:** Nota: los eventos nunca están expuestos a contenidos web y sólo se pueden utilizar en el contexto de contenido de chrome.
+
+### Eventos XUL
+
+| Nombre del evento | Tipo de Evento | Especificación | Se activa al... |
+| -------------------------------------------------- | -------------- | ----------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
+| {{event("broadcast")}} | | [XUL](/es/docs/XUL/Tutorial/Broadcasters_and_Observers#Broadcast_event) | An `observer` noticed a change to the attributes of a watched broadcaster. |
+| {{event("CheckboxStateChange")}} | | XUL | The state of a `checkbox` has been changed either by a user action or by a script (useful for accessibility). |
+| [close](/es/docs/Web/Reference/Events/close_event) | | XUL | The close button of the window has been clicked. |
+| {{event("command")}} | | XUL | An element has been activated. |
+| {{event("commandupdate")}} | | XUL | A command update occurred on a `commandset` element. |
+| {{event("DOMMenuItemActive")}} | | XUL | A menu or menuitem has been hovered or highlighted. |
+| {{event("DOMMenuItemInactive")}} | | _XUL_ | A menu or menuitem is no longer hovered or highlighted. |
+| {{event("popuphidden")}} | `PopupEvent` | [_XUL_](/es/docs/XUL/PopupGuide/PopupEvents) | A menupopup, panel or tooltip has been hidden. |
+| {{event("popuphiding")}} | `PopupEvent` | [_XUL_](/es/docs/XUL/PopupGuide/PopupEvents) | A menupopup, panel or tooltip is about to be hidden. |
+| {{event("popupshowing")}} | `PopupEvent` | [_XUL_](/es/docs/XUL/PopupGuide/PopupEvents) | A menupopup, panel or tooltip is about to become visible. |
+| {{event("popupshown")}} | `PopupEvent` | [_XUL_](/es/docs/XUL/PopupGuide/PopupEvents) | A menupopup, panel or tooltip has become visible. |
+| {{event("RadioStateChange")}} | | XUL | The state of a `radio` has been changed either by a user action or by a script (useful for accessibility). |
+| {{event("ValueChange")}} | | XUL | The value of an element has changed (a progress bar for example, useful for accessibility). |
+
+### Eventos específicos de complementos
+
+| Nombre del eveto | Tipo de evento | Especificación | Se activa al... |
+| -------------------------------------------------------------------------------- | -------------- | ----------------- | ------------------------------------------------------------------------------------------------------------------------------- |
+| [MozSwipeGesture](/es/docs/Web/Reference/Events/MozSwipeGesture) | | _Addons specific_ | A touch point is swiped across the touch surface |
+| [MozMagnifyGestureStart](/es/docs/Web/Reference/Events/MozMagnifyGestureStart) | | _Addons specific_ | Two touch points start to move away from each other. |
+| [MozMagnifyGestureUpdate](/es/docs/Web/Reference/Events/MozMagnifyGestureUpdate) | | _Addons specific_ | Two touch points move away from each other (after a MozMagnifyGestureStart). |
+| [MozMagnifyGesture](/es/docs/Web/Reference/Events/MozMagnifyGesture) | | _Addons specific_ | Two touch points moved away from each other (after a sequence of MozMagnifyGestureUpdate). |
+| [MozRotateGestureStart](/es/docs/Web/Reference/Events/MozRotateGestureStart) | | _Addons specific_ | Two touch points start to rotate around a point. |
+| [MozRotateGestureUpdate](/es/docs/Web/Reference/Events/MozRotateGestureUpdate) | | _Addons specific_ | Two touch points rotate around a point (after a MozRotateGestureStart). |
+| [MozRotateGesture](/es/docs/Web/Reference/Events/MozRotateGesture) | | _Addons specific_ | Two touch points rotate around a point (after a sequence of MozRotateGestureUpdate). |
+| [MozTapGesture](/es/docs/Web/Reference/Events/MozTapGesture) | | _Addons specific_ | Two touch points are tapped on the touch surface. |
+| [MozPressTapGesture](/es/docs/Web/Reference/Events/MozPressTapGesture) | | _Addons specific_ | A "press-tap" gesture happened on the touch surface (first finger down, second finger down, second finger up, first finger up). |
+| [MozEdgeUIGesture](/es/docs/Web/Reference/Events/MozEdgeUIGesture) | | _Addons specific_ | A touch point is swiped across the touch surface to invoke the edge UI (Win8 only). |
+| [MozAfterPaint](/es/docs/Web/Reference/Events/MozAfterPaint) | | _Addons specific_ | Content has been repainted. |
+| [MozBeforeResize](/es/docs/Web/Reference/Events/MozBeforeResize) | | _Addons specific_ | A window is about to be resized. |
+| [DOMPopupBlocked](/es/docs/Web/Reference/Events/DOMPopupBlocked) | | _Addons specific_ | A popup has been blocked |
+| [DOMWindowCreated](/es/docs/Web/Reference/Events/DOMWindowCreated) | | _Addons specific_ | A window has been created. |
+| [DOMWindowClose](/es/docs/Web/Reference/Events/DOMWindowClose) | | _Addons specific_ | A window is about to be closed. |
+| [DOMTitleChanged](/es/docs/Web/Reference/Events/DOMTitleChanged) | | _Addons specifc_ | The title of a window has changed. |
+| [DOMLinkAdded](/es/docs/Web/Reference/Events/DOMLinkAdded) | | _Addons specifc_ | A link has been added a document. |
+| [DOMLinkRemoved](/es/docs/Web/Reference/Events/DOMLinkRemoved) | | _Addons specifc_ | A link has been removed inside from a document. |
+| [DOMMetaAdded](/es/docs/Web/Reference/Events/DOMMetaAdded) | | _Addons specific_ | A `meta` element has been added to a document. |
+| [DOMMetaRemoved](/es/docs/Web/Reference/Events/DOMMetaRemoved) | | _Addons specific_ | A `meta` element has been removed from a document. |
+| [DOMWillOpenModalDialog](/es/docs/Web/Reference/Events/DOMWillOpenModalDialog) | | _Addons specific_ | A modal dialog is about to open. |
+| [DOMModalDialogClosed](/es/docs/Web/Reference/Events/DOMModalDialogClosed) | | _Addons specific_ | A modal dialog has been closed. |
+| [DOMAutoComplete](/es/docs/Web/Reference/Events/DOMAutoComplete) | | _Addons specific_ | The content of an element has been auto-completed. |
+| [DOMFrameContentLoaded](/es/docs/Web/Reference/Events/DOMFrameContentLoaded) | | _Addons specific_ | The frame has finished loading (but not its dependent resources). |
+| [AlertActive](/es/docs/Web/Reference/Events/AlertActive) | | _Addons specific_ | A [`notification`](/en-US/docs/XUL/notification) element is shown. |
+| [AlertClose](/es/docs/Web/Reference/Events/AlertClose) | | _Addons specific_ | A [`notification`](/en-US/docs/XUL/notification) element is closed. |
+| [fullscreen](/es/docs/Web/Reference/Events/fullscreen) | | _Addons specific_ | Browser fullscreen mode has been entered or left. |
+| [sizemodechange](/es/docs/Web/Reference/Events/sizemodechange) | | _Addons specific_ | Window has entered/left fullscreen mode, or has been minimized/unminimized. |
+| [MozEnteredDomFullscreen](/es/docs/Web/Reference/Events/MozEnteredDomFullscreen) | | _Addons specific_ | [DOM fullscreen](/es/docs/DOM/Using_full-screen_mode) mode has been entered. |
+| [SSWindowClosing](/es/docs/Web/Reference/Events/SSWindowClosing) | | _Addons specific_ | The session store will stop tracking this window. |
+| [SSTabClosing](/es/docs/Web/Reference/Events/SSTabClosing) | | _Addons specific_ | The session store will stop tracking this tab. |
+| [SSTabRestoring](/es/docs/Web/Reference/Events/SSTabRestoring) | | _Addons specific_ | A tab is about to be restored. |
+| [SSTabRestored](/es/docs/Web/Reference/Events/SSTabRestored) | | _Addons specific_ | A tab has been restored. |
+| [SSWindowStateReady](/es/docs/Web/Reference/Events/SSWindowStateReady) | | _Addons specific_ | A window state has switched to "ready". |
+| [SSWindowStateBusy](/es/docs/Web/Reference/Events/SSWindowStateBusy) | | _Addons specific_ | A window state has switched to "busy". |
+| [tabviewsearchenabled](/es/docs/Web/Reference/Events/tabviewsearchenabled) | | _Addons specific_ | The search feature of Panorama has been activated |
+| [tabviewsearchdisabled](/es/docs/Web/Reference/Events/tabviewsearchdisabled) | | _Addons specific_ | The search feature of Panorama has been deactivated |
+| [tabviewframeinitialized](/es/docs/Web/Reference/Events/tabviewframeinitialized) | | _Addons specific_ | The frame container of Panorama has been initialized |
+| [tabviewshown](/es/docs/Web/Reference/Events/tabviewshown) | | _Addons specific_ | The Panorama tab has been shown |
+| [tabviewhidden](/es/docs/Web/Reference/Events/tabviewhidden) | | _Addons specific_ | The Panorama tab has been hidden |
+| [TabOpen](/es/docs/Web/Reference/Events/TabOpen) | | _Addons specific_ | A tab has been opened. |
+| [TabClose](/es/docs/Web/Reference/Events/TabClose) | | _Addons specific_ | A tab has been closed. |
+| [TabSelect](/es/docs/Web/Reference/Events/TabSelect) | | _Addons specific_ | A tab has been selected. |
+| [TabShow](/es/docs/Web/Reference/Events/TabShow) | | _Addons specific_ | A tab has been shown. |
+| [TabHide](/es/docs/Web/Reference/Events/TabHide) | | _Addons specific_ | A tab has been hidden. |
+| [TabPinned](/es/docs/Web/Reference/Events/TabPinned) | | _Addons specific_ | A tab has been pinned. |
+| [TabUnpinned](/es/docs/Web/Reference/Events/TabUnpinned) | | _Addons specific_ | A tab has been unpinned. |
+
+### Eventos específicos de la herramienta para desarrolladores
+
+| Event Name | Event Type | Specification | Fired when... |
+| ------------------------------------------------------------------------------------ | ---------- | ------------------- | --------------------------------------------------------------------------------- |
+| [CssRuleViewRefreshed](/es/docs/Web/Reference/Events/CssRuleViewRefreshed) | | _devtools specific_ | The "Rules" view of the style inspector has been updated. |
+| [CssRuleViewChanged](/es/docs/Web/Reference/Events/CssRuleViewChanged) | | _devtools specific_ | The "Rules" view of the style inspector has been changed. |
+| [CssRuleViewCSSLinkClicked](/es/docs/Web/Reference/Events/CssRuleViewCSSLinkClicked) | | _devtools specific_ | A link to a CSS file has been clicked in the "Rules" view of the style inspector. |
+
+## Categorías
+
+### Eventos de Animación
+
+{{event("animationend")}}, {{event("animationiteration")}}, {{event("animationstart")}}, {{event("beginEvent")}}, {{event("endEvent")}}, {{event("repeatEvent")}}
+
+### Eventos de Batería
+
+{{event("chargingchange")}}, {{event("chargingtimechange")}}, {{event("dischargingtimechange")}}, {{event("levelchange")}}
+
+### Eventos de Llamadas
+
+{{event("alerting")}}, {{event("busy")}}, {{event("callschanged")}}, {{event("cfstatechange")}}, [onconnected](/es/docs/DOM/onconnected) {{event("connected")}}, {{event("connecting")}}, {{event("dialing")}}, {{event("disconnected")}}, {{event("disconnecting")}}, {{event("error_(Telephony)","error")}}, {{event("held")}}, {{event("holding")}}, {{event("incoming")}}, {{event("resuming")}}, {{event("statechange")}}, {{event("voicechange")}}
+
+### Eventos CSS
+
+[CssRuleViewRefreshed](/es/docs/Web/Reference/Events/CssRuleViewRefreshed), [CssRuleViewChanged](/es/docs/Web/Reference/Events/CssRuleViewChanged), [CssRuleViewCSSLinkClicked](/es/docs/Web/Reference/Events/CssRuleViewCSSLinkClicked), {{event("transitionend")}}
+
+### Eventos de Bases de datos
+
+[`abort`](/en-US/docs/Web/Reference/Events/abort_indexedDB), [`blocked`](/en-US/docs/Web/Reference/Events/blocked_indexedDB), [`complete`](/en-US/docs/Web/Reference/Events/complete_indexedDB), {{event("error")}}, [`success`](/en-US/docs/Web/Reference/Events/success_indexedDB), [`upgradeneeded`](/en-US/docs/Web/Reference/Events/upgradeneeded_indexedDB), [`versionchange`](/en-US/docs/Web/Reference/Events/versionchange_indexedDB)
+
+### Eventos de Documento
+
+[DOMLinkAdded](/es/docs/Web/Reference/Events/DOMLinkAdded), [DOMLinkRemoved](/es/docs/Web/Reference/Events/DOMLinkRemoved), [DOMMetaAdded](/es/docs/Web/Reference/Events/DOMMetaAdded), [DOMMetaRemoved](/es/docs/Web/Reference/Events/DOMMetaRemoved), [DOMWillOpenModalDialog](/es/docs/Web/Reference/Events/DOMWillOpenModalDialog), [DOMModalDialogClosed](/es/docs/Web/Reference/Events/DOMModalDialogClosed), {{event("unload")}}
+
+### Eventos de mutación DOM
+
+code>[DOMAttributeNameChanged](/es/docs/DOM/Mutation_events), [`DOMAttrModified`](/en-US/docs/DOM/Mutation_events), [`DOMCharacterDataModified`](/en-US/docs/DOM/Mutation_events), {{event("DOMContentLoaded")}}, [`DOMElementNameChanged`](/en-US/docs/DOM/Mutation_events), [`DOMNodeInserted`](/en-US/docs/DOM/Mutation_events), [`DOMNodeInsertedIntoDocument`](/en-US/docs/DOM/Mutation_events), [`DOMNodeRemoved`](/en-US/docs/DOM/Mutation_events), [`DOMNodeRemovedFromDocument`](/en-US/docs/DOM/Mutation_events), [`DOMSubtreeModified`](/en-US/docs/DOM/Mutation_events)
+
+### Eventos de Arrastre
+
+{{event("drag")}}, `dragdrop`, {{event("dragend")}}, {{event("dragenter")}}, `dragexit`, `draggesture`, {{event("dragleave")}}, {{event("dragover")}}, {{event("dragstart")}}, {{event("drop")}}
+
+### Eventos de Elemento
+
+{{event("invalid")}}, {{event("overflow")}}, {{event("underflow")}}", [DOMAutoComplete](/es/docs/Web/Reference/Events/DOMAutoComplete), {{event("command")}}, {{event("commandupdate")}}
+
+### Eventos de Foco
+
+{{event("blur")}}, {{event("change")}}, `DOMFocusIn`, `DOMFocusOut`, {{event("focus")}}, {{event("focusin")}}, {{event("focusout")}}
+
+### Eventos de Formulario
+
+{{event("reset")}}, {{event("submit")}}
+
+### Eventos de Fotograma
+
+{{event("mozbrowserclose")}}, {{event("mozbrowsercontextmenu")}}, {{event("mozbrowsererror")}}, {{event("mozbrowsericonchange")}}, {{event("mozbrowserlocationchange")}}, {{event("mozbrowserloadend")}}, {{event("mozbrowserloadstart")}}, {{event("mozbrowseropenwindow")}}, {{event("mozbrowsersecuritychange")}}, {{event("mozbrowsershowmodalprompt")}}, {{event("mozbrowsertitlechange")}}, [DOMFrameContentLoaded](/es/docs/Web/Reference/Events/DOMFrameContentLoaded)
+
+### Eventos de dispositivo de entrada
+
+{{event("click")}}, {{event("contextmenu")}}, {{event("DOMMouseScroll")}}, {{event("dblclick")}}, {{event("gamepadconnected")}}, {{event("gamepaddisconnected")}}, {{event("keydown")}}, {{event("keypress")}}, {{event("keyup")}}, {{event("MozGamepadButtonDown")}}, {{event("MozGamepadButtonUp")}}, {{event("mousedown")}}, {{event("mouseenter")}}, {{event("mouseleave")}}, {{event("mousemove")}}, {{event("mouseout")}}, {{event("mouseover")}}, {{event("mouseup")}}, {{event("mousewheel")}}, {{event("MozMousePixelScroll")}}, {{event("pointerlockchange")}}, {{event("pointerlockerror")}},{{event("wheel")}}
+
+### Eventos de Medios
+
+{{event("audioprocess")}}, {{event("canplay")}}, {{event("canplaythrough")}}, {{event("durationchange")}}, {{event("emptied")}}, {{event("ended")}}, {{event("ended_(Web_Audio)", "ended")}}, {{event("loadeddata")}}, {{event("loadedmetadata")}}, {{event("MozAudioAvailable")}}, {{event("pause")}}, {{event("play")}}, {{event("playing")}}, {{event("ratechange")}}, {{event("seeked")}}, {{event("seeking")}}, {{event("stalled")}}, {{event("suspend")}}, {{event("timeupdate")}}, {{event("volumechange")}}, {{event("waiting")}}, {{event("complete")}}
+
+### Eventos de Menú
+
+{{event("DOMMenuItemActive")}}, {{event("DOMMenuItemInactive")}}
+
+### Eventos de Red
+
+{{event("datachange")}}, {{event("dataerror")}}, {{event("disabled")}}, {{event("enabled")}}, {{event("offline")}}, {{event("online")}}, {{event("statuschange")}}, {{event("connectionInfoUpdate")}},
+
+### Eventos de Notificación
+
+[AlertActive](/es/docs/Web/Reference/Events/AlertActive), [AlertClose](/es/docs/Web/Reference/Events/AlertClose)
+
+### Eventos Popup
+
+{{event("popuphidden")}}, {{event("popuphiding")}}, {{event("popupshowing")}}, {{event("popupshown")}}, [DOMPopupBlocked](/es/docs/Web/Reference/Events/DOMPopupBlocked)
+
+### Eventos de Impresión
+
+{{event("afterprint")}}, {{event("beforeprint")}}
+
+### Eventos de Progreso
+
+[`abort`](), {{event("error")}}, [`load`](), {{event("loadend")}}, {{event("loadstart")}}, {{event("progress")}}, [`progress`](), {{event("timeout")}}, `uploadprogress`
+
+### Eventos de Recursos
+
+{{event("abort")}}, {{event("cached")}}, {{event("error")}}, {{event("load")}}
+
+### Eventos de Secuencia de Comandos
+
+{{event("afterscriptexecute")}}, {{event("beforescriptexecute")}}
+
+### Eventos de Sensor
+
+{{event("compassneedscalibration")}}, {{event("devicelight")}}, {{event("devicemotion")}}, {{event("deviceorientation")}}, {{event("deviceproximity")}}, {{event("MozOrientation")}}, {{event("orientationchange")}}, {{event("userproximity")}}
+
+### Eventos del Historial de sesión
+
+{{event("pagehide")}}, {{event("pageshow")}}, {{event("popstate")}}
+
+### Eventos de Tarjeta de memoria
+
+{{event("icccardlockerror")}}, {{event("iccinfochange")}}, {{event("smartcard-insert")}}, {{event("smartcard-remove")}}, {{event("stkcommand")}}, {{event("stksessionend")}}, {{event("cardstatechange")}}
+
+### Eventos SMS y USSD
+
+{{event("delivered")}}, {{event("received")}}, {{event("sent")}}, {{event("ussdreceived")}}
+
+### Eventos de almacenamiento
+
+{{event("change")}}, {{event("storage")}}
+
+### Eventos SVG
+
+{{event("SVGAbort")}}, {{event("SVGError")}}, {{event("SVGLoad")}}, {{event("SVGResize")}}, {{event("SVGScroll")}}, {{event("SVGUnload")}}, {{event("SVGZoom")}}
+
+### Eventos de Pestañas
+
+[tabviewsearchenabled](/es/docs/Web/Reference/Events/tabviewsearchenabled), [tabviewsearchdisabled](/es/docs/Web/Reference/Events/tabviewsearchdisabled), [tabviewframeinitialized](/es/docs/Web/Reference/Events/tabviewframeinitialized), [tabviewshown](/es/docs/Web/Reference/Events/tabviewshown), [tabviewhidden](/es/docs/Web/Reference/Events/tabviewhidden), [TabOpen](/es/docs/Web/Reference/Events/TabOpen), [TabClose](/es/docs/Web/Reference/Events/TabClose), [TabSelect](/es/docs/Web/Reference/Events/TabSelect), [TabShow](/es/docs/Web/Reference/Events/TabShow), [TabHide](/es/docs/Web/Reference/Events/TabHide), [TabPinned](/es/docs/Web/Reference/Events/TabPinned), [TabUnpinned](/es/docs/Web/Reference/Events/TabUnpinned), [SSTabClosing](/es/docs/Web/Reference/Events/SSTabClosing), [SSTabRestoring](/es/docs/Web/Reference/Events/SSTabRestoring), [SSTabRestored](/es/docs/Web/Reference/Events/SSTabRestored), {{event("visibilitychange")}}
+
+### Eventos de Texto
+
+{{event("compositionend")}}, {{event("compositionstart")}}, {{event("compositionupdate")}}, {{event("copy")}}, {{event("cut")}}, {{event("paste")}}, {{event("select")}}, `text`
+
+### Eventos de Toque
+
+[MozEdgeUIGesture](/es/docs/Web/Reference/Events/MozEdgeUIGesture), [MozMagnifyGesture](/es/docs/Web/Reference/Events/MozMagnifyGesture), [MozMagnifyGestureStart](/es/docs/Web/Reference/Events/MozMagnifyGestureStart), [MozMagnifyGestureUpdate](/es/docs/Web/Reference/Events/MozMagnifyGestureUpdate), [MozPressTapGesture](/es/docs/Web/Reference/Events/MozPressTapGesture), [MozRotateGesture](/es/docs/Web/Reference/Events/MozRotateGesture), [MozRotateGestureStart](/es/docs/Web/Reference/Events/MozRotateGestureStart), [MozRotateGestureUpdate](/es/docs/Web/Reference/Events/MozRotateGestureUpdate), [MozSwipeGesture](/es/docs/Web/Reference/Events/MozSwipeGesture), [MozTapGesture](/es/docs/Web/Reference/Events/MozTapGesture), [MozTouchDown](), [MozTouchMove](), [MozTouchUp](),4 {{event("touchcancel")}}, {{event("touchend")}}, {{event("touchenter")}}, {{event("touchleave")}}, {{event("touchmove")}}, {{event("touchstart")}}
+
+### Eventos de Actualización
+
+{{event("checking")}}, {{event("downloading")}}, {{event("error")}}, {{event("noupdate")}}, {{event("obsolete")}}, {{event("updateready")}}
+
+### Eventos de Cámbio de valor
+
+{{event("broadcast")}}, {{event("CheckboxStateChange")}}, {{event("hashchange")}}, {{event("input")}}, {{event("RadioStateChange")}}, {{event("readystatechange")}}, {{event("ValueChange")}}
+
+### Eventos de Visualización
+
+[fullscreen](/es/docs/Web/Reference/Events/fullscreen), {{event("fullscreenchange")}}, {{event("fullscreenerror")}}, [MozEnteredDomFullscreen](/es/docs/Web/Reference/Events/MozEnteredDomFullscreen), {{event("MozScrolledAreaChanged")}}, {{event("resize")}}, {{event("scroll")}}, [sizemodechange](/es/docs/Web/Reference/Events/sizemodechange)
+
+### Eventos de Websocket
+
+[`close`](/en-US/docs/Web/Reference/Events/close_websocket), {{event("error")}}, [`message`](/en-US/docs/Web/Reference/Events/message_websocket), [`open`](/en-US/docs/Web/Reference/Events/open_websocket)
+
+### Eventos de Ventana
+
+[DOMWindowCreated](/es/docs/Web/Reference/Events/DOMWindowCreated), [DOMWindowClose](/es/docs/Web/Reference/Events/DOMWindowClose), [DOMTitleChanged](/es/docs/Web/Reference/Events/DOMTitleChanged), [MozBeforeResize](/es/docs/Web/Reference/Events/MozBeforeResize), [SSWindowClosing](/es/docs/Web/Reference/Events/SSWindowClosing), [SSWindowStateReady](/es/docs/Web/Reference/Events/SSWindowStateReady), [SSWindowStateBusy](/es/docs/Web/Reference/Events/SSWindowStateBusy), [close](/es/docs/Web/Reference/Events/close_event)
+
+### Eventos sin categorizar
+
+{{event("beforeunload")}}, {{event("localized")}}, [`message`](/en-US/docs/Web/Reference/Events/message_webworker), [`message`](/en-US/docs/Web/Reference/Events/message_webmessaging), [`message`](/en-US/docs/Web/Reference/Events/message_serversentevents), [MozAfterPaint](/es/docs/Web/Reference/Events/MozAfterPaint), {{event("moztimechange")}}, [`open`](/en-US/docs/Web/Reference/Events/open_serversentevents), {{event("show")}}
+
+## Ver también
+
+- {{domxref("Event")}}
+- [Event developer guide](/es/docs/Web/Guide/DOM/Events)
diff --git a/files/es/web/guide/ajax/community/index.html b/files/es/web/guide/ajax/community/index.html
deleted file mode 100644
index 577e32ae63aaf3..00000000000000
--- a/files/es/web/guide/ajax/community/index.html
+++ /dev/null
@@ -1,45 +0,0 @@
----
-title: Comunidad
-slug: Web/Guide/AJAX/Community
-tags:
- - AJAX
- - Todas_las_Categorías
-translation_of: Web/Guide/AJAX/Community
-original_slug: Web/Guide/AJAX/Comunidad
----
-
-
- Si conoces alguna lista de correo, grupo de noticias, foro, o comunidad relacionada con AJAX que pueda ser de interés. Por favor, pon aquí un enlace.
-Mozilla
-
- La comunidad Mozilla... en inglés
-
-{{ DiscussionList("dev-ajax", "mozilla.dev.ajax") }}
-Listas de correo
-
-
-Foros
-
- AJAX en
-
- Foros del Web
-
-
-Bitácoras
-
-
-Wikis
-
-
-Otros Sitios
-
-
-
diff --git a/files/es/web/guide/ajax/community/index.md b/files/es/web/guide/ajax/community/index.md
new file mode 100644
index 00000000000000..82337ce1d4c09d
--- /dev/null
+++ b/files/es/web/guide/ajax/community/index.md
@@ -0,0 +1,39 @@
+---
+title: Comunidad
+slug: Web/Guide/AJAX/Community
+tags:
+ - AJAX
+ - Todas_las_Categorías
+translation_of: Web/Guide/AJAX/Community
+original_slug: Web/Guide/AJAX/Comunidad
+---
+Si conoces alguna lista de correo, grupo de noticias, foro, o comunidad relacionada con AJAX que pueda ser de interés. Por favor, pon aquí un enlace.
+
+### Mozilla
+
+- La comunidad Mozilla... en inglés
+
+{{ DiscussionList("dev-ajax", "mozilla.dev.ajax") }}
+
+### Listas de correo
+
+-
+
+### Foros
+
+- [AJAX](http://www.forosdelweb.com/forumdisplay.php?f=77) en
+ _Foros del Web_
+
+### Bitácoras
+
+-
+
+### Wikis
+
+-
+
+### Otros Sitios
+
+-
+
+categorías
diff --git a/files/es/web/guide/ajax/getting_started/index.html b/files/es/web/guide/ajax/getting_started/index.html
deleted file mode 100644
index 0bbaafeeef3512..00000000000000
--- a/files/es/web/guide/ajax/getting_started/index.html
+++ /dev/null
@@ -1,232 +0,0 @@
----
-title: Primeros Pasos
-slug: Web/Guide/AJAX/Getting_Started
-tags:
- - AJAX
- - API
- - Avanzado
- - Todas_las_Categorías
- - XMLHttpRequest
-translation_of: Web/Guide/AJAX/Getting_Started
-original_slug: Web/Guide/AJAX/Primeros_Pasos
----
-
-
-Este artículo es una guía básica sobre AJAX e incluye dos ejemplos.
-
-¿Qué es AJAX?
-
-AJAX (JavaScript Asíncrono y XML) es un término nuevo para describir dos capacidades de los navegadores que han estado presentes por años, pero que habían sido ignoradas por muchos desarrolladores Web, hasta hace poco que surgieron aplicaciones como Gmail, Google suggest y Google Maps.
-
-Las dos capacidades en cuestión son:
-
-
- La posibilidad de hacer peticiones al servidor sin tener que volver a cargar la página.
- La posibilidad de analizar y trabajar con documentos XML.
-
-
-Primer Paso – Cómo realizar una petición HTTP al servidor
-
-Para realizar una petición HTTP usando JavaScript, es necesario crear una instancia de una clase que provea esta funcionalidad. Esta clase fue inicialmente introducida en Internet Explorer como un objeto ActiveX, llamado XMLHTTP
. Después Mozilla, Safari y otros navegadores lo siguieron, implementando una clase XMLHttpRequest
que soportaba los métodos y las propiedades del objeto ActiveX original.
-
-Como resultado, para crear una instancia de la clase requerida que funcione en todos los navegadores, es necesario poner:
-
-if (window.XMLHttpRequest) { // Mozilla, Safari, ...
- http_request = new XMLHttpRequest();
-} else if (window.ActiveXObject) { // IE
- http_request = new ActiveXObject("Microsoft.XMLHTTP");
-}
-
-
-(El código mostrado es una versión simplificada con fines ilustrativos. Para un ejemplo más realista ver el paso 3 de este artículo.)
-
-Algunas versiones de los navegadores Mozilla no funcionan correctamente si la respuesta del servidor no tiene la cabecera mime de tipo XML. En ese caso es posible usar un método extra que sobreescriba la cabecera enviada por el servidor, en caso que no sea text/xml
.
-
-http_request = new XMLHttpRequest();
-http_request.overrideMimeType('text/xml');
-
-
-El próximo paso es decidir qué se hará después de recibir la respuesta del servidor a la petición enviada. A estas alturas sólo es necesario decirle al objeto HTTPrequest qué función de JavaScript se encargará de procesar la respuesta. Para esto se asigna la propiedad onreadystatechange
del objeto al nombre de la función de JavaScript que se va a utilizar:
-
-http_request.onreadystatechange = nameOfTheFunction;
-
-Es importante notar que no hay paréntesis después del nombre de la función y no se pasa ningún parámetro. También es posible definir la función en ese momento, y poner en seguida las acciones que procesarán la respuesta:
-
-http_request.onreadystatechange = function(){
- // procesar la respuesta
-};
-
-
-Después de especificar qué pasará al recibir la respuesta es necesario hacer la petición. Para esto se utilizan los métodos open()
y send()
de la clase HTTP request, como se muestra a continuación:
-
-http_request.open('GET', 'http://www.example.org/algun.archivo', true);
-http_request.send();
-
-
-
- El primer parámetro de la llamada a open()
es el método HTTP request – GET, POST, HEAD o cualquier otro método que se quiera usar y sea aceptado por el servidor. El nombre del método se escribe en mayúsculas, sino algunos navegadores (como Firefox) podrían no procesar la petición. Para más información sobre los métodos HTTP request visitar W3C specs
- El segundo parámetro es el URL de la página que se esta pidiendo. Por medida de seguridad no es posible llamar páginas en dominios de terceras personas. Se debe saber el dominio exacto de todas las páginas o se obtendrá un error de 'permiso denegado' al llamar open(). Una falla común es acceder al sitio por domain.tld e intentar llamar las páginas como www.domain.tld.
- El tercer parámetro establece si la petición es asíncrona. Si se define TRUE
, la ejecución de la función de JavaScript continuará aún cuando la respuesta del servidor no haya llegado. Por esta capacidad es la A en AJAX.
-
-
-El parámetro en el método send()
puede ser cualquier información que se quiera enviar al servidor si se usa POST para la petición. La información se debe enviar en forma de cadena, por ejemplo:
-
-name=value&anothername=othervalue&so=on
-
-Si se quiere enviar información de esta forma, es necesario cambiar el tipo MIME de la petición usando la siguiente línea:
-
-http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
-
-
-De otro modo el servidor descartará la información.
-
-Segundo Paso – Procesando la respuesta del servidor
-
-Al enviar la petición HTTP es necesario indicar el nombre de la función JavaScript que procesará la respuesta.
-
-http_request.onreadystatechange = nameOfTheFunction;
-
-A continuación se verá lo que esta función realiza. En primer lugar necesita revisar el estado de la petición. Si el estado tiene el valor 4, significa que la respuesta completa del servidor ha sido recibida y es posible continuar procesándola.
-
-if (http_request.readyState == 4) {
- // todo va bien, respuesta recibida
-} else {
- // aun no esta listo
-}
-
-
-La lista completa de valores para la propiedad readyState
es:
-
-
- 0 (no inicializada)
- 1 (leyendo)
- 2 (leido)
- 3 (interactiva)
- 4 (completo)
-
-
-(Source )
-
-Ahora es necesario revisar el código de status de la respuesta HTTP. La lista completa de códigos aparece en el sitio de la W3C . Para el próposito de este artículo sólo es importante el código 200 OK
.
-
-if (http_request.status == 200) {
- // perfect!
-} else {
- // hubo algún problema con la petición,
- // por ejemplo código de respuesta 404 (Archivo no encontrado)
- // o 500 (Internal Server Error)
-}
-
-
-Después de haber revisado el estado de la petición y el código de status de la respuesta, depende de uno hacer cualquier cosa con la información que el servidor ha entregado. Existen dos opciones para tener acceso a esa información:
-
-
- http_request.responseText
– regresará la respuesta del servidor como una cadena de texto.
- http_request.responseXML
– regresará la respuesta del servidor como un objeto XMLDocument
que se puede recorrer usando las funciones de JavaScript DOM.
-
-
-Tercer Paso – "¡Ahora todo junto!" - Un sencillo ejemplo
-
-En este ejemplo se utilizará todo lo que se ha visto para hacer una petición HTTP. Se pedirá un documento HTML llamado test.html
, que contiene el texto "Esto es una prueba." y después usaremos la función alert()
con el contenido del archivo test.html
.
-
-<script type="text/javascript" language="javascript">
-
- var http_request = false;
-
- function makeRequest(url) {
-
- http_request = false;
-
- if (window.XMLHttpRequest) { // Mozilla, Safari,...
- http_request = new XMLHttpRequest();
- if (http_request.overrideMimeType) {
- http_request.overrideMimeType('text/xml');
- // Ver nota sobre esta linea al final
- }
- } else if (window.ActiveXObject) { // IE
- try {
- http_request = new ActiveXObject("Msxml2.XMLHTTP");
- } catch (e) {
- try {
- http_request = new ActiveXObject("Microsoft.XMLHTTP");
- } catch (e) {}
- }
- }
-
- if (!http_request) {
- alert('Falla :( No es posible crear una instancia XMLHTTP');
- return false;
- }
- http_request.onreadystatechange = alertContents;
- http_request.open('GET', url, true);
- http_request.send();
-
- }
-
- function alertContents() {
-
- if (http_request.readyState == 4) {
- if (http_request.status == 200) {
- alert(http_request.responseText);
- } else {
- alert('Hubo problemas con la petición.');
- }
- }
-
- }
-</script>
-<span
- style="cursor: pointer; text-decoration: underline"
- onclick="makeRequest('test.html')">
- Hacer una petición
-</span>
-
-
-En este ejemplo:
-
-
- El usuario presiona el vínculo "Hacer una petición" en el navegador;
- Esto llama la función makeRequest()
que tiene como parámetro test.html
que es un archivo HTML localizado en el mismo directorio;
- La petición es realizada y después (onreadystatechange
) la ejecución pasa a alertContents()
;
- alertContents()
verifica si la respuesta fue recibida y si es OK, si es así utiliza alert()
con el contenido de test.html
.
-
-
-Puedes probar el ejemplo aquí y puedes ver el archivo de prueba aquí .
-
-Nota : La línea http_request.overrideMimeType('text/xml');
arriba causaría problemas en la consola de Javascript de Firefox 1.5b, como esta descrito en https://bugzilla.mozilla.org/show_bug.cgi?id=311724 , si la página llamada por XMLHttpRequest no es XML válido (por ejemplo, si es texto).
-
-Si se obtiene Syntax Error o Not Well Formed Error en el navegador, y no se está intentando cargar una página XML con XMLHttpRequest, se puede eliminar esa línea del código.
-
-Cuarto Paso – Trabajando con la respuesta XML
-
-En el ejemplo anterior se utilizo la propiedad reponseText
del objeto pedido para mostrar el contenido de test.html
una vez que la respuesta HTTP había sido recibida. En éste se utilizará la propiedad responseXML
.
-
-Primero hay que crear un documento de XML válido. El documento (test.xml) contiene lo siguiente:
-
-<?xml version="1.0" ?>
-<root>
- Esto es una prueba.
-</root>
-
-
-Para que funcione el script solo es necesario cambiar la línea de petición por:
-
-...
-onclick="makeRequest('test.xml')">
-...
-
-
-Y en alertContents()
es necerario remplazar la línea donde aparece alert(http_request.responseText);
por:
-
-var xmldoc = http_request.responseXML;
-var root_node = xmldoc.getElementsByTagName('root').item(0);
-alert(root_node.firstChild.data);
-
-
-De esta manera se utiliza el objeto XMLDocument
dado por responseXML
y se usan métodos del DOM para acceder a la información contenida en el documento XML. El archivo test.xml
se encuentra aquí y el script actualizado está aquí .
-
-Para más información sobre los metodos del DOM, visita los documentos de la implementación del DOM de Mozilla .
-
-
-
-{{ languages( { "ca": "ca/AJAX/Primers_passos", "de": "de/AJAX/Getting_Started", "en": "en/AJAX/Getting_Started", "fr": "fr/AJAX/Premiers_pas", "it": "it/AJAX/Iniziare", "ja": "ja/AJAX/Getting_Started", "ko": "ko/AJAX/Getting_Started", "pl": "pl/AJAX/Na_pocz\u0105tek", "pt": "pt/AJAX/Como_come\u00e7ar", "ru": "ru/AJAX/\u0421_\u0447\u0435\u0433\u043e_\u043d\u0430\u0447\u0430\u0442\u044c", "zh-cn": "cn/AJAX/\u5f00\u59cb", "zh-tw": "zh_tw/AJAX/\u4e0a\u624b\u7bc7" } ) }}
diff --git a/files/es/web/guide/ajax/getting_started/index.md b/files/es/web/guide/ajax/getting_started/index.md
new file mode 100644
index 00000000000000..bbc8272e46da67
--- /dev/null
+++ b/files/es/web/guide/ajax/getting_started/index.md
@@ -0,0 +1,227 @@
+---
+title: Primeros Pasos
+slug: Web/Guide/AJAX/Getting_Started
+tags:
+ - AJAX
+ - API
+ - Avanzado
+ - Todas_las_Categorías
+ - XMLHttpRequest
+translation_of: Web/Guide/AJAX/Getting_Started
+original_slug: Web/Guide/AJAX/Primeros_Pasos
+---
+Este artículo es una guía básica sobre AJAX e incluye dos ejemplos.
+
+### ¿Qué es AJAX?
+
+AJAX (JavaScript Asíncrono y XML) es un término nuevo para describir dos capacidades de los navegadores que han estado presentes por años, pero que habían sido ignoradas por muchos desarrolladores Web, hasta hace poco que surgieron aplicaciones como Gmail, Google suggest y Google Maps.
+
+Las dos capacidades en cuestión son:
+
+- La posibilidad de hacer peticiones al servidor sin tener que volver a cargar la página.
+- La posibilidad de analizar y trabajar con documentos XML.
+
+### Primer Paso – Cómo realizar una petición HTTP al servidor
+
+Para realizar una petición HTTP usando JavaScript, es necesario crear una instancia de una clase que provea esta funcionalidad. Esta clase fue inicialmente introducida en Internet Explorer como un objeto ActiveX, llamado `XMLHTTP`. Después Mozilla, Safari y otros navegadores lo siguieron, implementando una clase `XMLHttpRequest` que soportaba los métodos y las propiedades del objeto ActiveX original.
+
+Como resultado, para crear una instancia de la clase requerida que funcione en todos los navegadores, es necesario poner:
+
+```
+if (window.XMLHttpRequest) { // Mozilla, Safari, ...
+ http_request = new XMLHttpRequest();
+} else if (window.ActiveXObject) { // IE
+ http_request = new ActiveXObject("Microsoft.XMLHTTP");
+}
+```
+
+(El código mostrado es una versión simplificada con fines ilustrativos. Para un ejemplo más realista ver el paso 3 de este artículo.)
+
+Algunas versiones de los navegadores Mozilla no funcionan correctamente si la respuesta del servidor no tiene la cabecera mime de tipo XML. En ese caso es posible usar un método extra que sobreescriba la cabecera enviada por el servidor, en caso que no sea `text/xml`.
+
+```
+http_request = new XMLHttpRequest();
+http_request.overrideMimeType('text/xml');
+```
+
+El próximo paso es decidir qué se hará después de recibir la respuesta del servidor a la petición enviada. A estas alturas sólo es necesario decirle al objeto HTTPrequest qué función de JavaScript se encargará de procesar la respuesta. Para esto se asigna la propiedad `onreadystatechange` del objeto al nombre de la función de JavaScript que se va a utilizar:
+
+`http_request.onreadystatechange = nameOfTheFunction;`
+
+Es importante notar que no hay paréntesis después del nombre de la función y no se pasa ningún parámetro. También es posible definir la función en ese momento, y poner en seguida las acciones que procesarán la respuesta:
+
+```
+http_request.onreadystatechange = function(){
+ // procesar la respuesta
+};
+```
+
+Después de especificar qué pasará al recibir la respuesta es necesario hacer la petición. Para esto se utilizan los métodos `open()` y `send()` de la clase HTTP request, como se muestra a continuación:
+
+```
+http_request.open('GET', 'http://www.example.org/algun.archivo', true);
+http_request.send();
+```
+
+- El primer parámetro de la llamada a `open()` es el método HTTP request – GET, POST, HEAD o cualquier otro método que se quiera usar y sea aceptado por el servidor. El nombre del método se escribe en mayúsculas, sino algunos navegadores (como Firefox) podrían no procesar la petición. Para más información sobre los métodos HTTP request visitar [W3C specs](http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html)
+- El segundo parámetro es el URL de la página que se esta pidiendo. Por medida de seguridad no es posible llamar páginas en dominios de terceras personas. Se debe saber el dominio exacto de todas las páginas o se obtendrá un error de 'permiso denegado' al llamar open(). Una falla común es acceder al sitio por domain.tld e intentar llamar las páginas como www\.domain.tld.
+- El tercer parámetro establece si la petición es asíncrona. Si se define `TRUE`, la ejecución de la función de JavaScript continuará aún cuando la respuesta del servidor no haya llegado. Por esta capacidad es la A en AJAX.
+
+El parámetro en el método `send()`puede ser cualquier información que se quiera enviar al servidor si se usa POST para la petición. La información se debe enviar en forma de cadena, por ejemplo:
+
+`name=value&anothername=othervalue&so=on`
+
+Si se quiere enviar información de esta forma, es necesario cambiar el tipo MIME de la petición usando la siguiente línea:
+
+```
+http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
+```
+
+De otro modo el servidor descartará la información.
+
+### Segundo Paso – Procesando la respuesta del servidor
+
+Al enviar la petición HTTP es necesario indicar el nombre de la función JavaScript que procesará la respuesta.
+
+`http_request.onreadystatechange = nameOfTheFunction;`
+
+A continuación se verá lo que esta función realiza. En primer lugar necesita revisar el estado de la petición. Si el estado tiene el valor 4, significa que la respuesta completa del servidor ha sido recibida y es posible continuar procesándola.
+
+```
+if (http_request.readyState == 4) {
+ // todo va bien, respuesta recibida
+} else {
+ // aun no esta listo
+}
+```
+
+La lista completa de valores para la propiedad `readyState` es:
+
+- 0 (no inicializada)
+- 1 (leyendo)
+- 2 (leido)
+- 3 (interactiva)
+- 4 (completo)
+
+([Source](http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/readystate_1.asp))
+
+Ahora es necesario revisar el código de status de la respuesta HTTP. La lista completa de códigos aparece en el [sitio de la W3C](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html). Para el próposito de este artículo sólo es importante el código `200 OK`.
+
+```
+if (http_request.status == 200) {
+ // perfect!
+} else {
+ // hubo algún problema con la petición,
+ // por ejemplo código de respuesta 404 (Archivo no encontrado)
+ // o 500 (Internal Server Error)
+}
+```
+
+Después de haber revisado el estado de la petición y el código de status de la respuesta, depende de uno hacer cualquier cosa con la información que el servidor ha entregado. Existen dos opciones para tener acceso a esa información:
+
+- `http_request.responseText` – regresará la respuesta del servidor como una cadena de texto.
+- `http_request.responseXML` – regresará la respuesta del servidor como un objeto `XMLDocument` que se puede recorrer usando las funciones de JavaScript DOM.
+
+### Tercer Paso – "¡Ahora todo junto!" - Un sencillo ejemplo
+
+En este ejemplo se utilizará todo lo que se ha visto para hacer una petición HTTP. Se pedirá un documento HTML llamado `test.html`, que contiene el texto "Esto es una prueba." y después usaremos la función `alert()` con el contenido del archivo `test.html` .
+
+```
+
+
+ Hacer una petición
+
+```
+
+En este ejemplo:
+
+- El usuario presiona el vínculo "Hacer una petición" en el navegador;
+- Esto llama la función `makeRequest()` que tiene como parámetro `test.html` que es un archivo HTML localizado en el mismo directorio;
+- La petición es realizada y después (`onreadystatechange`) la ejecución pasa a `alertContents()`;
+- `alertContents()` verifica si la respuesta fue recibida y si es OK, si es así utiliza `alert()` con el contenido de `test.html`.
+
+Puedes probar el ejemplo [aquí](http://www.w3clubs.com/mozdev/httprequest_test.html) y puedes ver el archivo de prueba [aquí](http://www.w3clubs.com/mozdev/test.html).
+
+**Nota**: La línea `http_request.overrideMimeType('text/xml');` arriba causaría problemas en la consola de Javascript de Firefox 1.5b, como esta descrito en , si la página llamada por XMLHttpRequest no es XML válido (por ejemplo, si es texto).
+
+Si se obtiene Syntax Error o Not Well Formed Error en el navegador, y no se está intentando cargar una página XML con XMLHttpRequest, se puede eliminar esa línea del código.
+
+### Cuarto Paso – Trabajando con la respuesta XML
+
+En el ejemplo anterior se utilizo la propiedad `reponseText` del objeto pedido para mostrar el contenido de `test.html` una vez que la respuesta HTTP había sido recibida. En éste se utilizará la propiedad `responseXML`.
+
+Primero hay que crear un documento de XML válido. El documento (test.xml) contiene lo siguiente:
+
+```
+
+
+ Esto es una prueba.
+
+```
+
+Para que funcione el script solo es necesario cambiar la línea de petición por:
+
+```
+...
+onclick="makeRequest('test.xml')">
+...
+```
+
+Y en `alertContents()` es necerario remplazar la línea donde aparece `alert(http_request.responseText);` por:
+
+```
+var xmldoc = http_request.responseXML;
+var root_node = xmldoc.getElementsByTagName('root').item(0);
+alert(root_node.firstChild.data);
+```
+
+De esta manera se utiliza el objeto `XMLDocument` dado por `responseXML` y se usan métodos del DOM para acceder a la información contenida en el documento XML. El archivo `test.xml` se encuentra [aquí](http://www.w3clubs.com/mozdev/test.xml) y el script actualizado está [aquí](http://www.w3clubs.com/mozdev/httprequest_test_xml.html).
+
+Para más información sobre los metodos del DOM, visita los documentos de la [implementación del DOM de Mozilla](http://www.mozilla.org/docs/dom/).
diff --git a/files/es/web/guide/ajax/index.html b/files/es/web/guide/ajax/index.html
deleted file mode 100644
index 4d99ba6aba8eda..00000000000000
--- a/files/es/web/guide/ajax/index.html
+++ /dev/null
@@ -1,85 +0,0 @@
----
-title: AJAX
-slug: Web/Guide/AJAX
-translation_of: Web/Guide/AJAX
----
-
-
-
-
-JavaScript Asíncrono + XML (AJAX) no es una tecnología por sí misma, es un término que describe un nuevo modo de utilizar conjuntamente varias tecnologías existentes. Esto incluye: HTML o XHTML , CSS , JavaScript , DOM , XML , XSLT , y lo más importante, el objeto XMLHttpRequest . Cuando estas tecnologías se combinan en un modelo AJAX, es posible lograr aplicaciones web capaces de actualizarse continuamente sin tener que volver a cargar la página completa. Esto crea aplicaciones más rápidas y con mejor respuesta a las acciones del usuario.
-
-
-
-
-
-
-
-
- Primeros pasos con AJAX
- Este artículo te guiará por los conceptos básicos de AJAX y te proporcionará dos ejemplos prácticos para que empieces.
-
-
-
- Técnicas Ajax Alternativas
- La mayoría de los artículos sobre Ajax se enfocaron en utilizar XMLHttp como el medio para llevar a cabo dicha comunicación, pero las técnicas Ajax no están limitadas solo a XMLHttp. Existen otros métodos más.
-
-
-
- Ajax con PHP, JSON y CSS
- Con este tutorial puedes programar con AJAX utilizando PHP y JSON, un nuevo estándar más simple que XML. Programarás en AJAX, PHP y CSS de forma simple y natural.
-
-
-
- Ajax Upload File
- Artículo en el que se explica la carga de archivos de un formulario usando AJAX y PHP, además de otros ejemplos en los que se puede visualizar la barra de progreso de la carga.
-
-
-
- Creando formulario editables in situ
- Breve tutorial que nos muestra como crear nuestros formularios editables in situ con AJAX, PHP y MySQL, al estilo Flickr.
-
-
-
- Arquitectura Cliente Servidor con AJAX
- Artículo avanzado que muestra un patrón de diseño para desarrollar con AJAX, haciendo el modelo de la aplicación como web-services, la interface (view) con HTML y el controlador (controller) en Javascript, para crear aplicaciones siguiendo el paradigma MVC. Herramientas: Prototype, JSON y CSS.
-
-
-
-
- Comunidad
-
-
-
-
- Foros sobre AJAX en la comunidad Mozilla en inglés:
-
-
- {{ DiscussionList("dev-ajax", "mozilla.dev.ajax") }}
-
- Herramientas
-
-
-
- Temas relacionados
-
-
- HTML · XHTML · CSS · DOM · JavaScript · XML · XMLHttpRequest · XSLT · DHTML
-
-
-
-
-
-
-
-
-{{ languages( { "ca": "ca/AJAX", "cs": "cs/AJAX", "en": "en/AJAX", "fr": "fr/AJAX", "it": "it/AJAX", "ja": "ja/AJAX", "ko": "ko/AJAX", "nl": "nl/AJAX", "pl": "pl/AJAX", "pt": "pt/AJAX", "ru": "ru/AJAX", "zh-cn": "cn/AJAX", "zh-tw": "zh_tw/AJAX" } ) }}
diff --git a/files/es/web/guide/ajax/index.md b/files/es/web/guide/ajax/index.md
new file mode 100644
index 00000000000000..9f22aca3760712
--- /dev/null
+++ b/files/es/web/guide/ajax/index.md
@@ -0,0 +1,63 @@
+---
+title: AJAX
+slug: Web/Guide/AJAX
+translation_of: Web/Guide/AJAX
+---
+**[Primeros Pasos](/es/docs/Web/Guide/AJAX/Getting_Started)**
+Una introducción a AJAX.
+
+**JavaScript Asíncrono + XML (AJAX)** no es una tecnología por sí misma, es un término que describe un nuevo modo de utilizar conjuntamente varias tecnologías existentes. Esto incluye: [HTML](es/HTML) o [XHTML](es/XHTML), [CSS](es/CSS), [JavaScript](es/JavaScript), [DOM](es/DOM), [XML](es/XML), [XSLT](es/XSLT), y lo más importante, el objeto [XMLHttpRequest](es/XMLHttpRequest). Cuando estas tecnologías se combinan en un modelo AJAX, es posible lograr aplicaciones web capaces de actualizarse continuamente sin tener que volver a cargar la página completa. Esto crea aplicaciones más rápidas y con mejor respuesta a las acciones del usuario.
+
+#### [Documentación](/Special:Tags?tag=AJAX&language=es)
+
+- [Primeros pasos con AJAX](/es/docs/Web/Guide/AJAX/Getting_Started)
+ - : Este artículo te guiará por los conceptos básicos de AJAX y te proporcionará dos ejemplos prácticos para que empieces.
+
+
+
+- [Técnicas Ajax Alternativas](http://www.webreference.com/programming/ajax_tech/)
+ - : La mayoría de los artículos sobre Ajax se enfocaron en utilizar XMLHttp como el medio para llevar a cabo dicha comunicación, pero las técnicas Ajax no están limitadas solo a XMLHttp. Existen otros métodos más.
+
+
+
+- [Ajax con PHP, JSON y CSS](http://thinkcoderepeat.blogspot.com/2006/02/tutorial-de-ajax-con-php-y-json.html)
+ - : Con este tutorial puedes programar con AJAX utilizando PHP y JSON, un nuevo estándar más simple que XML. Programarás en AJAX, PHP y CSS de forma simple y natural.
+
+
+
+- [Ajax Upload File](http://webdev20.blogspot.com/2006/02/ajax-upload-file.html)
+ - : Artículo en el que se explica la carga de archivos de un formulario usando AJAX y PHP, además de otros ejemplos en los que se puede visualizar la barra de progreso de la carga.
+
+
+
+- [Creando formulario editables in situ](http://www.baluart.net/articulo/346/edicion-in-situ-con-ajax.php)
+ - : Breve tutorial que nos muestra como crear nuestros formularios editables in situ con AJAX, PHP y MySQL, al estilo Flickr.
+
+
+
+- [Arquitectura Cliente Servidor con AJAX](http://thinkcoderepeat.blogspot.com/2006/08/arquitectura-cliente-servidor-con-ajax.html)
+ - : Artículo avanzado que muestra un patrón de diseño para desarrollar con AJAX, haciendo el modelo de la aplicación como web-services, la interface (view) con HTML y el controlador (controller) en Javascript, para crear aplicaciones siguiendo el paradigma MVC. Herramientas: Prototype, JSON y CSS.
+
+#### Comunidad
+
+- [Ajax-es](http://groups.google.es/group/Ajax-es?lnk=sg&hl=es). Foro sobre AJAX.
+
+
+
+- Foros sobre AJAX en la comunidad Mozilla en inglés:
+
+{{ DiscussionList("dev-ajax", "mozilla.dev.ajax") }}
+
+#### Herramientas
+
+- [Toolkits y Frameworks](http://www.ajaxprojects.com)
+- [Firebug - Herramienta de Desarrollo Ajax/Web](http://www.getfirebug.com/)
+- [Herramienta de Depuración de AJAX](http://blog.monstuff.com/archives/000252.html)
+- [Kit de Integración Flash/AJAX](http://www.osflash.org/doku.php?id=flashjs)
+- [Una Simple Librería de Interfaz XMLHTTP](http://xkr.us/code/javascript/XHConn/)
+
+
+
+- #### Temas relacionados
+
+ - : [HTML](es/HTML) · [XHTML](es/XHTML) · [CSS](es/CSS) · [DOM](es/DOM) · [JavaScript](es/JavaScript) · [XML](es/XML) · [XMLHttpRequest](es/XMLHttpRequest) · [XSLT](es/XSLT) · [DHTML](es/DHTML)
diff --git a/files/es/web/guide/api/index.html b/files/es/web/guide/api/index.html
deleted file mode 100644
index c2ef8cbe1fcd95..00000000000000
--- a/files/es/web/guide/api/index.html
+++ /dev/null
@@ -1,24 +0,0 @@
----
-title: Guide to Web APIs
-slug: Web/Guide/API
-tags:
- - API
- - Guía
- - Landing
- - TopicStub
- - Web
-translation_of: Web/Guide/API
----
-Aquí encontrarás links a cada una de las guías introduciendo y explicando cada una de las APIs que conforman la la arquitectura del desarrollo web.
-
-
-{{ListGroups}}
-
-See also
-
-
diff --git a/files/es/web/guide/api/index.md b/files/es/web/guide/api/index.md
new file mode 100644
index 00000000000000..6756a78eeea37a
--- /dev/null
+++ b/files/es/web/guide/api/index.md
@@ -0,0 +1,21 @@
+---
+title: Guide to Web APIs
+slug: Web/Guide/API
+tags:
+ - API
+ - Guía
+ - Landing
+ - TopicStub
+ - Web
+translation_of: Web/Guide/API
+---
+Aquí encontrarás links a cada una de las guías introduciendo y explicando cada una de las APIs que conforman la la arquitectura del desarrollo web.
+
+{{ListGroups}}
+
+## See also
+
+- [Web API interface reference](/es/docs/Web/API) (an index of all of the interfaces comprising all of these APIs)
+- [Document Object Model](/es/docs/Web/API/Document_Object_Model) (DOM)
+- [Web API event reference](/es/docs/Web/Events)
+- [Learning web development](/es/docs/Learn)
diff --git a/files/es/web/guide/api/webrtc/peer-to-peer_communications_with_webrtc/index.html b/files/es/web/guide/api/webrtc/peer-to-peer_communications_with_webrtc/index.html
deleted file mode 100644
index 1f93672a352aa6..00000000000000
--- a/files/es/web/guide/api/webrtc/peer-to-peer_communications_with_webrtc/index.html
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: Comunicaciones peer-to-peer (P2P) con WebRTC
-slug: Web/Guide/API/WebRTC/Peer-to-peer_communications_with_WebRTC
-translation_of: Web/Guide/API/WebRTC/Peer-to-peer_communications_with_WebRTC
-original_slug: WebRTC/Peer-to-peer_communications_with_WebRTC
----
-{{SeeCompatTable}}
-Las WebRTC APIs están diseñadas para permitir a las aplicaciones JS la creación de conexiones de tiempo real con canales de Audio, Video, y/o Datos (Data), directamente entre usuarios y a través de sus browsers, o hacia servers que soporten los protocolos WebRTC. También potencia navigator.mozGetUserMedia() para acceder a los datos de cámara y micrófono (getUserMedia() está siendo estandarizado por la Media Capture Task Force, así como las Recording APIs).
-Las fuentes primarias de las especificaciones para WebRTC (en constante evolución ), son las especificaciones WebRTC y getUserMedia , y varios de los borradores del IETF, en mayor medida en el rtcweb working group , pero también mmusic , rmcat y algunos otros.
-
- Gran parte de la implementación en Chrome y Firefox está basada en código que fue abierto por Google en webrtc.org .
-NOTA : Las versiones actuales de FlashBlock pueden bloquear elementos HTML5 <video>. Si es así, dile que permita el contenido en la página, o deshabilita esa opción vía Herramientas/Add-ons.
-Hay un buen tutorial en las características básicas de WebRTC en HTML5 Rocks . Una colección de páginas de pruebas básicas para soportar el desarrollo existe en webrtc-landing .
-Puedes hacer simples llamadas persona-a-persona (inclusive si usan Chrome) en apprtc.appspot.com .
-Una descripción de alto nivel de lo que sucede en una conexión RTCPeerConnection se publicó en un artículo de Mozilla Hacks (puedes ver todos los artículos sobre WebRTC aquí ).
-
-Especificaciones
-
-
diff --git a/files/es/web/guide/api/webrtc/peer-to-peer_communications_with_webrtc/index.md b/files/es/web/guide/api/webrtc/peer-to-peer_communications_with_webrtc/index.md
new file mode 100644
index 00000000000000..085e1182c1b2b5
--- /dev/null
+++ b/files/es/web/guide/api/webrtc/peer-to-peer_communications_with_webrtc/index.md
@@ -0,0 +1,30 @@
+---
+title: Comunicaciones peer-to-peer (P2P) con WebRTC
+slug: Web/Guide/API/WebRTC/Peer-to-peer_communications_with_WebRTC
+translation_of: Web/Guide/API/WebRTC/Peer-to-peer_communications_with_WebRTC
+original_slug: WebRTC/Peer-to-peer_communications_with_WebRTC
+---
+{{SeeCompatTable}}
+
+Las **WebRTC APIs** están diseñadas para permitir a las aplicaciones JS la creación de conexiones de tiempo real con canales de Audio, Video, y/o Datos (Data), directamente entre usuarios y a través de sus browsers, o hacia servers que soporten los protocolos WebRTC. También potencia navigator.mozGetUserMedia() para acceder a los datos de cámara y micrófono (getUserMedia() está siendo estandarizado por la Media Capture Task Force, así como las Recording APIs).
+
+Las fuentes primarias de las especificaciones para WebRTC (en constante **evolución**), son las especificaciones [WebRTC](http://dev.w3.org/2011/webrtc/editor/webrtc.html) y [getUserMedia](http://dev.w3.org/2011/webrtc/editor/getusermedia.html), y varios de los borradores del IETF, en mayor medida en el [rtcweb working group](http://tools.ietf.org/wg/rtcweb/), pero también [mmusic](http://tools.ietf.org/wg/mmusic/), [rmcat](http://tools.ietf.org/wg/rmcat/) y algunos otros.
+
+Gran parte de la implementación en Chrome y Firefox está basada en código que fue abierto por Google en [webrtc.org](http://www.webrtc.org/reference).
+
+> **Nota:** Las versiones actuales de FlashBlock pueden bloquear elementos HTML5 \. Si es así, dile que permita el contenido en la página, o deshabilita esa opción vía Herramientas/Add-ons.
+
+Hay un buen tutorial en las características básicas de WebRTC en [HTML5 Rocks](http://www.html5rocks.com/en/tutorials/webrtc/basics/). Una colección de páginas de pruebas básicas para soportar el desarrollo existe en [webrtc-landing](http://mozilla.github.com/webrtc-landing).
+
+Puedes hacer simples llamadas persona-a-persona (inclusive si usan Chrome) en [apprtc.appspot.com](https://apprtc.appspot.com/).
+
+Una descripción de alto nivel de lo que sucede en una conexión RTCPeerConnection se publicó en un artículo de [Mozilla Hacks](https://hacks.mozilla.org/2013/05/embedding-webrtc-video-chat-right-into-your-website/) (puedes ver todos los artículos sobre WebRTC [aquí](https://hacks.mozilla.org/category/webrtc/)).
+
+![Basics of RTCPeerConnection call setup](https://hacks.mozilla.org/wp-content/uploads/2013/05/webRTC-BasicsOfHowItWorks2.png)
+
+## Especificaciones
+
+| Especificación | Estado | Comentarios |
+| ---------------- | ------------- | -------------------------------------------------------- |
+| WebRTC API | En definición | |
+| getUserMedia API | En definición | |
diff --git a/files/es/web/guide/css/block_formatting_context/index.html b/files/es/web/guide/css/block_formatting_context/index.html
deleted file mode 100644
index 3f6dfdb206227d..00000000000000
--- a/files/es/web/guide/css/block_formatting_context/index.html
+++ /dev/null
@@ -1,45 +0,0 @@
----
-title: Contexto de formato de bloque
-slug: Web/Guide/CSS/Block_formatting_context
-tags:
- - CSS
- - Guía
- - Necesita ejemplos
- - Referencia
- - Web
-translation_of: Web/Guide/CSS/Block_formatting_context
----
-{{ CSSRef() }}
-
-Resumen
-
-Un contexto de formato de bloque es parte del renderizado CSS visual de una página web. Es la región en que ocurre la disposición de las cajas de bloque y en la cuál los elementos flotantes interactúan los unos con los otros.
-
-Un contexto de formato de bloque es creado por uno de los siguientes casos:
-
-
- El elemento raiz o algo que lo contiene
- flotantes (elementos donde {{ cssxref("float") }} es diferente de none)
- elementos con posición absoluta (elementos donde {{ cssxref("position") }} es absolute o fixed)
- bloques en línea (elementos con {{ cssxref("display") }}: inline-block
)
- Celdas de tabla (elementos con {{ cssxref("display") }}: table-cell
, que es la propiedad por defecto de las celdas de una tabla HTML)
- subtítulos de tabla (elementos con {{ cssxref("display") }}: table-caption
, que es la propiedad por defecto de los subtítulos de tablas HTML)
- elementos donde {{ cssxref("overflow") }} tiene un valor distinto a visible
- cajas flexibles (elementos con {{ cssxref("display") }}: flex
or inline-flex
)
-
-
-Un contexto de formato de bloque contiene todo dentro del elemento que lo crea que, al mismo tiempo, no se encuentra dentro de un elemento descendiente que crea un nuevo contexto de formato de bloque.
-
-Los contextos de formato de bloque son importantes para el posicionamiento (revisa {{ cssxref("float") }} y {{ cssxref("clear") }}) de flotantes. Las reglas para el posicionamiento y limpiado de flotantes aplican solo a elementos dentro del mismo contexto de formato de bloque. Los flotantes no afectan la disposición de los elementos en otros contexto de formato de bloque, y clear solo limpia flotantes pasados en el mismo contexto de formato de bloque.
-
-Especificaciones
-
-
-
-También puedes ver
-
-
- {{ cssxref("float") }}, {{ cssxref("clear") }}
-
diff --git a/files/es/web/guide/css/block_formatting_context/index.md b/files/es/web/guide/css/block_formatting_context/index.md
new file mode 100644
index 00000000000000..a061b552f7c0db
--- /dev/null
+++ b/files/es/web/guide/css/block_formatting_context/index.md
@@ -0,0 +1,39 @@
+---
+title: Contexto de formato de bloque
+slug: Web/Guide/CSS/Block_formatting_context
+tags:
+ - CSS
+ - Guía
+ - Necesita ejemplos
+ - Referencia
+ - Web
+translation_of: Web/Guide/CSS/Block_formatting_context
+---
+{{ CSSRef() }}
+
+## Resumen
+
+Un **contexto de formato de bloque** es parte del renderizado CSS visual de una página web. Es la región en que ocurre la disposición de las cajas de bloque y en la cuál los elementos flotantes interactúan los unos con los otros.
+
+Un contexto de formato de bloque es creado por uno de los siguientes casos:
+
+- El elemento raiz o algo que lo contiene
+- flotantes (elementos donde {{ cssxref("float") }} es diferente de none)
+- elementos con posición absoluta (elementos donde {{ cssxref("position") }} es absolute o fixed)
+- bloques en línea (elementos con {{ cssxref("display") }}`: inline-block`)
+- Celdas de tabla (elementos con {{ cssxref("display") }}`: table-cell`, que es la propiedad por defecto de las celdas de una tabla HTML)
+- subtítulos de tabla (elementos con {{ cssxref("display") }}`: table-caption`, que es la propiedad por defecto de los subtítulos de tablas HTML)
+- elementos donde {{ cssxref("overflow") }} tiene un valor distinto a `visible`
+- cajas flexibles (elementos con {{ cssxref("display") }}`: flex` or `inline-flex`)
+
+Un contexto de formato de bloque contiene todo dentro del elemento que lo crea que, al mismo tiempo, no se encuentra dentro de un elemento descendiente que crea un nuevo contexto de formato de bloque.
+
+Los contextos de formato de bloque son importantes para el posicionamiento (revisa {{ cssxref("float") }} y {{ cssxref("clear") }}) de flotantes. Las reglas para el posicionamiento y limpiado de flotantes aplican solo a elementos dentro del mismo contexto de formato de bloque. Los flotantes no afectan la disposición de los elementos en otros contexto de formato de bloque, y clear solo limpia flotantes pasados en el mismo contexto de formato de bloque.
+
+## Especificaciones
+
+- [CSS 2.1](http://www.w3.org/TR/CSS21/visuren.html#block-formatting)
+
+## También puedes ver
+
+- {{ cssxref("float") }}, {{ cssxref("clear") }}
diff --git a/files/es/web/guide/graphics/index.html b/files/es/web/guide/graphics/index.html
deleted file mode 100644
index b4fdb00717df24..00000000000000
--- a/files/es/web/guide/graphics/index.html
+++ /dev/null
@@ -1,52 +0,0 @@
----
-title: Gráficas en la web
-slug: Web/Guide/Graphics
-tags:
- - 2D
- - 3D
- - 3ra Dimensión
- - Canvas
- - Gráficas
- - Gráficos(2)
- - HTML5
- - Líneas
- - RTCWeb
- - SVG
- - WebGL
- - WebRTC
- - graficos
-translation_of: Web/Guide/Graphics
----
-
-
-
-
-Los sitios web modernos a menudo necesitan aplicaciones para presentar y/o visualizar gráficos . Se
-
-
-
-
- Dibujando gráficas con canvas
- Una guía inicial para usar el elemento {{HTMLElement("canvas")}} para dibujar gráficos en 2D.
- SVG
-
- Scalable Vector Graphics ( SVG ), Gráficos Vectoriales Escalables, le permite utilizar líneas , curvas y otras formas geométricas para representar gráficos . Al evitar el uso de mapas de bits , puede crear imágenes que se escalan sin falla a cualquier tamaño.
-
-
-
-
-
-
-
Gráficas en 3D
-
-
- WebGL
-
- Una guía de cómo empezar con WebGL , la API (bibliteca de contenidos) de gráficos 3D para la Web. Esta tecnología le permite utilizar estándar OpenGL ES en el contenido Web .
-
-
-
-
-
-
-
diff --git a/files/es/web/guide/graphics/index.md b/files/es/web/guide/graphics/index.md
new file mode 100644
index 00000000000000..23af24857e4d82
--- /dev/null
+++ b/files/es/web/guide/graphics/index.md
@@ -0,0 +1,32 @@
+---
+title: Gráficas en la web
+slug: Web/Guide/Graphics
+tags:
+ - 2D
+ - 3D
+ - 3ra Dimensión
+ - Canvas
+ - Gráficas
+ - Gráficos(2)
+ - HTML5
+ - Líneas
+ - RTCWeb
+ - SVG
+ - WebGL
+ - WebRTC
+ - graficos
+translation_of: Web/Guide/Graphics
+---
+Los sitios web modernos a menudo necesitan aplicaciones para presentar y/o visualizar gráficos . Se
+
+- [Dibujando gráficas con canvas](/es/docs/Web/Guide/Graphics/Drawing_graphics_with_canvas)
+ - : Una guía inicial para usar el elemento {{HTMLElement("canvas")}} para dibujar gráficos en 2D.
+- [SVG](/es/docs/SVG)
+ - : Scalable Vector Graphics ( SVG ), Gráficos Vectoriales Escalables, le permite utilizar líneas , curvas y otras formas geométricas para representar gráficos . Al evitar el uso de mapas de bits , puede crear imágenes que se escalan sin falla a cualquier tamaño.
+
+## Gráficas en 3D
+
+- [WebGL](/es/docs/Web/WebGL)
+ - : Una guía de cómo empezar con WebGL , la API (bibliteca de contenidos) de gráficos 3D para la Web. Esta tecnología le permite utilizar estándar OpenGL ES en el contenido Web .
+
+
diff --git a/files/es/web/guide/html/content_categories/index.html b/files/es/web/guide/html/content_categories/index.html
deleted file mode 100644
index 98bc465937c68c..00000000000000
--- a/files/es/web/guide/html/content_categories/index.html
+++ /dev/null
@@ -1,176 +0,0 @@
----
-title: Categorías de contenido
-slug: Web/Guide/HTML/Content_categories
-tags:
- - Avanzado
- - Guía
- - HTML
- - HTML5
- - Web
-translation_of: Web/Guide/HTML/Content_categories
-original_slug: Web/Guide/HTML/categorias_de_contenido
----
-Cada elemento {{web.link("/es/docs/Web/HTML", "HTML")}} es miembro de una o más categorías de contenido — estas categorías agrupan elementos que comparten características comunes. Esta es una agrupación flexible (en realidad no crea una relación entre los elementos de estas categorías), pero ayuda a definir y describir el comportamiento compartido de las categorías y sus reglas asociadas, especialmente cuando te encuentras con sus intrincados detalles. También es posible que los elementos no sean miembros de ninguna de estas categorías.
-
-Hay tres tipos de categorías de contenido:
-
-
- Categoría de contenido principal — que describe reglas comunes compartidas por muchos elementos.
- Categorías de contenido relacionado con formularios — que describe reglas comunes a los elementos relacionados con formularios.
- Categorías de contenido específico — que describe categorías raras compartidas solo por unos pocos elementos, a veces, solo en un contexto específico.
-
-
-
-
Nota : Una explicación comparativa más detallada de estas categorías de contenido y su funcionalidad está más allá del alcance de este artículo; para eso, posiblemente desees leer las partes relevantes de la especificación HTML .
-
-
-
-
-Categorías de contenido principal
-
-
-
-Los elementos pertenecientes a la categoría contenido de metadatos modifican la presentación o el comportamiento del resto del documento, establecen enlaces a otros documentos o transmiten otra información fuera de banda .
-
-Los elementos que pertenecen a esta categoría son {{HTMLElement("base")}}, {{ Obsolete_inline() }}{{HTMLElement("command")}}, {{HTMLElement("link")}}, {{HTMLElement("meta")}}, {{HTMLElement("noscript")}}, {{HTMLElement("script")}}, {{HTMLElement("style")}} y {{HTMLElement("title")}}.
-
-Flujo de contenido
-
-Los elementos que pertenecen a la categoría de flujo de contenido suelen contener texto o contenido incrustado. Son: {{HTMLElement("a")}}, {{HTMLElement("abbr")}}, {{HTMLElement("address")}}, {{HTMLElement("article")}}, {{HTMLElement("aside")}}, {{HTMLElement("audio")}}, {{HTMLElement("b")}},{{HTMLElement("bdo")}}, {{HTMLElement("bdi")}}, {{HTMLElement("blockquote")}}, {{HTMLElement("br")}}, {{HTMLElement("button")}}, {{HTMLElement("canvas")}}, {{HTMLElement("cite")}}, {{HTMLElement("code")}}, {{ Obsolete_inline() }}{{HTMLElement("command")}}, {{HTMLElement("data")}}, {{HTMLElement("datalist")}}, {{HTMLElement("del")}}, {{HTMLElement("details")}}, {{HTMLElement("dfn")}}, {{HTMLElement("div")}}, {{HTMLElement("dl")}}, {{HTMLElement("em")}}, {{HTMLElement("embed")}}, {{HTMLElement("fieldset")}}, {{HTMLElement("figure")}}, {{HTMLElement("footer")}}, {{HTMLElement("form")}}, {{HTMLElement("h1")}}, {{HTMLElement("h2")}}, {{HTMLElement("h3")}}, {{HTMLElement("h4")}}, {{HTMLElement("h5")}}, {{HTMLElement("h6")}}, {{HTMLElement("header")}}, {{HTMLElement("hgroup")}}, {{HTMLElement("hr")}}, {{HTMLElement("i")}}, {{HTMLElement("iframe")}}, {{HTMLElement("img")}}, {{HTMLElement("input")}}, {{HTMLElement("ins")}}, {{HTMLElement("kbd")}}, {{deprecated_inline()}}{{HTMLElement("keygen")}}, {{HTMLElement("label")}}, {{HTMLElement("main")}}, {{HTMLElement("map")}}, {{HTMLElement("mark")}}, {{MathMLElement("math")}}, {{HTMLElement("menu")}}, {{HTMLElement("meter")}}, {{HTMLElement("nav")}}, {{HTMLElement("noscript")}}, {{HTMLElement("object")}}, {{HTMLElement("ol")}}, {{HTMLElement("output")}}, {{HTMLElement("p")}}, {{HTMLElement("picture")}}, {{HTMLElement("pre")}}, {{HTMLElement("progress")}}, {{HTMLElement("q")}}, {{HTMLElement("ruby")}}, {{HTMLElement("s")}}, {{HTMLElement("samp")}}, {{HTMLElement("script")}}, {{HTMLElement("section")}}, {{HTMLElement("select")}}, {{HTMLElement("small")}}, {{HTMLElement("span")}}, {{HTMLElement("strong")}}, {{HTMLElement("sub")}}, {{HTMLElement("sup")}}, {{SVGElement("svg")}}, {{HTMLElement("table")}}, {{HTMLElement("template")}}, {{HTMLElement("textarea")}}, {{HTMLElement("time")}}, {{HTMLElement("ul")}}, {{HTMLElement("var")}}, {{HTMLElement("video")}}, {{HTMLElement("wbr")}} and Text.
-
-Algunos otros elementos pertenecen a esta categoría, pero solo si se cumple una condición específica:
-
-
- {{HTMLElement("area")}}, si es descendiente de un elemento {{HTMLElement("map")}}
- {{HTMLElement("link")}}, si está presente el atributo {{web.link("/es/docs/HTML/Global_attributes#attr-itemprop", "itemprop")}}
- {{HTMLElement("meta")}}, si está presente el atributo {{web.link("/es/docs/HTML/Global_attributes#attr-itemprop", "itemprop")}}
- {{HTMLElement("style")}}, si está presente el atributo {{deprecated_inline()}} {{HTMLAttrxRef("scoped", "style")}}
-
-
-Contenido de sección
-
-Los elementos que pertenecen al modelo de contenido de secciones crean una {{web.link("/es/docs/Sections_and_Outlines_of_an_HTML5_document", "sección en el esquema actual")}} que define el alcance de los elementos {{HTMLElement("header")}}, {{HTMLElement("footer")}} y Contenido del encabezado .
-
-Los elementos que pertenecen a esta categoría son {{HTMLElement("article")}}, {{HTMLElement("aside")}}, {{HTMLElement("nav")}} y {{HTMLElement("section")}}.
-
-
-
No confundas este modelo de contenido con la categoría de {{web.link("/es/docs/Web/Guide/HTML/Using_HTML_sections_and_outlines#Sectioning_roots", "seccionado raíz")}}, que aísla su contenido del esquema regular.
-
-
-Contenido del encabezado
-
-El contenido del encabezado define el título de una sección, ya sea que esté marcado por un elemento Contenido de sección explícito o definido implícitamente por el contenido del encabezado en sí mismo.
-
-Los elementos que pertenecen a esta categoría son {{HTMLElement("h1")}}, {{HTMLElement("h2")}}, {{HTMLElement("h3")}}, {{HTMLElement("h4")}}, {{HTMLElement("h5")}}, {{HTMLElement("h6")}} y {{HTMLElement("hgroup")}}.
-
-
-
Aunque es probable que tenga contenido de encabezado, {{HTMLElement("header")}} no es contenido de encabezado en sí mismo.
-
-
-
-
Nota : El elemento {{HTMLElement("hgroup")}} se eliminó de la especificación HTML del W3C antes de que se finalizara HTML 5, pero sigue siendo parte de la especificación WHATWG y la mayoría de los navegadores lo admiten por lo menos parcialmente.
-
-
-Contenido de redacción
-
-El contenido de redacción define el texto y el marcado que contiene. Las series de contenido de redacción forman párrafos.
-
-Los elementos que pertenecen a esta categoría son: {{HTMLElement("abbr")}}, {{HTMLElement("audio")}}, {{HTMLElement("b")}}, {{HTMLElement("bdo")}}, {{HTMLElement("br")}}, {{HTMLElement("button")}}, {{HTMLElement("canvas")}}, {{HTMLElement("cite")}}, {{HTMLElement("code")}}, {{ Obsolete_inline() }}{{HTMLElement("command")}}, {{HTMLElement("data")}}, {{HTMLElement("datalist")}}, {{HTMLElement("dfn")}}, {{HTMLElement("em")}}, {{HTMLElement("embed")}}, {{HTMLElement("i")}}, {{HTMLElement("iframe")}}, {{HTMLElement("img")}}, {{HTMLElement("input")}}, {{HTMLElement("kbd")}}, {{deprecated_inline()}}{{HTMLElement("keygen")}}, {{HTMLElement("label")}}, {{HTMLElement("mark")}}, {{MathMLElement("math")}}, {{HTMLElement("meter")}}, {{HTMLElement("noscript")}}, {{HTMLElement("object")}}, {{HTMLElement("output")}}, {{HTMLElement("picture")}}, {{HTMLElement("progress")}}, {{HTMLElement("q")}}, {{HTMLElement("ruby")}}, {{HTMLElement("samp")}}, {{HTMLElement("script")}}, {{HTMLElement("select")}}, {{HTMLElement("small")}}, {{HTMLElement("span")}}, {{HTMLElement("strong")}}, {{HTMLElement("sub")}}, {{HTMLElement("sup")}}, {{SVGElement("svg")}}, {{HTMLElement("textarea")}}, {{HTMLElement("time")}}, {{HTMLElement("var")}}, {{HTMLElement("video")}}, {{HTMLElement("wbr")}} y texto sin formato (no solo consiste de espacios en blanco).
-
-Algunos otros elementos pertenecen a esta categoría, pero solo si se cumple una condición específica:
-
-
- {{HTMLElement("a")}}, si solo incluye contenido de redacción
- {{HTMLElement("area")}}, si es descendiente de un elemento {{HTMLElement("map")}}
- {{HTMLElement("del")}}, si solo incluye contenido de redacción
- {{HTMLElement("ins")}}, si solo incluye contenido de redacción
- {{HTMLElement("link")}}, si está presente el atributo {{web.link("/es/docs/HTML/Global_attributes#itemprop", "itemprop")}}
- {{HTMLElement("map")}}, si solo incluye contenido de redacción
- {{HTMLElement("meta")}}, si está presente el atributo {{web.link("/es/docs/HTML/Global_attributes#itemprop", "itemprop")}}
-
-
-Contenido incrustado
-
-El contenido incrustado importa otro recurso o inserta contenido de otro lenguaje de marcado o espacio de nombres en el documento. Los elementos que pertenecen a esta categoría incluyen: {{HTMLElement("audio")}}, {{HTMLElement("canvas")}}, {{HTMLElement("embed")}}, {{HTMLElement("iframe")}}, {{HTMLElement("img")}}, {{MathMLElement("math")}}, {{HTMLElement("object")}}, {{HTMLElement("picture")}}, {{SVGElement("svg")}} y {{HTMLElement("video")}}.
-
-Contenido interactivo
-
-El contenido interactivo incluye elementos diseñados específicamente para la interacción del usuario. Los elementos que pertenecen a esta categoría incluyen: {{HTMLElement("a")}}, {{HTMLElement("button")}}, {{HTMLElement("details")}}, {{HTMLElement("embed")}}, {{HTMLElement("iframe")}}, {{deprecated_inline()}}{{HTMLElement("keygen")}}, {{HTMLElement("label")}}, {{HTMLElement("select")}} y {{HTMLElement("textarea")}}.
- Algunos elementos pertenecen a esta categoría solo bajo condiciones específicas:
-
-
- {{HTMLElement("audio")}}, si está presente el atributo {{HTMLAttrxRef("controls", "audio")}}
- {{HTMLElement("img")}}, si está presente el atributo {{HTMLAttrxRef("usemap", "img")}}
- {{HTMLElement("input")}}, si el atributo {{HTMLAttrxRef("type", "input")}} no está en estado oculto
- {{HTMLElement("menu")}}, si el atributo {{HTMLAttrxRef("type", "menu")}} está en la barra de estado de herramientas
- {{HTMLElement("object")}}, si está presente el atributo {{HTMLAttrxRef("usemap", "object")}}
- {{HTMLElement("video")}}, si está presente el atributo {{HTMLAttrxRef("controls", "video")}}
-
-
-Contenido palpable
-
-El contenido es palpable cuando no está vacío ni oculto; es contenido que se presenta y es sustantivo. Los elementos cuyo modelo es flujo de contenido o contenido de redacción deben tener, por lo menos, un nodo que sea palpable.
-
-
-
-El contenido asociado a un formulario comprende elementos que tienen un formulario de propietario, expuesto mediante un atributo form . El propietario de un formulario es el elemento {{HTMLElement("form")}} que lo contiene o el elemento cuya identificación se especifica en el atributo form .
-
-
- {{HTMLElement("button")}}
- {{HTMLElement("fieldset")}}
- {{HTMLElement("input")}}
- {{deprecated_inline()}} {{HTMLElement("keygen")}}
- {{HTMLElement("label")}}
- {{HTMLElement("meter")}}
- {{HTMLElement("object")}}
- {{HTMLElement("output")}}
- {{HTMLElement("progress")}}
- {{HTMLElement("select")}}
- {{HTMLElement("textarea")}}
-
-
-Esta categoría contiene varias subcategorías:
-
-
- enumerado
- Elementos que se enumeran en las colecciones IDL {{DOMxRef("HTMLFormElement.elements", "form.elements")}} y fieldset.elements
. Contiene: {{HTMLElement("button")}}, {{HTMLElement("fieldset")}}, {{HTMLElement("input")}}, {{deprecated_inline()}} {{HTMLElement("keygen")}}, {{HTMLElement("object")}}, {{HTMLElement("output")}}, {{HTMLElement("select")}} y {{HTMLElement("textarea")}}.
- etiquetable
- Elementos que se pueden asociar con elementos {{HTMLElement("label")}}. Contiene {{HTMLElement("button")}}, {{HTMLElement("input")}}, {{deprecated_inline()}}{{HTMLElement("keygen")}}, {{HTMLElement("meter")}}, {{HTMLElement("output")}}, {{HTMLElement("progress")}}, {{HTMLElement("select")}} y {{HTMLElement("textarea")}}.
- transmisible
- Elementos que se pueden utilizar para construir el conjunto de datos del formulario cuando se envía el formulario. Contiene {{HTMLElement("button")}}, {{HTMLElement("input")}}, {{deprecated_inline()}}{{HTMLElement("keygen")}}, {{HTMLElement("object")}}, {{HTMLElement("select")}} y {{HTMLElement("textarea")}}.
- reiniciable
- Elementos que se pueden ver afectados cuando se restablece o reinicia un formulario. Contiene {{HTMLElement("input")}}, {{deprecated_inline()}}{{HTMLElement("keygen")}}, {{HTMLElement("output")}},{{HTMLElement("select")}} y {{HTMLElement("textarea")}}.
-
-
-Categorías secundarias
-
-Hay algunas clasificaciones secundarias de elementos que también puede ser útil tener en cuenta.
-
-Elementos de soporte de scripts
-
-Los elementos de soporte de scripts son elementos que no contribuyen directamente a la salida renderizada de un documento. En cambio, sirven para admitir scripts, ya sea conteniendo o especificando directamente el código del script, o especificando datos que serán utilizados por los scripts.
-
-Los elementos que admiten scripts son:
-
-
- {{HTMLElement("script")}}
- {{HTMLElement("template")}}
-
-
-Modelo de contenido transparente
-
-Si un elemento tiene un modelo de contenido transparente, entonces su contenido debe estar estructurado de manera que sea HTML 5 válido, incluso si el elemento transparente fuera eliminado y reemplazado por elementos secundarios.
-
-Por ejemplo, los elementos {{HTMLElement("del")}} y {{HTMLElement("ins")}} son transparentes:
-
-<p>Sostenemos que estas verdades son <del><em>sagradas e innegablemente</em></del> <ins>evidentes por sí mismas</ins>.</p>
-
-
-Si esos elementos fueran eliminados, este fragmento seguiría siendo HTML válido (si no es Español correcto).
-
-<p>Sostenemos que estas verdades son <del><em>sagradas e innegablemente</em></del> <ins>evidentes por sí mismas</ins>.</p>
-
-
-Otros modelos de contenido
-
-Seccionado raíz.
diff --git a/files/es/web/guide/html/content_categories/index.md b/files/es/web/guide/html/content_categories/index.md
new file mode 100644
index 00000000000000..5a4318bb8a2236
--- /dev/null
+++ b/files/es/web/guide/html/content_categories/index.md
@@ -0,0 +1,156 @@
+---
+title: Categorías de contenido
+slug: Web/Guide/HTML/Content_categories
+tags:
+ - Avanzado
+ - Guía
+ - HTML
+ - HTML5
+ - Web
+translation_of: Web/Guide/HTML/Content_categories
+original_slug: Web/Guide/HTML/categorias_de_contenido
+---
+Cada elemento {{web.link("/es/docs/Web/HTML", "HTML")}} es miembro de una o más **categorías de contenido** — estas categorías agrupan elementos que comparten características comunes. Esta es una agrupación flexible (en realidad no crea una relación entre los elementos de estas categorías), pero ayuda a definir y describir el comportamiento compartido de las categorías y sus reglas asociadas, especialmente cuando te encuentras con sus intrincados detalles. También es posible que los elementos no sean miembros de _ninguna_ de estas categorías.
+
+Hay tres tipos de categorías de contenido:
+
+- Categoría de contenido principal — que describe reglas comunes compartidas por muchos elementos.
+- Categorías de contenido relacionado con formularios — que describe reglas comunes a los elementos relacionados con formularios.
+- Categorías de contenido específico — que describe categorías raras compartidas solo por unos pocos elementos, a veces, solo en un contexto específico.
+
+> **Nota:** Una explicación comparativa más detallada de estas categorías de contenido y su funcionalidad está más allá del alcance de este artículo; para eso, posiblemente desees leer las [partes relevantes de la especificación HTML](https://html.spec.whatwg.org/multipage/dom.html#kinds-of-content).
+
+[![Un diagrama de Venn que muestra cómo se interrelacionan las distintas categorías de contenido. Las siguientes secciones explican estas relaciones en texto.](/@api/deki/files/6244/=Content_categories_venn.png?size=webview)](/@api/deki/files/6244/=Content_categories_venn.png)
+
+## Categorías de contenido principal
+
+### Contenido de metadatos
+
+Los elementos pertenecientes a la categoría _contenido de metadatos_ modifican la presentación o el comportamiento del resto del documento, establecen enlaces a otros documentos o transmiten otra información _fuera de banda_.
+
+Los elementos que pertenecen a esta categoría son {{HTMLElement("base")}}, {{ Obsolete_inline() }}{{HTMLElement("command")}}, {{HTMLElement("link")}}, {{HTMLElement("meta")}}, {{HTMLElement("noscript")}}, {{HTMLElement("script")}}, {{HTMLElement("style")}} y {{HTMLElement("title")}}.
+
+### Flujo de contenido
+
+Los elementos que pertenecen a la categoría de flujo de contenido suelen contener texto o contenido incrustado. Son: {{HTMLElement("a")}}, {{HTMLElement("abbr")}}, {{HTMLElement("address")}}, {{HTMLElement("article")}}, {{HTMLElement("aside")}}, {{HTMLElement("audio")}}, {{HTMLElement("b")}},{{HTMLElement("bdo")}}, {{HTMLElement("bdi")}}, {{HTMLElement("blockquote")}}, {{HTMLElement("br")}}, {{HTMLElement("button")}}, {{HTMLElement("canvas")}}, {{HTMLElement("cite")}}, {{HTMLElement("code")}}, {{ Obsolete_inline() }}{{HTMLElement("command")}}, {{HTMLElement("data")}}, {{HTMLElement("datalist")}}, {{HTMLElement("del")}}, {{HTMLElement("details")}}, {{HTMLElement("dfn")}}, {{HTMLElement("div")}}, {{HTMLElement("dl")}}, {{HTMLElement("em")}}, {{HTMLElement("embed")}}, {{HTMLElement("fieldset")}}, {{HTMLElement("figure")}}, {{HTMLElement("footer")}}, {{HTMLElement("form")}}, {{HTMLElement("h1")}}, {{HTMLElement("h2")}}, {{HTMLElement("h3")}}, {{HTMLElement("h4")}}, {{HTMLElement("h5")}}, {{HTMLElement("h6")}}, {{HTMLElement("header")}}, {{HTMLElement("hgroup")}}, {{HTMLElement("hr")}}, {{HTMLElement("i")}}, {{HTMLElement("iframe")}}, {{HTMLElement("img")}}, {{HTMLElement("input")}}, {{HTMLElement("ins")}}, {{HTMLElement("kbd")}}, {{deprecated_inline()}}{{HTMLElement("keygen")}}, {{HTMLElement("label")}}, {{HTMLElement("main")}}, {{HTMLElement("map")}}, {{HTMLElement("mark")}}, {{MathMLElement("math")}}, {{HTMLElement("menu")}}, {{HTMLElement("meter")}}, {{HTMLElement("nav")}}, {{HTMLElement("noscript")}}, {{HTMLElement("object")}}, {{HTMLElement("ol")}}, {{HTMLElement("output")}}, {{HTMLElement("p")}}, {{HTMLElement("picture")}}, {{HTMLElement("pre")}}, {{HTMLElement("progress")}}, {{HTMLElement("q")}}, {{HTMLElement("ruby")}}, {{HTMLElement("s")}}, {{HTMLElement("samp")}}, {{HTMLElement("script")}}, {{HTMLElement("section")}}, {{HTMLElement("select")}}, {{HTMLElement("small")}}, {{HTMLElement("span")}}, {{HTMLElement("strong")}}, {{HTMLElement("sub")}}, {{HTMLElement("sup")}}, {{SVGElement("svg")}}, {{HTMLElement("table")}}, {{HTMLElement("template")}}, {{HTMLElement("textarea")}}, {{HTMLElement("time")}}, {{HTMLElement("ul")}}, {{HTMLElement("var")}}, {{HTMLElement("video")}}, {{HTMLElement("wbr")}} and Text.
+
+Algunos otros elementos pertenecen a esta categoría, pero solo si se cumple una condición específica:
+
+- {{HTMLElement("area")}}, si es descendiente de un elemento {{HTMLElement("map")}}
+- {{HTMLElement("link")}}, si está presente el atributo {{web.link("/es/docs/HTML/Global_attributes#attr-itemprop", "itemprop")}}
+- {{HTMLElement("meta")}}, si está presente el atributo {{web.link("/es/docs/HTML/Global_attributes#attr-itemprop", "itemprop")}}
+- {{HTMLElement("style")}}, si está presente el atributo {{deprecated_inline()}} {{HTMLAttrxRef("scoped", "style")}}
+
+### Contenido de sección
+
+Los elementos que pertenecen al modelo de contenido de secciones crean una {{web.link("/es/docs/Sections_and_Outlines_of_an_HTML5_document", "sección en el esquema actual")}} que define el alcance de los elementos {{HTMLElement("header")}}, {{HTMLElement("footer")}} y [Contenido del encabezado](#contenido_del_encabezado).
+
+Los elementos que pertenecen a esta categoría son {{HTMLElement("article")}}, {{HTMLElement("aside")}}, {{HTMLElement("nav")}} y {{HTMLElement("section")}}.
+
+> **Nota:** No confundas este modelo de contenido con la categoría de {{web.link("/es/docs/Web/Guide/HTML/Using_HTML_sections_and_outlines#Sectioning_roots", "seccionado raíz")}}, que aísla su contenido del esquema regular.
+
+### Contenido del encabezado
+
+El contenido del encabezado define el título de una sección, ya sea que esté marcado por un elemento [Contenido de sección](#contenido_de_sección) explícito o definido implícitamente por el contenido del encabezado en sí mismo.
+
+Los elementos que pertenecen a esta categoría son {{HTMLElement("h1")}}, {{HTMLElement("h2")}}, {{HTMLElement("h3")}}, {{HTMLElement("h4")}}, {{HTMLElement("h5")}}, {{HTMLElement("h6")}} y {{HTMLElement("hgroup")}}.
+
+> **Nota:** Aunque es probable que tenga contenido de encabezado, {{HTMLElement("header")}} no es contenido de encabezado en sí mismo.
+
+> **Nota:** El elemento {{HTMLElement("hgroup")}} se eliminó de la especificación HTML del W3C antes de que se finalizara HTML 5, pero sigue siendo parte de la especificación WHATWG y la mayoría de los navegadores lo admiten por lo menos parcialmente.
+
+### Contenido de redacción
+
+El contenido de redacción define el texto y el marcado que contiene. Las series de contenido de redacción forman párrafos.
+
+Los elementos que pertenecen a esta categoría son: {{HTMLElement("abbr")}}, {{HTMLElement("audio")}}, {{HTMLElement("b")}}, {{HTMLElement("bdo")}}, {{HTMLElement("br")}}, {{HTMLElement("button")}}, {{HTMLElement("canvas")}}, {{HTMLElement("cite")}}, {{HTMLElement("code")}}, {{ Obsolete_inline() }}{{HTMLElement("command")}}, {{HTMLElement("data")}}, {{HTMLElement("datalist")}}, {{HTMLElement("dfn")}}, {{HTMLElement("em")}}, {{HTMLElement("embed")}}, {{HTMLElement("i")}}, {{HTMLElement("iframe")}}, {{HTMLElement("img")}}, {{HTMLElement("input")}}, {{HTMLElement("kbd")}}, {{deprecated_inline()}}{{HTMLElement("keygen")}}, {{HTMLElement("label")}}, {{HTMLElement("mark")}}, {{MathMLElement("math")}}, {{HTMLElement("meter")}}, {{HTMLElement("noscript")}}, {{HTMLElement("object")}}, {{HTMLElement("output")}}, {{HTMLElement("picture")}}, {{HTMLElement("progress")}}, {{HTMLElement("q")}}, {{HTMLElement("ruby")}}, {{HTMLElement("samp")}}, {{HTMLElement("script")}}, {{HTMLElement("select")}}, {{HTMLElement("small")}}, {{HTMLElement("span")}}, {{HTMLElement("strong")}}, {{HTMLElement("sub")}}, {{HTMLElement("sup")}}, {{SVGElement("svg")}}, {{HTMLElement("textarea")}}, {{HTMLElement("time")}}, {{HTMLElement("var")}}, {{HTMLElement("video")}}, {{HTMLElement("wbr")}} y texto sin formato (no solo consiste de espacios en blanco).
+
+Algunos otros elementos pertenecen a esta categoría, pero solo si se cumple una condición específica:
+
+- {{HTMLElement("a")}}, si solo incluye contenido de redacción
+- {{HTMLElement("area")}}, si es descendiente de un elemento {{HTMLElement("map")}}
+- {{HTMLElement("del")}}, si solo incluye contenido de redacción
+- {{HTMLElement("ins")}}, si solo incluye contenido de redacción
+- {{HTMLElement("link")}}, si está presente el atributo {{web.link("/es/docs/HTML/Global_attributes#itemprop", "itemprop")}}
+- {{HTMLElement("map")}}, si solo incluye contenido de redacción
+- {{HTMLElement("meta")}}, si está presente el atributo {{web.link("/es/docs/HTML/Global_attributes#itemprop", "itemprop")}}
+
+### Contenido incrustado
+
+El contenido incrustado importa otro recurso o inserta contenido de otro lenguaje de marcado o espacio de nombres en el documento. Los elementos que pertenecen a esta categoría incluyen: {{HTMLElement("audio")}}, {{HTMLElement("canvas")}}, {{HTMLElement("embed")}}, {{HTMLElement("iframe")}}, {{HTMLElement("img")}}, {{MathMLElement("math")}}, {{HTMLElement("object")}}, {{HTMLElement("picture")}}, {{SVGElement("svg")}} y {{HTMLElement("video")}}.
+
+### Contenido interactivo
+
+El contenido interactivo incluye elementos diseñados específicamente para la interacción del usuario. Los elementos que pertenecen a esta categoría incluyen: {{HTMLElement("a")}}, {{HTMLElement("button")}}, {{HTMLElement("details")}}, {{HTMLElement("embed")}}, {{HTMLElement("iframe")}}, {{deprecated_inline()}}{{HTMLElement("keygen")}}, {{HTMLElement("label")}}, {{HTMLElement("select")}} y {{HTMLElement("textarea")}}.
+Algunos elementos pertenecen a esta categoría solo bajo condiciones específicas:
+
+- {{HTMLElement("audio")}}, si está presente el atributo {{HTMLAttrxRef("controls", "audio")}}
+- {{HTMLElement("img")}}, si está presente el atributo {{HTMLAttrxRef("usemap", "img")}}
+- {{HTMLElement("input")}}, si el atributo {{HTMLAttrxRef("type", "input")}} no está en estado oculto
+- {{HTMLElement("menu")}}, si el atributo {{HTMLAttrxRef("type", "menu")}} está en la barra de estado de herramientas
+- {{HTMLElement("object")}}, si está presente el atributo {{HTMLAttrxRef("usemap", "object")}}
+- {{HTMLElement("video")}}, si está presente el atributo {{HTMLAttrxRef("controls", "video")}}
+
+### Contenido palpable
+
+El contenido es palpable cuando no está vacío ni oculto; es contenido que se presenta y es sustantivo. Los elementos cuyo modelo es flujo de contenido o contenido de redacción deben tener, por lo menos, un nodo que sea palpable.
+
+### Contenido asociado a formulario
+
+El contenido asociado a un formulario comprende elementos que tienen un formulario de propietario, expuesto mediante un atributo **form**. El propietario de un formulario es el elemento {{HTMLElement("form")}} que lo contiene o el elemento cuya identificación se especifica en el atributo **form**.
+
+- {{HTMLElement("button")}}
+- {{HTMLElement("fieldset")}}
+- {{HTMLElement("input")}}
+- {{deprecated_inline()}} {{HTMLElement("keygen")}}
+- {{HTMLElement("label")}}
+- {{HTMLElement("meter")}}
+- {{HTMLElement("object")}}
+- {{HTMLElement("output")}}
+- {{HTMLElement("progress")}}
+- {{HTMLElement("select")}}
+- {{HTMLElement("textarea")}}
+
+Esta categoría contiene varias subcategorías:
+
+- enumerado
+ - : Elementos que se enumeran en las colecciones IDL {{DOMxRef("HTMLFormElement.elements", "form.elements")}} y `fieldset.elements`. Contiene: {{HTMLElement("button")}}, {{HTMLElement("fieldset")}}, {{HTMLElement("input")}}, {{deprecated_inline()}} {{HTMLElement("keygen")}}, {{HTMLElement("object")}}, {{HTMLElement("output")}}, {{HTMLElement("select")}} y {{HTMLElement("textarea")}}.
+- etiquetable
+ - : Elementos que se pueden asociar con elementos {{HTMLElement("label")}}. Contiene {{HTMLElement("button")}}, {{HTMLElement("input")}}, {{deprecated_inline()}}{{HTMLElement("keygen")}}, {{HTMLElement("meter")}}, {{HTMLElement("output")}}, {{HTMLElement("progress")}}, {{HTMLElement("select")}} y {{HTMLElement("textarea")}}.
+- transmisible
+ - : Elementos que se pueden utilizar para construir el conjunto de datos del formulario cuando se envía el formulario. Contiene {{HTMLElement("button")}}, {{HTMLElement("input")}}, {{deprecated_inline()}}{{HTMLElement("keygen")}}, {{HTMLElement("object")}}, {{HTMLElement("select")}} y {{HTMLElement("textarea")}}.
+- reiniciable
+ - : Elementos que se pueden ver afectados cuando se restablece o reinicia un formulario. Contiene {{HTMLElement("input")}}, {{deprecated_inline()}}{{HTMLElement("keygen")}}, {{HTMLElement("output")}},{{HTMLElement("select")}} y {{HTMLElement("textarea")}}.
+
+## Categorías secundarias
+
+Hay algunas clasificaciones secundarias de elementos que también puede ser útil tener en cuenta.
+
+### Elementos de soporte de scripts
+
+Los **elementos de soporte de scripts** son elementos que no contribuyen directamente a la salida renderizada de un documento. En cambio, sirven para admitir scripts, ya sea conteniendo o especificando directamente el código del script, o especificando datos que serán utilizados por los scripts.
+
+Los elementos que admiten scripts son:
+
+- {{HTMLElement("script")}}
+- {{HTMLElement("template")}}
+
+## Modelo de contenido transparente
+
+Si un elemento tiene un modelo de contenido transparente, entonces su contenido debe estar estructurado de manera que sea HTML 5 válido, incluso si el elemento transparente fuera eliminado y reemplazado por elementos secundarios.
+
+Por ejemplo, los elementos {{HTMLElement("del")}} y {{HTMLElement("ins")}} son transparentes:
+
+```
+Sostenemos que estas verdades son sagradas e innegablemente evidentes por sí mismas .
+```
+
+Si esos elementos fueran eliminados, este fragmento seguiría siendo HTML válido (si no es Español correcto).
+
+```
+Sostenemos que estas verdades son sagradas e innegablemente evidentes por sí mismas .
+```
+
+## Otros modelos de contenido
+
+Seccionado raíz.
diff --git a/files/es/web/guide/html/editable_content/index.html b/files/es/web/guide/html/editable_content/index.html
deleted file mode 100644
index 54951f4afb0fcc..00000000000000
--- a/files/es/web/guide/html/editable_content/index.html
+++ /dev/null
@@ -1,226 +0,0 @@
----
-title: Making content editable
-slug: Web/Guide/HTML/Editable_content
-tags:
- - Avanzado
- - Ejemplo
- - Entrada de texto
- - Guía
- - HTML
- - HTML5
- - Texto
- - Web
- - contentediatable
-translation_of: Web/Guide/HTML/Editable_content
----
-En HTML, cualquier elemento puede ser editable. Con el uso de algunos manejadores de eventos de JavaScript, puedes transformar tu página web en un completo y rápido editor de texto. Este artículo brinda información sobre esta funcionalidad.
-
-¿Cómo funciona?
-
-Todo lo que debes hacer es definir el atributo {{htmlattrxref("contenteditable")}} en cualquier elemento HTML que quieras hacer editable.
-
-Este es un ejemplo simple con el cual puedes crear elementos {{HTMLElement("div")}} cuyo contenido pueda ser editado por el usuario.
-
-<div contenteditable="true">
- This text can be edited by the user.
-</div>
-
-Aquí esta el HTML anterion en acción:
-
-{{ EmbedLiveSample('How_does_it_work') }}
-
-Ejecutando Comandos
-
-Cuando un elemento HTML tiene el parametro contenteditable
en true
, se hace disponible el método {{ domxref("document.execCommand") }}. Esto te permite ejecutar comandos para manipular el contenido de una region editable. La mayoria de estos comandos afectan a la selección del documento (bold, italics, etc), mientras que otros insertan nuevos elementos (como añadiendo un link) o afectan a una linea entera (indenting). Cuando usas contentEditable
, estás llamando a execCommand
que afectará al elemento editable activo.
-
-Differences in markup generation
-
-El uso de contenteditable
en diferentes navegadores ha sido laborioso durante mucho tiempo debido a las diferencias en las marcas generadas por los diferentes navegadores. Por ejemplo, incluso algo tan simple como qué pasa cuando pulsas Enter/Return para crear una nueva línea de texto dentro de un elemento editable era manejado de forma diferente por los navegadores más utilizados (Firefox insertaba {{htmlelement("br")}} elements, IE/Opera usaba {{htmlelement("p")}}, Chrome/Safari usaba {{htmlelement("div")}}).
-
-Afortunadamente, en los navegadores modernos las cosas son un poco más consistentes. A partir de Firefox 55 , Firefox ha sido actualizado para envolver las líneas separadas en elementos {{htmlelement("div")}}, igualando el comportamiento de Chrome, el moderno Opera, Edge, y Safari.
-
-Pruebalo en el ejemplo de abajo.
-
-
-
Note : Internet Explorer ya no se está desarrollando y usa {{htmlelement("p")}}.
-
-
-Si quieres utilizar un separador de párrafo diferente, todos los navegadores arriba mencionados soportan {{domxref("document.execCommand")}}, el cual provee un DefaultParagraphSeparator comando que te premite cambiarlo. Por ejemplo, para usar {{htmlelement("p")}} elements:
-
-document. execCommand ( "DefaultParagraphSeparator" , false , "p" ) ;
-
-Seguridad
-
-Por razones de seguridad, Firefox no permite al código JavaScript utilizar las características relacionadas con el portapapeles (copiar, pegar, etc.) por defecto. Puedes permitirlo estableciendo las preferencias mostradas abajo usando using about:config
:
-
-user_pref("capability.policy.policynames", "allowclipboard");
-user_pref("capability.policy.allowclipboard.sites", "https://www.mozilla.org");
-user_pref("capability.policy.allowclipboard.Clipboard.cutcopy", "allAccess");
-user_pref("capability.policy.allowclipboard.Clipboard.paste", "allAccess");
-
-Ejemplo: un simple pero completo editor de texto enriquecido
-
-
-
<!doctype html>
-<html>
-<head>
-<title>Rich Text Editor</title>
-<script type="text/javascript">
-var oDoc, sDefTxt;
-
-function initDoc() {
- oDoc = document.getElementById("textBox");
- sDefTxt = oDoc.innerHTML;
- if (document.compForm.switchMode.checked) { setDocMode(true); }
-}
-
-function formatDoc(sCmd, sValue) {
- if (validateMode()) { document.execCommand(sCmd, false, sValue); oDoc.focus(); }
-}
-
-function validateMode() {
- if (!document.compForm.switchMode.checked) { return true ; }
- alert("Uncheck \"Show HTML\".");
- oDoc.focus();
- return false;
-}
-
-function setDocMode(bToSource) {
- var oContent;
- if (bToSource) {
- oContent = document.createTextNode(oDoc.innerHTML);
- oDoc.innerHTML = "";
- var oPre = document.createElement("pre");
- oDoc.contentEditable = false;
- oPre.id = "sourceText";
- oPre.contentEditable = true;
- oPre.appendChild(oContent);
- oDoc.appendChild(oPre);
- } else {
- if (document.all) {
- oDoc.innerHTML = oDoc.innerText;
- } else {
- oContent = document.createRange();
- oContent.selectNodeContents(oDoc.firstChild);
- oDoc.innerHTML = oContent.toString();
- }
- oDoc.contentEditable = true;
- }
- oDoc.focus();
-}
-
-function printDoc() {
- if (!validateMode()) { return; }
- var oPrntWin = window.open("","_blank","width=450,height=470,left=400,top=100,menubar=yes,toolbar=no,location=no,scrollbars=yes");
- oPrntWin.document.open();
- oPrntWin.document.write("<!doctype html><html><head><title>Print<\/title><\/head><body onload=\"print();\">" + oDoc.innerHTML + "<\/body><\/html>");
- oPrntWin.document.close();
-}
-</script>
-<style type="text/css">
-.intLink { cursor: pointer; }
-img.intLink { border: 0; }
-#toolBar1 select { font-size:10px; }
-#textBox {
- width: 540px;
- height: 200px;
- border: 1px #000000 solid;
- padding: 12px;
- overflow: scroll;
-}
-#textBox #sourceText {
- padding: 0;
- margin: 0;
- min-width: 498px;
- min-height: 200px;
-}
-#editMode label { cursor: pointer; }
-</style>
-</head>
-<body onload="initDoc();">
-<form name="compForm" method="post" action="sample.php" onsubmit="if(validateMode()){this.myDoc.value=oDoc.innerHTML;return true;}return false;">
-<input type="hidden" name="myDoc">
-<div id="toolBar1">
-<select onchange="formatDoc('formatblock',this[this.selectedIndex].value);this.selectedIndex=0;">
-<option selected>- formatting -</option>
-<option value="h1">Title 1 <h1></option>
-<option value="h2">Title 2 <h2></option>
-<option value="h3">Title 3 <h3></option>
-<option value="h4">Title 4 <h4></option>
-<option value="h5">Title 5 <h5></option>
-<option value="h6">Subtitle <h6></option>
-<option value="p">Paragraph <p></option>
-<option value="pre">Preformatted <pre></option>
-</select>
-<select onchange="formatDoc('fontname',this[this.selectedIndex].value);this.selectedIndex=0;">
-<option class="heading" selected>- font -</option>
-<option>Arial</option>
-<option>Arial Black</option>
-<option>Courier New</option>
-<option>Times New Roman</option>
-</select>
-<select onchange="formatDoc('fontsize',this[this.selectedIndex].value);this.selectedIndex=0;">
-<option class="heading" selected>- size -</option>
-<option value="1">Very small</option>
-<option value="2">A bit small</option>
-<option value="3">Normal</option>
-<option value="4">Medium-large</option>
-<option value="5">Big</option>
-<option value="6">Very big</option>
-<option value="7">Maximum</option>
-</select>
-<select onchange="formatDoc('forecolor',this[this.selectedIndex].value);this.selectedIndex=0;">
-<option class="heading" selected>- color -</option>
-<option value="red">Red</option>
-<option value="blue">Blue</option>
-<option value="green">Green</option>
-<option value="black">Black</option>
-</select>
-<select onchange="formatDoc('backcolor',this[this.selectedIndex].value);this.selectedIndex=0;">
-<option class="heading" selected>- background -</option>
-<option value="red">Red</option>
-<option value="green">Green</option>
-<option value="black">Black</option>
-</select>
-</div>
-<div id="toolBar2">
-<img class="intLink" title="Clean" onclick="if(validateMode()&&confirm('Are you sure?')){oDoc.innerHTML=sDefTxt};" src="data:image/gif;base64,R0lGODlhFgAWAIQbAD04KTRLYzFRjlldZl9vj1dusY14WYODhpWIbbSVFY6O7IOXw5qbms+wUbCztca0ccS4kdDQjdTLtMrL1O3YitHa7OPcsd/f4PfvrvDv8Pv5xv///////////////////yH5BAEKAB8ALAAAAAAWABYAAAV84CeOZGmeaKqubMteyzK547QoBcFWTm/jgsHq4rhMLoxFIehQQSAWR+Z4IAyaJ0kEgtFoLIzLwRE4oCQWrxoTOTAIhMCZ0tVgMBQKZHAYyFEWEV14eQ8IflhnEHmFDQkAiSkQCI2PDC4QBg+OAJc0ewadNCOgo6anqKkoIQA7" />
-<img class="intLink" title="Print" onclick="printDoc();" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9oEBxcZFmGboiwAAAAIdEVYdENvbW1lbnQA9syWvwAAAuFJREFUOMvtlUtsjFEUx//n3nn0YdpBh1abRpt4LFqtqkc3jRKkNEIsiIRIBBEhJJpKlIVo4m1RRMKKjQiRMJRUqUdKPT71qpIpiRKPaqdF55tv5vvusZjQTjOlseUkd3Xu/3dPzusC/22wtu2wRn+jG5So/OCDh8ycMJDflehMlkJkVK7KUYN+ufzA/RttH76zaVocDptRxzQtNi3mRWuPc+6cKtlXZ/sddP2uu9uXlmYXZ6Qm8v4Tz8lhF1H+zDQXt7S8oLMXtbF4e8QaFHjj3kbP2MzkktHpiTjp9VH6iHiA+whtAsX5brpwueMGdONdf/2A4M7ukDs1JW662+XkqTkeUoqjKtOjm2h53YFL15pSJ04Zc94wdtibr26fXlC2mzRvBccEbz2kiRFD414tKMlEZbVGT33+qCoHgha81SWYsew0r1uzfNylmtpx80pngQQ91LwVk2JGvGnfvZG6YcYRAT16GFtW5kKKfo1EQLtfh5Q2etT0BIWF+aitq4fDbk+ImYo1OxvGF03waFJQvBCkvDffRyEtxQiFFYgAZTHS0zwAGD7fG5TNnYNTp8/FzvGwJOfmgG7GOx0SAKKgQgDMgKBI0NJGMEImpGDk5+WACEwEd0ywblhGUZ4Hw5OdUekRBLT7DTgdEgxACsIznx8zpmWh7k4rkpJcuHDxCul6MDsmmBXDlWCH2+XozSgBnzsNCEE4euYV4pwCpsWYPW0UHDYBKSWu1NYjENDReqtKjwn2+zvtTc1vMSTB/mvev/WEYSlASsLimcOhOBJxw+N3aP/SjefNL5GePZmpu4kG7OPr1+tOfPyUu3BecWYKcwQcDFmwFKAUo90fhKDInBCAmvqnyMgqUEagQwCoHBDc1rjv9pIlD8IbVkz6qYViIBQGTJPx4k0XpIgEZoRN1Da0cij4VfR0ta3WvBXH/rjdCufv6R2zPgPH/e4pxSBCpeatqPrjNiso203/5s/zA171Mv8+w1LOAAAAAElFTkSuQmCC">
-<img class="intLink" title="Undo" onclick="formatDoc('undo');" src="data:image/gif;base64,R0lGODlhFgAWAOMKADljwliE33mOrpGjuYKl8aezxqPD+7/I19DV3NHa7P///////////////////////yH5BAEKAA8ALAAAAAAWABYAAARR8MlJq7046807TkaYeJJBnES4EeUJvIGapWYAC0CsocQ7SDlWJkAkCA6ToMYWIARGQF3mRQVIEjkkSVLIbSfEwhdRIH4fh/DZMICe3/C4nBQBADs=" />
-<img class="intLink" title="Redo" onclick="formatDoc('redo');" src="data:image/gif;base64,R0lGODlhFgAWAMIHAB1ChDljwl9vj1iE34Kl8aPD+7/I1////yH5BAEKAAcALAAAAAAWABYAAANKeLrc/jDKSesyphi7SiEgsVXZEATDICqBVJjpqWZt9NaEDNbQK1wCQsxlYnxMAImhyDoFAElJasRRvAZVRqqQXUy7Cgx4TC6bswkAOw==" />
-<img class="intLink" title="Remove formatting" onclick="formatDoc('removeFormat')" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAAd0SU1FB9oECQMCKPI8CIIAAAAIdEVYdENvbW1lbnQA9syWvwAAAuhJREFUOMtjYBgFxAB501ZWBvVaL2nHnlmk6mXCJbF69zU+Hz/9fB5O1lx+bg45qhl8/fYr5it3XrP/YWTUvvvk3VeqGXz70TvbJy8+Wv39+2/Hz19/mGwjZzuTYjALuoBv9jImaXHeyD3H7kU8fPj2ICML8z92dlbtMzdeiG3fco7J08foH1kurkm3E9iw54YvKwuTuom+LPt/BgbWf3//sf37/1/c02cCG1lB8f//f95DZx74MTMzshhoSm6szrQ/a6Ir/Z2RkfEjBxuLYFpDiDi6Af///2ckaHBp7+7wmavP5n76+P2ClrLIYl8H9W36auJCbCxM4szMTJac7Kza////R3H1w2cfWAgafPbqs5g7D95++/P1B4+ECK8tAwMDw/1H7159+/7r7ZcvPz4fOHbzEwMDwx8GBgaGnNatfHZx8zqrJ+4VJBh5CQEGOySEua/v3n7hXmqI8WUGBgYGL3vVG7fuPK3i5GD9/fja7ZsMDAzMG/Ze52mZeSj4yu1XEq/ff7W5dvfVAS1lsXc4Db7z8C3r8p7Qjf///2dnZGxlqJuyr3rPqQd/Hhyu7oSpYWScylDQsd3kzvnH738wMDzj5GBN1VIWW4c3KDon7VOvm7S3paB9u5qsU5/x5KUnlY+eexQbkLNsErK61+++VnAJcfkyMTIwffj0QwZbJDKjcETs1Y8evyd48toz8y/ffzv//vPP4veffxpX77z6l5JewHPu8MqTDAwMDLzyrjb/mZm0JcT5Lj+89+Ybm6zz95oMh7s4XbygN3Sluq4Mj5K8iKMgP4f0////fv77//8nLy+7MCcXmyYDAwODS9jM9tcvPypd35pne3ljdjvj26+H2dhYpuENikgfvQeXNmSl3tqepxXsqhXPyc666s+fv1fMdKR3TK72zpix8nTc7bdfhfkEeVbC9KhbK/9iYWHiErbu6MWbY/7//8/4//9/pgOnH6jGVazvFDRtq2VgiBIZrUTIBgCk+ivHvuEKwAAAAABJRU5ErkJggg==">
-<img class="intLink" title="Bold" onclick="formatDoc('bold');" src="data:image/gif;base64,R0lGODlhFgAWAID/AMDAwAAAACH5BAEAAAAALAAAAAAWABYAQAInhI+pa+H9mJy0LhdgtrxzDG5WGFVk6aXqyk6Y9kXvKKNuLbb6zgMFADs=" />
-<img class="intLink" title="Italic" onclick="formatDoc('italic');" src="data:image/gif;base64,R0lGODlhFgAWAKEDAAAAAF9vj5WIbf///yH5BAEAAAMALAAAAAAWABYAAAIjnI+py+0Po5x0gXvruEKHrF2BB1YiCWgbMFIYpsbyTNd2UwAAOw==" />
-<img class="intLink" title="Underline" onclick="formatDoc('underline');" src="data:image/gif;base64,R0lGODlhFgAWAKECAAAAAF9vj////////yH5BAEAAAIALAAAAAAWABYAAAIrlI+py+0Po5zUgAsEzvEeL4Ea15EiJJ5PSqJmuwKBEKgxVuXWtun+DwxCCgA7" />
-<img class="intLink" title="Left align" onclick="formatDoc('justifyleft');" src="data:image/gif;base64,R0lGODlhFgAWAID/AMDAwAAAACH5BAEAAAAALAAAAAAWABYAQAIghI+py+0Po5y02ouz3jL4D4JMGELkGYxo+qzl4nKyXAAAOw==" />
-<img class="intLink" title="Center align" onclick="formatDoc('justifycenter');" src="data:image/gif;base64,R0lGODlhFgAWAID/AMDAwAAAACH5BAEAAAAALAAAAAAWABYAQAIfhI+py+0Po5y02ouz3jL4D4JOGI7kaZ5Bqn4sycVbAQA7" />
-<img class="intLink" title="Right align" onclick="formatDoc('justifyright');" src="data:image/gif;base64,R0lGODlhFgAWAID/AMDAwAAAACH5BAEAAAAALAAAAAAWABYAQAIghI+py+0Po5y02ouz3jL4D4JQGDLkGYxouqzl43JyVgAAOw==" />
-<img class="intLink" title="Numbered list" onclick="formatDoc('insertorderedlist');" src="data:image/gif;base64,R0lGODlhFgAWAMIGAAAAADljwliE35GjuaezxtHa7P///////yH5BAEAAAcALAAAAAAWABYAAAM2eLrc/jDKSespwjoRFvggCBUBoTFBeq6QIAysQnRHaEOzyaZ07Lu9lUBnC0UGQU1K52s6n5oEADs=" />
-<img class="intLink" title="Dotted list" onclick="formatDoc('insertunorderedlist');" src="data:image/gif;base64,R0lGODlhFgAWAMIGAAAAAB1ChF9vj1iE33mOrqezxv///////yH5BAEAAAcALAAAAAAWABYAAAMyeLrc/jDKSesppNhGRlBAKIZRERBbqm6YtnbfMY7lud64UwiuKnigGQliQuWOyKQykgAAOw==" />
-<img class="intLink" title="Quote" onclick="formatDoc('formatblock','blockquote');" src="data:image/gif;base64,R0lGODlhFgAWAIQXAC1NqjFRjkBgmT9nqUJnsk9xrFJ7u2R9qmKBt1iGzHmOrm6Sz4OXw3Odz4Cl2ZSnw6KxyqO306K63bG70bTB0rDI3bvI4P///////////////////////////////////yH5BAEKAB8ALAAAAAAWABYAAAVP4CeOZGmeaKqubEs2CekkErvEI1zZuOgYFlakECEZFi0GgTGKEBATFmJAVXweVOoKEQgABB9IQDCmrLpjETrQQlhHjINrTq/b7/i8fp8PAQA7" />
-<img class="intLink" title="Add indentation" onclick="formatDoc('outdent');" src="data:image/gif;base64,R0lGODlhFgAWAMIHAAAAADljwliE35GjuaezxtDV3NHa7P///yH5BAEAAAcALAAAAAAWABYAAAM2eLrc/jDKCQG9F2i7u8agQgyK1z2EIBil+TWqEMxhMczsYVJ3e4ahk+sFnAgtxSQDqWw6n5cEADs=" />
-<img class="intLink" title="Delete indentation" onclick="formatDoc('indent');" src="data:image/gif;base64,R0lGODlhFgAWAOMIAAAAADljwl9vj1iE35GjuaezxtDV3NHa7P///////////////////////////////yH5BAEAAAgALAAAAAAWABYAAAQ7EMlJq704650B/x8gemMpgugwHJNZXodKsO5oqUOgo5KhBwWESyMQsCRDHu9VOyk5TM9zSpFSr9gsJwIAOw==" />
-<img class="intLink" title="Hyperlink" onclick="var sLnk=prompt('Write the URL here','http:\/\/');if(sLnk&&sLnk!=''&&sLnk!='http://'){formatDoc('createlink',sLnk)}" src="data:image/gif;base64,R0lGODlhFgAWAOMKAB1ChDRLY19vj3mOrpGjuaezxrCztb/I19Ha7Pv8/f///////////////////////yH5BAEKAA8ALAAAAAAWABYAAARY8MlJq7046827/2BYIQVhHg9pEgVGIklyDEUBy/RlE4FQF4dCj2AQXAiJQDCWQCAEBwIioEMQBgSAFhDAGghGi9XgHAhMNoSZgJkJei33UESv2+/4vD4TAQA7" />
-<img class="intLink" title="Cut" onclick="formatDoc('cut');" src="data:image/gif;base64,R0lGODlhFgAWAIQSAB1ChBFNsRJTySJYwjljwkxwl19vj1dusYODhl6MnHmOrpqbmpGjuaezxrCztcDCxL/I18rL1P///////////////////////////////////////////////////////yH5BAEAAB8ALAAAAAAWABYAAAVu4CeOZGmeaKqubDs6TNnEbGNApNG0kbGMi5trwcA9GArXh+FAfBAw5UexUDAQESkRsfhJPwaH4YsEGAAJGisRGAQY7UCC9ZAXBB+74LGCRxIEHwAHdWooDgGJcwpxDisQBQRjIgkDCVlfmZqbmiEAOw==" />
-<img class="intLink" title="Copy" onclick="formatDoc('copy');" src="data:image/gif;base64,R0lGODlhFgAWAIQcAB1ChBFNsTRLYyJYwjljwl9vj1iE31iGzF6MnHWX9HOdz5GjuYCl2YKl8ZOt4qezxqK63aK/9KPD+7DI3b/I17LM/MrL1MLY9NHa7OPs++bx/Pv8/f///////////////yH5BAEAAB8ALAAAAAAWABYAAAWG4CeOZGmeaKqubOum1SQ/kPVOW749BeVSus2CgrCxHptLBbOQxCSNCCaF1GUqwQbBd0JGJAyGJJiobE+LnCaDcXAaEoxhQACgNw0FQx9kP+wmaRgYFBQNeAoGihCAJQsCkJAKOhgXEw8BLQYciooHf5o7EA+kC40qBKkAAAGrpy+wsbKzIiEAOw==" />
-<img class="intLink" title="Paste" onclick="formatDoc('paste');" src="data:image/gif;base64,R0lGODlhFgAWAIQUAD04KTRLY2tXQF9vj414WZWIbXmOrpqbmpGjudClFaezxsa0cb/I1+3YitHa7PrkIPHvbuPs+/fvrvv8/f///////////////////////////////////////////////yH5BAEAAB8ALAAAAAAWABYAAAWN4CeOZGmeaKqubGsusPvBSyFJjVDs6nJLB0khR4AkBCmfsCGBQAoCwjF5gwquVykSFbwZE+AwIBV0GhFog2EwIDchjwRiQo9E2Fx4XD5R+B0DDAEnBXBhBhN2DgwDAQFjJYVhCQYRfgoIDGiQJAWTCQMRiwwMfgicnVcAAAMOaK+bLAOrtLUyt7i5uiUhADs=" />
-</div>
-<div id="textBox" contenteditable="true"><p>Lorem ipsum</p></div>
-<p id="editMode"><input type="checkbox" name="switchMode" id="switchBox" onchange="setDocMode(this.checked);" /> <label for="switchBox">Show HTML</label></p>
-<p><input type="submit" value="Send" /></p>
-</form>
-</body>
-</html>
-
-
-
-
-
-Véase también
-
-
diff --git a/files/es/web/guide/html/editable_content/index.md b/files/es/web/guide/html/editable_content/index.md
new file mode 100644
index 00000000000000..0b5ac17bb154cc
--- /dev/null
+++ b/files/es/web/guide/html/editable_content/index.md
@@ -0,0 +1,227 @@
+---
+title: Making content editable
+slug: Web/Guide/HTML/Editable_content
+tags:
+ - Avanzado
+ - Ejemplo
+ - Entrada de texto
+ - Guía
+ - HTML
+ - HTML5
+ - Texto
+ - Web
+ - contentediatable
+translation_of: Web/Guide/HTML/Editable_content
+---
+En HTML, cualquier elemento puede ser editable. Con el uso de algunos manejadores de eventos de JavaScript, puedes transformar tu página web en un completo y rápido editor de texto. Este artículo brinda información sobre esta funcionalidad.
+
+## ¿Cómo funciona?
+
+Todo lo que debes hacer es definir el atributo {{htmlattrxref("contenteditable")}} en cualquier elemento HTML que quieras hacer editable.
+
+Este es un ejemplo simple con el cual puedes crear elementos {{HTMLElement("div")}} cuyo contenido pueda ser editado por el usuario.
+
+```html
+
+ This text can be edited by the user.
+
+```
+
+Aquí esta el HTML anterion en acción:
+
+{{ EmbedLiveSample('How_does_it_work') }}
+
+## Ejecutando Comandos
+
+Cuando un elemento HTML tiene el parametro `contenteditable` en `true`, se hace disponible el método {{ domxref("document.execCommand") }}. Esto te permite ejecutar [comandos](/es/docs/Web/API/document.execCommand#Commands) para manipular el contenido de una region editable. La mayoria de estos comandos afectan a la selección del documento (bold, italics, etc), mientras que otros insertan nuevos elementos (como añadiendo un link) o afectan a una linea entera (indenting). Cuando usas `contentEditable`, estás llamando a `execCommand` que afectará al elemento editable activo.
+
+## Differences in markup generation
+
+El uso de `contenteditable` en diferentes navegadores ha sido laborioso durante mucho tiempo debido a las diferencias en las marcas generadas por los diferentes navegadores. Por ejemplo, incluso algo tan simple como qué pasa cuando pulsas Enter/Return para crear una nueva línea de texto dentro de un elemento editable era manejado de forma diferente por los navegadores más utilizados (Firefox insertaba {{htmlelement("br")}} elements, IE/Opera usaba {{htmlelement("p")}}, Chrome/Safari usaba {{htmlelement("div")}}).
+
+Afortunadamente, en los navegadores modernos las cosas son un poco más consistentes. A partir de [Firefox 55](/es/docs/Mozilla/Firefox/Releases/55), Firefox ha sido actualizado para envolver las líneas separadas en elementos {{htmlelement("div")}}, igualando el comportamiento de Chrome, el moderno Opera, Edge, y Safari.
+
+Pruebalo en el ejemplo de abajo.
+
+> **Nota:** Internet Explorer ya no se está desarrollando y usa {{htmlelement("p")}}.
+
+Si quieres utilizar un separador de párrafo diferente, todos los navegadores arriba mencionados soportan {{domxref("document.execCommand")}}, el cual provee un DefaultParagraphSeparator comando que te premite cambiarlo. Por ejemplo, para usar {{htmlelement("p")}} elements:
+
+```js
+document.execCommand("DefaultParagraphSeparator", false, "p");
+```
+
+## Seguridad
+
+Por razones de seguridad, Firefox no permite al código JavaScript utilizar las características relacionadas con el portapapeles (copiar, pegar, etc.) por defecto. Puedes permitirlo estableciendo las preferencias mostradas abajo usando using `about:config`:
+
+```
+user_pref("capability.policy.policynames", "allowclipboard");
+user_pref("capability.policy.allowclipboard.sites", "https://www.mozilla.org");
+user_pref("capability.policy.allowclipboard.Clipboard.cutcopy", "allAccess");
+user_pref("capability.policy.allowclipboard.Clipboard.paste", "allAccess");
+```
+
+## Ejemplo: un simple pero completo editor de texto enriquecido
+
+```html
+
+
+
+Rich Text Editor
+
+
+
+
+
+
+
+```
+
+> **Nota:** si quieres ver cómo estandarizar la creación y la inserción de tu editor en tu página, puedes ver nuestro [más completo ejemplo de editor de texto enriquecido](/@api/deki/files/6243/=rich-text-editor.zip).
+
+## Véase también
+
+- {{domxref("HTMLElement.contentEditable")}}
+- El atributo global {{htmlattrxref("contenteditable")}}
+- [Midas](/es/docs/Mozilla/Projects/Midas) (el componente de editor de texto programable)
+- Browser Support
diff --git a/files/es/web/guide/index.html b/files/es/web/guide/index.html
deleted file mode 100644
index aeb91b852aa444..00000000000000
--- a/files/es/web/guide/index.html
+++ /dev/null
@@ -1,72 +0,0 @@
----
-title: Guía de Desarrollo Web
-slug: Web/Guide
-tags:
- - Guia(2)
- - Guía
- - Landing
- - NeedsTranslation
- - TopicStub
- - Web
-translation_of: Web/Guide
----
-
- Este artículo proporciona información para ayudarte a hacer uso de tecnologías y APIs.
-
-
-
-
-
-
-
- Área de aprendizaje HTML
- HyperText Markup Language (lenguaje de marcas de hipertexto) es el lenguaje principal de prácticamente todo el contenido web. La mayoría de las cosas que ves en en la pantalla de tu navegador están escritas, fundamentalmente, utilizando HTML.
- Guía del Desarrollador: CSS
- CSS (hojas de estilo en cascada) es un lenguaje usado para describir la presentación gráfica de un documento escrito en HTML.
- Guía de Eventos
- El término "Eventos" se refiere tanto al patrón de diseño usado para el manejo asíncrono de sucesos que ocurren durante el tiempo de vida de una página web como al nombramiento, caracterización y uso de grandes cantidades de sucesos de diferentes tipos.
- AJAX
- AJAX es el término utilizado para definir un conjunto de tecnologías que permiten a las aplicaciones web hacer rápidamente actualizaciones incrementales a la interfaz de usuario sin la necesidad de recargar toda la página web. Esto permite que las aplicaciones web sean más rápidas y más responsivas a las acciones de los usuarios.
- Elementos Gráficos en la Web
- Las páginas web y aplicaciones modernas a menudo necesitan presentar elementos gráficos (2D, 3D o video).
- Guía de Web APIs
- Listado de todas las APIs web y qué hacen.
- JavaScript
- JavaScript es un poderoso lenguaje de scripting utilizado para crear aplicaciones para la Web.
- Localización y codificación de Caracteres
- Los navegadores procesan el texto internamente como Unicode. No obstante, una forma de representar los caracteres a nivel de bytes (codificación) se usa para transferir texto a través de la red a un navegador web. En recomendaciones de la especificación HTML se aconseja el uso de la codificación UTF-8 (que puede representar todo Unicode) e independientemente de la codificación usada se requiere que el contenido web declare que codificación utiliza.
- Desarrollo Web Móvil
- Esta página proporciona una visión general de algunas de las principales técnicas necesarias para el diseño de sitios web que funcionen en dispositivos móviles. Si estás buscando información sobre el proyecto Firefox OS de Mozilla, mira la web Firefox OS . O puede que te interesen los detalles de Firefox para Android.
-
-
-
-
-
-
-
-
- Progressive Web Apps (PWA)
- Las aplicaciones web progresivas usan APIs Web modernas junto con mejoras progresivas estratégicas para crear aplicaciones multi-plataforma. Estas aplicaciones funcionan donde sea y proporcionan muchas características que brindan la misma experiencia de usuario que una aplicación nativa. Este conjunto de documentos y guías te indican sobre todo lo que debes saber de las PWAs.
- Optimización y Rendimiento
- Cuando creamos modernas Web apps y páginas web, es importante hacer que tu contenido rinda bien. Eso es, hacer que funcione de forma rápida y eficiente. Esto permite trabajar de forma más efectiva tanto a los usuarios de potentes equipos de sobremesa como a los que utilizan dispositivos portátiles con menos potencia.
- Mapeo y Serialización XML
- La Plataforma Web provee los diferentes métodos de parseo y serialización, cada uno con sus pros y contras.
- SVG-in-OpenType
- El SVG-in-OpenType está actualmente en manos del MPEG group . Una vez listos para una más amplia adopción de información desde wiki.mozilla.org nos trasladaremos aquí, actualizados y expandidos.
- El Web Open Font Format (WOFF)
- WOFF ( Web Open Font Format ) es un formato de tipografías para páginas web desarrollado por Mozilla en conjunto con Type Supply, LettError y otras organizaciones.
- Utilizar FormData Objects
- FormData
te permite compilar un conjunto de pares clave/valor para enviarlos utilizando XMLHttpRequest. En un principio se pensó como manera de enviar información de formularios, pero puede utilizarse independientemente de los formularios para transmitir datos. La información trasmitida está en el mismo formato que se utiliza mediante el método submit()
de los formularios para enviarla si el tipo de codificación del formulario fuese "multipart/form-data".
- Glosario
- Define gran cantidad de términos técnicos relativos a las páginas Web e Internet.
-
-
-
-
-
-
-Ver también
-
-
diff --git a/files/es/web/guide/index.md b/files/es/web/guide/index.md
new file mode 100644
index 00000000000000..ca4e3aadc6270f
--- /dev/null
+++ b/files/es/web/guide/index.md
@@ -0,0 +1,55 @@
+---
+title: Guía de Desarrollo Web
+slug: Web/Guide
+tags:
+ - Guia(2)
+ - Guía
+ - Landing
+ - NeedsTranslation
+ - TopicStub
+ - Web
+translation_of: Web/Guide
+---
+Este artículo proporciona información para ayudarte a hacer uso de tecnologías y APIs.
+
+- [Área de aprendizaje HTML](/es/docs/Learn/HTML)
+ - : **HyperText Markup Language** (lenguaje de marcas de hipertexto) es el lenguaje principal de prácticamente todo el contenido web. La mayoría de las cosas que ves en en la pantalla de tu navegador están escritas, fundamentalmente, utilizando HTML.
+- [Guía del Desarrollador: CSS](/es/docs/Web/Guide/CSS)
+ - : CSS (hojas de estilo en cascada) es un lenguaje usado para describir la presentación gráfica de un documento escrito en HTML.
+- [Guía de Eventos](/es/docs/Web/Guide/Events)
+ - : El término "Eventos" se refiere tanto al patrón de diseño usado para el manejo asíncrono de sucesos que ocurren durante el tiempo de vida de una página web como al nombramiento, caracterización y uso de grandes cantidades de sucesos de diferentes tipos.
+- [AJAX](/es/docs/Web/Guide/AJAX)
+ - : AJAX es el término utilizado para definir un conjunto de tecnologías que permiten a las aplicaciones web hacer rápidamente actualizaciones incrementales a la interfaz de usuario sin la necesidad de recargar toda la página web. Esto permite que las aplicaciones web sean más rápidas y más responsivas a las acciones de los usuarios.
+- [Elementos Gráficos en la Web](/es/docs/Web/Guide/Graphics)
+ - : Las páginas web y aplicaciones modernas a menudo necesitan presentar elementos gráficos (2D, 3D o video).
+- [Guía de Web APIs](/es/docs/Web/Guide/API)
+ - : Listado de todas las APIs web y qué hacen.
+- [JavaScript](/es/docs/JavaScript)
+ - : JavaScript es un poderoso lenguaje de scripting utilizado para crear aplicaciones para la Web.
+- [Localización y codificación de Caracteres](/es/docs/Localizations_and_character_encodings)
+ - : Los navegadores procesan el texto internamente como Unicode. No obstante, una forma de representar los caracteres a nivel de bytes (codificación) se usa para transferir texto a través de la red a un navegador web. En [recomendaciones de la especificación HTML](http://www.whatwg.org/specs/web-apps/current-work/multipage/semantics.html#charset) se aconseja el uso de la codificación UTF-8 (que puede representar todo Unicode) e independientemente de la codificación usada se requiere que el contenido web declare que codificación utiliza.
+- [Desarrollo Web Móvil](/es/docs/Web/Guide/Mobile)
+ - : Esta página proporciona una visión general de algunas de las principales técnicas necesarias para el diseño de sitios web que funcionen en dispositivos móviles. Si estás buscando información sobre el proyecto Firefox OS de Mozilla, mira la web [Firefox OS](https://developer.mozilla.org/en/Mozilla/Firefox_OS). O puede que te interesen los detalles de [Firefox para Android.](https://developer.mozilla.org/en/Mozilla/Firefox_for_Android)
+
+
+
+
+
+- [Progressive Web Apps (PWA)](https://developer.mozilla.org/en-US/Apps/Progressive#Core_PWA_guides)
+ - : Las aplicaciones web progresivas usan APIs Web modernas junto con mejoras progresivas estratégicas para crear aplicaciones multi-plataforma. Estas aplicaciones funcionan donde sea y proporcionan muchas características que brindan la misma experiencia de usuario que una aplicación nativa. Este conjunto de documentos y guías te indican sobre todo lo que debes saber de las PWAs.
+- [Optimización y Rendimiento](/es/docs/Web/Guide/Performance)
+ - : Cuando creamos modernas Web apps y páginas web, es importante hacer que tu contenido rinda bien. Eso es, hacer que funcione de forma rápida y eficiente. Esto permite trabajar de forma más efectiva tanto a los usuarios de potentes equipos de sobremesa como a los que utilizan dispositivos portátiles con menos potencia.
+- [Mapeo y Serialización XML](/es/docs/Web/Guide/Parsing_and_serializing_XML)
+ - : La Plataforma Web provee los diferentes métodos de parseo y serialización, cada uno con sus pros y contras.
+- [SVG-in-OpenType](/es/docs/Web/Guide/SVG-in-OpenType)
+ - : El SVG-in-OpenType está actualmente en manos del [MPEG group](http://mpeg.chiariglione.org/). Una vez listos para una más amplia adopción de información desde [wiki.mozilla.org](https://wiki.mozilla.org/SVGOpenTypeFonts) nos trasladaremos aquí, actualizados y expandidos.
+- [El Web Open Font Format (WOFF)](/es/docs/Web/Guide/WOFF)
+ - : **WOFF** ( **Web Open Font Format**) es un formato de tipografías para páginas web desarrollado por Mozilla en conjunto con Type Supply, LettError y otras organizaciones.
+- [Utilizar FormData Objects](/es/docs/Web/Guide/Using_FormData_Objects)
+ - : [`FormData`](https://developer.mozilla.org/en/DOM/XMLHttpRequest/FormData) te permite compilar un conjunto de pares clave/valor para enviarlos utilizando XMLHttpRequest. En un principio se pensó como manera de enviar información de formularios, pero puede utilizarse independientemente de los formularios para transmitir datos. La información trasmitida está en el mismo formato que se utiliza mediante el método `submit()` de los formularios para enviarla si el tipo de codificación del formulario fuese "multipart/form-data".
+- [Glosario](/es/docs/Glossary)
+ - : Define gran cantidad de términos técnicos relativos a las páginas Web e Internet.
+
+## Ver también
+
+- [Referencia para el desarrollador Web](/es/docs/Web/Reference)
diff --git a/files/es/web/guide/mobile/index.html b/files/es/web/guide/mobile/index.html
deleted file mode 100644
index edf06ddaa71b88..00000000000000
--- a/files/es/web/guide/mobile/index.html
+++ /dev/null
@@ -1,76 +0,0 @@
----
-title: Desarrollo Web Móvil
-slug: Web/Guide/Mobile
-tags:
- - Intermedio
- - NecesitaEjemplo
-translation_of: Web/Guide/Mobile
-original_slug: Web/Guide/Movil
----
-Esta página proporciona una visión general de algunas de las principales técnicas necesarias para diseñar sitios web que funcionen bien en dispositivos móviles. Si está buscando información sobre el proyecto Firefox OS de Mozilla, consulte la página de Firefox OS . O podría estar interesado en detalles sobre Firefox para Android .
-
-Hemos organizado esta documentación en dos secciones, diseñando para dispositivos móviles y desarrollo para diferentes navegadores . Vea también la guía a la amigabilidad móvil para desarrolladores web de Jason Grlicky.
-
- Diseñando para dispositivos móviles
-
-Los dispositivos móviles tienen características de hardware bastante diferentes comparados con los ordenadores de escritorio/sobremesa o portátiles. Obviamente sus pantallas son usualmente más pequeñas, pero además habitualmente también cambian automáticamente su orientación, entre retrato o paisaje, según el usuario rota el dispositivo. Por lo general tienen pantallas táctiles para la entrada de datos por parte del usuario. APIs como la geolocalización o la orientación, o bien no son soportadas en ordenadores de escritorio o son mucho menos útiles, y estas APIs ofrecen a los usuarios móviles nuevas formas de interactuar con su sitio web.
-
-Trabajando con pantallas pequeñas
-
-Diseño web adaptable es un término para un conjunto de técnicas que permiten a su sitio web adaptar su diseño según el entorno de visualización — lo más evidente, el tamaño y orientación de la pantalla — cambie. Incluye técnicas como:
-
-
- diseño CSS fluido, para hacer que la página se adapte sin problemas según cambie el tamaño de la ventana del navegador y
- el uso de media queries para incluir condicionalmente reglas CSS adecuadas para el ancho y alto de la pantalla.
-
-
-La etiqueta meta viewport ordena al navegador que muestre su sitio web a la escala adecuada para el dispositivo del usuario.
-
-Trabajando con pantallas táctiles
-
-Para usar una pantalla táctil necesitará trabajar con eventos DOM Touch . No tendrá la posibilidad de usar la pseudo-clase CSS :hover y tendrá que diseñar elementos interactivos como botones para respetar el hecho de que los dedos son más gordos que el puntero del ratón. Vea este artículo sobre diseñar para pantallas táctiles .
-
-Puede usar el media query -moz-touch-enabled para cargar una CSS diferente en un dispositivo con pantalla táctil.
-
-Optimizando imágenes
-
-Para ayudar a los usuarios cuyos dispositivos tienen un bajo o caro ancho de banda, puede optimizar las imágenes cargando sólo aquellas apropiadas para el tamaño y resolución del dispositivo. Es algo que se hace en la CSS consultando la altura de pantalla, anchura y proporción de píxeles .
-
-También puede hacer uso de propiedades CSS para implementar efectos visuales como gradientes y sombras sin utilizar imágenes para ello.
-
-APIs móviles
-
-Finalmente, puede aprovechar las nuevas posibilidades ofrecidas por los dispositivos móviles, como la orientación y la geolocalización .
-
- Desarrollo para diferentes navegadores
-
-Escribir código para diferentes navegadores (cross-browser )
-
-Para crear sitios web que funcionen aceptablemente en diferentes navegadores móviles:
-
-
- Intente evitar características específicas de un navegador, como las propiedades CSS prefijadas por el proveedor (vendor-prefixed ).
- Si necesita utilizar estas características, compruebe si otros navegadores implementan sus propias versiones e inclúyalas igualmente.
- Para navegadores que no soportan estas características, ofrezca una alternativa aceptable.
-
-
-Por ejemplo, si establece un gradiente como fondo para cierto texto usando una propiedad prefijada por el proveedor (vendor-prefixed ) como -webkit-linear-gradient
, es mejor incluir las otras versiones prefijadas de la propiedad linear-gradient (gradiente linear). Si no lo hace, asegúrese al menos de que el fondo por defecto contrasta con el texto. Así, la página será al menos usable en un navegador al que no esté dirigida su regla linear-gradient
.
-
-Vea esta lista de propiedades específicas para Gecko , esta lista de propiedades específicas para WebKit y la tabla de propiedades específicas de proveedores (vendor-specific ) de Peter Beverloo.
-
-Usar herramientas como CSS Lint puede ayudar a encontrar problemas como este en el código y preprocesadores como SASS y LESS pueden ser de ayuda para crear código compatible con diferentes navegadores.
-
-Precaución al husmear el agente de usuario (user agent )
-
-Es preferible para los sitios web usar las técnicas enumeradas anteriormente con el objetivo de detectar características específicas del dispositivo, como el tamaño de pantalla y las pantallas táctiles, y adaptarse a ellas adecuadamente. Pero a veces esto no es práctico y los sitios web recurren a analizar la cadena de agente de usuario del navegador (user agent ) para intentar distinguir entre ordenadores de escritorio, tabletas y teléfonos, y servir diferente contenido a cada tipo de dispositivo.
-
-Si hace esto, asegúrese de que su algoritmo es correcto y no está sirviendo el tipo equivocado de contenido a un dispositivo porque no entiende la cadena de un agente de usuario particular. Vea esta guía para usar la cadena de agente de usuario para determinar el tipo de dispositivo .
-
-Probar en múltiples navegadores
-
-Compruebe su sitio web en múltiples navegadores. Esto significa probarlo en múltiples plataformas — al menos iOS y Android.
-
-
diff --git a/files/es/web/guide/mobile/index.md b/files/es/web/guide/mobile/index.md
new file mode 100644
index 00000000000000..3dfddfa0efff04
--- /dev/null
+++ b/files/es/web/guide/mobile/index.md
@@ -0,0 +1,70 @@
+---
+title: Desarrollo Web Móvil
+slug: Web/Guide/Mobile
+tags:
+ - Intermedio
+ - NecesitaEjemplo
+translation_of: Web/Guide/Mobile
+original_slug: Web/Guide/Movil
+---
+Esta página proporciona una visión general de algunas de las principales técnicas necesarias para diseñar sitios web que funcionen bien en dispositivos móviles. Si está buscando información sobre el proyecto Firefox OS de Mozilla, consulte la página de [Firefox OS](/en/Mozilla/Firefox_OS). O podría estar interesado en detalles sobre [Firefox para Android](/en/Mozilla/Firefox_for_Android).
+
+Hemos organizado esta documentación en dos secciones, [diseñando para dispositivos móviles](#DisenandoParaDispositivosMoviles) y [desarrollo para diferentes navegadores](#DesarrolloParaDiferentesNavegadores). Vea también la guía a la [amigabilidad móvil](/es/docs/Web_Development/Mobile/Mobile-friendliness) para desarrolladores web de Jason Grlicky.
+
+## Diseñando para dispositivos móviles
+
+Los dispositivos móviles tienen características de hardware bastante diferentes comparados con los ordenadores de escritorio/sobremesa o portátiles. Obviamente sus pantallas son usualmente más pequeñas, pero además habitualmente también cambian automáticamente su orientación, entre retrato o paisaje, según el usuario rota el dispositivo. Por lo general tienen pantallas táctiles para la entrada de datos por parte del usuario. APIs como la geolocalización o la orientación, o bien no son soportadas en ordenadores de escritorio o son mucho menos útiles, y estas APIs ofrecen a los usuarios móviles nuevas formas de interactuar con su sitio web.
+
+### Trabajando con pantallas pequeñas
+
+[Diseño web adaptable](/es/docs/Desarrollo_Web/Web_adaptable) es un término para un conjunto de técnicas que permiten a su sitio web adaptar su diseño según el entorno de visualización — lo más evidente, el tamaño y orientación de la pantalla — cambie. Incluye técnicas como:
+
+- diseño CSS fluido, para hacer que la página se adapte sin problemas según cambie el tamaño de la ventana del navegador y
+- el uso de [media queries](/es/docs/CSS/Media_queries) para incluir condicionalmente reglas CSS adecuadas para el [ancho](/es/docs/CSS/Media_queries#width) y [alto](/es/docs/CSS/Media_queries#height) de la pantalla.
+
+La [etiqueta meta viewport](/es/docs/M%C3%B3vil/Viewport_meta_tag) ordena al navegador que muestre su sitio web a la escala adecuada para el dispositivo del usuario.
+
+### Trabajando con pantallas táctiles
+
+Para usar una pantalla táctil necesitará trabajar con eventos [DOM Touch](/es/docs/DOM/Touch_events). No tendrá la posibilidad de usar la pseudo-clase [CSS :hover](/es/docs/Web/CSS/%3Ahover) y tendrá que diseñar elementos interactivos como botones para respetar el hecho de que los dedos son más gordos que el puntero del ratón. Vea este artículo sobre [diseñar para pantallas táctiles](http://www.whatcreative.co.uk/blog/tips/designing-for-touch-screen/).
+
+Puede usar el _media query_ [-moz-touch-enabled](/es/docs/CSS/Media_queries#-moz-touch-enabled) para cargar una CSS diferente en un dispositivo con pantalla táctil.
+
+### Optimizando imágenes
+
+Para ayudar a los usuarios cuyos dispositivos tienen un bajo o caro ancho de banda, puede optimizar las imágenes cargando sólo aquellas apropiadas para el tamaño y resolución del dispositivo. Es algo que se hace en la CSS consultando la [altura](/es/docs/CSS/Media_queries#height) de pantalla, [anchura](/es/docs/CSS/Media_queries#width) y [proporción de píxeles](/es/docs/CSS/Media_queries#-moz-device-pixel-ratio).
+
+También puede hacer uso de propiedades CSS para implementar efectos visuales como [gradientes](/es/docs/CSS/Using_CSS_gradients) y [sombras](/es/docs/Web/CSS/box-shadow) sin utilizar imágenes para ello.
+
+### APIs móviles
+
+Finalmente, puede aprovechar las nuevas posibilidades ofrecidas por los dispositivos móviles, como la [orientación](/es/docs/Web/API/Detecting_device_orientation) y la [geolocalización](/es/docs/WebAPI/Using_geolocation).
+
+## Desarrollo para diferentes navegadores
+
+### Escribir código para diferentes navegadores (_cross-browser_)
+
+Para crear sitios web que funcionen aceptablemente en diferentes navegadores móviles:
+
+- Intente evitar características específicas de un navegador, como las propiedades CSS prefijadas por el proveedor (_vendor-prefixed_).
+- Si necesita utilizar estas características, compruebe si otros navegadores implementan sus propias versiones e inclúyalas igualmente.
+- Para navegadores que no soportan estas características, ofrezca una alternativa aceptable.
+
+Por ejemplo, si establece un gradiente como fondo para cierto texto usando una propiedad prefijada por el proveedor (_vendor-prefixed_) como `-webkit-linear-gradient`, es mejor incluir las otras versiones prefijadas de la propiedad [linear-gradient](/es/docs/Web/CSS/linear-gradient) (gradiente linear). Si no lo hace, asegúrese al menos de que el fondo por defecto contrasta con el texto. Así, la página será al menos usable en un navegador al que no esté dirigida su regla `linear-gradient`.
+
+Vea esta [lista de propiedades específicas para Gecko](/es/docs/Web/CSS/Referencia_CSS/Extensiones_CSS_Mozilla), esta lista de [propiedades específicas para WebKit](/en/CSS/CSS_Reference/Webkit_Extensions) y la [tabla de propiedades específicas de proveedores (_vendor-specific_)](http://peter.sh/experiments/vendor-prefixed-css-property-overview/) de Peter Beverloo.
+
+Usar herramientas como [CSS Lint](http://csslint.net/) puede ayudar a encontrar problemas como este en el código y preprocesadores como [SASS](http://sass-lang.com/) y [LESS](http://lesscss.org/) pueden ser de ayuda para crear código compatible con diferentes navegadores.
+
+### Precaución al husmear el agente de usuario (_user agent_)
+
+Es preferible para los sitios web usar las técnicas enumeradas anteriormente con el objetivo de detectar características específicas del dispositivo, como el tamaño de pantalla y las pantallas táctiles, y adaptarse a ellas adecuadamente. Pero a veces esto no es práctico y los sitios web recurren a analizar la cadena de agente de usuario del navegador (_user agent_) para intentar distinguir entre ordenadores de escritorio, tabletas y teléfonos, y servir diferente contenido a cada tipo de dispositivo.
+
+Si hace esto, asegúrese de que su algoritmo es correcto y no está sirviendo el tipo equivocado de contenido a un dispositivo porque no entiende la cadena de un agente de usuario particular. Vea esta [guía para usar la cadena de agente de usuario para determinar el tipo de dispositivo](/en/Browser_detection_using_the_user_agent#Mobile.2C_Tablet_or_Desktop).
+
+### Probar en múltiples navegadores
+
+Compruebe su sitio web en múltiples navegadores. Esto significa probarlo en múltiples plataformas — al menos iOS y Android.
+
+- Pruebe Safari móvil en iPhone usando el [simulador iOS](https://developer.apple.com/devcenter/ios/index.action).
+- Pruebe Opera y Firefox utilizando el [Android SDK](https://developer.android.com/sdk/index.html). Vea estas instrucciones adicionales para [ejecutar Firefox para Android usando el emulador de Android](https://wiki.mozilla.org/Mobile/Fennec/Android/Emulator).
diff --git a/files/es/web/guide/parsing_and_serializing_xml/index.html b/files/es/web/guide/parsing_and_serializing_xml/index.html
deleted file mode 100644
index bfc37d62c39020..00000000000000
--- a/files/es/web/guide/parsing_and_serializing_xml/index.html
+++ /dev/null
@@ -1,133 +0,0 @@
----
-title: >-
- Convertir código a cadena de texto (serializing) y visceversa (parsing) a un
- XML
-slug: Web/Guide/Parsing_and_serializing_XML
-translation_of: Web/Guide/Parsing_and_serializing_XML
----
-La plataforma web proveé Los siguientes objetos para hacer parsing (convertir una cadena de texto a código) y serializing (visceversa) a un XML:
-
-
- XMLSerializer para convertir a tipo string el arbol del DOM
- XPath para apuntar a diferentes partes de un documento XML ( sin seguir la sintaxis XML) y convertirlas a string.
- DOMParser para convertir a XML desde un tipo string (texto) dentro del árbol del DOM
- XMLHttpRequest para convertit recursos URL direccionables en arboles del DOM
-
-
-Parte 1: Como crear un documento XML
-
-Usar una de la siguientes opciones para crear un documento XML (el cual es una instancia de Document
).
-
-Codificando textos al árbol del DOM
-
-
-
var miTexto = '<a id="a"><b id="b">Hey!</b></a>';
-var codigo = new DOMParser();
-var oDOM = codigo.parseFromString(miTexto, "text/xml");
-// Imprimir el nombre del elemento raiz o un mensaje de error
-dump(oDOM.documentElement.nodeName == "parsererror" ? "error mientras se codificaba" : oDOM.documentElement.nodeName);
-
-
-
-Creando un documento XML empezando desde un árbol de Objetos JavaScript (JXON)
-
-Por favor vea JXON algoritmos de reversa.
-
-Codificando rexursos de URL direccionables en árboles del DOM
-
-Usando XMLHttpRequest
-
-Aquí hay un código de ejemplo que lee y codifica un archivo XML con URL direccionable en un árbol del DOM:
-
-var xhr = new XMLHttpRequest();
-xhr.onload = function() {
- dump(xhr.responseXML.documentElement.nodeName);
-}
-xhr.onerror = function() {
- dump("Error mientras se tomaba el XML.");
-}
-xhr.open("GET", "example.xml");
-xhr.responseType = "document";
-xhr.send();
-
-
-xhr.responseXML
es una instancia de {{domxref("Document")}}.
-
-Parte 2: Como serializar el contenido de un documento XML
-
-Use the following approaches to serialize the contents of the XML document you created in Part 1.
-
-Serializing DOM trees to strings
-
-First, create a DOM tree as described in How to Create a DOM tree . Alternatively, use a DOM tree obtained from {{ domxref("XMLHttpRequest") }}.
-
-Now, let's serialize doc
— the DOM tree — to a string:
-
-var oSerializer = new XMLSerializer();
-var sXML = oSerializer.serializeToString(doc);
-
-The new XMLSerializer()
constructor is not available from within a JS XPCOM component (or a JS module ). Instead, write:
-
-var oSerializer = Components.classes["@mozilla.org/xmlextras/xmlserializer;1"]
- .createInstance(Components.interfaces.nsIDOMSerializer);
-var sXML = oSerializer.serializeToString(doc);
-
-
-"Pretty" serialization of DOM trees to strings
-
-You can pretty print a DOM tree using XMLSerializer
and E4X . First, create a DOM tree as described in the How to Create a DOM tree article. Alternatively, use a DOM tree obtained from {{ domxref("XMLHttpRequest") }}. The doc
variable contains the DOM tree.
-
-var oSerializer = new XMLSerializer();
-var sPrettyXML = XML(oSerializer.serializeToString(doc)).toXMLString();
-
-Indents consist of two spaces. To write a more efficient version or customize the indent string, use {{ domxref("treeWalker") }}.
-
-Note: When using the E4X toXMLString
method, your CDATA elements will be lost , and only the containing text will remain. So if you have CDATA elements in your XML, using the preceding method might not be useful .
-
-<content><![CDATA[This is the content]]></content>
-
-
-Becomes
-
-<content>This is the content</content>
-
-Serializing DOM trees to Javascript Object trees (JXON)
-
-JXON (lossless J avaScript X ML O bject N otation) is a way to represent JavaScript Objects using XML. To address only parts of an XML document, use XPath instead of converting the whole document into JSON! Otherwise, read the article about JXON .
-
-Serializing DOM trees to files
-
-First, create a DOM tree as described in the How to Create a DOM tree article. If you already have a DOM tree from using {{ domxref("XMLHttpRequest") }}, skip to the end of this section.
-
-Now, let's serialize doc
, the DOM tree, to a file. For more information about files, see about using files in Mozilla ):
-
-var oFOStream = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
-var oFile = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("ProfD", Components.interfaces.nsILocalFile); // get profile folder
-oFile.append("extensions"); // extensions sub-directory
-oFile.append("{5872365E-67D1-4AFD-9480-FD293BEBD20D}"); // GUID of your extension
-oFile.append("myXMLFile.xml"); // filename
-oFOStream.init(oFile, 0x02 | 0x08 | 0x20, 0664, 0); // write, create, truncate
-(new XMLSerializer()).serializeToStream(doc, oFOStream, ""); // rememeber, doc is the DOM tree
-oFOStream.close();
-
-
-Serializing XMLHttpRequest objects to files
-
-If you already have a DOM tree from using {{ domxref("XMLHttpRequest") }}, use the same code as above but replace serializer.serializeToStream(doc, oFOStream, "")
with serializer.serializeToStream(xmlHttpRequest.responseXML.documentElement, oFOStream, "")
where xmlHttpRequest
is an instance of XMLHttpRequest
.
-
-Note that this first parses the XML retrieved from the server, and then re-serializes it into a stream. Depending on your needs, you could just save the xmlHttpRequest.responseText
directly.
-
-Serializing HTML documents
-
-If the DOM you have is an HTML document, you can serialize it simply using
-
-var serialized = document.documentElement.innerHTML;
-
-
-See also
-
-
diff --git a/files/es/web/guide/parsing_and_serializing_xml/index.md b/files/es/web/guide/parsing_and_serializing_xml/index.md
new file mode 100644
index 00000000000000..519b9786225e95
--- /dev/null
+++ b/files/es/web/guide/parsing_and_serializing_xml/index.md
@@ -0,0 +1,139 @@
+---
+title: >-
+ Convertir código a cadena de texto (serializing) y visceversa (parsing) a un
+ XML
+slug: Web/Guide/Parsing_and_serializing_XML
+translation_of: Web/Guide/Parsing_and_serializing_XML
+---
+La plataforma web proveé Los siguientes objetos para hacer parsing (convertir una cadena de texto a código) y serializing (visceversa) a un XML:
+
+- [XMLSerializer](/en/XMLSerializer) para convertir a tipo string el arbol del DOM
+- [XPath](/en/XPath) para apuntar a diferentes partes de un documento **[XML](/en/XML) ( sin seguir la sintaxis XML) y convertirlas a string.**
+- [DOMParser](/en/DOM/DOMParser) para convertir a XML desde un tipo string (texto) **dentro del árbol del DOM**
+- [XMLHttpRequest](/en/nsIXMLHttpRequest) para convertit recursos URL direccionables **en arboles del DOM**
+
+## Parte 1: Como crear un documento XML
+
+Usar una de la siguientes opciones para crear un documento XML (el cual es una instancia de `Document`).
+
+### Codificando textos al árbol del DOM
+
+```js
+var miTexto = 'Hey! ';
+var codigo = new DOMParser();
+var oDOM = codigo.parseFromString(miTexto, "text/xml");
+// Imprimir el nombre del elemento raiz o un mensaje de error
+dump(oDOM.documentElement.nodeName == "parsererror" ? "error mientras se codificaba" : oDOM.documentElement.nodeName);
+```
+
+### Creando un documento XML empezando desde un árbol de Objetos JavaScript (JXON)
+
+Por favor vea JXON[algoritmos](/en/JXON#Reverse_Algorithms)de reversa.
+
+### Codificando rexursos de URL direccionables en árboles del DOM
+
+#### Usando XMLHttpRequest
+
+Aquí hay un código de ejemplo que lee y codifica un archivo XML con URL direccionable en un árbol del DOM:
+
+```js
+var xhr = new XMLHttpRequest();
+xhr.onload = function() {
+ dump(xhr.responseXML.documentElement.nodeName);
+}
+xhr.onerror = function() {
+ dump("Error mientras se tomaba el XML.");
+}
+xhr.open("GET", "example.xml");
+xhr.responseType = "document";
+xhr.send();
+```
+
+`xhr.responseXML` es una instancia de {{domxref("Document")}}.
+
+## Parte 2: Como serializar el contenido de un documento XML
+
+Use the following approaches to serialize the contents of the XML document you created in Part 1.
+
+### Serializing DOM trees to strings
+
+First, create a DOM tree as described in [How to Create a DOM tree](/en/How_to_create_a_DOM_tree). Alternatively, use a DOM tree obtained from {{ domxref("XMLHttpRequest") }}.
+
+Now, let's serialize `doc` — the DOM tree — to a string:
+
+```js
+var oSerializer = new XMLSerializer();
+var sXML = oSerializer.serializeToString(doc);
+```
+
+The `new XMLSerializer()` constructor is not available from within a JS XPCOM component (or a [JS module](/en/JavaScript_code_modules)). Instead, write:
+
+```js
+var oSerializer = Components.classes["@mozilla.org/xmlextras/xmlserializer;1"]
+ .createInstance(Components.interfaces.nsIDOMSerializer);
+var sXML = oSerializer.serializeToString(doc);
+```
+
+#### "Pretty" serialization of DOM trees to strings
+
+You can [pretty print](http://en.wikipedia.org/wiki/Pretty-print) a DOM tree using [`XMLSerializer`](/en/XMLSerializer) and [E4X](/en/E4X). First, create a DOM tree as described in the [How to Create a DOM tree](/en/How_to_create_a_DOM_tree) article. Alternatively, use a DOM tree obtained from {{ domxref("XMLHttpRequest") }}. The `doc` variable contains the DOM tree.
+
+```js
+var oSerializer = new XMLSerializer();
+var sPrettyXML = XML(oSerializer.serializeToString(doc)).toXMLString();
+```
+
+Indents consist of two spaces. To write a more efficient version or customize the indent string, use {{ domxref("treeWalker") }}.
+
+> **Nota:** When using the E4X `toXMLString` method, your **CDATA elements will be lost**, and only the containing text will remain. So if you have CDATA elements in your XML, using the preceding method might not be useful.
+
+```xml
+
+```
+
+Becomes
+
+```xml
+This is the content
+```
+
+### Serializing DOM trees to Javascript Object trees (JXON)
+
+[JXON](/en/JXON) (lossless **J**avaScript **X**ML **O**bject **N**otation) is a way to represent JavaScript Objects using XML. To address only parts of an XML document, use [XPath](/en/XPath) instead of converting the whole document into JSON! Otherwise, read the [article about JXON](/en/JXON).
+
+### Serializing DOM trees to files
+
+First, create a DOM tree as described in the [How to Create a DOM tree](/en/How_to_create_a_DOM_tree) article. If you already have a DOM tree from using {{ domxref("XMLHttpRequest") }}, skip to the end of this section.
+
+Now, let's serialize `doc`, the DOM tree, to a file. For more information about files, see [about using files in Mozilla](/en/Code_snippets/File_I//O)):
+
+```js
+var oFOStream = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
+var oFile = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("ProfD", Components.interfaces.nsILocalFile); // get profile folder
+oFile.append("extensions"); // extensions sub-directory
+oFile.append("{5872365E-67D1-4AFD-9480-FD293BEBD20D}"); // GUID of your extension
+oFile.append("myXMLFile.xml"); // filename
+oFOStream.init(oFile, 0x02 | 0x08 | 0x20, 0664, 0); // write, create, truncate
+(new XMLSerializer()).serializeToStream(doc, oFOStream, ""); // rememeber, doc is the DOM tree
+oFOStream.close();
+```
+
+### Serializing XMLHttpRequest objects to files
+
+If you already have a DOM tree from using {{ domxref("XMLHttpRequest") }}, use the same code as above but replace `serializer.serializeToStream(doc, oFOStream, "")` with `serializer.serializeToStream(xmlHttpRequest.responseXML.documentElement, oFOStream, "")` where `xmlHttpRequest` is an instance of `XMLHttpRequest`.
+
+Note that this first parses the XML retrieved from the server, and then re-serializes it into a stream. Depending on your needs, you could just save the `xmlHttpRequest.responseText` directly.
+
+### Serializing HTML documents
+
+If the DOM you have is an HTML document, you can serialize it simply using
+
+```js
+var serialized = document.documentElement.innerHTML;
+```
+
+## See also
+
+- [XPath](/en/XPath)
+- [XMLHttpRequest](/en/nsIXMLHttpRequest)
+- [JXO](/en/JXON)
diff --git a/files/es/web/guide/performance/index.html b/files/es/web/guide/performance/index.html
deleted file mode 100644
index 7c37735432392e..00000000000000
--- a/files/es/web/guide/performance/index.html
+++ /dev/null
@@ -1,12 +0,0 @@
----
-title: Optimización y rendimiento
-slug: Web/Guide/Performance
-tags:
- - Optimizacion
- - Rendimiento
- - Web
-translation_of: Web/Guide/Performance
----
-Cuando se construyen aplicaciones o sitios Web modernos, es importante hacer que su contenido funcione bien. Es decir, hacer que trabaje de forma rápida y eficiente. Esto permite que funcione eficazmente tanto para usuarios de potentes sistemas de escritorio así como para dispositivos móviles con menos potencia.
-
-{{LandingPageListSubpages}}
diff --git a/files/es/web/guide/performance/index.md b/files/es/web/guide/performance/index.md
new file mode 100644
index 00000000000000..a5f59b921fea71
--- /dev/null
+++ b/files/es/web/guide/performance/index.md
@@ -0,0 +1,12 @@
+---
+title: Optimización y rendimiento
+slug: Web/Guide/Performance
+tags:
+ - Optimizacion
+ - Rendimiento
+ - Web
+translation_of: Web/Guide/Performance
+---
+Cuando se construyen aplicaciones o sitios Web modernos, es importante hacer que su contenido funcione bien. Es decir, hacer que trabaje de forma rápida y eficiente. Esto permite que funcione eficazmente tanto para usuarios de potentes sistemas de escritorio así como para dispositivos móviles con menos potencia.
+
+{{LandingPageListSubpages}}
diff --git a/files/es/web/manifest/index.html b/files/es/web/manifest/index.html
deleted file mode 100644
index dbc62d76c134b1..00000000000000
--- a/files/es/web/manifest/index.html
+++ /dev/null
@@ -1,311 +0,0 @@
----
-title: Web App Manifest
-slug: Web/Manifest
-translation_of: Web/Manifest
----
-El manifiesto de aplicaciones web proporciona información sobre una aplicación (como nombre, autor, icono y descripción) en un documento simplificado. Su principal propósito es crear progressive web apps : aplicaciones web que se pueden instalar desde la pantalla principal de un dispositivo sin necesidad de hacerlo a traves de una app store (y otras ventajas como disponibilidad offline y enviar notificaciones push cuando cambia el contenido de la aplicación.)
-
-Manifiesto de ejemplo
-
-{
- "name": "Google I/O 2015",
- "short_name": "I/O 2015",
- "start_url": "./?utm_source=web_app_manifest",
- "display": "standalone",
- "icons": [{
- "src": "images/touch/homescreen48.png",
- "sizes": "48x48",
- "type": "image/png"
- }, {
- "src": "images/touch/homescreen72.png",
- "sizes": "72x72",
- "type": "image/png"
- }, {
- "src": "images/touch/homescreen96.png",
- "sizes": "96x96",
- "type": "image/png"
- }, {
- "src": "images/touch/homescreen144.png",
- "sizes": "144x144",
- "type": "image/png"
- }, {
- "src": "images/touch/homescreen168.png",
- "sizes": "168x168",
- "type": "image/png"
- }, {
- "src": "images/touch/homescreen192.png",
- "sizes": "192x192",
- "type": "image/png"
- }],
- "related_applications": [{
- "platform": "web"
- }, {
- "platform": "play",
- "url": "https://play.google.com/store/apps/details?id=com.google.samples.apps.iosched"
- }]
-}
-
-Propiedades
-
-background_color
-
-Define el color de fondo deseado para la aplicación. Este valor repite lo definido en la hoja de estilos de la aplicación, pero puede ser utilizado por los navegadores para pintar el color de fondo de una app si el manifiesto está disponible antes de que la hoja de estilos se haya cargado. Esto suaviza la transición entre lanzar una aplicación y cargar el contenido de la misma.
-
-"background_color": "red"
-
-
-
Note : El background_color
únicamente está destinado a mejorar la experiencia de usuario mientras se carga la aplicación y no se debe usar como color de fondo cuando la hoja de estilos de la aplicación esté disponible.
-
-
-description
-
-Proporciona una descripción general sobre qué hace la aplicación.
-
-"description": "The app that helps you find the best food in town!"
-
-dir
-
-Especifica la dirección del texto para name
, short_name
, y description
. Junto con lang
, ayuda a representar correctamente los idiomas que se escriben de derecha a izquierda (right-to-left).
-
-"dir": "rtl",
-"lang": "ar",
-"short_name": "أنا من التطبيق!"
-
-Puede tener uno de los siguentes valores:
-
-
- ltr
(izquierda a derecha)
- rtl
(derecha a izquierda)
- auto
(indica al navegador que use el algoritmo Unicode bidirectional para hacer una estimación apropiada sobre la dirección del texto.)
-
-
-
-
Note : Cuando se omite este valor, por defecto es auto
.
-
-
-display
-
-Define el modo de visualización preferido para la aplicación web.
-
-"display": "standalone"
-
-Los valores aceptados son:
-
-
-
-
- Display Mode
- Description
- Fallback Display Mode
-
-
-
-
- fullscreen
- Se utiliza toda la pantalla disponible no se muestran elementos del user agent {{Glossary("chrome")}}.
- standalone
-
-
- standalone
- La aplicación se mostrará como una app independiente. Así la aplicación puede tener su propia ventana, su propio icono en el lanzador de aplicaciones, etc. En este modo, the user agent excluirá los elementos de interfaz para controlar la navegación, pero puede incluir otros elementos como la barra de estado.
- minimal-ui
-
-
- minimal-ui
- La aplicación se mostrará como una app independiente, pero tendrá un mínimo de elementos de interfaz para controlar la navegación. Estos elementos podrán variar según navegador.
- browser
-
-
- browser
- La aplicación se abrirá en una pestaña nueva del navegador o una ventana nueva, dependiendo del navegador y plataforma. Esto es por defecto.
- (None)
-
-
-
-
-
-
Note : Puedes aplicar selectivamente CSS a tu app basandote en el modo de visualización, usando la característica display-mode . Se puede utilizar para proporcionar una experiencia de usuario consistente al lanzar un site desde una URL y lanzarlo desde un icono de escritorio.
-
-
-icons
-
-Especifica un array de imágenes que pueden servir como iconos de aplicación en diferentes contextos. Por ejemplo, se pueden utilizar para representar la aplicación entre un listado de aplicaciones, o para integrar la aplicación web con un gestor de tareas del sistema operativo y/o las preferencias del sistema.
-
-"icons": [
- {
- "src": "icon/lowres.webp",
- "sizes": "48x48",
- "type": "image/webp"
- },
- {
- "src": "icon/lowres",
- "sizes": "48x48"
- },
- {
- "src": "icon/hd_hi.ico",
- "sizes": "72x72 96x96 128x128 256x256"
- },
- {
- "src": "icon/hd_hi.svg",
- "sizes": "72x72"
- }
-]
-
-Los objetos de imagen pueden contener los siguientes valores:
-
-
-
-
- Member
- Description
-
-
-
-
- sizes
- Una cadena que contiene separados por espacios las dimensiones de la imagen.
-
-
- src
- La ruta de acceso al archivo de imagen.
-
-
- type
- A hint as to the media type of the image.The purpose of this member is to allow a user agent to quickly ignore images of media types it does not support.
-
-
-
-
-lang
-
-Especifica el idioma principal para in the name
and short_name
members. This value is a string containing a single language tag.
-
-"lang": "en-US"
-
-name
-
-Provides a human-readable name for the application as it is intended to be displayed to the user, for example among a list of other applications or as a label for an icon.
-
-"name": "Google I/O 2015"
-
-orientation
-
-Define la orientación por defecto for all the web application's top level {{Glossary("Browsing context", "browsing contexts")}}.
-
-"orientation": "portrait-primary"
-
-Orientation puede ser alguno de los siguentes valores:
-
-
- any
- natural
- landscape
- landscape-primary
- landscape-secondary
- portrait
- portrait-primary
- portrait-secondary
-
-
-
-
-Especifica un valor booleano que sugiere que el agente de usuario le indique al usuario que las aplicaciones específicas relacionadas (ver abajo) están disponibles, y recomendadas sobre la aplicación web. Esto solamente debería ser usado si la aplicación nativa relacionada realmente ofrece algo que la aplicación web no puede hacer.
-
-"prefer_related_applications": false
-
-
-
Note : Si se omite, el valor por defecto es false
.
-
-
-
-
-Specifies an array of "application objects" representing native applications that are installable by, or accessible to, the underlying platform — for example a native Android application obtainable through the Google Play Store. Such applications are intended to be alternatives to the web application that provide similar or equivalent functionality — like the native app version of the web app.
-
-"related_applications": [
- {
- "platform": "play",
- "url": "https://play.google.com/store/apps/details?id=com.example.app1",
- "id": "com.example.app1"
- }, {
- "platform": "itunes",
- "url": "https://itunes.apple.com/app/example-app1/id123456789"
- }]
-
-Los objetos Application pueden contener los siguientes valores:
-
-
-
-
- Member
- Description
-
-
-
-
- platform
- The platform on which the application can be found.
-
-
- url
- The URL at which the application can be found.
-
-
- id
- The ID used to represent the application on the specified platform.
-
-
-
-
-scope
-
-Define el ámbito de navegación en el contexto de la aplicación web. Esto basicamente restringe qué paginas se pueden ver cuando se aplica el manifiesto. Si el usuario navega fuera del ámbito de la aplicación, continúa como en una web normal.
-
-"scope": "/myapp/"
-
-short_name
-
-Proporciona un nombre corto para la aplicación. Está destinado para su uso cuando hay poco espacio para mostrar el nombre completo de la aplicación.
-
-"short_name": "I/O 2015"
-
-
-start_url
-
-Especifica la URL que se carga cuando el usuario lanza la aplicación desde un dispositivo.
-
-"start_url": "./?utm_source=web_app_manifest"
-
-theme_color
-
-Define el color por defecto para la aplicación. Esto en ocasiones afecta a como se muestra por el OS (e.g., en el lanzador de aplicaciones de Android, el color envuelve la aplicación).
-
-"theme_color": "aliceblue"
-
-Splash screens
-
-En Chrome 47 y posteriores, se muestra una pantalla de bienvenida para las aplicaciones web que se inician desde la pantalla de inicio. Esta pantalla de bienvenida se genera de automáticamente mediante las propiedades del manifiesto de la aplicación web, especificamente: name
, background_color
, y el icono de la lista icons
que sea el más cercano a los 128dpi para el dispositivo.
-
-Tipo Mime
-
-Los manifiestos web se deben servir con el tipo MIME application/manifest+json
. Sin embargo, esto es opcional.
-
-Especificación
-
-
-
-
- Specification
- Status
- Comment
-
-
- {{SpecName('Manifest')}}
- {{Spec2('Manifest')}}
- Initial definition.
-
-
-
-
-Compatibilidad con navegadores
-
-{{Compat("html.manifest")}}
diff --git a/files/es/web/manifest/index.md b/files/es/web/manifest/index.md
new file mode 100644
index 00000000000000..384f1916f09c23
--- /dev/null
+++ b/files/es/web/manifest/index.md
@@ -0,0 +1,258 @@
+---
+title: Web App Manifest
+slug: Web/Manifest
+translation_of: Web/Manifest
+---
+El manifiesto de aplicaciones web proporciona información sobre una aplicación (como nombre, autor, icono y descripción) en un documento simplificado. Su principal propósito es crear [progressive web apps](/es/docs/Web/Apps/Progressive): aplicaciones web que se pueden instalar desde la pantalla principal de un dispositivo sin necesidad de hacerlo a traves de una app store (y otras ventajas como disponibilidad offline y enviar notificaciones push cuando cambia el contenido de la aplicación.)
+
+## Manifiesto de ejemplo
+
+```json
+{
+ "name": "Google I/O 2015",
+ "short_name": "I/O 2015",
+ "start_url": "./?utm_source=web_app_manifest",
+ "display": "standalone",
+ "icons": [{
+ "src": "images/touch/homescreen48.png",
+ "sizes": "48x48",
+ "type": "image/png"
+ }, {
+ "src": "images/touch/homescreen72.png",
+ "sizes": "72x72",
+ "type": "image/png"
+ }, {
+ "src": "images/touch/homescreen96.png",
+ "sizes": "96x96",
+ "type": "image/png"
+ }, {
+ "src": "images/touch/homescreen144.png",
+ "sizes": "144x144",
+ "type": "image/png"
+ }, {
+ "src": "images/touch/homescreen168.png",
+ "sizes": "168x168",
+ "type": "image/png"
+ }, {
+ "src": "images/touch/homescreen192.png",
+ "sizes": "192x192",
+ "type": "image/png"
+ }],
+ "related_applications": [{
+ "platform": "web"
+ }, {
+ "platform": "play",
+ "url": "https://play.google.com/store/apps/details?id=com.google.samples.apps.iosched"
+ }]
+}
+```
+
+## Propiedades
+
+### `background_color`
+
+Define el color de fondo deseado para la aplicación. Este valor repite lo definido en la hoja de estilos de la aplicación, pero puede ser utilizado por los navegadores para pintar el color de fondo de una app si el manifiesto está disponible antes de que la hoja de estilos se haya cargado. Esto suaviza la transición entre lanzar una aplicación y cargar el contenido de la misma.
+
+```json
+"background_color": "red"
+```
+
+> **Nota:** El `background_color` únicamente está destinado a mejorar la experiencia de usuario mientras se carga la aplicación y no se debe usar como color de fondo cuando la hoja de estilos de la aplicación esté disponible.
+
+### `description`
+
+Proporciona una descripción general sobre qué hace la aplicación.
+
+```json
+"description": "The app that helps you find the best food in town!"
+```
+
+### `dir`
+
+Especifica la dirección del texto para `name`, `short_name`, y `description`. Junto con `lang`, ayuda a representar correctamente los idiomas que se escriben de derecha a izquierda (right-to-left).
+
+```json
+"dir": "rtl",
+"lang": "ar",
+"short_name": "أنا من التطبيق!"
+```
+
+Puede tener uno de los siguentes valores:
+
+- `ltr` (izquierda a derecha)
+- `rtl` (derecha a izquierda)
+- `auto` (indica al navegador que use el algoritmo Unicode bidirectional para hacer una estimación apropiada sobre la dirección del texto.)
+
+> **Nota:** Cuando se omite este valor, por defecto es `auto`.
+
+### `display`
+
+Define el modo de visualización preferido para la aplicación web.
+
+```json
+"display": "standalone"
+```
+
+Los valores aceptados son:
+
+| Display Mode | Description | Fallback Display Mode |
+| ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------- |
+| `fullscreen` | Se utiliza toda la pantalla disponible no se muestran elementos del user agent {{Glossary("chrome")}}. | `standalone` |
+| `standalone` | La aplicación se mostrará como una app independiente. Así la aplicación puede tener su propia ventana, su propio icono en el lanzador de aplicaciones, etc. En este modo, the user agent excluirá los elementos de interfaz para controlar la navegación, pero puede incluir otros elementos como la barra de estado. | `minimal-ui` |
+| `minimal-ui` | La aplicación se mostrará como una app independiente, pero tendrá un mínimo de elementos de interfaz para controlar la navegación. Estos elementos podrán variar según navegador. | `browser` |
+| `browser` | La aplicación se abrirá en una pestaña nueva del navegador o una ventana nueva, dependiendo del navegador y plataforma. Esto es por defecto. | (None) |
+
+> **Nota:** Puedes aplicar selectivamente CSS a tu app basandote en el modo de visualización, usando la característica [display-mode](/docs/Web/CSS/@media/display-mode). Se puede utilizar para proporcionar una experiencia de usuario consistente al lanzar un site desde una URL y lanzarlo desde un icono de escritorio.
+
+### `icons`
+
+Especifica un _array_ de imágenes que pueden servir como iconos de aplicación en diferentes contextos. Por ejemplo, se pueden utilizar para representar la aplicación entre un listado de aplicaciones, o para integrar la aplicación web con un gestor de tareas del sistema operativo y/o las preferencias del sistema.
+
+```json
+"icons": [
+ {
+ "src": "icon/lowres.webp",
+ "sizes": "48x48",
+ "type": "image/webp"
+ },
+ {
+ "src": "icon/lowres",
+ "sizes": "48x48"
+ },
+ {
+ "src": "icon/hd_hi.ico",
+ "sizes": "72x72 96x96 128x128 256x256"
+ },
+ {
+ "src": "icon/hd_hi.svg",
+ "sizes": "72x72"
+ }
+]
+```
+
+Los objetos de imagen pueden contener los siguientes valores:
+
+| Member | Description |
+| ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `sizes` | Una cadena que contiene separados por espacios las dimensiones de la imagen. |
+| `src` | La ruta de acceso al archivo de imagen. |
+| `type` | A hint as to the media type of the image.The purpose of this member is to allow a user agent to quickly ignore images of media types it does not support. |
+
+### `lang`
+
+Especifica el idioma principal para in the `name` and `short_name` members. This value is a string containing a single language tag.
+
+```json
+"lang": "en-US"
+```
+
+### `name`
+
+Provides a human-readable name for the application as it is intended to be displayed to the user, for example among a list of other applications or as a label for an icon.
+
+```json
+"name": "Google I/O 2015"
+```
+
+### `orientation`
+
+Define la orientación por defecto for all the web application's top level {{Glossary("Browsing context", "browsing contexts")}}.
+
+```json
+"orientation": "portrait-primary"
+```
+
+Orientation puede ser alguno de los siguentes valores:
+
+- `any`
+- `natural`
+- `landscape`
+- `landscape-primary`
+- `landscape-secondary`
+- `portrait`
+- `portrait-primary`
+- `portrait-secondary`
+
+### `prefer_related_applications`
+
+Especifica un valor booleano que sugiere que el agente de usuario le indique al usuario que las aplicaciones específicas relacionadas (ver abajo) están disponibles, y recomendadas sobre la aplicación web. Esto solamente debería ser usado si la aplicación nativa relacionada realmente ofrece algo que la aplicación web no puede hacer.
+
+```json
+"prefer_related_applications": false
+```
+
+> **Nota:** Si se omite, el valor por defecto es `false`.
+
+### `related_applications`
+
+Specifies an array of "application objects" representing native applications that are installable by, or accessible to, the underlying platform — for example a native Android application obtainable through the Google Play Store. Such applications are intended to be alternatives to the web application that provide similar or equivalent functionality — like the native app version of the web app.
+
+```json
+"related_applications": [
+ {
+ "platform": "play",
+ "url": "https://play.google.com/store/apps/details?id=com.example.app1",
+ "id": "com.example.app1"
+ }, {
+ "platform": "itunes",
+ "url": "https://itunes.apple.com/app/example-app1/id123456789"
+ }]
+```
+
+Los objetos Application pueden contener los siguientes valores:
+
+| Member | Description |
+| ---------- | ------------------------------------------------------------------- |
+| `platform` | The platform on which the application can be found. |
+| `url` | The URL at which the application can be found. |
+| `id` | The ID used to represent the application on the specified platform. |
+
+### `scope`
+
+Define el ámbito de navegación en el contexto de la aplicación web. Esto basicamente restringe qué paginas se pueden ver cuando se aplica el manifiesto. Si el usuario navega fuera del ámbito de la aplicación, continúa como en una web normal.
+
+```json
+"scope": "/myapp/"
+```
+
+### `short_name`
+
+Proporciona un nombre corto para la aplicación. Está destinado para su uso cuando hay poco espacio para mostrar el nombre completo de la aplicación.
+
+```json
+"short_name": "I/O 2015"
+```
+
+### `start_url`
+
+Especifica la URL que se carga cuando el usuario lanza la aplicación desde un dispositivo.
+
+```json
+"start_url": "./?utm_source=web_app_manifest"
+```
+
+### `theme_color`
+
+Define el color por defecto para la aplicación. Esto en ocasiones afecta a como se muestra por el OS (e.g., en el lanzador de aplicaciones de Android, el color envuelve la aplicación).
+
+```json
+"theme_color": "aliceblue"
+```
+
+## Splash screens
+
+En Chrome 47 y posteriores, se muestra una pantalla de bienvenida para las aplicaciones web que se inician desde la pantalla de inicio. Esta pantalla de bienvenida se genera de automáticamente mediante las propiedades del manifiesto de la aplicación web, especificamente: `name`, `background_color`, y el icono de la lista `icons` que sea el más cercano a los 128dpi para el dispositivo.
+
+## Tipo Mime
+
+Los manifiestos web se deben servir con el tipo MIME `application/manifest+json`. Sin embargo, esto es opcional.
+
+## Especificación
+
+| Specification | Status | Comment |
+| -------------------------------- | ---------------------------- | ------------------- |
+| {{SpecName('Manifest')}} | {{Spec2('Manifest')}} | Initial definition. |
+
+## Compatibilidad con navegadores
+
+{{Compat("html.manifest")}}
diff --git a/files/es/web/mathml/attribute/index.html b/files/es/web/mathml/attribute/index.html
deleted file mode 100644
index fb91a7bc5c745f..00000000000000
--- a/files/es/web/mathml/attribute/index.html
+++ /dev/null
@@ -1,485 +0,0 @@
----
-title: MathML attribute reference
-slug: Web/MathML/Attribute
-translation_of: Web/MathML/Attribute
----
-Esta es una lista alfabetica de atributos de MathML. Más detalles de cada atributo está disponible en cada página de los elementos .
-Notas:
-
- Los elementos MathML {{ MathMLElement("mstyle") }} y {{ MathMLElement("math") }} {{ gecko_minversion_inline("7.0") }} aceptan todos los atributos de todos los elementos de presentacion.
- Vea los valores de las notas sobre los valores y unidades en MathML.
-
-
-
-
- Nombre
- Atributos aceptados
- Descripción
-
-
-
-
- accent
- {{ MathMLElement("mo") }}, {{ MathMLElement("mover") }}, {{ MathMLElement("munderover") }}
- Un valor booleano que especifíca si el operador debe ser tratado como un acento.
-
-
- accentunder
- {{ MathMLElement("munder") }}, {{ MathMLElement("munderover") }}
- Un valor booleano que especifíca si el operador debe ser tratado como un acento.
-
-
- actiontype
- {{ MathMLElement("maction") }}
- Un valor de cadena que especifica la acción pasada al elemento.
-
-
- align
- {{ MathMLElement("mtable") }}
- {{ MathMLElement("munder") }}, {{ MathMLElement("mover") }}, {{ MathMLElement("munderover") }}
- {{ MathMLElement("mstack") }}
- Especifica diferentes alineaciones de varios elementos (consulte la página de elementos para más detalles)
-
-
- {{ unimplemented_inline() }} alignmentscope
- {{ MathMLElement("mtable") }}
- Un valor booleano que especifica si las columnas de la tabla deben actuar como ámbitos de alineación o no.
-
-
- {{ unimplemented_inline() }}
- altimg
- altimg-width
- altimg-height
- altimg-valign
- alttext
- {{ MathMLElement("math") }}
- Opciones visuales y textuales de repliegue
-
-
- bevelled
- {{ MathMLElement("mfrac") }}
- Especifica el estilo de como se debe mostrar la fracción.
-
-
- {{ unimplemented_inline() }} charalign
- {{ MathMLElement("mstack") }}
- Especifica la alineación horizontal de los dígitos.
-
-
- close
- {{ MathMLElement("mfenced") }}
- Una cadena para el delimitador de cierre.
-
-
- columnalign
- {{ MathMLElement("mtable") }}, {{ MathMLElement("mtd") }}, {{ MathMLElement("mtr") }}, {{ MathMLElement("mlabeledtr") }}
- Especifica la alineación horizontal de las celdas de la tabla.
-
-
- columnlines
- {{ MathMLElement("mtable") }}
- Especifica los bordes de la columna de la tabla.
-
-
- {{ unimplemented_inline() }} columnspacing
- {{ MathMLElement("mtable") }}
- Especifica el espacio entre las columnas de la tabla.
-
-
- columnspan
- {{ MathMLElement("mtd") }}
- Un valor entero no negativo que indica a cuantas columnas se extiende las celdas de la tabla.
-
-
- {{ unimplemented_inline() }} columnwidth
- {{ MathMLElement("mtable") }}
- Especifica el ancho de las columnas de la tabla.
-
-
- {{ unimplemented_inline() }} crossout
- {{ MathMLElement("mscarry") }}
- Especifica el tipo de linea que se dibuja para tachar.
-
-
- {{ unimplemented_inline() }} decimalpoint
- {{ MathMLElement("mstyle") }}
- Si el valor de decimalpoint
es usado para especificar la alineación , este atributo especifica el caracter del punto de alineación dentro de las columnas de {{ MathMLElement("mstack") }} y {{ MathMLElement("mtable") }} .
-
-
- denomalign
- {{ MathMLElement("mfrac") }}
- La alineación del denominador bajo la fracción.
-
-
- depth
- {{ MathMLElement("mpadded") }}
- Establece o incrementa la profundidad. Ver longitud .
-
-
- dir
- {{ MathMLElement("math") }}, {{ MathMLElement("mi") }}, {{ MathMLElement("mo") }}, {{ MathMLElement("mrow") }}, {{ MathMLElement("ms") }}, {{ MathMLElement("mtext") }}
- La dirección del texto. Posibles valores son ltr (izquierda a derecha) o rtl (derecha a izquierda).
-
-
- display
- {{ MathMLElement("math") }}
- Especifica el modo de renderizado. Los valores block
e inline
son permitidos.
-
-
- displaystyle
- {{ MathMLElement("mstyle") }}, {{ MathMLElement("mtable") }}
-
- Un valor booleano que especifica si un espacio más vertical es usado para las ecuaciones mostradas o, si se establece como false
, un diseño más compacto se utiliza para mostrar las formulas.
-
-
-
- {{ unimplemented_inline() }} edge
- {{ MathMLElement("malignmark") }}
-
-
-
- {{ unimplemented_inline() }} equalcolumns
- {{ MathMLElement("mtable") }}
-
- Un valor booleano que indica si se debe obligar a las columnas a tener la misma altura total.
-
-
-
- {{ unimplemented_inline() }} equalrows
- {{ MathMLElement("mtable") }}
- Un valor booleano que indica si se debe obligar a las filas a tener la misma altura total.
-
-
- fence
- {{ MathMLElement("mo") }}
-
- Un valor booleano que indica si el operador está cercado (como parentesis). No hay efecto visual de este atributo.
-
-
-
- {{ unimplemented_inline() }} form
- {{ MathMLElement("mo") }}
-
- Especifica el rol del operador en una expresión cerrada.
-
-
-
- frame
- {{ MathMLElement("mtable") }}
-
- Especifica bordes de toda una {{ MathMLElement("mtable") }}. Posibles valores son: none
(default), solid
y dashed
.
-
-
-
- {{ unimplemented_inline() }} framespacing
- {{ MathMLElement("mtable") }}
- Especifica espacio adicional agregado entre la tabla y el frame.
-
-
- {{ unimplemented_inline() }} groupalign
- {{ MathMLElement("maligngroup") }}, {{ MathMLElement("mtable") }}, {{ MathMLElement("mtd") }}, {{ MathMLElement("mtr") }}
-
-
-
- height
- {{ MathMLElement("mglyph") }}, {{ MathMLElement("mpadded") }}, {{ MathMLElement("mspace") }}
- Especifica la altura deseada. Ver longitudes para los posibles valores.
-
-
- href
- All
- Usado para estableces un hyperlink para determinada URL.
-
-
- id
- All
- Establece un unico identificador asociado con el elemento.
-
-
- {{ unimplemented_inline() }} indentalign
- {{ MathMLElement("mo") }}, {{ MathMLElement("mspace") }}
-
-
-
- {{ unimplemented_inline() }} indentalignfirst
- {{ MathMLElement("mo") }}, {{ MathMLElement("mspace") }}
-
-
-
- {{ unimplemented_inline() }} indentalignlast
- {{ MathMLElement("mo") }}, {{ MathMLElement("mspace") }}
-
-
-
- {{ unimplemented_inline() }} indentshift
- {{ MathMLElement("mo") }}, {{ MathMLElement("mspace") }}
-
-
-
- {{ unimplemented_inline() }} indentshiftfirst
- {{ MathMLElement("mo") }}, {{ MathMLElement("mspace") }}
-
-
-
- {{ unimplemented_inline() }} indentshiftlast
- {{ MathMLElement("mo") }}, {{ MathMLElement("mspace") }}
-
-
-
- {{ unimplemented_inline() }} indenttarget
- {{ MathMLElement("mo") }}, {{ MathMLElement("mspace") }}
-
-
-
- {{ unimplemented_inline() }} infixlinebreakstyle
- {{ MathMLElement("mstyle") }}
- Especifica el valor por defecto de linebreakstyle
a usar para los operadores infijos.
-
-
- largeop
- {{ MathMLElement("mo") }}
- Especifica si el operador debe dibujarse más grande de lo normal.
-
-
- length
- {{ MathMLElement("msline") }}
-
-
-
- {{ unimplemented_inline() }} linebreak
- {{ MathMLElement("mo") }}, {{ MathMLElement("mspace") }}
-
-
-
- {{ unimplemented_inline() }} linebreakmultchar
- {{ MathMLElement("mo") }}, {{ MathMLElement("mspace") }}
-
-
-
- {{ unimplemented_inline() }} linebreakstyle
- {{ MathMLElement("mo") }}, {{ MathMLElement("mspace") }}
-
-
-
- {{ unimplemented_inline() }} lineleading
- {{ MathMLElement("mo") }}, {{ MathMLElement("mspace") }}
-
-
-
- linethickness
- {{ MathMLElement("mfrac") }}
- El grosor de la linea de fracción horizontal.
-
-
- {{ unimplemented_inline() }} location
- {{ MathMLElement("mscarries") }}
-
-
-
- {{ unimplemented_inline() }} longdivstyle
- {{ MathMLElement("mlongdiv") }}
- Controla el estilo del diseño de la división larga.
-
-
- lspace
- {{ MathMLElement("mo") }}, {{ MathMLElement("mpadded") }}
- La cantidad de espacio antes del operador(ver length para valores y unidades).
-
-
- lquote
- {{ MathMLElement("ms") }}
- El carácter de apertura de citas que encierra el contenido. El valor predeterminado es ""
".
-
-
- mathbackground
- All
- El colo de fondo. Puedes usar #rgb
, #rrggbb
y nombres de color HTML .
-
-
- mathcolor
- All
- El color de texto. Puedes usar #rgb
, #rrggbb
y nombres de color HTML .
-
-
- mathsize
- {{ MathMLElement("mi") }}, {{ MathMLElement("mn") }}, {{ MathMLElement("mo") }}, {{ MathMLElement("ms") }}, {{ MathMLElement("mtext") }}
- El tamaño del contenido. Comenzando con Gecko 20.0 {{geckoRelease("20")}} valores sin unidades están permitidos y se interpretan como N veces el tamaño predeterminado.
-
-
- mathvariant
- {{ MathMLElement("mi") }}, {{ MathMLElement("mn") }}, {{ MathMLElement("mo") }}, {{ MathMLElement("ms") }}, {{ MathMLElement("mtext") }}
- La clase logica del identificador, la cual varia en tipografia.
-
-
- maxsize
- {{ MathMLElement("mo") }}
- El tamaño máximo del operador.
-
-
- {{ unimplemented_inline() }} minlabelspacing
- {{ MathMLElement("mtable") }}
- Un valor de longitud espcificando el minimo espacio entre una etiqueta y la celda adjacente en la fila.
-
-
- minsize
- {{ MathMLElement("mo") }}
- El tamaño mínimo del operador.
-
-
- movablelimits
- {{ MathMLElement("mo") }}
- Especifica si los guiones bajos y altos se mueven a las posiciones de sub-índice o super-índice.
-
-
- notation
- {{ MathMLElement("menclose") }}
- Una lista de anotaciones, separado por espacios en blanco, para aplicar a los elementos secundarios.
-
-
- numalign
- {{ MathMLElement("mfrac") }}
- La alineación del numerador en la fracción.
-
-
- open
- {{ MathMLElement("mfenced") }}
- Una cadena para el delimitador de apertura.
-
-
- {{ unimplemented_inline() }} overflow
- {{ MathMLElement("math") }}
-
- Si una expresión es demasiado larga para encajar en el ancho definido, este atributo establece el tratamiendo preferido.
-
-
-
- {{ unimplemented_inline() }} position
- {{ MathMLElement("msgroup") }}, {{ MathMLElement("msrow") }}, {{ MathMLElement("mscarries") }}, {{ MathMLElement("msline") }}
-
-
-
- rowalign
- {{ MathMLElement("mtable") }}, {{ MathMLElement("mtd") }}, {{ MathMLElement("mtr") }}
- Especifica la alineación vertical de las celdas de la tabla.
-
-
- rowlines
- {{ MathMLElement("mtable") }}
- Especifica los bordes de las filas de la tabla.
-
-
- rowspacing
- {{ MathMLElement("mtable") }}
- Especifica el espacio entre las filas de la tabla.
-
-
- rowspan
- {{ MathMLElement("mtd") }}
- Un valor entero no negativo que indica el númerp de filas que se extiende las celdas.
-
-
- rspace
- {{ MathMLElement("mo") }}
- La cantidad de espacios luego del operador.
-
-
- rquote
- {{ MathMLElement("ms") }}
- La marca de cierre de cita que encierra el contenido. El valor predeterminado es ""
".
-
-
- scriptlevel
- {{ MathMLElement("mstyle") }}
- Controles sobre el tamaño de la fuente. Cuando mayor sea el nivel del script, menor el tamaño de la fuente.
-
-
- scriptminsize
- {{ MathMLElement("mstyle") }}
- Especifica el minimo tamaño de fuente permitidos debido a cambios en scriptlevel
.
- Comenzando con Gecko 20.0 {{geckoRelease("20")}} valores sin unidades y porcentajes son permitidos y se interpretan como multiplos de "8pt".
-
-
- scriptsizemultiplier
- {{ MathMLElement("mstyle") }}
- Especifica el multiplicador a ser utilizado para ajustar el tamaño de fuente debidp a cambios en scriptlevel
.
-
-
- selection
- {{ MathMLElement("maction") }}
- El elemento secundario al cual se dirige la acción.
-
-
- separator
- {{ MathMLElement("mo") }}
- No existe efecto visual para este elemento, pero especifica si el operador es un separador (como las comas).
-
-
- separators
- {{ MathMLElement("mfenced") }}
- Una secuencia de ceros o más caracteres a ser usados por diferentes separadores.
-
-
- {{ unimplemented_inline() }} shift
- {{ MathMLElement("msgroup") }}
-
-
-
- {{ unimplemented_inline() }} side
- {{ MathMLElement("mtable") }}
- Especifica la posición donde los elementos{{ MathMLElement("mlabeledtr") }} deberían ser posicionados.
-
-
- {{ unimplemented_inline() }} src
- {{ MathMLElement("mglyph") }}
- La ubicación de la imagen.
-
-
- {{ unimplemented_inline() }} stackalign
- {{ MathMLElement("mstack") }}
-
-
-
- stretchy
- {{ MathMLElement("mo") }}
- Especifica si el operador se extiende hasta el tamaño del elemento adyacente.
-
-
- subscriptshift
- {{ MathMLElement("mmultiscripts") }}, {{ MathMLElement("msub") }}, {{ MathMLElement("msubsup") }}
- El espacio mínimo por el que se desplace el subíndice por debajo de la línea de base de la expresión.
-
-
- supscriptshift
- {{ MathMLElement("mmultiscripts") }}, {{ MathMLElement("msup") }}, {{ MathMLElement("msubsup") }}
- El espacio mínimo por el que se desplace el superíndice por encima de la línea de base de la expresión.
-
-
- symmetric
- {{ MathMLElement("mo") }}
-
- Si stretchy
es true
, este atributo especifica si el operador debe estar simetrico verticalmente al eje imaginario de matemáticas (linea centrada de fracción).
-
-
-
- voffset
- {{ MathMLElement("mpadded") }}
- Ajusta la posición vertical del contenido secundario.
-
-
- width
- {{ MathMLElement("mglyph") }}, {{ MathMLElement("mpadded") }}, {{ MathMLElement("mspace") }}, {{ MathMLElement("mtable") }}
- Especifica el ancho deseado. Ver longitudes para posibles valores.
-
-
- xlink:href
- All
- Puede ser usado para establecer un hyperlink para determinada URL. Sin embargo, se ainma a los autores a usar el atributo href
en su lugar.
-
-
- xmlns
- {{ MathMLElement("math") }}
- Especifica la URL para el espacio de nombres MathML (http://www.w3.org/1998/Math/MathML
)
-
-
-
-
diff --git a/files/es/web/mathml/attribute/index.md b/files/es/web/mathml/attribute/index.md
new file mode 100644
index 00000000000000..26ab650e8fddb6
--- /dev/null
+++ b/files/es/web/mathml/attribute/index.md
@@ -0,0 +1,102 @@
+---
+title: MathML attribute reference
+slug: Web/MathML/Attribute
+translation_of: Web/MathML/Attribute
+---
+Esta es una lista alfabetica de atributos de MathML. Más detalles de cada atributo está disponible en cada [página de los elementos](/es/docs/MathML/Element).
+
+Notas:
+
+- Los elementos MathML {{ MathMLElement("mstyle") }} y {{ MathMLElement("math") }} {{ gecko_minversion_inline("7.0") }} aceptan todos los atributos de todos los elementos de presentacion.
+- Vea los [valores](/es/docs/MathML/Attributes/Values) de las notas sobre los valores y unidades en MathML.
+
+| Nombre | Atributos aceptados | Descripción |
+| ------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `accent` | {{ MathMLElement("mo") }}, {{ MathMLElement("mover") }}, {{ MathMLElement("munderover") }} | Un valor booleano que especifíca si el operador debe ser tratado como un acento. |
+| `accentunder` | {{ MathMLElement("munder") }}, {{ MathMLElement("munderover") }} | Un valor booleano que especifíca si el operador debe ser tratado como un acento. |
+| `actiontype` | {{ MathMLElement("maction") }} | Un valor de cadena que especifica la acción pasada al elemento. |
+| `align` | {{ MathMLElement("mtable") }} {{ MathMLElement("munder") }}, {{ MathMLElement("mover") }}, {{ MathMLElement("munderover") }} {{ MathMLElement("mstack") }} | Especifica diferentes alineaciones de varios elementos (consulte la página de elementos para más detalles) |
+| {{ unimplemented_inline() }} `alignmentscope` | {{ MathMLElement("mtable") }} | Un valor booleano que especifica si las columnas de la tabla deben actuar como ámbitos de alineación o no. |
+| {{ unimplemented_inline() }} `altimg` `altimg-width` `altimg-height` `altimg-valign` `alttext` | {{ MathMLElement("math") }} | Opciones visuales y textuales de repliegue |
+| `bevelled` | {{ MathMLElement("mfrac") }} | Especifica el estilo de como se debe mostrar la fracción. |
+| {{ unimplemented_inline() }} `charalign` | {{ MathMLElement("mstack") }} | Especifica la alineación horizontal de los dígitos. |
+| `close` | {{ MathMLElement("mfenced") }} | Una cadena para el delimitador de cierre. |
+| `columnalign` | {{ MathMLElement("mtable") }}, {{ MathMLElement("mtd") }}, {{ MathMLElement("mtr") }}, {{ MathMLElement("mlabeledtr") }} | Especifica la alineación horizontal de las celdas de la tabla. |
+| `columnlines` | {{ MathMLElement("mtable") }} | Especifica los bordes de la columna de la tabla. |
+| {{ unimplemented_inline() }} `columnspacing` | {{ MathMLElement("mtable") }} | Especifica el espacio entre las columnas de la tabla. |
+| `columnspan` | {{ MathMLElement("mtd") }} | Un valor entero no negativo que indica a cuantas columnas se extiende las celdas de la tabla. |
+| {{ unimplemented_inline() }} `columnwidth` | {{ MathMLElement("mtable") }} | Especifica el ancho de las columnas de la tabla. |
+| {{ unimplemented_inline() }} `crossout` | {{ MathMLElement("mscarry") }} | Especifica el tipo de linea que se dibuja para tachar. |
+| {{ unimplemented_inline() }} `decimalpoint` | {{ MathMLElement("mstyle") }} | Si el valor de `decimalpoint` es usado para especificar la [alineación](#align), este atributo especifica el caracter del punto de alineación dentro de las columnas de {{ MathMLElement("mstack") }} y {{ MathMLElement("mtable") }} . |
+| `denomalign` | {{ MathMLElement("mfrac") }} | La alineación del denominador bajo la fracción. |
+| `depth` | {{ MathMLElement("mpadded") }} | Establece o incrementa la profundidad. Ver [longitud](/es/docs/MathML/Attributes/Values). |
+| `dir` | {{ MathMLElement("math") }}, {{ MathMLElement("mi") }}, {{ MathMLElement("mo") }}, {{ MathMLElement("mrow") }}, {{ MathMLElement("ms") }}, {{ MathMLElement("mtext") }} | La dirección del texto. Posibles valores son ltr (izquierda a derecha) o rtl (derecha a izquierda). |
+| `display` | {{ MathMLElement("math") }} | Especifica el modo de renderizado. Los valores `block` e `inline` son permitidos. |
+| `displaystyle` | {{ MathMLElement("mstyle") }}, {{ MathMLElement("mtable") }} | Un valor booleano que especifica si un espacio más vertical es usado para las ecuaciones mostradas o, si se establece como `false`, un diseño más compacto se utiliza para mostrar las formulas. |
+| {{ unimplemented_inline() }} `edge` | {{ MathMLElement("malignmark") }} | |
+| {{ unimplemented_inline() }} `equalcolumns` | {{ MathMLElement("mtable") }} | Un valor booleano que indica si se debe obligar a las columnas a tener la misma altura total. |
+| {{ unimplemented_inline() }} `equalrows` | {{ MathMLElement("mtable") }} | Un valor booleano que indica si se debe obligar a las filas a tener la misma altura total. |
+| `fence` | {{ MathMLElement("mo") }} | Un valor booleano que indica si el operador está cercado (como parentesis). No hay efecto visual de este atributo. |
+| {{ unimplemented_inline() }} `form` | {{ MathMLElement("mo") }} | Especifica el rol del operador en una expresión cerrada. |
+| `frame` | {{ MathMLElement("mtable") }} | Especifica bordes de toda una {{ MathMLElement("mtable") }}. Posibles valores son: `none` (default), `solid` y `dashed`. |
+| {{ unimplemented_inline() }} `framespacing` | {{ MathMLElement("mtable") }} | Especifica espacio adicional agregado entre la tabla y el frame. |
+| {{ unimplemented_inline() }} `groupalign` | {{ MathMLElement("maligngroup") }}, {{ MathMLElement("mtable") }}, {{ MathMLElement("mtd") }}, {{ MathMLElement("mtr") }} | |
+| `height` | {{ MathMLElement("mglyph") }}, {{ MathMLElement("mpadded") }}, {{ MathMLElement("mspace") }} | Especifica la altura deseada. Ver [longitudes](/es/docs/MathML/Attributes/Values#Lengths) para los posibles valores. |
+| `href` | _All_ | Usado para estableces un hyperlink para determinada URL. |
+| `id` | _All_ | Establece un unico identificador asociado con el elemento. |
+| {{ unimplemented_inline() }} `indentalign` | {{ MathMLElement("mo") }}, {{ MathMLElement("mspace") }} | |
+| {{ unimplemented_inline() }} `indentalignfirst` | {{ MathMLElement("mo") }}, {{ MathMLElement("mspace") }} | |
+| {{ unimplemented_inline() }} `indentalignlast` | {{ MathMLElement("mo") }}, {{ MathMLElement("mspace") }} | |
+| {{ unimplemented_inline() }} `indentshift` | {{ MathMLElement("mo") }}, {{ MathMLElement("mspace") }} | |
+| {{ unimplemented_inline() }} `indentshiftfirst` | {{ MathMLElement("mo") }}, {{ MathMLElement("mspace") }} | |
+| {{ unimplemented_inline() }} `indentshiftlast` | {{ MathMLElement("mo") }}, {{ MathMLElement("mspace") }} | |
+| {{ unimplemented_inline() }} `indenttarget` | {{ MathMLElement("mo") }}, {{ MathMLElement("mspace") }} | |
+| {{ unimplemented_inline() }} `infixlinebreakstyle` | {{ MathMLElement("mstyle") }} | Especifica el valor por defecto de `linebreakstyle` a usar para los operadores infijos. |
+| `largeop` | {{ MathMLElement("mo") }} | Especifica si el operador debe dibujarse más grande de lo normal. |
+| `length` | {{ MathMLElement("msline") }} | |
+| {{ unimplemented_inline() }} `linebreak` | {{ MathMLElement("mo") }}, {{ MathMLElement("mspace") }} | |
+| {{ unimplemented_inline() }} `linebreakmultchar` | {{ MathMLElement("mo") }}, {{ MathMLElement("mspace") }} | |
+| {{ unimplemented_inline() }} `linebreakstyle` | {{ MathMLElement("mo") }}, {{ MathMLElement("mspace") }} | |
+| {{ unimplemented_inline() }} `lineleading` | {{ MathMLElement("mo") }}, {{ MathMLElement("mspace") }} | |
+| `linethickness` | {{ MathMLElement("mfrac") }} | El grosor de la linea de fracción horizontal. |
+| {{ unimplemented_inline() }} `location` | {{ MathMLElement("mscarries") }} | |
+| {{ unimplemented_inline() }} `longdivstyle` | {{ MathMLElement("mlongdiv") }} | Controla el estilo del diseño de la división larga. |
+| `lspace` | {{ MathMLElement("mo") }}, {{ MathMLElement("mpadded") }} | La cantidad de espacio antes del operador(ver [length](/es/docs/MathML/Attributes/Values#Lengths) para valores y unidades). |
+| `lquote` | {{ MathMLElement("ms") }} | El carácter de apertura de citas que encierra el contenido. El valor predeterminado es "`"`". |
+| `mathbackground` | _All_ | El colo de fondo. Puedes usar `#rgb`, `#rrggbb` y [nombres de color HTML](/es/docs/CSS/color_value#HTML.2fSVG.2fX11.c2.a0_Color_Keywords). |
+| `mathcolor` | _All_ | El color de texto. Puedes usar `#rgb`, `#rrggbb` y [nombres de color HTML](/es/docs/CSS/color_value#HTML.2fSVG.2fX11.c2.a0_Color_Keywords). |
+| `mathsize` | {{ MathMLElement("mi") }}, {{ MathMLElement("mn") }}, {{ MathMLElement("mo") }}, {{ MathMLElement("ms") }}, {{ MathMLElement("mtext") }} | El tamaño del contenido. Comenzando con Gecko 20.0 {{geckoRelease("20")}} valores sin unidades están permitidos y se interpretan como N veces el tamaño predeterminado. |
+| `mathvariant` | {{ MathMLElement("mi") }}, {{ MathMLElement("mn") }}, {{ MathMLElement("mo") }}, {{ MathMLElement("ms") }}, {{ MathMLElement("mtext") }} | La clase logica del identificador, la cual varia en tipografia. |
+| `maxsize` | {{ MathMLElement("mo") }} | El tamaño máximo del operador. |
+| {{ unimplemented_inline() }} `minlabelspacing` | {{ MathMLElement("mtable") }} | Un [valor de longitud](/es/docs/MathML/Attributes/Values) espcificando el minimo espacio entre una [etiqueta](Element/mlabeledtr) y la celda adjacente en la fila. |
+| `minsize` | {{ MathMLElement("mo") }} | El tamaño mínimo del operador. |
+| `movablelimits` | {{ MathMLElement("mo") }} | Especifica si los guiones bajos y altos se mueven a las posiciones de sub-índice o super-índice. |
+| `notation` | {{ MathMLElement("menclose") }} | Una lista de anotaciones, separado por espacios en blanco, para aplicar a los elementos secundarios. |
+| `numalign` | {{ MathMLElement("mfrac") }} | La alineación del numerador en la fracción. |
+| `open` | {{ MathMLElement("mfenced") }} | Una cadena para el delimitador de apertura. |
+| {{ unimplemented_inline() }} `overflow` | {{ MathMLElement("math") }} | Si una expresión es demasiado larga para encajar en el ancho definido, este atributo establece el tratamiendo preferido. |
+| {{ unimplemented_inline() }} `position` | {{ MathMLElement("msgroup") }}, {{ MathMLElement("msrow") }}, {{ MathMLElement("mscarries") }}, {{ MathMLElement("msline") }} | |
+| `rowalign` | {{ MathMLElement("mtable") }}, {{ MathMLElement("mtd") }}, {{ MathMLElement("mtr") }} | Especifica la alineación vertical de las celdas de la tabla. |
+| `rowlines` | {{ MathMLElement("mtable") }} | Especifica los bordes de las filas de la tabla. |
+| `rowspacing` | {{ MathMLElement("mtable") }} | Especifica el espacio entre las filas de la tabla. |
+| `rowspan` | {{ MathMLElement("mtd") }} | Un valor entero no negativo que indica el númerp de filas que se extiende las celdas. |
+| `rspace` | {{ MathMLElement("mo") }} | La cantidad de espacios luego del operador. |
+| `rquote` | {{ MathMLElement("ms") }} | La marca de cierre de cita que encierra el contenido. El valor predeterminado es "`"`". |
+| `scriptlevel` | {{ MathMLElement("mstyle") }} | Controles sobre el tamaño de la fuente. Cuando mayor sea el nivel del script, menor el tamaño de la fuente. |
+| `scriptminsize` | {{ MathMLElement("mstyle") }} | Especifica el minimo tamaño de fuente permitidos debido a cambios en `scriptlevel`. Comenzando con Gecko 20.0 {{geckoRelease("20")}} valores sin unidades y porcentajes son permitidos y se interpretan como multiplos de "8pt". |
+| `scriptsizemultiplier` | {{ MathMLElement("mstyle") }} | Especifica el multiplicador a ser utilizado para ajustar el tamaño de fuente debidp a cambios en `scriptlevel`. |
+| `selection` | {{ MathMLElement("maction") }} | El elemento secundario al cual se dirige la acción. |
+| `separator` | {{ MathMLElement("mo") }} | No existe efecto visual para este elemento, pero especifica si el operador es un separador (como las comas). |
+| `separators` | {{ MathMLElement("mfenced") }} | Una secuencia de ceros o más caracteres a ser usados por diferentes separadores. |
+| {{ unimplemented_inline() }} `shift` | {{ MathMLElement("msgroup") }} | |
+| {{ unimplemented_inline() }} `side` | {{ MathMLElement("mtable") }} | Especifica la posición donde los elementos{{ MathMLElement("mlabeledtr") }} deberían ser posicionados. |
+| {{ unimplemented_inline() }} `src` | {{ MathMLElement("mglyph") }} | La ubicación de la imagen. |
+| {{ unimplemented_inline() }} `stackalign` | {{ MathMLElement("mstack") }} | |
+| `stretchy` | {{ MathMLElement("mo") }} | Especifica si el operador se extiende hasta el tamaño del elemento adyacente. |
+| `subscriptshift` | {{ MathMLElement("mmultiscripts") }}, {{ MathMLElement("msub") }}, {{ MathMLElement("msubsup") }} | El espacio mínimo por el que se desplace el subíndice por debajo de la línea de base de la expresión. |
+| `supscriptshift` | {{ MathMLElement("mmultiscripts") }}, {{ MathMLElement("msup") }}, {{ MathMLElement("msubsup") }} | El espacio mínimo por el que se desplace el superíndice por encima de la línea de base de la expresión. |
+| `symmetric` | {{ MathMLElement("mo") }} | Si `stretchy` es `true`, este atributo especifica si el operador debe estar simetrico verticalmente al eje imaginario de matemáticas (linea centrada de fracción). |
+| `voffset` | {{ MathMLElement("mpadded") }} | Ajusta la posición vertical del contenido secundario. |
+| `width` | {{ MathMLElement("mglyph") }}, {{ MathMLElement("mpadded") }}, {{ MathMLElement("mspace") }}, {{ MathMLElement("mtable") }} | Especifica el ancho deseado. Ver [longitudes](/es/docs/MathML/Attributes/Values#Lengths) para posibles valores. |
+| `xlink:href` | _All_ | Puede ser usado para establecer un hyperlink para determinada URL. Sin embargo, se ainma a los autores a usar el atributo `href` en su lugar. |
+| `xmlns` | {{ MathMLElement("math") }} | Especifica la URL para el espacio de nombres MathML ([`http://www.w3.org/1998/Math/MathML`](http://www.w3.org/1998/Math/MathML)) |
diff --git a/files/es/web/mathml/element/index.html b/files/es/web/mathml/element/index.html
deleted file mode 100644
index 9a5e5d9bb0815b..00000000000000
--- a/files/es/web/mathml/element/index.html
+++ /dev/null
@@ -1,98 +0,0 @@
----
-title: Referencia de elementos de MathML
-slug: Web/MathML/Element
-translation_of: Web/MathML/Element
-original_slug: Web/MathML/Elemento
----
-A continuación se muestra una lista alfabética de elementos de presentación en MathML.
- La etiqueta de presentación es usada para describir la estructura y el diseño de la notación matemática mientras que la etiqueta de contenido proporciona el significado matemático subyacente y se supone que no se renderiza a través del parseador de MathML (ver {{ bug(276028) }}). Si quieres aprender más sobre la etiqueta de contenido deberías echar un vistazo al Capítulo 4 en la especificación de MathML 3 .
-math
-
- {{ MathMLElement("math") }} (Elemento raíz)
-
-A
-
- {{ MathMLElement("maction") }} (Acciones enlazadas a sub-expresiones)
- {{ MathMLElement("maligngroup") }} (Grupo de alineación) {{ unimplemented_inline(122253) }}
- {{ MathMLElement("malignmark") }} (Puntos de alineación) {{ unimplemented_inline(122253) }}
-
-E
-
- {{ MathMLElement("menclose") }} (Enclosed contents)
- {{ MathMLElement("merror") }} (Enclosed syntax error messages)
-
-F
-
- {{ MathMLElement("mfenced") }} (Paréntesis)
- {{ MathMLElement("mfrac") }} (Fracción)
-
-G
-
- {{ MathMLElement("mglyph") }} (Mostrar símbolos no estándar) {{ unimplemented_inline(297465) }}
-
-I
-
- {{ MathMLElement("mi") }} (Identificador)
-
-L
-
- {{ MathMLElement("mlabeledtr") }} (Fila etiquetada en una tabla o matriz) {{ unimplemented_inline(689641) }}
- {{ MathMLElement("mlongdiv") }} (Notación de la división larga) {{ unimplemented_inline(534967) }}
-
-M
-
- {{ MathMLElement("mmultiscripts") }} (Prescripts and tensor indices)
-
-N
-
- {{ MathMLElement("mn") }} (Número)
-
-O
-
- {{ MathMLElement("mo") }} (Operador)
- {{ MathMLElement("mover") }} (Overscript)
-
-P
-
- {{ MathMLElement("mpadded") }} (Espacio alrrededor del contenido)
- {{ MathMLElement("mphantom") }} (Contenido invisible con espacio reservado)
-
-R
-
- {{ MathMLElement("mroot") }} (Radical con índice especificado)
- {{ MathMLElement("mrow") }} (Sub-expressiones agrupadas)
-
-S
-
- {{ MathMLElement("ms") }} (String literal)
- {{ MathMLElement("mscarries") }} (Annotations such as carries) {{ unimplemented_inline(534967) }}
- {{ MathMLElement("mscarry") }} (Single carry, child element of {{ MathMLElement("mscarries") }}) {{ unimplemented_inline(534967) }}
- {{ MathMLElement("msgroup") }} (Grouped rows of {{ MathMLElement("mstack") }} and {{ MathMLElement("mlongdiv") }} elements) {{ unimplemented_inline(534967) }}
- {{ MathMLElement("msline") }} (Horizontal lines inside {{ MathMLElement("mstack") }} elements) {{ unimplemented_inline(534967) }}
- {{ MathMLElement("mspace") }} (Space)
- {{ MathMLElement("msqrt") }} (Square root without an index)
- {{ MathMLElement("msrow") }} (Rows in {{ MathMLElement("mstack") }} elements) {{ unimplemented_inline(534967) }}
- {{ MathMLElement("mstack") }} (Stacked alignment) {{ unimplemented_inline(534967) }}
- {{ MathMLElement("mstyle") }} (Style change)
- {{ MathMLElement("msub") }} (Subscript)
- {{ MathMLElement("msup") }} (Superscript)
- {{ MathMLElement("msubsup") }} (Subscript-superscript pair)
-
-T
-
- {{ MathMLElement("mtable") }} (Table or matrix)
- {{ MathMLElement("mtd") }} (Cell in a table or a matrix)
- {{ MathMLElement("mtext") }} (Text)
- {{ MathMLElement("mtr") }} (Row in a table or a matrix)
-
-U
-
- {{ MathMLElement("munder") }} (Underscript)
- {{ MathMLElement("munderover") }} (Underscript-overscript pair)
-
-Other elements
-
- {{ MathMLElement("semantics") }} (Container for semantic annotations)
- <annotation>
(Data annotations)
- <annotation-xml>
(XML annotations)d
-
diff --git a/files/es/web/mathml/element/index.md b/files/es/web/mathml/element/index.md
new file mode 100644
index 00000000000000..b8e59c77ff2561
--- /dev/null
+++ b/files/es/web/mathml/element/index.md
@@ -0,0 +1,98 @@
+---
+title: Referencia de elementos de MathML
+slug: Web/MathML/Element
+translation_of: Web/MathML/Element
+original_slug: Web/MathML/Elemento
+---
+A continuación se muestra una lista alfabética de elementos de **presentación** en MathML.
+La _etiqueta de presentación_ es usada para describir la estructura y el diseño de la notación matemática mientras que la _etiqueta de contenido_ proporciona el significado matemático subyacente y se supone que no se renderiza a través del parseador de MathML (ver {{ bug(276028) }}). Si quieres aprender más sobre la etiqueta de contenido deberías echar un vistazo al [Capítulo 4](http://www.w3.org/TR/MathML3/chapter4.html) en la [especificación de MathML 3](http://www.w3.org/TR/MathML3/).
+
+### math
+
+- {{ MathMLElement("math") }} (Elemento raíz)
+
+### A
+
+- {{ MathMLElement("maction") }} (Acciones enlazadas a sub-expresiones)
+- {{ MathMLElement("maligngroup") }} (Grupo de alineación) {{ unimplemented_inline(122253) }}
+- {{ MathMLElement("malignmark") }} (Puntos de alineación) {{ unimplemented_inline(122253) }}
+
+### E
+
+- {{ MathMLElement("menclose") }} (Enclosed contents)
+- {{ MathMLElement("merror") }} (Enclosed syntax error messages)
+
+### F
+
+- {{ MathMLElement("mfenced") }} (Paréntesis)
+- {{ MathMLElement("mfrac") }} (Fracción)
+
+### G
+
+- {{ MathMLElement("mglyph") }} (Mostrar símbolos no estándar) {{ unimplemented_inline(297465) }}
+
+### I
+
+- {{ MathMLElement("mi") }} (Identificador)
+
+### L
+
+- {{ MathMLElement("mlabeledtr") }} (Fila etiquetada en una tabla o matriz) {{ unimplemented_inline(689641) }}
+- {{ MathMLElement("mlongdiv") }} (Notación de la división larga) {{ unimplemented_inline(534967) }}
+
+### M
+
+- {{ MathMLElement("mmultiscripts") }} (Prescripts and tensor indices)
+
+### N
+
+- {{ MathMLElement("mn") }} (Número)
+
+### O
+
+- {{ MathMLElement("mo") }} (Operador)
+- {{ MathMLElement("mover") }} (Overscript)
+
+### P
+
+- {{ MathMLElement("mpadded") }} (Espacio alrrededor del contenido)
+- {{ MathMLElement("mphantom") }} (Contenido invisible con espacio reservado)
+
+### R
+
+- {{ MathMLElement("mroot") }} (Radical con índice especificado)
+- {{ MathMLElement("mrow") }} (Sub-expressiones agrupadas)
+
+### S
+
+- {{ MathMLElement("ms") }} (String literal)
+- {{ MathMLElement("mscarries") }} (Annotations such as carries) {{ unimplemented_inline(534967) }}
+- {{ MathMLElement("mscarry") }} (Single carry, child element of {{ MathMLElement("mscarries") }}) {{ unimplemented_inline(534967) }}
+- {{ MathMLElement("msgroup") }} (Grouped rows of {{ MathMLElement("mstack") }} and {{ MathMLElement("mlongdiv") }} elements) {{ unimplemented_inline(534967) }}
+- {{ MathMLElement("msline") }} (Horizontal lines inside {{ MathMLElement("mstack") }} elements) {{ unimplemented_inline(534967) }}
+- {{ MathMLElement("mspace") }} (Space)
+- {{ MathMLElement("msqrt") }} (Square root without an index)
+- {{ MathMLElement("msrow") }} (Rows in {{ MathMLElement("mstack") }} elements) {{ unimplemented_inline(534967) }}
+- {{ MathMLElement("mstack") }} (Stacked alignment) {{ unimplemented_inline(534967) }}
+- {{ MathMLElement("mstyle") }} (Style change)
+- {{ MathMLElement("msub") }} (Subscript)
+- {{ MathMLElement("msup") }} (Superscript)
+- {{ MathMLElement("msubsup") }} (Subscript-superscript pair)
+
+### T
+
+- {{ MathMLElement("mtable") }} (Table or matrix)
+- {{ MathMLElement("mtd") }} (Cell in a table or a matrix)
+- {{ MathMLElement("mtext") }} (Text)
+- {{ MathMLElement("mtr") }} (Row in a table or a matrix)
+
+### U
+
+- {{ MathMLElement("munder") }} (Underscript)
+- {{ MathMLElement("munderover") }} (Underscript-overscript pair)
+
+### Other elements
+
+- {{ MathMLElement("semantics") }} (Container for semantic annotations)
+- [``](/es/docs/MathML/Element/semantics) (Data annotations)
+- [``](/es/docs/MathML/Element/semantics) (XML annotations)d
diff --git a/files/es/web/mathml/element/math/index.html b/files/es/web/mathml/element/math/index.html
deleted file mode 100644
index e48fa14ce5f35d..00000000000000
--- a/files/es/web/mathml/element/math/index.html
+++ /dev/null
@@ -1,163 +0,0 @@
----
-title:
-slug: Web/MathML/Element/math
-translation_of: Web/MathML/Element/math
-original_slug: Web/MathML/Elemento/math
----
-{{MathMLRef}}
-
-<math>
es el elemento superior en MathML. Cada instancia válida de MathML debe estar rodeada de etiquetas <math>
. Además, no debes anidar un segundo elemento <math>
dentro de un primero, pero puedes tener un número arbitrario de otros elementos hijos en él.
-
-Atributos
-
-Además de los siguientes atributos, el elemento <math>
acepta cualquier atributo del elemento {{ MathMLElement("mstyle") }}.
-
-
- class, id, style
- Disponibles para el uso con hojas de estilo .
- dir
- La dirección general de las fórmulas. Sus valores posibles son ltr
(izquierda a derecha) o bien rtl
(derecha a izquierda).
- href
- Usado para definir un hipervínculo a un URI (I dentificador de R ecurso U nificado) especificado.
- mathbackground
- El color de fondo. Puedes usar #rgb
, #rrggbb
y palabras clave de colores .
- mathcolor
- El color de texto. Puedes usar #rgb
, #rrggbb
y palabras clave de colores .
- display
- Este atributo enumerado especifica de qué manera el marcado MathML debería ser renderizado. Puede tomar uno de los siguientes valores:
-
- block
, el cual indica que este elemento será incluido fuera del fragmento de texto actual , en forma de bloque individual que puede ser posicionado en cualquier sitio sin cambiar el significado del texto;
- inline
, el cual indica que este elemento será incluido en el fragmento de texto actual, y no puede ser sacado del mismo sin cambiar el significado del texto.
-
-
- De no estar presente, toma inline
por defecto.
-
- mode {{deprecated_inline}}
- Deprecado a favor del atributo display .
- Sus valores posibles son: display
(que tiene el mismo efecto que display="block"
) e inline
.
- overflow
- Especifica el comportamiento de una expresión si es demasiado larga para caber en el ancho asignado.
- Sus valores posibles son: linebreak
(por defecto), scroll
, elide
, truncate
, scale
.
-
-
-Ejemplos
-
-
-
-Notación HTML5
-
-<!DOCTYPE html>
-<html>
- <head>
- <title>MathML en HTML5</title>
- </head>
- <body>
-
- <math>
- <mrow>
- <mrow>
- <msup>
- <mi>a</mi>
- <mn>2</mn>
- </msup>
- <mo>+</mo>
- <msup>
- <mi>b</mi>
- <mn>2</mn>
- </msup>
- </mrow>
- <mo>=</mo>
- <msup>
- <mi>c</mi>
- <mn>2</mn>
- </msup>
- </mrow>
- </math>
-
- </body>
-</html>
-
-
-Notación XHTML
-
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN" "http://www.w3.org/Math/DTD/mathml2/xhtml-math11-f.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
- <title>MathML en XHTML</title>
-</head>
-<body>
-
- <math xmlns="http://www.w3.org/1998/Math/MathML">
- <mrow>
- <mrow>
- <msup>
- <mi>a</mi>
- <mn>2</mn>
- </msup>
- <mo>+</mo>
- <msup>
- <mi>b</mi>
- <mn>2</mn>
- </msup>
- </mrow>
- <mo>=</mo>
- <msup>
- <mi>c</mi>
- <mn>2</mn>
- </msup>
- </mrow>
- </math>
-
-</body>
-</html>
-
-Notas : Los documentos XHTML con MathML deben servirse como application/xhtml+xml
. Puedes lograrlo facilmente añadiendo la extensión .xhtml
a tus archivos locales. Para servidores Apache puedes configurar tu archivo .htaccess
para direccionar extensiones al tipo Mime correcto. Ya que estás escribiendo tu MathML en un archivo XML, asegurate también de escribir un documento XML bien formado.
-
-Especificaciones
-
-
-
-
- Especificación
- Estado
- Comentario
-
-
-
-
- {{ SpecName('MathML3', 'chapter2.html#interf.toplevel', 'The Top-Level math Element') }}
- {{ Spec2('MathML3') }}
- Especificación actual
-
-
- {{ SpecName('MathML2', 'chapter7.html#interf.toplevel', 'The Top-Level math Element') }}
- {{ Spec2('MathML2') }}
- Especificación inicial
-
-
-
-
-Compatibilidad de navegadores
-
-
-
-
-
-{{Compat("mathml.elements.math")}}
-
-
-
-Notas específicas a Firefox
-
-Firefox 7 introdujo soporte para aceptar todos los atributos MathML en el elemento superior math
(por ejemplo, el mismo comportamiento que el elemento {{ MathMLElement("mstyle") }}). Sin embargo, el atributo displaystyle
no fue tomado en cuenta y ha sido añadido en Firefox 8.
-
-Texto de respaldo (alttext
) o referir a una imagen alternativa usando los atributos altimg
, altimg-width
, altimg-height
o altimg-valign
no se encuentra actualmente implementado en Firefox.
-
-Véase también
-
-
- Elemento HTML superior: {{ HTMLElement("html") }}
- Elemento SVG superior: {{ SVGElement("svg") }}
- Prueba MathML para navegadores: Para XHTML y HTML5
-
diff --git a/files/es/web/mathml/element/math/index.md b/files/es/web/mathml/element/math/index.md
new file mode 100644
index 00000000000000..8059661f7f58ba
--- /dev/null
+++ b/files/es/web/mathml/element/math/index.md
@@ -0,0 +1,139 @@
+---
+title:
+slug: Web/MathML/Element/math
+translation_of: Web/MathML/Element/math
+original_slug: Web/MathML/Elemento/math
+---
+{{MathMLRef}}
+
+`` es el elemento superior en MathML. Cada instancia válida de MathML debe estar rodeada de etiquetas ``. Además, no debes anidar un segundo elemento `` dentro de un primero, pero puedes tener un número arbitrario de otros elementos hijos en él.
+
+## Atributos
+
+Además de los siguientes atributos, el elemento `` acepta cualquier atributo del elemento {{ MathMLElement("mstyle") }}.
+
+- class, id, style
+ - : Disponibles para el uso con [hojas de estilo](/es/docs/Web/CSS).
+- dir
+ - : La dirección general de las fórmulas. Sus valores posibles son `ltr` (izquierda a derecha) o bien `rtl` (derecha a izquierda).
+- href
+ - : Usado para definir un hipervínculo a un URI (**I**dentificador de **R**ecurso **U**nificado) especificado.
+- mathbackground
+ - : El color de fondo. Puedes usar `#rgb`, `#rrggbb` y [palabras clave de colores](/es/docs/Web/CSS/color_value#Palabras_clave_de_colores).
+- mathcolor
+ - : El color de texto. Puedes usar `#rgb`, `#rrggbb` y [palabras clave de colores](/es/docs/Web/CSS/color_value#Palabras_clave_de_colores).
+- display
+
+ - : Este atributo enumerado especifica de qué manera el marcado MathML debería ser renderizado. Puede tomar uno de los siguientes valores:
+
+ - `block`, el cual indica que este elemento será incluido fuera del fragmento de texto actual , en forma de bloque individual que puede ser posicionado en cualquier sitio sin cambiar el significado del texto;
+ - `inline`, el cual indica que este elemento será incluido en el fragmento de texto actual, y no puede ser sacado del mismo sin cambiar el significado del texto.
+
+ De no estar presente, toma `inline` por defecto.
+
+- mode {{deprecated_inline}}
+ - : Deprecado a favor del [atributo display](/es/docs/MathML/Element/math#attr-display).
+ Sus valores posibles son: `display` (que tiene el mismo efecto que `display="block"`) e `inline`.
+- overflow
+ - : Especifica el comportamiento de una expresión si es demasiado larga para caber en el ancho asignado.
+ Sus valores posibles son: `linebreak` (por defecto), `scroll`, `elide`, `truncate`, `scale`.
+
+## Ejemplos
+
+![Theorem of Pythagoras](/files/3157/math.jpg)
+
+### Notación HTML5
+
+```html
+
+
+
+ MathML en HTML5
+
+
+
+
+
+
+
+ a
+ 2
+
+ +
+
+ b
+ 2
+
+
+ =
+
+ c
+ 2
+
+
+
+
+
+
+```
+
+### Notación XHTML
+
+```xml
+
+
+
+
+ MathML en XHTML
+
+
+
+
+
+
+
+ a
+ 2
+
+ +
+
+ b
+ 2
+
+
+ =
+
+ c
+ 2
+
+
+
+
+
+
+```
+
+**Notas**: Los documentos XHTML con MathML deben servirse como `application/xhtml+xml`. Puedes lograrlo facilmente añadiendo la extensión `.xhtml` a tus archivos locales. Para servidores Apache puedes [configurar tu archivo `.htaccess`](http://httpd.apache.org/docs/2.4/mod/mod_mime.html#addtype) para direccionar extensiones al tipo Mime correcto. Ya que estás escribiendo tu MathML en un archivo XML, asegurate también de escribir un documento XML bien formado.
+
+## Especificaciones
+
+| Especificación | Estado | Comentario |
+| -------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ---------------------- |
+| {{ SpecName('MathML3', 'chapter2.html#interf.toplevel', 'The Top-Level math Element') }} | {{ Spec2('MathML3') }} | Especificación actual |
+| {{ SpecName('MathML2', 'chapter7.html#interf.toplevel', 'The Top-Level math Element') }} | {{ Spec2('MathML2') }} | Especificación inicial |
+
+## Compatibilidad de navegadores
+
+{{Compat("mathml.elements.math")}}
+
+## Notas específicas a Firefox
+
+Firefox 7 introdujo soporte para aceptar todos los atributos MathML en el elemento superior `math` (por ejemplo, el mismo comportamiento que el elemento {{ MathMLElement("mstyle") }}). Sin embargo, el atributo `displaystyle` no fue tomado en cuenta y [ha sido añadido](https://bugzilla.mozilla.org/show_bug.cgi?id=669719) en Firefox 8.
+
+Texto de respaldo (`alttext`) o referir a una imagen alternativa usando los atributos `altimg`, `altimg-width`, `altimg-height` o `altimg-valign` no se encuentra actualmente implementado en Firefox.
+
+## Véase también
+
+- Elemento **HTML** superior: {{ HTMLElement("html") }}
+- Elemento **SVG** superior: {{ SVGElement("svg") }}
+- Prueba MathML para navegadores: Para [XHTML](https://www.eyeasme.com/Joe/MathML/MathML_browser_test) y [HTML5](https://eyeasme.com/Joe/MathML/HTML5_MathML_browser_test)
diff --git a/files/es/web/mathml/examples/index.html b/files/es/web/mathml/examples/index.html
deleted file mode 100644
index 0bbd27bf9653c2..00000000000000
--- a/files/es/web/mathml/examples/index.html
+++ /dev/null
@@ -1,24 +0,0 @@
----
-title: Examples
-slug: Web/MathML/Examples
-tags:
- - MathML
- - NeedsTranslation
- - TopicStub
-translation_of: Web/MathML/Examples
----
-Below you'll find some examples you can look at to help you to understand how to use MathML to display increasingly complex mathematical concepts in Web content.
-
-
- Pythagorean Theorem
-
- Small example showing a proof of the Pythagorean Theorem.
-
- Deriving the Quadratic Formula
-
- Outlines the derivation of the Quadratic Formula.
-
- MathML Torture Test
-
- Large set of test markup.
-
diff --git a/files/es/web/mathml/examples/index.md b/files/es/web/mathml/examples/index.md
new file mode 100644
index 00000000000000..5eb503cd135673
--- /dev/null
+++ b/files/es/web/mathml/examples/index.md
@@ -0,0 +1,17 @@
+---
+title: Examples
+slug: Web/MathML/Examples
+tags:
+ - MathML
+ - NeedsTranslation
+ - TopicStub
+translation_of: Web/MathML/Examples
+---
+Below you'll find some examples you can look at to help you to understand how to use MathML to display increasingly complex mathematical concepts in Web content.
+
+- [Pythagorean Theorem](/es/docs/Web/MathML/Examples/MathML_Pythagorean_Theorem)
+ - : Small example showing a proof of the Pythagorean Theorem.
+- [Deriving the Quadratic Formula](/es/docs/Web/MathML/Examples/Deriving_the_Quadratic_Formula)
+ - : Outlines the derivation of the Quadratic Formula.
+- [MathML Torture Test](/es/docs/Mozilla/MathML_Project/MathML_Torture_Test)
+ - : Large set of test markup.
diff --git a/files/es/web/mathml/examples/mathml_pythagorean_theorem/index.html b/files/es/web/mathml/examples/mathml_pythagorean_theorem/index.html
deleted file mode 100644
index 46ec3444f8e7e4..00000000000000
--- a/files/es/web/mathml/examples/mathml_pythagorean_theorem/index.html
+++ /dev/null
@@ -1,9 +0,0 @@
----
-title: MathML Pythagorean Theorem
-slug: Web/MathML/Examples/MathML_Pythagorean_Theorem
-translation_of: Web/MathML/Examples/MathML_Pythagorean_Theorem
----
-<math 1ex"="" height="0.5ex" side="left" style="font-size: 16pt; font-family: arial; mspace depth=" width="2.5ex"> a 2 + b 2 = c 2 Podemos demostrar el teorema algebraicamente mostrando que el area del cuadrado grande
- es igual al area del cuadrado interno (hipotenusa al cuadrado) mas el area de los cuatro triangulos:
-
- ( a + b ) 2 = c 2 + 4 ( 1 2 ) a b a 2 + 2 a b + b 2 = c 2 + 2 ab a 2 + b 2 = c 2
diff --git a/files/es/web/mathml/examples/mathml_pythagorean_theorem/index.md b/files/es/web/mathml/examples/mathml_pythagorean_theorem/index.md
new file mode 100644
index 00000000000000..1fb641b7966e15
--- /dev/null
+++ b/files/es/web/mathml/examples/mathml_pythagorean_theorem/index.md
@@ -0,0 +1,60 @@
+---
+title: MathML Pythagorean Theorem
+slug: Web/MathML/Examples/MathML_Pythagorean_Theorem
+translation_of: Web/MathML/Examples/MathML_Pythagorean_Theorem
+---
+a
+2
++
+b
+2
+=
+c
+2
+
+
+Podemos demostrar el teorema algebraicamente mostrando que el area del cuadrado grande
+es igual al area del cuadrado interno (hipotenusa al cuadrado) mas el area de los cuatro triangulos:
+
+(
+a
++
+b
+)
+2
+=
+c
+2
++
+4
+⋅
+(
+1
+2
+a
+b
+)
+a
+2
++
+2
+a
+b
++
+b
+2
+=
+c
+2
++
+2
+a
+b
+a
+2
++
+b
+2
+=
+c
+2
diff --git a/files/es/web/mathml/index.html b/files/es/web/mathml/index.html
deleted file mode 100644
index d6a1cc890a70e7..00000000000000
--- a/files/es/web/mathml/index.html
+++ /dev/null
@@ -1,71 +0,0 @@
----
-title: MathML
-slug: Web/MathML
-tags:
- - Landing
- - MathML
- - NeedsTranslation
- - Reference
- - Référence(2)
- - TopicStub
-translation_of: Web/MathML
----
-Lenguaje de Marcado Matemático (MathML) es un lenguaje de marcado XML para describir expresiones matemáticas capturando tanto su contenido como su estructura.
-
-Aquí encontrarás enlaces a documentación, ejemplos y herramientas que te ayudarán a trabajar con esta tecnología poderosa. Para un resumen, vea la presentación que se preparó para Mozilla Summit 2013 .
-
-
-
-
-
-
Obteniendo ayuda de la comunidad
-
-
-
-
Herramientas
-
-
-
-
Temas relacionados
-
-
-
-
-
-Compatibilidad de navegadores
-
-{{Compat("mathml.elements.math", 0)}}
diff --git a/files/es/web/mathml/index.md b/files/es/web/mathml/index.md
new file mode 100644
index 00000000000000..1b6d46eec3cae0
--- /dev/null
+++ b/files/es/web/mathml/index.md
@@ -0,0 +1,57 @@
+---
+title: MathML
+slug: Web/MathML
+tags:
+ - Landing
+ - MathML
+ - NeedsTranslation
+ - Reference
+ - Référence(2)
+ - TopicStub
+translation_of: Web/MathML
+---
+**Lenguaje de Marcado Matemático (MathML)** es un lenguaje de marcado [XML](/es/docs/Introducción_a_XML) para describir expresiones matemáticas capturando tanto su contenido como su estructura.
+
+Aquí encontrarás enlaces a documentación, ejemplos y herramientas que te ayudarán a trabajar con esta tecnología poderosa. Para un resumen, vea la [presentación](https://fred-wang.github.io/MozSummitMathML/index.html) que se preparó para Mozilla Summit 2013.
+
+## Referencia de MathML
+
+- [Referencia de elementos de MathML](/es/docs/Web/MathML/Elemento)
+ - : Detalles sobre cada elemento de MathML e información sobre compatibilidad con navegadores móviles y de escritorio.
+- [Referencia de atributos de MathML](/es/docs/Web/MathML/Attribute)
+ - : Información sobre los atributos que modifican el aspecto y comportamiento de los elementos.
+- [Ejemplos de MathML](/es/docs/Web/MathML/Examples)
+ - : Muestras y ejemplos en MathML para ayudarte a comprender cómo funciona.
+- [Creando MathML](/es/docs/Web/MathML/Authoring)
+ - : Sugerencias y consejos al momento de escribir MathML, incluyendo editores de MathML sugeridos y cómo integrar sus productos a contenido Web.
+
+[Ver todo lo etiquetado con MathML en español...](/es/docs/tag/MathML)
+
+## Obteniendo ayuda de la comunidad
+
+- Ver los foros de Mozilla...
+ {{ DiscussionList("dev-tech-mathml", "mozilla.dev.tech.mathml") }}
+- [Canal IRC](irc://irc.mozilla.org/%23mathml)
+- [Wiki usada por contribuyentes de Mozilla](https://wiki.mozilla.org/MathML:Home_Page)
+- [W3C Math Home](https://www.w3.org/Math/)
+- [www-math w3.org mail archive](https://lists.w3.org/Archives/Public/www-math/)
+
+## Herramientas
+
+- [Validador W3C](https://validator.w3.org)
+- [FireMath Firefox add-on](https://addons.mozilla.org/en/firefox/addon/8969/)
+- [Mathzilla Firefox add-on collection](https://addons.mozilla.org/firefox/collections/fred_wang/mathzilla/)
+- [TeXZilla](https://github.com/fred-wang/TeXZilla) — Conversor Javascript de LaTeX a MathML ([live demo](https://fred-wang.github.io/TeXZilla/), [Firefox OS webapp](https://r-gaia-cs.github.io/TeXZilla-webapp/), [add-on Firefox](https://addons.mozilla.org/en-US/firefox/addon/texzilla/), [using in a Web Page, JS program etc](https://github.com/fred-wang/TeXZilla/wiki/Using-TeXZilla))
+- [LaTeXML](http://dlmf.nist.gov/LaTeXML/) - Convierte documentos LaTeX a páginas web HTML+MathML
+- [Web Equation](http://webdemo.visionobjects.com/home.html#equation) - Convierte ecuaciones manuscritas a MathML o LaTeX
+- [MathJax](https://www.mathjax.org/) - Motor de representación matemática en JavaScript navegador-independientes. Para forzar MathJax a usar MathML nativo, prueba [este add-on Mozilla](https://addons.mozilla.org/en-US/firefox/addon/mathjax-native-mathml/), esta [extensión Safari](https://fred-wang.github.io/mathjax-native-mathml-safari/mathjax-native-mathml.safariextz) o este [script en GreaseMonkey](https://openuserjs.org/scripts/fred.wang/MathJax_Native_MathML/).
+
+## Temas relacionados
+
+- [CSS](/es/docs/Web/CSS)
+- [HTML](/es/docs/Web/HTML)
+- [SVG](/es/docs/Web/SVG)
+
+## Compatibilidad de navegadores
+
+{{Compat("mathml.elements.math", 0)}}
diff --git a/files/es/web/media/dash_adaptive_streaming_for_html_5_video/index.html b/files/es/web/media/dash_adaptive_streaming_for_html_5_video/index.html
deleted file mode 100644
index 879e82646e2a44..00000000000000
--- a/files/es/web/media/dash_adaptive_streaming_for_html_5_video/index.html
+++ /dev/null
@@ -1,78 +0,0 @@
----
-title: Transmisión Adaptativa DASH para Video en HTML 5
-slug: Web/Media/DASH_Adaptive_Streaming_for_HTML_5_Video
-translation_of: Web/Media/DASH_Adaptive_Streaming_for_HTML_5_Video
-original_slug: Web/HTML/Transision_adaptativa_DASH
----
-La Transmisión Adaptable y Dinámica sobre HTTP (DASH - Dynamic Adaptive Streaming over HTTP ) es un protocolo de transmisión adaptable. Esto signfica que le permite a un flujo de vídeo cambiar entre diversas tazas de bits con base en el desempeño de la red, para mantener la reproducción de un vídeo.
-
-Soporte de Navegadores
-
-Firefox 21 incluye una implementación de DASH para video WebM con HTML5 que está desactivada por defecto. Se puede activar a través de "about:config" activando la opción "media.dash.enabled".
-
-Firefox 23 eliminó el soporte para DASH para WebM con HTML 5. Ésta será reemplazada por una implementación de la Media Source Extensions API que de soporte a DASH a través de javascript usando librerías como dash.js. Ver el bug 778617 para más detalles.
-
-Usando DASH del lado del servidor
-
-Lo primero que necesitas es convertir tu video WebM en un manifiesto DASH con todos los archivos en los diferentes bitrates. Para comenzar necesitas:
-
-
-
-1. Use your existing WebM file to create one audio file and multiple video files.
-
-Por ejemplo:
-
-Creamos el archivo de audio usando:
-
-ffmpeg -i my_master_file.webm -vn -acodec libvorbis -ab 128k my_audio.webm
-
-Creamos los archivos de vídeo usando:
-
-ffmpeg -i my_master_file.webm -vcodec libvpx -vb 250k -keyint_min 150 -g 150 -an my_video-250kbps.webm
-ffmpeg -i my_master_file.webm -vcodec libvpx -vb 100k -keyint_min 150 -g 150 -an my_video-100kbps.webm
-ffmpeg -i my_master_file.webm -vcodec libvpx -vb 50k -keyint_min 150 -g 150 -an my_video-50kbps.webm
-
-2. Align the clusters to enable switching at cluster boundaries.
-
-For video:
-
-samplemuxer -i my_video-250kbps.webm -o my_video-250kbps-final.webm
-etc.
-
-Although we don't switch audio streams, it's still necessary to run it through samplemuxer to ensure a cues element is added. Note: to be compatible with playing on Chrome, it is suggested to change the track number to something other than the one in the video files, most likely 0.
-
-samplemuxer -i my_audio.webm -o my_audio-final.webm -output_cues 1 -cues_on_audio_track 1 -max_cluster_duration 2 -audio_track_number
-
-3. Create the manifest file:
-
-webm_dash_manifest -o my_video_manifest.mpd \
- -as id=0,lang=eng \
- -r id=0,file=my_video-250kbps-final.webm \
- -r id=1,file=my_video-100kbps-final.webm \
- -r id=2,file=my_video-50kbps-final.webm \
- -as id=1,lang=eng \
- -r id=4,file=my_audio-final.webm
-
-Put the manifest and the associated video files on your web server or CDN. DASH works via HTTP, so as long as your HTTP server supports byte range requests, and it's set up to serve .mpd files with mimetype="application/dash+xml", then you're all set.
-
-Using DASH - Client Side
-
-You'll want to modify your web page to point to the DASH manifest first, instead of directly to a particular video file:
-
-<video>
- <source src="movie.mpd ">
- <source src="movie.webm">
- Your browser does not support the video tag.
-</video>
-
-That's it! If DASH is supported by the browser, your video will now stream adaptively.
-
-Links
-
-WebM DASH Specification at The WebM Project
-
-DASH Industry Forum
diff --git a/files/es/web/media/dash_adaptive_streaming_for_html_5_video/index.md b/files/es/web/media/dash_adaptive_streaming_for_html_5_video/index.md
new file mode 100644
index 00000000000000..4d459d7a537a50
--- /dev/null
+++ b/files/es/web/media/dash_adaptive_streaming_for_html_5_video/index.md
@@ -0,0 +1,88 @@
+---
+title: Transmisión Adaptativa DASH para Video en HTML 5
+slug: Web/Media/DASH_Adaptive_Streaming_for_HTML_5_Video
+translation_of: Web/Media/DASH_Adaptive_Streaming_for_HTML_5_Video
+original_slug: Web/HTML/Transision_adaptativa_DASH
+---
+La Transmisión Adaptable y Dinámica sobre HTTP (DASH - _Dynamic Adaptive Streaming over HTTP_) es un protocolo de transmisión adaptable. Esto signfica que le permite a un flujo de vídeo cambiar entre diversas tazas de bits con base en el desempeño de la red, para mantener la reproducción de un vídeo.
+
+## Soporte de Navegadores
+
+Firefox 21 incluye una implementación de DASH para video WebM con HTML5 que está desactivada por defecto. Se puede activar a través de "about:config" activando la opción "media.dash.enabled".
+
+Firefox 23 eliminó el soporte para DASH para WebM con HTML 5. Ésta será reemplazada por una implementación de la [Media Source Extensions API](http://www.w3.org/TR/media-source/)que de soporte a DASH a través de javascript usando librerías como dash.js. Ver el bug [778617](https://bugzilla.mozilla.org/show_bug.cgi?id=778617) para más detalles.
+
+## Usando DASH del lado del servidor
+
+Lo primero que necesitas es convertir tu video WebM en un manifiesto DASH con todos los archivos en los diferentes bitrates. Para comenzar necesitas:
+
+- ffpmeg - con libvpx y libvorbis activado para dar soporte al audio y video de WebM ([ffmpeg.org](http://www.ffmpeg.org/)).
+- libwebm - concretamente para la herramienta samplemuxer (git clone ).
+- webm-tools - concretamente para la herramienta de creación de manifiestos, webm_dash_manifest (git clone ).
+
+### 1. Use your existing WebM file to create one audio file and multiple video files.
+
+Por ejemplo:
+
+Creamos el archivo de audio usando:
+
+```
+ffmpeg -i my_master_file.webm -vn -acodec libvorbis -ab 128k my_audio.webm
+```
+
+Creamos los archivos de vídeo usando:
+
+```
+ffmpeg -i my_master_file.webm -vcodec libvpx -vb 250k -keyint_min 150 -g 150 -an my_video-250kbps.webm
+ffmpeg -i my_master_file.webm -vcodec libvpx -vb 100k -keyint_min 150 -g 150 -an my_video-100kbps.webm
+ffmpeg -i my_master_file.webm -vcodec libvpx -vb 50k -keyint_min 150 -g 150 -an my_video-50kbps.webm
+```
+
+### 2. Align the clusters to enable switching at cluster boundaries.
+
+For video:
+
+```
+samplemuxer -i my_video-250kbps.webm -o my_video-250kbps-final.webm
+etc.
+```
+
+Although we don't switch audio streams, it's still necessary to run it through samplemuxer to ensure a cues element is added. Note: to be compatible with playing on Chrome, it is suggested to change the track number to something other than the one in the video files, most likely 0.
+
+```
+samplemuxer -i my_audio.webm -o my_audio-final.webm -output_cues 1 -cues_on_audio_track 1 -max_cluster_duration 2 -audio_track_number
+```
+
+### 3. Create the manifest file:
+
+```
+webm_dash_manifest -o my_video_manifest.mpd \
+ -as id=0,lang=eng \
+ -r id=0,file=my_video-250kbps-final.webm \
+ -r id=1,file=my_video-100kbps-final.webm \
+ -r id=2,file=my_video-50kbps-final.webm \
+ -as id=1,lang=eng \
+ -r id=4,file=my_audio-final.webm
+```
+
+Put the manifest and the associated video files on your web server or CDN. DASH works via HTTP, so as long as your HTTP server supports byte range requests, and it's set up to serve .mpd files with mimetype="application/dash+xml", then you're all set.
+
+## Using DASH - Client Side
+
+You'll want to modify your web page to point to the DASH manifest first, instead of directly to a particular video file:
+
+```html
+
+
+
+ Your browser does not support the video tag.
+
+```
+
+That's it! If DASH is supported by the browser, your video will now stream adaptively.
+
+## Links
+
+[WebM DASH Specification at The WebM Project](http://wiki.webmproject.org/adaptive-streaming/webm-dash-specification)
+
+[DASH Industry Forum](http://dashif.org/)
diff --git a/files/es/web/media/index.html b/files/es/web/media/index.html
deleted file mode 100644
index 2913d03038cbde..00000000000000
--- a/files/es/web/media/index.html
+++ /dev/null
@@ -1,94 +0,0 @@
----
-title: Web media technologies
-slug: Web/Media
-tags:
- - Audio
- - Landing
- - Media
- - NeedsTranslation
- - TopicStub
- - Video
- - Web
-translation_of: Web/Media
----
-{{QuickLinksWithSubpages("/en-US/docs/Web/Media")}}
-
-Over the years, the Web's ability to present, create, and manage audio, video, and other media has grown at an increasing pace. Today, there are a large number of APIs available, as well as HTML elements, DOM interfaces, and other features that make it possible to not only perform these tasks, but use media in tandem with other technologies to do truly remarkable things. This article lists the various APIs with links to documentation you may find helpful in mastering them.
-
-
-
-
References
-
-
HTML
-
-
These articles cover HTML features for media developers.
-
-
- {{HTMLElement("audio")}}
- The <audio>
element is used to play audio in a Web context. These can be used invisibly as a destination for more complex media, or with visible controls for user-controlled playback of audio files. Accessible from JavaScript as {{domxref("HTMLAudioElement")}} objects.
- {{HTMLElement("video")}}
- The <video>
element is an endpoint for video content in a Web context. It can be used to simply present video files, or as a destination for streamed video content. <video>
can also be used as a way to link media APIs with other HTML and DOM technologies, including {{HTMLElement("canvas")}} (for frame grabbing and manipulation), for example. Accessible from JavaScript as {{domxref("HTMLVideoElement")}} objects.
- {{HTMLElement("track")}}
- The HTML <track>
element can be placed within an {{HTMLElement("audio")}} or {{HTMLElement("video")}} element to provide a reference to a WebVTT format subtitle or caption track to be used when playing the media. Accessible from JavaScript as {{domxref("HTMLTrackElement")}} objects.
- {{HTMLElement("source")}}
- The HTML <source>
element is used within an {{HTMLElement("audio")}} or {{HTMLElement("video")}} element to specify source media to present. Multiple sources can be used to provide the media in different formats, sizes, or resolutions. Accessible from JavaScript as {{domxref("HTMLSourceElement")}} objects.
-
-
-
APIs
-
-
- Media Capabilities API
- The Media Capabilities API lets you determine the encoding and decoding capabilities of the device your app or site is running on. This lets you make real-time decisions about what formats to use and when.
- Media Capture and Streams API
- A reference for the API which makes it possible to stream, record, and manipulate media both locally and across a network. This includes using local cameras and microphones to capture video, audio, and still images.
- MediaStream Recording API
- The MediaStream Recording API lets you capture media streams to process or filter the data or record it to disk.
- Web Audio API
- The Web Audio API lets you generate, filter, and manipulate sound data both in real-time and on pre-recorded material, then send that audio to a destination such as an <audio>
element, a media stream, or to disk.
- WebRTC
- WebRTC (Web Real-Time Communication) makes it possible to stream live audio and video, as well as transfer arbitrary data, between two peers over the Internet, without requiring an intermediary.
-
-
-
-
-
Guides
-
-
- Overview of media technology on the web
- A general look at the open Web technologies and APIs that provide support for audio and video playback, manipulation, and recording. If you're not sure which API you should use, this is the place to start.
- Using audio and video in HTML
- A guide to using the HTML <audio>
and <video>
elements.
- Accessibility guide for media in web design
- In this guide, we cover ways web designers and developers can create content that is accessible to people with different capabilities. This ranges from simply using the {{htmlattrxref("alt", "img")}} attribute on {{HTMLElement("img")}} elements to captions to tagging media for screen readers.
- Guide to media types and formats on the web
- A guide to the file types and codecs available for images, audio, and video media on the web. This includes recommendations for what formats to use for what kinds of content, best practices including how to provide fallbacks and how to prioritize media types, and also includes general browser support information for each media container and codec.
- Streaming audio and video
- A guide which covers how to stream audio and video, as well as techniques and technologies you can take advantage of to ensure the best possible quality and/or performance of your streams.
- Autoplay guide for media and Web Audio APIs
- Unexpected automatic playback of media or audio can be an unwelcome surprise to users. While autoplay serves a purpose, it should be used carefully. To give users control over this, many browsers now provide forms of autoplay blocking. This article is a guide to autoplay, with tips on when and how to use it and how to work with browsers to handle autoplay blocking gracefully.
- Positional audio in a 3D environment
- In 3D environments, which may either be 3D scenes rendered to the screen or a mixed reality experience experienced using a headset, it's important for audio to be performed so that it sounds like it's coming from the direction of its source. This guide covers how to accomplish this.
- Playing video in a 3D environment
- In this guide, we examine how to play video into a 3D scene. This technique can be used in both standard WebGL applications presented on a flat computer screen, or in a WebXR -generated virtual or augmented reality environment.
-
-
-
-
-
-
Other topics
-
-
Related topics which may be of interest, since they can be used in tandem with media APIs in interesting ways.
-
-
- The Canvas API
- The Canvas API lets you draw into an {{HTMLElement("canvas")}}, manipulating and changing the contents of an image. This can be used with media in many ways, including by setting a <canvas>
element as the destination for video playback or camera capture so that you can capture and manipulate video frames.
- WebGL
- WebGL provides an OpenGL ES compatible API on top of the existing Canvas API, making it possible to do powerful 3D graphics on the Web. Through a canvas, this can be used to add 3D imagery to media content.
- WebXR
- WebXR, which has replaced the now-obsolete WebVR API, is a technology that provides support for creating virtual reality (VR) and augmented reality (AR) content. The mixed reality content can then be displayed on the device's screen or using goggles or a headset.
- WebVR {{deprecated_inline}}
- The Web Virtual Reality API supports virtual reality (VR) devices such as the Oculus Rift or the HTC Vive, making it possible for developers to translate position and movement of the user into movement within a 3D scene which is then presented on the device. WebVR has been replaced by WebXR, and is due to be removed from browsers soon.
-
-
-
-
diff --git a/files/es/web/media/index.md b/files/es/web/media/index.md
new file mode 100644
index 00000000000000..e55883f5a05434
--- /dev/null
+++ b/files/es/web/media/index.md
@@ -0,0 +1,78 @@
+---
+title: Web media technologies
+slug: Web/Media
+tags:
+ - Audio
+ - Landing
+ - Media
+ - NeedsTranslation
+ - TopicStub
+ - Video
+ - Web
+translation_of: Web/Media
+---
+{{QuickLinksWithSubpages("/en-US/docs/Web/Media")}}
+
+Over the years, the Web's ability to present, create, and manage audio, video, and other media has grown at an increasing pace. Today, there are a large number of APIs available, as well as HTML elements, DOM interfaces, and other features that make it possible to not only perform these tasks, but use media in tandem with other technologies to do truly remarkable things. This article lists the various APIs with links to documentation you may find helpful in mastering them.
+
+## References
+
+### HTML
+
+These articles cover HTML features for media developers.
+
+- {{HTMLElement("audio")}}
+ - : The `` element is used to play audio in a Web context. These can be used invisibly as a destination for more complex media, or with visible controls for user-controlled playback of audio files. Accessible from JavaScript as {{domxref("HTMLAudioElement")}} objects.
+- {{HTMLElement("video")}}
+ - : The `` element is an endpoint for video content in a Web context. It can be used to simply present video files, or as a destination for streamed video content. `` can also be used as a way to link media APIs with other HTML and DOM technologies, including {{HTMLElement("canvas")}} (for frame grabbing and manipulation), for example. Accessible from JavaScript as {{domxref("HTMLVideoElement")}} objects.
+- {{HTMLElement("track")}}
+ - : The HTML `` element can be placed within an {{HTMLElement("audio")}} or {{HTMLElement("video")}} element to provide a reference to a [WebVTT](/es/docs/Web/API/Web_Video_Text_Tracks_Format) format subtitle or caption track to be used when playing the media. Accessible from JavaScript as {{domxref("HTMLTrackElement")}} objects.
+- {{HTMLElement("source")}}
+ - : The HTML `` element is used within an {{HTMLElement("audio")}} or {{HTMLElement("video")}} element to specify source media to present. Multiple sources can be used to provide the media in different formats, sizes, or resolutions. Accessible from JavaScript as {{domxref("HTMLSourceElement")}} objects.
+
+### APIs
+
+- [Media Capabilities API](/es/docs/Web/API/Media_Capabilities_API)
+ - : The Media Capabilities API lets you determine the encoding and decoding capabilities of the device your app or site is running on. This lets you make real-time decisions about what formats to use and when.
+- [Media Capture and Streams API](/es/docs/Web/API/Media_Streams_API)
+ - : A reference for the API which makes it possible to stream, record, and manipulate media both locally and across a network. This includes using local cameras and microphones to capture video, audio, and still images.
+- [MediaStream Recording API](/es/docs/Web/API/MediaStream_Recording_API)
+ - : The MediaStream Recording API lets you capture media streams to process or filter the data or record it to disk.
+- [Web Audio API](/es/docs/Web/API/Web_Audio_API)
+ - : The Web Audio API lets you generate, filter, and manipulate sound data both in real-time and on pre-recorded material, then send that audio to a destination such as an `` element, a media stream, or to disk.
+- [WebRTC](/es/docs/Web/API/WebRTC_API)
+ - : WebRTC (Web Real-Time Communication) makes it possible to stream live audio and video, as well as transfer arbitrary data, between two peers over the Internet, without requiring an intermediary.
+
+## Guides
+
+- [Overview of media technology on the web](/es/docs/Web/Media/Overview)
+ - : A general look at the open Web technologies and APIs that provide support for audio and video playback, manipulation, and recording. If you're not sure which API you should use, this is the place to start.
+- [Using audio and video in HTML](/es/docs/Web/Media/HTML_media)
+ - : A guide to using the HTML `` and `` elements.
+- [Accessibility guide for media in web design](/es/docs/Web/Media/Accessibility)
+ - : In this guide, we cover ways web designers and developers can create content that is accessible to people with different capabilities. This ranges from simply using the {{htmlattrxref("alt", "img")}} attribute on {{HTMLElement("img")}} elements to captions to tagging media for screen readers.
+- [Guide to media types and formats on the web](/es/docs/Web/Media/Formats)
+ - : A guide to the file types and codecs available for images, audio, and video media on the web. This includes recommendations for what formats to use for what kinds of content, best practices including how to provide fallbacks and how to prioritize media types, and also includes general browser support information for each media container and codec.
+- [Streaming audio and video](/es/docs/Web/Media/Streaming)
+ - : A guide which covers how to stream audio and video, as well as techniques and technologies you can take advantage of to ensure the best possible quality and/or performance of your streams.
+- [Autoplay guide for media and Web Audio APIs](/es/docs/Web/Media/Autoplay_guide)
+ - : Unexpected automatic playback of media or audio can be an unwelcome surprise to users. While autoplay serves a purpose, it should be used carefully. To give users control over this, many browsers now provide forms of autoplay blocking. This article is a guide to autoplay, with tips on when and how to use it and how to work with browsers to handle autoplay blocking gracefully.
+- [Positional audio in a 3D environment](/es/docs/Web/Media/3D_audio)
+ - : In 3D environments, which may either be 3D scenes rendered to the screen or a mixed reality experience experienced using a headset, it's important for audio to be performed so that it sounds like it's coming from the direction of its source. This guide covers how to accomplish this.
+- [Playing video in a 3D environment](/es/docs/Web/Media/3D_video)
+ - : In this guide, we examine how to play video into a 3D scene. This technique can be used in both standard [WebGL](/es/docs/Web/API/WebGL_API) applications presented on a flat computer screen, or in a [WebXR](/es/docs/Web/API/WebXR_Device_API)-generated virtual or augmented reality environment.
+
+
+
+## Other topics
+
+Related topics which may be of interest, since they can be used in tandem with media APIs in interesting ways.
+
+- [The Canvas API](/es/docs/Web/API/Canvas_API)
+ - : The Canvas API lets you draw into an {{HTMLElement("canvas")}}, manipulating and changing the contents of an image. This can be used with media in many ways, including by setting a `` element as the destination for video playback or camera capture so that you can capture and manipulate video frames.
+- [WebGL](/es/docs/Web/API/WebGL_API)
+ - : WebGL provides an OpenGL ES compatible API on top of the existing Canvas API, making it possible to do powerful 3D graphics on the Web. Through a canvas, this can be used to add 3D imagery to media content.
+- [WebXR](/es/docs/Web/API/WebXR_API)
+ - : WebXR, which has replaced the now-obsolete WebVR API, is a technology that provides support for creating virtual reality (VR) and augmented reality (AR) content. The mixed reality content can then be displayed on the device's screen or using goggles or a headset.
+- [WebVR](/es/docs/Web/API/WebVR_API) {{deprecated_inline}}
+ - : The Web Virtual Reality API supports virtual reality (VR) devices such as the Oculus Rift or the HTC Vive, making it possible for developers to translate position and movement of the user into movement within a 3D scene which is then presented on the device. WebVR has been replaced by WebXR, and is due to be removed from browsers soon.
diff --git a/files/es/web/performance/fundamentals/index.html b/files/es/web/performance/fundamentals/index.html
deleted file mode 100644
index 3784254cd8091e..00000000000000
--- a/files/es/web/performance/fundamentals/index.html
+++ /dev/null
@@ -1,233 +0,0 @@
----
-title: Performance fundamentals
-slug: Web/Performance/Fundamentals
-translation_of: Web/Performance/Fundamentals
----
-
-
Performance significa eficiencia. En el contexto de Open Web Apps, este documento explica en general qué es performance, cómo la plataforma del navegador ayuda a mejorarlo y qué herramientas y procesos puede usar para probarlo y mejorarlo.
-
-
-
-
-En última instancia, el performance percibido por el usuario es el único performance que importa. Los usuarios proporcionan entradas al sistema a través del tacto, el movimiento y el habla. A cambio, reciben salidas a través de la vista, el tacto y la audición. El performance es la calidad de las salidas del sistema en respuesta a las entradas del usuario.
-
-En igualdad de condiciones, el código optimizado para algún objetivo diferente al performance percibido por el usuario (en adelante, PPU) pierde cuando compite contra código optimizado para PPU. Los usuarios prefieren una aplicación fluida y receptiva que capaz de procesar 1,000 transacciones de base de datos por segundo, en lugar de una aplicación que no responde aún cuando sea capaz de procesar 100,000,000 por segundo. Esto no quiere decir, que no es importante optimizar otras métricas, pero se debe trabajar con PPU como objetivo principal.
-
-Las siguientes secciones señalan y discuten métricas esenciales para medir performance.
-
-Capacidad de respuesta
-
-
-
-La capacidad de respuesta simplemente significa la rapidez con la que el sistema proporciona salidas (posiblemente varias) en respuesta a las entradas del usuario. Por ejemplo, cuando un usuario toca la pantalla, espera que los píxeles cambien de cierta manera. Para esta interacción, la métrica de capacidad de respuesta es el tiempo transcurrido entre el toque y el cambio de píxel.
-
-La capacidad de respuesta a veces implica múltiples etapas de retroalimentación. El lanzamiento de la aplicación es un caso particularmente importante que se analiza con más detalle a continuación.
-
-La capacidad de respuesta es importante simplemente porque las personas se sienten frustradas y enojadas cuando son ignoradas. Una aplicación está ignorando al usuario cada segundo que no responde a la entrada del usuario.
-
-
-
-Frecuencia de cuadros
-
-
-
-La frecuencia de cuadros es la velocidad a la que el sistema cambia los píxeles que se muestran al usuario. Este es un concepto familiar: todos prefieren, digamos, juegos que muestran 60 cuadros por segundo sobre los que muestran 10 cuadros por segundo, incluso si no pueden explicar por qué.
-
-La velocidad de cuadros es importante como una métrica de "calidad de servicio". Las pantallas de computadora están diseñadas para "engañar" la vista del usuario, al entregarles fotones que imitan la realidad. Por ejemplo, el papel cubierto con texto impreso refleja fotones a los ojos del usuario formando un patrón. Al manipular los píxeles, una aplicación de lectura emite fotones en un patrón similar para "engañar" la vista del usuario.
-
-El cerebro entonces infiere que el moviemiento se "actualiza" de manera fluida y continua. (Las luces estroboscópicas son divertidas porque dan la vuelta al revés, lo que confunde al cerebro el cual reacciona generando adrenalina y altos niveles de estrés). En una pantalla de computadora, una mayor tasa de cuadros simplemente hace una imitación más fiel de la realidad.
-
-
-
-
-
Nota : Los seres humanos generalmente no pueden percibir diferencias en la frecuencia de cuadros por encima de 60Hz. Es por eso que las pantallas electrónicas más modernas están diseñadas para actualizarse a esa velocidad. Una televisión probablemente se ve entrecortada y poco realista para un colibrí, por ejemplo.
-
-
-Uso de la memoria
-
-El uso de la memoria es otra métrica clave. A diferencia de la capacidad de respuesta y la frecuencia de cuadros, los usuarios no perciben directamente el uso de la memoria, pero el uso de la memoria se aproxima mucho al "estado del usuario". Un sistema ideal mantendría el 100% del estado del usuario en todo momento: todas las aplicaciones en el sistema se ejecutarían simultáneamente, y todas las aplicaciones conservarían el estado creado por el usuario la última vez que el usuario interactuó con la aplicación (el estado de la aplicación se almacena en la memoria de la computadora , por lo que la aproximación es cercana).
-
-De esto viene un corolario importante pero contraintuitivo: un sistema bien diseñado no maximiza la cantidad de memoria libre . La memoria es un recurso, y la memoria libre es un recurso no utilizado. Más bien, un sistema bien diseñado se ha optimizado para usar la mayor cantidad de memoria posible para mantener el estado del usuario, al mismo tiempo que cumple otros objetivos de PPU.
-
-Eso no significa que el sistema deba desperdiciar memoria. Cuando un sistema usa más memoria de la necesaria para mantener un estado particular del usuario, el sistema está desperdiciando un recurso que podría usar para retener algún otro estado del usuario. En la práctica, ningún sistema puede mantener todos los estados del usuario. La asignación inteligente de memoria al estado del usuario es una preocupación importante que veremos más detalladamente a continuación.
-
-Consumo de energía
-
-
-
-La métrica final discutida aquí es el consumo de energía. Al igual que el uso de la memoria, los usuarios perciben el consumo de energía solo indirectamente, por el tiempo que sus dispositivos pueden mantener todos los demás objetivos de PPU. Para cumplir los objetivos de PPU, el sistema debe utilizar solo la potencia mínima requerida.
-
-El resto de este documento analizará el rendimiento en términos de estas métricas.
-
-
-
-
-
-Esta sección proporciona una breve descripción de cómo Firefox / Gecko contribuye al rendimiento en general, desde un nivel más abajo que las aplicaciones. Desde la perspectiva de un desarrollador o un usuario, esto responde a la pregunta "¿Qué hace la plataforma por usted?"
-
-Tecnologías web
-
-La plataforma web proporciona muchas herramientas, algunas más adecuadas para trabajos particulares que otras. Toda la lógica de la aplicación está escrita en JavaScript. Para mostrar gráficos, los desarrolladores pueden usar HTML o CSS (es decir, lenguajes declarativos de alto nivel), o usar interfaces imperativas de bajo nivel ofrecidas por el elemento <canvas> (que incluye WebGL ). En algún lugar "entre" HTML / CSS y Canvas está SVG , que ofrece algunos beneficios de ambos.
-
-HTML y CSS aumentan en gran medida la productividad, a veces a expensas de la frecuencia de cuadros o el control a nivel de píxeles de la renderización. El texto y las imágenes se vuelven a generar automáticamente, los elementos de la IU reciben automáticamente el tema del sistema, y el sistema proporciona soporte "integrado" para algunos casos de uso que los desarrolladores pueden no pensar inicialmente, como pantallas de diferente resolución o idiomas de derecha a izquierda.
-
-The canvas
element offers a pixel buffer directly for developers to draw on. This gives developers pixel-level control over rendering and precise control of framerate, but now the developers need to deal with multiple resolutions and orientations, right-to-left languages, and so forth. Developers draw to canvases using either a familiar 2D drawing API, or WebGL, a "close to the metal" binding that mostly follows OpenGL ES 2.0.
-
-
-
Note : Firefox OS is optimized for apps built with Web technologies: HTML , CSS , JavaScript , and so on. Except for a handful of basic system services, all code that runs in Firefox OS comes from Web apps and the Gecko engine. Even the OS window manager is written in HTML, CSS, and JavaScript. Because the core operating system and applications are built with same Web technologies, it's critical how those technologies perform. There's no "escape hatch". This greatly benefits developers because now third-party apps benefit from all the OS's own optimizations. There's no "magic performance sauce" available only to preinstalled code. See Firefox OS performance testing for more details relevant to Firefox OS.
-
-
-Gecko rendering
-
-The Gecko JavaScript engine supports just-in-time (JIT) compilation. This enables application logic to perform comparably to other virtual machines — such as Java virtual machines — and in some cases even close to "native code".
-
-The graphics pipeline in Gecko that underpins HTML, CSS, and Canvas is optimized in several ways. The HTML/CSS layout and graphics code in Gecko reduces invalidation and repainting for common cases like scrolling; developers get this support "for free". Pixel buffers painted by both Gecko "automatically" and applications to canvas
"manually" minimize copies when being drawn to the display framebuffer. This is done by avoiding intermediate surfaces where they would create overhead (such as per-application "back buffers" in many other operating systems), and by using special memory for graphics buffers that can be directly accessed by the compositor hardware. Complex scenes are rendered using the device's GPU for maximum performance. To improve power usage, simple scenes are rendered using special dedicated composition hardware, while the GPU idles or turns off.
-
-Fully static content is the exception rather than the rule for rich applications. Rich applications use dynamic content with {{ cssxref("animation") }} and {{ cssxref ("transition") }} effects. Transitions and animations are particularly important to applications: developers can use CSS to declare complicated behaviour with a simple, high-level syntax. In turn, Gecko's graphics pipeline is highly optimized to render common animations efficiently. Common-case animations are "offloaded" to the system compositor, which can render them in a performant, power-efficient fashion.
-
-An app's startup performance matters just as much as its runtime performance. Gecko is optimized to load a wide variety of content efficiently: the entire Web! Many years of improvements targeting this content, like parallel HTML parsing, intelligent scheduling of reflows and image decoding, clever layout algorithms, etc., translate just as well to improving Web applications on Firefox.
-
-
-
-
-
-This section is intended for developers asking the question: "How can I make my app fast"?
-
-
-
-Application startup is punctuated by three user-perceived events, generally speaking:
-
-
- The first is the application first paint — the point at which sufficient application resources have been loaded to paint an initial frame
- The second is when the application becomes interactive — for example, users are able to tap a button and the application responds
- The final event is full load — for example when all the user's albums have been listed in a music player
-
-
-The key to fast startup is to keep two things in mind: UPP is all that matters, and there's a "critical path" to each user-perceived event above. The critical path is exactly and only the code that must run to produce the event.
-
-For example, to paint an application's first frame that comprises visually some HTML and CSS to style that HTML:
-
-
- The HTML must be parsed
- The DOM for that HTML must be constructed
- Resources like images in that part of the DOM have to be loaded and decoded
- The CSS styles must be applied to that DOM
- The styled document has to be reflowed
-
-
-Nowhere in that list is "load the JS file needed for an uncommon menu"; "fetch and decode the image for the High Scores list", etc. Those work items are not on the critical path to painting the first frame.
-
-It seems obvious, but to reach a user-perceived startup event more quickly, the main "trick" is run only the code on the critical path. Shorten the critical path by simplifying the scene.
-
-The Web platform is highly dynamic. JavaScript is a dynamically-typed language, and the Web platform allows loading code, HTML, CSS, images, and other resources dynamically. These features can be used to defer work that's off the critical path by loading unnecessary content "lazily" some time after startup.
-
-Another problem that can delay startup is idle time, caused by waiting for responses to requests (like database loads). To avoid this problem, applications should issue requests as early as possible in startup (this is called "front-loading"). Then when the data is needed later, hopefully it's already available and the application doesn't have to wait.
-
-
-
-On the same note, notice that locally-cached, static resources can be loaded much faster than dynamic data fetched over high-latency, low-bandwidth mobile networks. Network requests should never be on the critical path to early application startup. Caching resources locally is also the only way applications can be used offline, and for standard Open Web Apps, at the moment this requires use of HTML5 AppCache .
-
-
-
Note : Firefox OS allows applications to cache resources by being installed as applications, either being "packaged" in a compressed ZIP file or "hosted" through HTML5 AppCache . How to choose between these options for a particular type of application is beyond the scope of this document, but in general application packages provide optimal load performance; AppCache is slower. Installable apps will hopefully be coming to other platforms soon!
-
-
-Framerate
-
-The first important thing for high framerate is to choose the right tool. Use HTML and CSS to implement content that's mostly static, scrolled, and infrequently animated. Use Canvas to implement highly dynamic content, like games that need tight control over rendering and don't need theming.
-
-For content drawn using Canvas, it's up to the developer to hit framerate targets: they have direct control over what's drawn.
-
-For HTML and CSS content, the path to high framerate is to use the right primitives. Firefox is highly optimized to scroll arbitrary content; this is usually not a concern. But often trading some generality and quality for speed, such as using a static rendering instead of a CSS radial gradient, can push scrolling framerate over a target. CSS media queries allow these compromises to be restricted only to devices that need them.
-
-Many applications use transitions or animations through "pages", or "panels". For example, the user taps a "Settings" button to transition into an application configuration screen, or a settings menu "pops up". Firefox is highly optimized to transition and animate scenes that:
-
-
- use pages/panels approximately the size of the device screen or smaller
- transition/animate the CSS transform
and opacity
properties
-
-
-Transitions and animations that adhere to these guidelines can be offloaded to the system compositor and run maximally efficiently.
-
-Memory and power usage
-
-Improving memory and power usage is a similar problem to speeding up startup: don't do unneeded work or lazily load uncommonly-used UI resources. Do use efficient data structures and ensure resources like images are optimized well.
-
-Modern CPUs can enter a lower-power mode when mostly idle. Applications that constantly fire timers or keep unnecessary animations running prevent CPUs from entering low-power mode. Power-efficient applications shouldn't do that.
-
-When applications are sent to the background, a {{event("visibilitychange")}} event is fired on their documents. This event is a developer's friend; applications should listen for it. Applications that drop as many loaded resources as possible when sent to the background use less memory and are less likely discarded, in the case of Firefox OS (see the note below). This in turn means they "start up" faster (since they are already running) and have better UPP.
-
-
-
Note : As mentioned above, Firefox OS tries to keep as many applications running simultaneously as it can, but does have to discard applications sometimes, usually when the device runs out of memory. To find out more about how Firefox OS manages memory usage and kills apps when out of memory issues are encountered, read Debugging out of memory errors on Firefox OS .
-
-
-
-
-The following practical tips will help improve one or more of the Application performance factors discussed above.
-
-Use CSS animations and transitions
-
-Instead of using some library’s animate()
function, which probably currently uses many badly performing technologies ({{domxref("window.setTimeout()")}} or top
/left
positioning, for example) use CSS animations . In many cases, you can actually use CSS Transitions to get the job done. This works well because the browser is designed to optimize these effects and use the GPU to handle them smoothly with minimal impact on processor performance. Another benefit is that you can define these effects in CSS along with the rest of your app's look-and-feel, using a standardized syntax.
-
-CSS animations give you very granular control over your effects using keyframes , and you can even watch events fired during the animation process in order to handle other tasks that need to be performed at set points in the animation process. You can easily trigger these animations with the {{cssxref(":hover")}}, {{cssxref(":focus")}}, or {{cssxref(":target")}}, or by dynamically adding and removing classes on parent elements.
-
-If you want to create animations on the fly or modify them in JavaScript , James Long has written a simple library for that called CSS-animations.js .
-
-
-
-Instead of tweaking absolute positioning and fiddling with all that math yourself, use the {{cssxref("transform")}} CSS property to adjust the position, scale, and so forth of your content. The reason is, once again, hardware acceleration. The browser can do these tasks on your GPU, letting the CPU handle other things.
-
-In addition, transforms give you capabilities you might not otherwise have. Not only can you translate elements in 2D space, but you can transform in three dimensions, skew and rotate, and so forth. Paul Irish has an in-depth analysis of the benefits of translate()
from a performance point of view. In general, however, you have the same benefits you get from using CSS animations: you use the right tool for the job and leave the optimization to the browser. You also use an easily extensible way of positioning elements — something that needs a lot of extra code if you simulate translation with top
and left
positioning. Another bonus is that this is just like working in a canvas
element.
-
-
-
Note : You may need to attach a translateZ(0.1)
transform if you wish to get hardware acceleration on your CSS animations, depending on platform. As noted above, this can improve performance, but can also have memory consumption issues. What you do in this regard is up to you — do some testing and find out what's best for your particular app.
-
-
-Use requestAnimationFrame()
instead of setInterval()
-
-Calls to {{domxref("window.setInterval()")}} run code at a presumed frame rate that may or may not be possible under current circumstances. It tells the browser to render results even while the browser isn't actually drawing; that is, while the video hardware hasn't reached the next display cycle. This wastes processor time and can even lead to reduced battery life on the user's device.
-
-Instead, you should try to use {{domxref("window.requestAnimationFrame()")}}. This waits until the browser is actually ready to start building the next frame of your animation, and won't bother if the hardware isn't going to actually draw anything. Another benefit to this API is that animations won't run while your app isn't visible on the screen (such as if it's in the background and some other task is operating). This will save battery life and prevent users from cursing your name into the night sky.
-
-
-
-As old-school, accessibility-aware Web developers we love click events since they also support keyboard input. On mobile devices, these are too slow. You should use {{event("touchstart")}} and {{event("touchend")}} instead. The reason is that these don’t have a delay that makes the interaction with the app appear sluggish. If you test for touch support first, you don’t sacrifice accessibility, either. For example, the Financial Times uses a library called fastclick for that purpose, which is available for you to use.
-
-Keep your interface simple
-
-One big performance issue we found in HTML5 apps was that moving lots of DOM elements around makes everything sluggish — especially when they feature lots of gradients and drop shadows. It helps a lot to simplify your look-and-feel and move a proxy element around when you drag and drop.
-
-When, for example, you have a long list of elements (let’s say tweets), don’t move them all. Instead, keep in your DOM tree only the ones that are visible and a few on either side of the currently visible set of tweets. Hide or remove the rest. Keeping the data in a JavaScript object instead of accessing the DOM can vastly improve your app's performance. Think of the display as a presentation of your data rather than the data itself. That doesn’t mean you can't use straight HTML as the source; just read it once and then scroll 10 elements, changing the content of the first and last accordingly to your position in the results list, instead of moving 100 elements that aren’t visible. The same trick applies in games to sprites: if they aren’t currently on the screen, there is no need to poll them. Instead re-use elements that scroll off screen as new ones coming in.
-
-
-
-Firefox, Chrome, and other browsers include built-in tools that can help you diagnose slow page rendering. In particular, Firefox's Network Monitor will display a precise timeline of when each network request on your page happens, how large it is, and how long it takes.
-
-
-
-If your page contains JavaScript code that is taking a long time to run, the JavaScript profiler will pinpoint the slowest lines of code:
-
-
-
-The Built-in Gecko Profiler is a very useful tool that provides even more detailed information about which parts of the browser code are running slowly while the profiler runs. This is a bit more complex to use, but provides a lot of useful details.
-
-
-
-
-
Note : You can use these tools with the Android browser by running Firefox and enabling remote debugging .
-
-
-Using YSlow (which requires Firebug ) provides extremely helpful recommendations for improving performance. Many of the identified problems and suggested solutions are especially useful for mobile browsers. You should definitely run YSlow and follow its recommendations.
-
-
-
-In particular, making dozens or hundreds of network requests takes longer in mobile browsers. Rendering large images and CSS gradients can also take longer. Simply downloading large files can take longer, even over a fast network, because mobile hardware is sometimes too slow to take advantage of all the available bandwidth. For useful general tips on mobile Web performance, have a look at Maximiliano Firtman's Mobile Web High Performance talk.
-
-Testcases and submitting bugs
-
-If the Firefox and Chrome developer tools don't help you find a problem, or if they seem to indicate that the Web browser has caused the problem, try to provide a reduced test case that maximally isolates the problem. That often helps in diagnosing problems.
-
-See if you can reproduce the problem by saving and loading a static copy of an HTML page (including any images/stylesheets/scripts it embeds). If so, edit the static files to remove any private information, then send them to others for help (submit a Bugzilla report, for example, or host it on a server and share the URL). You should also share any profiling information you've collected using the tools listed above.
diff --git a/files/es/web/performance/fundamentals/index.md b/files/es/web/performance/fundamentals/index.md
new file mode 100644
index 00000000000000..9b7f80e061aea6
--- /dev/null
+++ b/files/es/web/performance/fundamentals/index.md
@@ -0,0 +1,197 @@
+---
+title: Performance fundamentals
+slug: Web/Performance/Fundamentals
+translation_of: Web/Performance/Fundamentals
+---
+Performance significa eficiencia. En el contexto de Open Web Apps, este documento explica en general qué es performance, cómo la plataforma del navegador ayuda a mejorarlo y qué herramientas y procesos puede usar para probarlo y mejorarlo.
+
+## ¿Qué es performance?
+
+En última instancia, el performance percibido por el usuario es el único performance que importa. Los usuarios proporcionan entradas al sistema a través del tacto, el movimiento y el habla. A cambio, reciben salidas a través de la vista, el tacto y la audición. El performance es la calidad de las salidas del sistema en respuesta a las entradas del usuario.
+
+En igualdad de condiciones, el código optimizado para algún objetivo diferente al performance percibido por el usuario (en adelante, PPU) pierde cuando compite contra código optimizado para PPU. Los usuarios prefieren una aplicación fluida y receptiva que capaz de procesar 1,000 transacciones de base de datos por segundo, en lugar de una aplicación que no responde aún cuando sea capaz de procesar 100,000,000 por segundo. Esto no quiere decir, que no es importante optimizar otras métricas, pero se debe trabajar con PPU como objetivo principal.
+
+Las siguientes secciones señalan y discuten métricas esenciales para medir performance.
+
+### Capacidad de respuesta
+
+La capacidad de respuesta simplemente significa la rapidez con la que el sistema proporciona salidas (posiblemente varias) en respuesta a las entradas del usuario. Por ejemplo, cuando un usuario toca la pantalla, espera que los píxeles cambien de cierta manera. Para esta interacción, la métrica de capacidad de respuesta es el tiempo transcurrido entre el toque y el cambio de píxel.
+
+La capacidad de respuesta a veces implica múltiples etapas de retroalimentación. El lanzamiento de la aplicación es un caso particularmente importante que se analiza con más detalle a continuación.
+
+La capacidad de respuesta es importante simplemente porque las personas se sienten frustradas y enojadas cuando son ignoradas. Una aplicación está ignorando al usuario cada segundo que no responde a la entrada del usuario.
+
+### Frecuencia de cuadros
+
+La frecuencia de cuadros es la velocidad a la que el sistema cambia los píxeles que se muestran al usuario. Este es un concepto familiar: todos prefieren, digamos, juegos que muestran 60 cuadros por segundo sobre los que muestran 10 cuadros por segundo, incluso si no pueden explicar por qué.
+
+La velocidad de cuadros es importante como una métrica de "calidad de servicio". Las pantallas de computadora están diseñadas para "engañar" la vista del usuario, al entregarles fotones que imitan la realidad. Por ejemplo, el papel cubierto con texto impreso refleja fotones a los ojos del usuario formando un patrón. Al manipular los píxeles, una aplicación de lectura emite fotones en un patrón similar para "engañar" la vista del usuario.
+
+El cerebro entonces infiere que el moviemiento se "actualiza" de manera fluida y continua. (Las luces estroboscópicas son divertidas porque dan la vuelta al revés, lo que confunde al cerebro el cual reacciona generando adrenalina y altos niveles de estrés). En una pantalla de computadora, una mayor tasa de cuadros simplemente hace una imitación más fiel de la realidad.
+
+> **Nota:** Los seres humanos generalmente no pueden percibir diferencias en la frecuencia de cuadros por encima de 60Hz. Es por eso que las pantallas electrónicas más modernas están diseñadas para actualizarse a esa velocidad. Una televisión probablemente se ve entrecortada y poco realista para un colibrí, por ejemplo.
+
+### Uso de la memoria
+
+El **uso de la memoria** es otra métrica clave. A diferencia de la capacidad de respuesta y la frecuencia de cuadros, los usuarios no perciben directamente el uso de la memoria, pero el uso de la memoria se aproxima mucho al "estado del usuario". Un sistema ideal mantendría el 100% del estado del usuario en todo momento: todas las aplicaciones en el sistema se ejecutarían simultáneamente, y todas las aplicaciones conservarían el estado creado por el usuario la última vez que el usuario interactuó con la aplicación (el estado de la aplicación se almacena en la memoria de la computadora, por lo que la aproximación es cercana).
+
+De esto viene un corolario importante pero contraintuitivo: un sistema bien diseñado no maximiza la cantidad de memoria **libre**. La memoria es un recurso, y la memoria libre es un recurso no utilizado. Más bien, un sistema bien diseñado se ha optimizado para **usar** la mayor cantidad de memoria posible para mantener el estado del usuario, al mismo tiempo que cumple otros objetivos de PPU.
+
+Eso no significa que el sistema deba **desperdiciar** memoria. Cuando un sistema usa más memoria de la necesaria para mantener un estado particular del usuario, el sistema está desperdiciando un recurso que podría usar para retener algún otro estado del usuario. En la práctica, ningún sistema puede mantener todos los estados del usuario. La asignación inteligente de memoria al estado del usuario es una preocupación importante que veremos más detalladamente a continuación.
+
+### Consumo de energía
+
+La métrica final discutida aquí es el consumo de energía. Al igual que el uso de la memoria, los usuarios perciben el consumo de energía solo indirectamente, por el tiempo que sus dispositivos pueden mantener todos los demás objetivos de PPU. Para cumplir los objetivos de PPU, el sistema debe utilizar solo la potencia mínima requerida.
+
+El resto de este documento analizará el rendimiento en términos de estas métricas.
+
+## Optimizaciones de rendimiento según la plataforma
+
+Esta sección proporciona una breve descripción de cómo Firefox / Gecko contribuye al rendimiento en general, desde un nivel más abajo que las aplicaciones. Desde la perspectiva de un desarrollador o un usuario, esto responde a la pregunta "¿Qué hace la plataforma por usted?"
+
+### Tecnologías web
+
+La plataforma web proporciona muchas herramientas, algunas más adecuadas para trabajos particulares que otras. Toda la lógica de la aplicación está escrita en JavaScript. Para mostrar gráficos, los desarrolladores pueden usar HTML o CSS (es decir, lenguajes declarativos de alto nivel), o usar interfaces imperativas de bajo nivel ofrecidas por el elemento [\](/es/docs/Web/HTML/Elemento/canvas) (que incluye [WebGL](/es/docs/Web/API/WebGL_API)). En algún lugar "entre" HTML / CSS y Canvas está [SVG](/es/docs/Web/SVG), que ofrece algunos beneficios de ambos.
+
+HTML y CSS aumentan en gran medida la productividad, a veces a expensas de la frecuencia de cuadros o el control a nivel de píxeles de la renderización. El texto y las imágenes se vuelven a generar automáticamente, los elementos de la IU reciben automáticamente el tema del sistema, y el sistema proporciona soporte "integrado" para algunos casos de uso que los desarrolladores pueden no pensar inicialmente, como pantallas de diferente resolución o idiomas de derecha a izquierda.
+
+The `canvas` element offers a pixel buffer directly for developers to draw on. This gives developers pixel-level control over rendering and precise control of framerate, but now the developers need to deal with multiple resolutions and orientations, right-to-left languages, and so forth. Developers draw to canvases using either a familiar 2D drawing API, or WebGL, a "close to the metal" binding that mostly follows OpenGL ES 2.0.
+
+> **Nota:** Firefox OS is optimized for apps built with Web technologies: [HTML](/es/docs/Web/HTML), [CSS](/es/docs/Web/CSS), [JavaScript](/es/docs/Web/JavaScript), and so on. Except for a handful of basic system services, all code that runs in Firefox OS comes from Web apps and the Gecko engine. Even the OS window manager is written in HTML, CSS, and JavaScript. Because the core operating system and applications are built with same Web technologies, it's critical how those technologies perform. There's no "escape hatch". This greatly benefits developers because now third-party apps benefit from all the OS's own optimizations. There's no "magic performance sauce" available only to preinstalled code. See [Firefox OS performance testing](/en-US/Apps/Developing/Performance/Firefox_OS_performance_testing) for more details relevant to Firefox OS.
+
+### Gecko rendering
+
+The Gecko JavaScript engine supports just-in-time (JIT) compilation. This enables application logic to perform comparably to other virtual machines — such as Java virtual machines — and in some cases even close to "native code".
+
+The graphics pipeline in Gecko that underpins HTML, CSS, and Canvas is optimized in several ways. The HTML/CSS layout and graphics code in Gecko reduces invalidation and repainting for common cases like scrolling; developers get this support "for free". Pixel buffers painted by both Gecko "automatically" and applications to `canvas` "manually" minimize copies when being drawn to the display framebuffer. This is done by avoiding intermediate surfaces where they would create overhead (such as per-application "back buffers" in many other operating systems), and by using special memory for graphics buffers that can be directly accessed by the compositor hardware. Complex scenes are rendered using the device's GPU for maximum performance. To improve power usage, simple scenes are rendered using special dedicated composition hardware, while the GPU idles or turns off.
+
+Fully static content is the exception rather than the rule for rich applications. Rich applications use dynamic content with {{ cssxref("animation") }} and {{ cssxref ("transition") }} effects. Transitions and animations are particularly important to applications: developers can use CSS to declare complicated behaviour with a simple, high-level syntax. In turn, Gecko's graphics pipeline is highly optimized to render common animations efficiently. Common-case animations are "offloaded" to the system compositor, which can render them in a performant, power-efficient fashion.
+
+An app's startup performance matters just as much as its runtime performance. Gecko is optimized to load a wide variety of content efficiently: the entire Web! Many years of improvements targeting this content, like parallel HTML parsing, intelligent scheduling of reflows and image decoding, clever layout algorithms, etc., translate just as well to improving Web applications on Firefox.
+
+> **Nota:** See [Firefox OS performance testing](/en-US/Apps/Developing/Performance/Firefox_OS_performance_testing) for more information about Firefox OS specifics that help to further improve startup performance.
+
+## Application performance
+
+This section is intended for developers asking the question: "How can I make my app fast"?
+
+### Startup performance
+
+Application startup is punctuated by three user-perceived events, generally speaking:
+
+- The first is the application **first paint** — the point at which sufficient application resources have been loaded to paint an initial frame
+- The second is when the application becomes **interactive** — for example, users are able to tap a button and the application responds
+- The final event is **full load** — for example when all the user's albums have been listed in a music player
+
+The key to fast startup is to keep two things in mind: UPP is all that matters, and there's a "critical path" to each user-perceived event above. The critical path is exactly and only the code that must run to produce the event.
+
+For example, to paint an application's first frame that comprises visually some HTML and CSS to style that HTML:
+
+1. The HTML must be parsed
+2. The DOM for that HTML must be constructed
+3. Resources like images in that part of the DOM have to be loaded and decoded
+4. The CSS styles must be applied to that DOM
+5. The styled document has to be reflowed
+
+Nowhere in that list is "load the JS file needed for an uncommon menu"; "fetch and decode the image for the High Scores list", etc. Those work items are not on the critical path to painting the first frame.
+
+It seems obvious, but to reach a user-perceived startup event more quickly, the main "trick" is run _only the code on the critical path._ Shorten the critical path by simplifying the scene.
+
+The Web platform is highly dynamic. JavaScript is a dynamically-typed language, and the Web platform allows loading code, HTML, CSS, images, and other resources dynamically. These features can be used to defer work that's off the critical path by loading unnecessary content "lazily" some time after startup.
+
+Another problem that can delay startup is idle time, caused by waiting for responses to requests (like database loads). To avoid this problem, applications should issue requests as early as possible in startup (this is called "front-loading"). Then when the data is needed later, hopefully it's already available and the application doesn't have to wait.
+
+> **Nota:** For much more information on improving startup performance, read [Optimizing startup performance](/en-US/Apps/Developing/Performance/Optimizing_startup_performance).
+
+On the same note, notice that locally-cached, static resources can be loaded much faster than dynamic data fetched over high-latency, low-bandwidth mobile networks. Network requests should never be on the critical path to early application startup. Caching resources locally is also the only way applications can be used offline, and for standard Open Web Apps, at the moment this requires use of HTML5 [AppCache](/es/docs/HTML/Using_the_application_cache).
+
+> **Nota:** Firefox OS allows applications to cache resources by being installed as applications, either being "packaged" in a compressed ZIP file or "hosted" through HTML5 [AppCache](/es/docs/HTML/Using_the_application_cache). How to choose between these options for a particular type of application is beyond the scope of this document, but in general application packages provide optimal load performance; AppCache is slower. Installable apps will hopefully be coming to other platforms soon!
+
+### Framerate
+
+The first important thing for high framerate is to choose the right tool. Use HTML and CSS to implement content that's mostly static, scrolled, and infrequently animated. Use Canvas to implement highly dynamic content, like games that need tight control over rendering and don't need theming.
+
+For content drawn using Canvas, it's up to the developer to hit framerate targets: they have direct control over what's drawn.
+
+For HTML and CSS content, the path to high framerate is to use the right primitives. Firefox is highly optimized to scroll arbitrary content; this is usually not a concern. But often trading some generality and quality for speed, such as using a static rendering instead of a CSS radial gradient, can push scrolling framerate over a target. CSS [media queries](/es/docs/Web/Guide/CSS/Media_queries) allow these compromises to be restricted only to devices that need them.
+
+Many applications use transitions or animations through "pages", or "panels". For example, the user taps a "Settings" button to transition into an application configuration screen, or a settings menu "pops up". Firefox is highly optimized to transition and animate scenes that:
+
+- use pages/panels approximately the size of the device screen or smaller
+- transition/animate the CSS `transform` and `opacity` properties
+
+Transitions and animations that adhere to these guidelines can be offloaded to the system compositor and run maximally efficiently.
+
+### Memory and power usage
+
+Improving memory and power usage is a similar problem to speeding up startup: don't do unneeded work or lazily load uncommonly-used UI resources. Do use efficient data structures and ensure resources like images are optimized well.
+
+Modern CPUs can enter a lower-power mode when mostly idle. Applications that constantly fire timers or keep unnecessary animations running prevent CPUs from entering low-power mode. Power-efficient applications shouldn't do that.
+
+When applications are sent to the background, a {{event("visibilitychange")}} event is fired on their documents. This event is a developer's friend; applications should listen for it. Applications that drop as many loaded resources as possible when sent to the background use less memory and are less likely discarded, in the case of Firefox OS (see the note below). This in turn means they "start up" faster (since they are already running) and have better UPP.
+
+> **Nota:** As mentioned above, Firefox OS tries to keep as many applications running simultaneously as it can, but does have to discard applications sometimes, usually when the device runs out of memory. To find out more about how Firefox OS manages memory usage and kills apps when out of memory issues are encountered, read [Debugging out of memory errors on Firefox OS](/en-US/Firefox_OS/Debugging/Debugging_OOMs).
+
+### Specific coding tips for application performance
+
+The following practical tips will help improve one or more of the Application performance factors discussed above.
+
+#### Use CSS animations and transitions
+
+Instead of using some library’s `animate()` function, which probably currently uses many badly performing technologies ({{domxref("window.setTimeout()")}} or `top`/`left` positioning, for example) use [CSS animations](/es/docs/Web/Guide/CSS/Using_CSS_animations). In many cases, you can actually use [CSS Transitions](/es/docs/Web/Guide/CSS/Using_CSS_transitions) to get the job done. This works well because the browser is designed to optimize these effects and use the GPU to handle them smoothly with minimal impact on processor performance. Another benefit is that you can define these effects in CSS along with the rest of your app's look-and-feel, using a standardized syntax.
+
+CSS animations give you very granular control over your effects using [keyframes](/es/docs/Web/CSS/@keyframes), and you can even watch events fired during the animation process in order to handle other tasks that need to be performed at set points in the animation process. You can easily trigger these animations with the {{cssxref(":hover")}}, {{cssxref(":focus")}}, or {{cssxref(":target")}}, or by dynamically adding and removing classes on parent elements.
+
+If you want to create animations on the fly or modify them in [JavaScript](/es/docs/JavaScript), James Long has written a simple library for that called [CSS-animations.js](https://github.com/jlongster/css-animations.js/).
+
+#### Use CSS transforms
+
+Instead of tweaking absolute positioning and fiddling with all that math yourself, use the {{cssxref("transform")}} CSS property to adjust the position, scale, and so forth of your content. The reason is, once again, hardware acceleration. The browser can do these tasks on your GPU, letting the CPU handle other things.
+
+In addition, transforms give you capabilities you might not otherwise have. Not only can you translate elements in 2D space, but you can transform in three dimensions, skew and rotate, and so forth. Paul Irish has an [in-depth analysis of the benefits of `translate()`](http://paulirish.com/2012/why-moving-elements-with-translate-is-better-than-posabs-topleft/) from a performance point of view. In general, however, you have the same benefits you get from using CSS animations: you use the right tool for the job and leave the optimization to the browser. You also use an easily extensible way of positioning elements — something that needs a lot of extra code if you simulate translation with `top` and `left` positioning. Another bonus is that this is just like working in a `canvas` element.
+
+> **Nota:** You may need to attach a `translateZ(0.1)` transform if you wish to get hardware acceleration on your CSS animations, depending on platform. As noted above, this can improve performance, but can also have memory consumption issues. What you do in this regard is up to you — do some testing and find out what's best for your particular app.
+
+#### Use `requestAnimationFrame()` instead of `setInterval()`
+
+Calls to {{domxref("window.setInterval()")}} run code at a presumed frame rate that may or may not be possible under current circumstances. It tells the browser to render results even while the browser isn't actually drawing; that is, while the video hardware hasn't reached the next display cycle. This wastes processor time and can even lead to reduced battery life on the user's device.
+
+Instead, you should try to use {{domxref("window.requestAnimationFrame()")}}. This waits until the browser is actually ready to start building the next frame of your animation, and won't bother if the hardware isn't going to actually draw anything. Another benefit to this API is that animations won't run while your app isn't visible on the screen (such as if it's in the background and some other task is operating). This will save battery life and prevent users from cursing your name into the night sky.
+
+#### Make events immediate
+
+As old-school, accessibility-aware Web developers we love click events since they also support keyboard input. On mobile devices, these are too slow. You should use {{event("touchstart")}} and {{event("touchend")}} instead. The reason is that these don’t have a delay that makes the interaction with the app appear sluggish. If you test for touch support first, you don’t sacrifice accessibility, either. For example, the Financial Times uses a library called [fastclick](https://github.com/ftlabs/fastclick) for that purpose, which is available for you to use.
+
+#### Keep your interface simple
+
+One big performance issue we found in HTML5 apps was that moving lots of [DOM](/es/docs/DOM) elements around makes everything sluggish — especially when they feature lots of gradients and drop shadows. It helps a lot to simplify your look-and-feel and move a proxy element around when you drag and drop.
+
+When, for example, you have a long list of elements (let’s say tweets), don’t move them all. Instead, keep in your DOM tree only the ones that are visible and a few on either side of the currently visible set of tweets. Hide or remove the rest. Keeping the data in a JavaScript object instead of accessing the DOM can vastly improve your app's performance. Think of the display as a presentation of your data rather than the data itself. That doesn’t mean you can't use straight HTML as the source; just read it once and then scroll 10 elements, changing the content of the first and last accordingly to your position in the results list, instead of moving 100 elements that aren’t visible. The same trick applies in games to sprites: if they aren’t currently on the screen, there is no need to poll them. Instead re-use elements that scroll off screen as new ones coming in.
+
+## General application performance analysis
+
+Firefox, Chrome, and other browsers include built-in tools that can help you diagnose slow page rendering. In particular, [Firefox's Network Monitor](/es/docs/Tools/Network_Monitor) will display a precise timeline of when each network request on your page happens, how large it is, and how long it takes.
+
+![The Firefox network monitor showing get requests, multiple files, and different times taken to load each resource on a graph.](https://mdn.mozillademos.org/files/6845/network-monitor.jpg)
+
+If your page contains JavaScript code that is taking a long time to run, the [JavaScript profiler](/es/docs/Tools/Profiler) will pinpoint the slowest lines of code:
+
+![The Firefox JavaScript profiler showing a completed profile 1.](https://mdn.mozillademos.org/files/6839/javascript-profiler.png)
+
+The [Built-in Gecko Profiler](/es/docs/Performance/Profiling_with_the_Built-in_Profiler) is a very useful tool that provides even more detailed information about which parts of the browser code are running slowly while the profiler runs. This is a bit more complex to use, but provides a lot of useful details.
+
+![A built-in Gecko profiler windows showing a lot of network information.](https://mdn.mozillademos.org/files/6837/gecko-profiler.png)
+
+> **Nota:** You can use these tools with the Android browser by running Firefox and enabling [remote debugging](/es/docs/Tools/Remote_Debugging).
+
+Using [YSlow](https://addons.mozilla.org/en-US/firefox/addon/yslow/) (which requires [Firebug](https://getfirebug.com/)) provides extremely helpful recommendations for improving performance. Many of the identified problems and suggested solutions are especially useful for mobile browsers. You should definitely run YSlow and follow its recommendations.
+
+![A YSlow window showing a set of tips for improving performance, the top one being make fewer http requests.](https://mdn.mozillademos.org/files/6843/yslow.png)
+
+In particular, making dozens or hundreds of network requests takes longer in mobile browsers. Rendering large images and CSS gradients can also take longer. Simply downloading large files can take longer, even over a fast network, because mobile hardware is sometimes too slow to take advantage of all the available bandwidth. For useful general tips on mobile Web performance, have a look at Maximiliano Firtman's [Mobile Web High Performance](http://www.slideshare.net/firt/mobile-web-high-performance) talk.
+
+### Testcases and submitting bugs
+
+If the Firefox and Chrome developer tools don't help you find a problem, or if they seem to indicate that the Web browser has caused the problem, try to provide a reduced test case that maximally isolates the problem. That often helps in diagnosing problems.
+
+See if you can reproduce the problem by saving and loading a static copy of an HTML page (including any images/stylesheets/scripts it embeds). If so, edit the static files to remove any private information, then send them to others for help (submit a [Bugzilla](https://bugzilla.mozilla.org/) report, for example, or host it on a server and share the URL). You should also share any profiling information you've collected using the tools listed above.
diff --git a/files/es/web/performance/index.html b/files/es/web/performance/index.html
deleted file mode 100644
index 0215e92b78669c..00000000000000
--- a/files/es/web/performance/index.html
+++ /dev/null
@@ -1,233 +0,0 @@
----
-title: Rendimiento Web
-slug: Web/Performance
-tags:
- - Mejores Practicas
- - Pagina de Inicio
- - Rendimiento
- - Rendimiento Web
-translation_of: Web/Performance
----
-
-El rendimiento web es la medición objetiva y la experiencia percibida por el usuario del tiempo de carga y el tiempo de ejecución; es el tiempo que tarda un sitio en cargarse, ser interactivo y responsivo, y que tan fluido es el contenido durante las interacciones del usuario: ¿el desplazamiento es suave? ¿Se puede hacer clic en los botones? ¿Las ventanas emergentes se abren rápidamente y se animan fluidamente al hacerlo? El rendimiento web incluye mediciones objetivas como el tiempo de carga, cuadros por segundo y tiempo para interactuar y subjetivas de cuánto tiempo se sintió que tardó en cargarse el contenido.
-
-Cuanto más tarde un sitio en responder, más usuarios abandonarán el sitio. Es importante minimizar los tiempos de carga y respuesta, y agregar funciones adicionales para ocultar la latencia al hacer que la experiencia sea lo más accesible e interactiva posible, tan pronto como sea posible, mientras se carga de forma asíncrona en las partes que más tarda la experiencia.
-
-Existen herramientas, API y mejores prácticas que nos ayudan a medir y mejorar el rendimiento web. Los cubrimos en esta sección.
-
-Tutoriales claves
-
-El Área de aprendizaje de Rendimiento Web de MDN contiene tutoriales modernos y actualizados que cubren aspectos esenciales del rendimiento:
-
-
-¿Qué es el rendimiento web?
-
-Este artículo inicia el módulo con un buen vistazo a lo que realmente es el rendimiento: esto incluye las herramientas, métricas, API, redes y grupos de personas que debemos tener en cuenta al pensar en el rendimiento y cómo podemos hacer que el rendimiento sea parte de nuestro flujo de trabajo de desarrollo web.
-
-
- Ruta crítica de renderización
- Algunos atributos y el orden en los origenes del código pueden afectar el rendimiento o su sitio web. Al minimizar el número de nodos del DOM, asegurándose de utilizar el mejor orden y los atributos para el contenido incluido, como estilos, código, elementos multimedia y código de terceros, puede mejorar drásticamente la experiencia del usuario. Este artículo analiza en detalle cómo el HTML y la ruta crítica de renderización pueden usarse para garantizar el máximo rendimiento.
- Mejores prácticas de rendimiento de Javascript
- JavaScript, cuando se usa correctamente, puede permitir experiencias web interactivas e inmersivas ... o puede dañar significativamente el tiempo de descarga, el tiempo de reproducción, el rendimiento de la aplicación, la duración de la batería y la experiencia del usuario. Este artículo describe algunas de las mejores prácticas de JavaScript que pueden garantizar que, incluso el contenido más complejo, tenga el mejor rendimiento posible.
-
- Multimedia: Images and Video
- Con frecuencia, la optimización de elementos multimedia es la forma más usada de hacer rendimiento web. Es posible servir diferentes archivos multimedia según el tipo de navegador, el tamaño y la densidad de píxeles de cada usuario. Consejos adicionales, como eliminar el sonido en imágenes de fondo, pueden mejorar aún más el rendimiento. En este artículo, analizamos el impacto que el video, el audio y el contenido de imagen tienen en el rendimiento y los métodos para garantizar que su impacto sea el mínimo posible.
- Características de rendimiento CSS
- CSS puede tener un enfoque de optimización menos importante para mejorar el rendimiento, pero hay algunas características de CSS que afectan el rendimiento más que otras. En este artículo, analizamos algunas propiedades de CSS que afectan el rendimiento y sugerimos formas de manejar los estilos para garantizar que el rendimiento no se vea afectado negativamente.
- ¿Como los usuarios perciben el rendimiento?
-
- Más importante que la rapidez de su sitio web en milisegundos, es la rapidez con la que los usuarios perciben su sitio. El tiempo de carga, el tiempo en ocio de la página, la capacidad de respuesta a la interacción del usuario y lo fluido de los desplazamientos y otras animaciones afectan estas percepciones. En este artículo, analizamos las diversas métricas de carga, animación y métricas de capacidad de respuesta, junto con las mejores prácticas para mejorar la percepción del usuario, y de los tiempos reales.
-
- Conceptos básicos de rendimiento web
- Además de los componentes HTML, CSS, JavaScript y archivos multimedia, hay características que pueden hacer que las aplicaciones sean más lentas y características que pueden hacer que las aplicaciones sean subjetivamente y objetivamente más rápidas. Existen muchas API, herramientas de desarrollo, mejores prácticas y malas prácticas relacionadas con el rendimiento web. Aquí presentaremos muchas de estas funciones al nivel básico y proporcionaremos enlaces a temas más profundos para mejorar el rendimiento en cada tema.
-
- Rendimiento movil
-
-
- Dado que el acceso a la web en dispositivos móviles es tan popular y que todas las plataformas móviles tienen navegadores web completos, pero es posible que el ancho de banda, la CPU y la vida útil de la batería sean limitados, es importante considerar el rendimiento de su contenido web en estas plataformas. Este artículo analiza las consideraciones de rendimiento específicas para dispositivos móviles.
-
- Llenando la página
- El cliente realiza una solicitud HTTP y, con suerte, unos segundos después, aparece el sitio. Mostrar el contenido implica ejecutar JavaScript, posiblemente modificando el DOM, calcular estilos, calcular la disposición del diseño y, finalmente, representar el contenido, lo que implica pintar y componer, y puede involucrar la aceleración de la GPU en un hilo de ejecución separado.
- .
- Cuellos de botella en rendimiento
-
- Tiempo para interactuar
-
- Entendiendo la latencia
-
- La latencia es la cantidad de tiempo que se tarda entre realizar una solicitud de un recurso y recibir el primer byte del recurso solicitado. Este artículo explica qué es la latencia, cómo afecta el rendimiento y cómo medir y mejorar la latencia.
-
- Entendiendo ancho de banda
-
-
-
El ancho de banda es la cantidad de datos (medidos en Mbps o Kbps) que uno puede enviar por segundo. Este artículo explica la función del ancho de banda en las aplicaciones de Internet ricas en elementos multimedia, cómo puede medirlo y cómo puede optimizar las aplicaciones para aprovechar al máximo el ancho de banda disponible.
-
-
- HTTP/2 y tu
-
- La capa de transporte, es decir, HTTP, es absolutamente esencial para el funcionamiento de la web, y solo recientemente se ha visto una actualización importante en la forma de HTTP/2. Viendolo de otra forma HTTP/2 proporciona muchas mejoras de rendimiento y ventajas sobre su predecesor, pero también cambia el panorama. En este artículo, aprenderá lo que HTTP/2 hace por usted, y cómo ajustar su aplicación para que vaya más allá.
-
- El papel de TLS en el rendimiento
-
- TLS o HTTPS, como solemos llamarlo, es crucial para crear experiencias de usuario seguras. Si bien el hardware ha reducido los impactos negativos que TLS ha tenido en el rendimiento del servidor, todavía representa una porción sustancial del tiempo que pasamos esperando que los navegadores se conecten a los servidores. Este artículo explica el proceso de reconocimiento de TLS y ofrece algunos consejos para reducir este tiempo, como el grapado OCSP, los encabezados de precarga de HSTS y el posible papel de las sugerencias de recursos en el enmascaramiento de la latencia TLS para terceros.
-
-
- Leyendo gráficos de rendimientos
- Las herramientas del desarrollador proporcionan información sobre el rendimiento, la memoria y las solicitudes de red. Saber cómo leer los cuadros de cascada, los árboles de llamadas, los trazos, los gráficos de llamas y las asignaciones de memoria en las herramientas de desarrollo de su navegador lo ayudará a comprender los cuadros de cascada y de llama en otras herramientas de rendimiento.
- Analizando paquetes de JavaScript
- Sin duda, JavaScript es una gran parte del desarrollo web moderno. Si bien siempre debemos esforzarnos por reducir la cantidad de JavaScript que se utiliza en nuestas aplicaciones, puede ser difícil saber dónde comenzar. En esta guía, le mostraremos cómo analizar los paquetes de scripts de su aplicación, para que sepa qué está utilizando y cómo detectar si su aplicación contiene scripts duplicados entre paquetes.
-
-
- Carga diferida
- No siempre es necesario cargar todos los activos de aplicaciones web en la carga de la página inicial. La carga diferida es diferir la carga de elementos en una página, como scripts, imágenes, etc., para un momento posterior, cuando esos elementos son realmente necesarios.
-
-
-
-
- Carga diferida de JavaScript con import()
- El término "carga diferida" a menudo se refiere a técnicas de aplazamiento de carga para elementos que no se muestran en la vista inicial de la página solo cuando el usuario se desplaza hacia esos elementos en la página. Ahora hay características nativas para cargar JavaScript! En esta guía, hablaremos sobre el compando import() de carga dinamica, una nueva función del navegador, que carga un módulo de JavaScript a pedido.
- Controlar la entrega de recursos con sugerencias de recursos
- Los navegadores a menudo saben mejor que nosotros cuando se trata de la priorización y la entrega de recursos, pero están lejos de ser clarividentes. Las características nativas del navegador nos permiten sugerirle al navegador cuándo debe conectarse a otro servidor, o precargar un recurso antes de que el navegador sepa que lo necesita. Cuando se usa juiciosamente, esto puede hacer que la experiencia rápida parezca aún más rápida. En este artículo, cubrimos las características nativas del navegador como rel = preconnect, rel = dns-prefetch, rel = prefetch y rel = precarga, y cómo usarlas para su ventaja.
-
-
-Documentacion adicional
-
-
- Caso de negocio para rendimiento web
-
- Usted sabe que el rendimiento web es importante, pero ¿cómo convencer a los clientes y a la administrativos para que inviertan en el rendimiento y lo conviertan en una prioridad? En este artículo, discutiremos la creación de un caso de negocio claro para convencer a los tomadores de decisiones para que hagan la inversión.
-
- Presupuestos de rendimiento
- Las necesidades de mercadotecnia, diseño y ventas, y la experiencia del desarrollador, grandes anuncios, scripts de terceros y otras características que pueden ralentizar el rendimiento web. Para ayudar a establecer prioridades, es útil establecer un presupuesto de desempeño: un conjunto de restricciones que no deben excederse durante la fase de desarrollo. En este artículo, analizaremos la creación y el apego a un presupuesto de rendimiento.
- Lista de pendientes de rendimiento móvil
- Una lista de pendientes concisa de las consideraciones de rendimiento que afectan a los usuarios de redes móviles en dispositivos portátiles que funcionan con baterías.
- Optimización del rendimiento de inicio
- ¿Cuánto tiempo demora su aplicación en iniciarse? ¿Bloquea el navegador mientras se carga? Tómese el tiempo para asegurarse de que su aplicación se inicie bien. Este artículo ofrece consejos y sugerencias para ayudarle a alcanzar ese objetivo.
- Funciones de rendimiento en las herramientas de desarrollo
- This section provides information on how to use and understand the performance features in your developer tools, including Waterfall , Call Tree , and Flame Charts .
- Esta sección proporciona información sobre cómo utilizar y comprender las funciones de rendimiento en sus herramientas de desarrollador, incluidos gráficos de cascada , árbol de llamadas y gráficos de llamas
-
-
-
-
- Entendiendo la latencia
-
- La latencia es la cantidad de tiempo que se tarda entre realizar una solicitud de un recurso y recibir el primer byte del recurso solicitado. Este artículo explica qué es la latencia, cómo afecta el rendimiento y cómo medir y mejorar la latencia.
-
- Lista de control de rendimiento web
- Una lista de verificación del rendimiento de las funciones que se deben tener en cuenta al desarrollar aplicaciones con enlaces a tutoriales sobre cómo implementar cada una de ellas, incluye service workers, diagnóstico de problemas de rendimiento, mejores prácticas de carga de fuentes, sugerencias para los clientes, creación de animaciones optimizadas, etc.
-
-
-
-Rendimiento de aplicaciones
-
-
- Fundamentos de rendimiento
- Una visión general del rendimiento de las aplicaciones web, qué es, cómo el navegador ayuda a mejorarlo, y qué herramientas y procesos puede utilizar para probar y mejorarlo aún más.
- Optimizando el rendimiento de inicio
- Consejos y sugerencias para ayudarlo a mejorar el rendimiento de inicio, tanto al escribir una nueva aplicación como al migrar una aplicación de otra plataforma a la Web.
- Profiling con el profiler integrado
- Aprenda como rastrear el performance de las aplicaciones con el profiler integrado de Firefox.
- Rendimiento en animaciones con CSS y con JavaScript
- Las animaciones son críticas para una experiencia de usuario placentera. Este artículo analiza las diferencias de rendimiento entre las animaciones basadas en CSS y JavaScript.
-
-
-{{LandingPageListSubpages}}
-
-Ver También
-
-HTML
-
-
-
-CSS
-
-
- will-change
- GPU v CPU
- Midiendo disposición del diseño
- Mejores practicas en carga de fuentes
-
-
-JavaScript
-
-
-
-APIs
-
-
-
-Headers
-
-
-
-Tools
-
-
-
-Additional Metrics
-
-
- Speed Index and Perceptual Speed Index
-
-
-Best Practices
-
-
diff --git a/files/es/web/performance/index.md b/files/es/web/performance/index.md
new file mode 100644
index 00000000000000..550c3f7214384a
--- /dev/null
+++ b/files/es/web/performance/index.md
@@ -0,0 +1,183 @@
+---
+title: Rendimiento Web
+slug: Web/Performance
+tags:
+ - Mejores Practicas
+ - Pagina de Inicio
+ - Rendimiento
+ - Rendimiento Web
+translation_of: Web/Performance
+---
+El rendimiento web es la medición objetiva y la experiencia percibida por el usuario del tiempo de carga y el tiempo de ejecución; es el tiempo que tarda un sitio en cargarse, ser interactivo y responsivo, y que tan fluido es el contenido durante las interacciones del usuario: ¿el desplazamiento es suave? ¿Se puede hacer clic en los botones? ¿Las ventanas emergentes se abren rápidamente y se animan fluidamente al hacerlo? El rendimiento web incluye mediciones objetivas como el tiempo de carga, cuadros por segundo y tiempo para interactuar y subjetivas de cuánto tiempo se sintió que tardó en cargarse el contenido.
+
+Cuanto más tarde un sitio en responder, más usuarios abandonarán el sitio. Es importante minimizar los tiempos de carga y respuesta, y agregar funciones adicionales para ocultar la latencia al hacer que la experiencia sea lo más accesible e interactiva posible, tan pronto como sea posible, mientras se carga de forma asíncrona en las partes que más tarda la experiencia.
+
+Existen herramientas, API y mejores prácticas que nos ayudan a medir y mejorar el rendimiento web. Los cubrimos en esta sección.
+
+## Tutoriales claves
+
+El [Área de aprendizaje de Rendimiento](/es/docs/Learn/Performance) Web de MDN contiene tutoriales modernos y actualizados que cubren aspectos esenciales del rendimiento:
+
+[¿Qué es el rendimiento web?](/es/docs/Learn/Performance/What_is_web_performance)
+
+Este artículo inicia el módulo con un buen vistazo a lo que realmente es el rendimiento: esto incluye las herramientas, métricas, API, redes y grupos de personas que debemos tener en cuenta al pensar en el rendimiento y cómo podemos hacer que el rendimiento sea parte de nuestro flujo de trabajo de desarrollo web.
+
+- [Ruta crítica de renderización](/es/docs/Web/Performance/Critical_rendering_path)
+ - : Algunos atributos y el orden en los origenes del código pueden afectar el rendimiento o su sitio web. Al minimizar el número de nodos del DOM, asegurándose de utilizar el mejor orden y los atributos para el contenido incluido, como estilos, código, elementos multimedia y código de terceros, puede mejorar drásticamente la experiencia del usuario. Este artículo analiza en detalle cómo el HTML y la ruta crítica de renderización pueden usarse para garantizar el máximo rendimiento.
+- [Mejores prácticas de rendimiento de Javascript](/es/docs/Learn/Performance/JavaScript)
+
+ - : JavaScript, cuando se usa correctamente, puede permitir experiencias web interactivas e inmersivas ... o puede dañar significativamente el tiempo de descarga, el tiempo de reproducción, el rendimiento de la aplicación, la duración de la batería y la experiencia del usuario. Este artículo describe algunas de las mejores prácticas de JavaScript que pueden garantizar que, incluso el contenido más complejo, tenga el mejor rendimiento posible.
+
+- [Multimedia: Images and Video](/es/docs/Learn/Performance/Multimedia)
+ - : Con frecuencia, la optimización de elementos multimedia es la forma más usada de hacer rendimiento web. Es posible servir diferentes archivos multimedia según el tipo de navegador, el tamaño y la densidad de píxeles de cada usuario. Consejos adicionales, como eliminar el sonido en imágenes de fondo, pueden mejorar aún más el rendimiento. En este artículo, analizamos el impacto que el video, el audio y el contenido de imagen tienen en el rendimiento y los métodos para garantizar que su impacto sea el mínimo posible.
+- [Características de rendimiento CSS](/es/docs/Learn/Performance/CSS_performance)
+ - : CSS puede tener un enfoque de optimización menos importante para mejorar el rendimiento, pero hay algunas características de CSS que afectan el rendimiento más que otras. En este artículo, analizamos algunas propiedades de CSS que afectan el rendimiento y sugerimos formas de manejar los estilos para garantizar que el rendimiento no se vea afectado negativamente.
+- [¿Como los usuarios perciben el rendimiento?](/es/docs/Learn/Performance/perceived_performance)
+ - : Más importante que la rapidez de su sitio web en milisegundos, es la rapidez con la que los usuarios perciben su sitio. El tiempo de carga, el tiempo en ocio de la página, la capacidad de respuesta a la interacción del usuario y lo fluido de los desplazamientos y otras animaciones afectan estas percepciones. En este artículo, analizamos las diversas métricas de carga, animación y métricas de capacidad de respuesta, junto con las mejores prácticas para mejorar la percepción del usuario, y de los tiempos reales.
+- [Conceptos básicos de rendimiento web](/es/docs/Learn/Performance/web_performance_basics)
+ - : Además de los componentes HTML, CSS, JavaScript y archivos multimedia, hay características que pueden hacer que las aplicaciones sean más lentas y características que pueden hacer que las aplicaciones sean subjetivamente y objetivamente más rápidas. Existen muchas API, herramientas de desarrollo, mejores prácticas y malas prácticas relacionadas con el rendimiento web. Aquí presentaremos muchas de estas funciones al nivel básico y proporcionaremos enlaces a temas más profundos para mejorar el rendimiento en cada tema.
+- [Rendimiento movil](/es/docs/Learn/Performance/Mobile)
+ - : Dado que el acceso a la web en dispositivos móviles es tan popular y que todas las plataformas móviles tienen navegadores web completos, pero es posible que el ancho de banda, la CPU y la vida útil de la batería sean limitados, es importante considerar el rendimiento de su contenido web en estas plataformas. Este artículo analiza las consideraciones de rendimiento específicas para dispositivos móviles.
+- Llenando la página
+ - : El cliente realiza una solicitud HTTP y, con suerte, unos segundos después, aparece el sitio. Mostrar el contenido implica ejecutar JavaScript, posiblemente modificando el DOM, calcular estilos, calcular la disposición del diseño y, finalmente, representar el contenido, lo que implica pintar y componer, y puede involucrar la aceleración de la GPU en un hilo de ejecución separado.
+ .
+- Cuellos de botella en rendimiento
+ - : Empty
+- [Tiempo para interactuar](/es/docs/Web/Performance/time_to_interactive)
+ - : Empty
+- [Entendiendo la latencia](/es/docs/Learn/Performance/Latency)
+ - : La latencia es la cantidad de tiempo que se tarda entre realizar una solicitud de un recurso y recibir el primer byte del recurso solicitado. Este artículo explica qué es la latencia, cómo afecta el rendimiento y cómo medir y mejorar la latencia.
+- Entendiendo ancho de banda
+ - : El ancho de banda es la cantidad de datos (medidos en Mbps o Kbps) que uno puede enviar por segundo. Este artículo explica la función del ancho de banda en las aplicaciones de Internet ricas en elementos multimedia, cómo puede medirlo y cómo puede optimizar las aplicaciones para aprovechar al máximo el ancho de banda disponible.
+- [HTTP/2 y tu](/es/docs/Learn/Performance/HTTP2)
+ - : La capa de transporte, es decir, HTTP, es absolutamente esencial para el funcionamiento de la web, y solo recientemente se ha visto una actualización importante en la forma de HTTP/2. Viendolo de otra forma HTTP/2 proporciona muchas mejoras de rendimiento y ventajas sobre su predecesor, pero también cambia el panorama. En este artículo, aprenderá lo que HTTP/2 hace por usted, y cómo ajustar su aplicación para que vaya más allá.
+- El papel de TLS en el rendimiento
+
+ - : TLS o HTTPS, como solemos llamarlo, es crucial para crear experiencias de usuario seguras. Si bien el hardware ha reducido los impactos negativos que TLS ha tenido en el rendimiento del servidor, todavía representa una porción sustancial del tiempo que pasamos esperando que los navegadores se conecten a los servidores. Este artículo explica el proceso de reconocimiento de TLS y ofrece algunos consejos para reducir este tiempo, como el grapado OCSP, los encabezados de precarga de HSTS y el posible papel de las sugerencias de recursos en el enmascaramiento de la latencia TLS para terceros.
+
+- Leyendo gráficos de rendimientos
+ - : Las herramientas del desarrollador proporcionan información sobre el rendimiento, la memoria y las solicitudes de red. Saber cómo leer los cuadros de cascada, los árboles de llamadas, los trazos, los gráficos de llamas y las asignaciones de memoria en las herramientas de desarrollo de su navegador lo ayudará a comprender los cuadros de cascada y de llama en otras herramientas de rendimiento.
+- Analizando paquetes de JavaScript
+ - : Sin duda, JavaScript es una gran parte del desarrollo web moderno. Si bien siempre debemos esforzarnos por reducir la cantidad de JavaScript que se utiliza en nuestas aplicaciones, puede ser difícil saber dónde comenzar. En esta guía, le mostraremos cómo analizar los paquetes de scripts de su aplicación, para que sepa qué está utilizando y cómo detectar si su aplicación contiene scripts duplicados entre paquetes.
+- [Carga diferida](/es/docs/Web/Performance/Lazy_loading)
+ - : No siempre es necesario cargar todos los activos de aplicaciones web en la carga de la página inicial. La carga diferida es diferir la carga de elementos en una página, como scripts, imágenes, etc., para un momento posterior, cuando esos elementos son realmente necesarios.
+
+
+
+- Carga diferida de JavaScript con import()
+ - : El término "carga diferida" a menudo se refiere a técnicas de aplazamiento de carga para elementos que no se muestran en la vista inicial de la página solo cuando el usuario se desplaza hacia esos elementos en la página. Ahora hay características nativas para cargar JavaScript! En esta guía, hablaremos sobre el compando import() de carga dinamica, una nueva función del navegador, que carga un módulo de JavaScript a pedido.
+- [Controlar la entrega de recursos con sugerencias de recursos](/es/docs/Web/Performance/Controlling_resource_delivery_with_resource_hints)
+ - : Los navegadores a menudo saben mejor que nosotros cuando se trata de la priorización y la entrega de recursos, pero están lejos de ser clarividentes. Las características nativas del navegador nos permiten sugerirle al navegador cuándo debe conectarse a otro servidor, o precargar un recurso antes de que el navegador sepa que lo necesita. Cuando se usa juiciosamente, esto puede hacer que la experiencia rápida parezca aún más rápida. En este artículo, cubrimos las características nativas del navegador como rel = preconnect, rel = dns-prefetch, rel = prefetch y rel = precarga, y cómo usarlas para su ventaja.
+
+## Documentacion adicional
+
+- [Caso de negocio para rendimiento web](/es/docs/Web/Performance/business_case_for_performance)
+ - : Usted sabe que el rendimiento web es importante, pero ¿cómo convencer a los clientes y a la administrativos para que inviertan en el rendimiento y lo conviertan en una prioridad? En este artículo, discutiremos la creación de un caso de negocio claro para convencer a los tomadores de decisiones para que hagan la inversión.
+- [Presupuestos de rendimiento](/es/docs/Web/Performance/Performance_budget)
+ - : Las necesidades de mercadotecnia, diseño y ventas, y la experiencia del desarrollador, grandes anuncios, scripts de terceros y otras características que pueden ralentizar el rendimiento web. Para ayudar a establecer prioridades, es útil establecer un presupuesto de desempeño: un conjunto de restricciones que no deben excederse durante la fase de desarrollo. En este artículo, analizaremos la creación y el apego a un presupuesto de rendimiento.
+- [Lista de pendientes de rendimiento móvil](/es/docs/Web/Performance/Mobile_performance_checklist)
+ - : Una lista de pendientes concisa de las consideraciones de rendimiento que afectan a los usuarios de redes móviles en dispositivos portátiles que funcionan con baterías.
+- [Optimización del rendimiento de inicio](/es/docs/Web/Apps/Fundamentals/Performance/Optimizing_startup_performance)
+ - : ¿Cuánto tiempo demora su aplicación en iniciarse? ¿Bloquea el navegador mientras se carga? Tómese el tiempo para asegurarse de que su aplicación se inicie bien. Este artículo ofrece consejos y sugerencias para ayudarle a alcanzar ese objetivo.
+- [Funciones de rendimiento en las herramientas de desarrollo](/es/docs/Tools/Performance)
+ - : This section provides information on how to use and understand the performance features in your developer tools, including [Waterfall](/es/docs/Tools/Performance/Waterfall), [Call Tree](/es/docs/Tools/Performance/Call_Tree), and [Flame Charts](/es/docs/Tools/Performance/Flame_Chart).
+ Esta sección proporciona información sobre cómo utilizar y comprender las funciones de rendimiento en sus herramientas de desarrollador, incluidos [gráficos de cascada](/es/docs/Tools/Performance/Waterfall), [árbol de llamadas](/es/docs/Tools/Performance/Call_Tree) y [gráficos de llamas](/es/docs/Tools/Performance/Flame_Chart)
+
+
+
+- [Entendiendo la latencia](/es/docs/Learn/Performance/Latency)
+ - : La latencia es la cantidad de tiempo que se tarda entre realizar una solicitud de un recurso y recibir el primer byte del recurso solicitado. Este artículo explica qué es la latencia, cómo afecta el rendimiento y cómo medir y mejorar la latencia.
+- [Lista de control de rendimiento web](/es/docs/Web/Performance/Checklist)
+ - : Una lista de verificación del rendimiento de las funciones que se deben tener en cuenta al desarrollar aplicaciones con enlaces a tutoriales sobre cómo implementar cada una de ellas, incluye service workers, diagnóstico de problemas de rendimiento, mejores prácticas de carga de fuentes, sugerencias para los clientes, creación de animaciones optimizadas, etc.
+
+### Rendimiento de aplicaciones
+
+- [Fundamentos de rendimiento](/en-US/Apps/Developing/Performance/Performance_fundamentals)
+ - : Una visión general del rendimiento de las aplicaciones web, qué es, cómo el navegador ayuda a mejorarlo, y qué herramientas y procesos puede utilizar para probar y mejorarlo aún más.
+- [Optimizando el rendimiento de inicio](/en-US/Apps/Developing/Performance/Optimizing_startup_performance)
+ - : Consejos y sugerencias para ayudarlo a mejorar el rendimiento de inicio, tanto al escribir una nueva aplicación como al migrar una aplicación de otra plataforma a la Web.
+- [Profiling con el profiler integrado](/es/docs/Performance/Profiling_with_the_Built-in_Profiler)
+ - : Aprenda como rastrear el performance de las aplicaciones con el profiler integrado de Firefox.
+- [Rendimiento en animaciones con CSS y con JavaScript](/en-US/Apps/Build/Performance/CSS_JavaScript_animation_performance)
+ - : Las animaciones son críticas para una experiencia de usuario placentera. Este artículo analiza las diferencias de rendimiento entre las animaciones basadas en CSS y JavaScript.
+
+{{LandingPageListSubpages}}
+
+## Ver También
+
+HTML
+
+- [El elemento ``](/es/docs/Web/HTML/Element/picture)
+- [El elemento ``](/es/docs/Web/HTML/Element/video)
+- [El elemento ``](/es/docs/Web/HTML/Element/source)
+- [El atributo ` srcset`](/es/docs/Web/HTML/Element/img#Attributes)
+
+ - [Imagenes responsivas](/es/docs/Learn/HTML/Multimedia_and_embedding/Responsive_images)
+
+- [Precargando contenido con `rel="preload"`](/es/docs/Web/HTML/Preloading_content) - [(https://w3c.github.io/preload/](https://w3c.github.io/preload/))
+
+CSS
+
+- [will-change](/es/docs/Web/CSS/will-change)
+- GPU v CPU
+- Midiendo disposición del diseño
+- Mejores practicas en carga de fuentes
+
+JavaScript
+
+- [DOMContentLoaded](/es/docs/Web/Events/DOMContentLoaded)
+- [Recolector de basura](/es/docs/Glossary/Garbage_collection)
+- [requestAnimationFrame](/es/docs/Web/API/window/requestAnimationFrame)
+
+APIs
+
+- [Performance API](/es/docs/Web/API/Performance_API)
+- [Navigation Timing API](/es/docs/Web/API/Navigation_timing_API)
+- [Media Capabilities API](/es/docs/Web/API/Media_Capabilities_API/Using_the_Media_Capabilities_API)
+- [Network Information API](/es/docs/Web/API/Network_Information_API)
+- [PerformanceNavigationTiming](/es/docs/Web/API/PerformanceNavigationTiming)
+- [Battery Status API](/es/docs/Web/API/Battery_Status_API)
+- [Navigator.deviceMemory](/es/docs/Web/API/Navigator/deviceMemory)
+- [Intersection Observer](/es/docs/Web/API/Intersection_Observer_API)
+- [Using the User Timing AP](/es/docs/Web/API/User_Timing_API/Using_the_User_Timing_API)I
+- [Long Tasks API](/es/docs/Web/API/Long_Tasks_API)
+- [High Resolution Timing API](/es/docs/Web/API/DOMHighResTimeStamp) ([https://w3c.github.io/hr-time/)](https://w3c.github.io/hr-time/)
+- [Resource Timing API](/es/docs/Web/API/Resource_Timing_API/Using_the_Resource_Timing_API)
+- [Page Visibility](/es/docs/Web/API/Page_Visibility_API)
+- [Cooperative Scheduling of Background Tasks API](/es/docs/Web/API/Background_Tasks_API)
+
+ - [requestIdleCallback()](/es/docs/Web/API/Window/requestIdleCallback)
+
+- [Beacon API](/es/docs/Web/API/Beacon_API/Using_the_Beacon_API)
+- Resource Hints - [dns-prefetch](/es/docs/Web/HTTP/Headers/X-DNS-Prefetch-Control), preconnect, [prefetch](/es/docs/Web/HTTP/Link_prefetching_FAQ), and prerender
+- [Fetchevent.navigationPreload](/es/docs/Web/API/FetchEvent/navigationPreload)
+- [Performance Server Timing API](/es/docs/Web/API/PerformanceServerTiming)
+
+Headers
+
+- [Content-encoding](/es/docs/Web/HTTP/Headers/Content-Encoding)
+- HTTP/2
+- [gZip](/es/docs/Glossary/GZip_compression)
+- Client Hints
+
+Tools
+
+- [Performance in Firefox Developer Tools](/es/docs/Tools/Performance)
+- Flame charts
+- the Network panel
+- waterfall charts
+
+Additional Metrics
+
+- Speed Index and Perceptual Speed Index
+
+Best Practices
+
+- [Using Service Workers](/es/docs/Web/API/Service_Worker_API/Using_Service_Workers)
+- [Using Web Workers](/es/docs/Web/API/Web_Workers_API/Using_web_workers)
+
+ - [Web Workers API](/es/docs/Web/API/Web_Workers_API)
+
+- [PWA](/es/docs/Web/Apps/Progressive/Offline_Service_workers)
+- [Caching](/es/docs/Web/HTTP/Caching)
+- Content Delivery Networks (CDN)
diff --git a/files/es/web/performance/optimizing_startup_performance/index.html b/files/es/web/performance/optimizing_startup_performance/index.html
deleted file mode 100644
index f84a9cf8e7518a..00000000000000
--- a/files/es/web/performance/optimizing_startup_performance/index.html
+++ /dev/null
@@ -1,96 +0,0 @@
----
-title: Mejorando el Rendimiento Inicial
-slug: Web/Performance/Optimizing_startup_performance
-tags:
- - Apps
- - Performance
- - Rendimiento
-translation_of: Web/Performance/Optimizing_startup_performance
-original_slug: Web/Performance/mejorando_rendimienot_inicial
----
-
-
Un aspecto que a menudo se pasa por alto en el desarrollo de software de aplicaciones, incluso entre aquellos enfocados en la optimización del rendimiento, es el rendimiento inicial. ¿Cuánto tiempo demora su aplicación en iniciarse? ¿Parece que se bloquea el dispositivo o el navegador del usuario no responde mientras se carga la aplicación? Eso hace que los usuarios se preocupen de que su aplicación haya fallado, o de que algo anda mal. Siempre es una buena idea invertir tiempo para asegurarse de que la aplicación se inicie de manera correcta. Este artículo ofrece consejos y sugerencias para ayudar a lograr ese objetivo, tanto al escribir una nueva aplicación como al migrar una aplicación de otra plataforma a la Web.
-
-
-Empezando Bien
-
-Independientemente de la plataforma, siempre es una buena idea comenzar lo más rápido posible. Ya que es un problema universal, no nos vamos a enfocar demasiado en esto. En su lugar, vamos a ver un problema más importante al crear aplicaciones web: comenzar de la manera más asíncrona posible. Eso significa no ejecutar todo el código inicial en un mismo controlador de eventos en el hilo principal de la aplicación.
-
-En su lugar, es preferible que el código de la aplicación cree un Web worker que haga todo lo posible en un hilo de fondo (por ejemplo, para obtener y procesar datos). Luego, todo lo que debe ejecutarse en el hilo principal (como responder a los eventos del usuario o desplegar la interfaz gráfica) debe dividirse en tareas pequeñas para que el ciclo de eventos continúe mientras la aplicación inicia. Esto evitará que la aplicación, el navegador y / o el dispositivo parezcan haber fallado.
-
-¿Por qué es importante ser asíncrono? Aparte de las razones sugeridas anteriormente, considere el impacto de una página o interfaz de usuario que no responde. El usuario no puede cerrar la aplicación si la lanzó por error. Si la aplicación se ejecuta en un navegador, es posible que el usuario obtenga una notificación diciendo "la aplicación no responde". Presentar algún tipo de interfaz, como una barra de progreso, para que el usuario sepa cuánto tiempo más tendrá que esperar mientras se inicia la aplicación es mejor que una interfaz incapaz de responder a las acciones del usuario.
-
-Trabajar con Rendimiento en Mente
-
-Si está comenzando un proyecto de cero, generalmente es más sencillo escribir todo de la manera correcta, hacer que el código sea escrito para trabajar de manera asíncrona en mente. Hacer los cálculos iniciales en subprocesos en segundo plano cuando sea posible, crear tareas cortas para acelerar el tiempo de ejecución de los eventos de subprocesos importantes. Empezar a pintar en pantalla la interfaz gráfica para que el usuario sepa qué algo pasando y cuánto tiempo estará esperando. En teoría, de todos modos, debería ser bastante fácil diseñar una aplicación nueva para que inicie bien.
-
-Por otro lado, migrar una aplicación existente a la Web puede ser una tarea más complicada. Por ejemplo, una aplicación de escritorio no necesita escribirse de forma asíncrona porque generalmente el sistema operativo se encarga de eso, o aplicación que se está ejecutando actualmente es lo único que importa, dependiendo del entorno operativo. La aplicación original puede tener un ciclo principal que puede modificarse para operar de forma asíncrona (intentando ejecutar cada iteración del ciclo principal por separado); el inicio es a menudo un procedimiento monolítico continuo que puede ir actualizando de manera periódica la interfaz gráfica para indicar progreso.
-
-Si bien se puede usar los Web workers para ejecutar fragmentos de forma asíncrona códigos JavaScript muy grandes y/o lentos, hay una gran advertencia: Web workers no tienen accesso a WebGL o audio, y no pueden enviar mensajes síncronos al hilo principal, por lo que no se puede hacer un proxy de esos APIs al hilo principal. Todo esto significa que, a menos que se pueda extraer fácilmente los trozos de "cálculo puro" del proceso de inicio en Web workers, se va terminar teniendo que ejecutar la mayor parte o la totalidad del código de inicio en el hilo principal.
-
-Sin embargo, incluso código como ese puede ser hecho asíncrono, con un poco de trabajo.
-
-Trabajando de Manera Asíncrona
-
-Algunas sugerencias que se pueden aplicar para hacer que el proceso de inicio de la aplicación se lo más asíncrona posible, sin importar si la aplicación es nueva o si se está migrando una que ya existe, son las siguientes:
-
-
- Usar los atributos {{ htmlattrxref("defer") }} o {{ htmlattrxref("async") }} en los tag de script que la aplicación Web necesita. Esto permite que el interpretador de HTML no se vea forzado a esperar a que el código se haya descargado y ejecutado para continuar.
- Si se necesita descodificar archivos de recurso (por ejemplo, descodificar archivos JPEG files y convertirlos en datos de textura para ser usados luegos en WebGL), este es un buen caso de uso para Web workers.
- When dealing with data supported by the browser (por ejemplo, descodificar images), es mejor utilizar los descodificadores includos en el navegador o el dispositivo en lugar de utilizar un propio migrado del código existente. El descodificador incluído en el navegador es muy probablemente más rápido, y reduce la cantidad de código que se va a necesitar para iniciar la aplicación. Además, es posible que el navegador automáticamente pueda ejecutar en paralelo estos descodificadores.
- Cualquier procesamiento de información que puede ejecutarse en paralelo debe ser ejecutada en paralelo. No trabaje con porciones de información de manera sequencial; es mejor ejecutarlas en paralelo, siempre que sea posible.
- No incluya archivos de JavaScript o CSS que no son necesarios para la ruta crítica de iniciar la aplicación web. Cargue los recursos adicionales cuando sean necesarios.
- Reduzca el tamaño de sus archivos JavaScript. Intente enviar la versión minificada de sus archivos a los navegadores y utilice mecanismos de compresión de recursos como Gzip o Brotli.
- Utilice directivas (como preload, prefetch, preconnect) para ayudar al navegador a optimizar la carga de los recursos.
-
-
-A mayor trabajo que se pueda realizar de manera asíncrona, la aplicación va a obtener mayor ventaja de procesadores multinúcleos.
-
-Problemas de Migración
-
-
-
-Una vez que se realiza la carga inicial y el código principal de la aplicación comienza a ejecutarse, es posible que su aplicación esté programada para trabajar en un solo hilo, especialmente cuando es una migración. Lo más importante que se puede hacer para tratar de ayudar con el proceso de inicio del código principal es refactorizar el código en partes pequeñas que se pueden ejecutrar en trozos intercalados en múltiples llamadas del ciclo principal de su aplicación, para que el hilo principal pueda manejar las interacciones del usuario y similares.
-
-Emscripten proporciona una API para ayudar con esta refactorización; por ejemplo, puede usar emscripten_push_main_loop_blocker () para establecer una función que se ejecutará antes de que se permita que el hilo principal continúe. Al establecer una cola de funciones a ser llamadas en secuencia, puede administrar más fácilmente los bits de código en ejecución sin bloquear el hilo principal.
-
-Eso deja, sin embargo, el problema de tener que refactorizar su código existente para que realmente funcione de esa manera. Eso puede llevar algún tiempo.
-
-
-
-¿Que tan asíncrono debo ser?
-
-Vale la pena tener en cuenta que la mayoría de los navegadores suelen comenzar a quejarse de que un script está bloqueando el hilo principal aproximadamente a los 10 segundos. Idealmente, la aplicación no debería bloquear esa cantidad de tiempo, pero mientras se mantenga debajo de eso, debería estar bien. Sin embargo, tenga en cuenta que si alguien tiene una computadora más antigua y más lenta que la suya, ¡puede experimentar retrasos más prolongados que usted!
-
-Otras Sugerencias
-
-Hay otras cosas además de ir asíncrono, que pueden ayudarlo a mejorar el tiempo de inicio de su aplicación. Estas son algunos de ellos:
-
-
- Tiempo de Descarga
- Tenga en cuenta cuánto tiempo le llevará al usuario descargar los datos de su juego. Si su juego es realmente grande, muy popular o si tiene que volver a descargar contenido con frecuencia, debe intentar tener un servidor de alojamiento lo más rápido posible. También debe considerar utilizar mecanismos de compresión como Gzip o Brotli para que sean lo más pequeños posible.
- Uso del GPU
- La compilación de sombras y la carga de texturas en el GPU pueden llevar tiempo, especialmente para los juegos realmente complejos. Si bien esto también ocurre con los juegos nativos (que no son de la Web), todavía puede ser bastante molesto. Evita hacer esto sin mantener informado al usuario de que el juego, de hecho, todavía se está iniciando.
- Tamaño de los Datos
- Haz tu mejor esfuerzo para optimizar el tamaño de tus datos de juego; los archivos de menor nivel se descargarán y procesarán más rápido que los más grandes.
- Factores Subjetivos
- Cualquier cosa que pueda hacer para ayudar a mantener al usuario involucrado durante el proceso de inicio ayudará a que el tiempo parezca más rápido. Para los juegos, considere la posibilidad de reproducir música de fondo o mostrar una bonita pantalla de bienvenida. Entre cada cálculo, actualice su indicador de progreso, realice cambios en la pantalla o cualquier otra cosa que pueda hacer para ayudar al usuario a sentir que su aplicación está haciendo algo en lugar de quedarse sentado tranquilamente.
-
-
-También Podría Interesarte
-
-
-
-
-
-
diff --git a/files/es/web/performance/optimizing_startup_performance/index.md b/files/es/web/performance/optimizing_startup_performance/index.md
new file mode 100644
index 00000000000000..d74d3c34b52570
--- /dev/null
+++ b/files/es/web/performance/optimizing_startup_performance/index.md
@@ -0,0 +1,78 @@
+---
+title: Mejorando el Rendimiento Inicial
+slug: Web/Performance/Optimizing_startup_performance
+tags:
+ - Apps
+ - Performance
+ - Rendimiento
+translation_of: Web/Performance/Optimizing_startup_performance
+original_slug: Web/Performance/mejorando_rendimienot_inicial
+---
+Un aspecto que a menudo se pasa por alto en el desarrollo de software de aplicaciones, incluso entre aquellos enfocados en la optimización del rendimiento, es el rendimiento inicial. ¿Cuánto tiempo demora su aplicación en iniciarse? ¿Parece que se bloquea el dispositivo o el navegador del usuario no responde mientras se carga la aplicación? Eso hace que los usuarios se preocupen de que su aplicación haya fallado, o de que algo anda mal. Siempre es una buena idea invertir tiempo para asegurarse de que la aplicación se inicie de manera correcta. Este artículo ofrece consejos y sugerencias para ayudar a lograr ese objetivo, tanto al escribir una nueva aplicación como al migrar una aplicación de otra plataforma a la Web.
+
+## Empezando Bien
+
+Independientemente de la plataforma, siempre es una buena idea comenzar lo **más rápido** posible. Ya que es un problema universal, no nos vamos a enfocar demasiado en esto. En su lugar, vamos a ver un problema más importante al crear aplicaciones web: comenzar de la manera más **asíncrona** posible. Eso significa no ejecutar todo el código inicial en un mismo controlador de eventos en el hilo principal de la aplicación.
+
+En su lugar, es preferible que el código de la aplicación cree un [Web worker](es/docs/Web/Guide/Performance/Usando_web_workers) que haga todo lo posible en un hilo de fondo (por ejemplo, para obtener y procesar datos). Luego, todo lo que debe ejecutarse en el hilo principal (como responder a los eventos del usuario o desplegar la interfaz gráfica) debe dividirse en tareas pequeñas para que el ciclo de eventos continúe mientras la aplicación inicia. Esto evitará que la aplicación, el navegador y / o el dispositivo parezcan haber fallado.
+
+¿Por qué es importante ser asíncrono? Aparte de las razones sugeridas anteriormente, considere el impacto de una página o interfaz de usuario que no responde. El usuario no puede cerrar la aplicación si la lanzó por error. Si la aplicación se ejecuta en un navegador, es posible que el usuario obtenga una notificación diciendo "la aplicación no responde". Presentar algún tipo de interfaz, como una barra de progreso, para que el usuario sepa cuánto tiempo más tendrá que esperar mientras se inicia la aplicación es mejor que una interfaz incapaz de responder a las acciones del usuario.
+
+## Trabajar con Rendimiento en Mente
+
+Si está comenzando un proyecto de cero, generalmente es más sencillo escribir todo de la manera correcta, hacer que el código sea escrito para trabajar de manera asíncrona en mente. Hacer los cálculos iniciales en subprocesos en segundo plano cuando sea posible, crear tareas cortas para acelerar el tiempo de ejecución de los eventos de subprocesos importantes. Empezar a pintar en pantalla la interfaz gráfica para que el usuario sepa qué algo pasando y cuánto tiempo estará esperando. En teoría, de todos modos, debería ser bastante fácil diseñar una aplicación nueva para que inicie bien.
+
+Por otro lado, migrar una aplicación existente a la Web puede ser una tarea más complicada. Por ejemplo, una aplicación de escritorio no necesita escribirse de forma asíncrona porque generalmente el sistema operativo se encarga de eso, o aplicación que se está ejecutando actualmente es lo único que importa, dependiendo del entorno operativo. La aplicación original puede tener un ciclo principal que puede modificarse para operar de forma asíncrona (intentando ejecutar cada iteración del ciclo principal por separado); el inicio es a menudo un procedimiento monolítico continuo que puede ir actualizando de manera periódica la interfaz gráfica para indicar progreso.
+
+Si bien se puede usar los [Web workers](es/docs/Web/Guide/Performance/Usando_web_workers)para ejecutar fragmentos de forma asíncrona códigos [JavaScript](/es/docs/JavaScript) muy grandes y/o lentos, hay una gran advertencia: Web workers no tienen accesso a [WebGL](/es/docs/Web/API/WebGL_API) o audio, y no pueden enviar mensajes síncronos al hilo principal, por lo que no se puede hacer un proxy de esos APIs al hilo principal. Todo esto significa que, a menos que se pueda extraer fácilmente los trozos de "cálculo puro" del proceso de inicio en Web workers, se va terminar teniendo que ejecutar la mayor parte o la totalidad del código de inicio en el hilo principal.
+
+Sin embargo, incluso código como ese puede ser hecho asíncrono, con un poco de trabajo.
+
+## Trabajando de Manera Asíncrona
+
+Algunas sugerencias que se pueden aplicar para hacer que el proceso de inicio de la aplicación se lo más asíncrona posible, sin importar si la aplicación es nueva o si se está migrando una que ya existe, son las siguientes:
+
+- Usar los atributos {{ htmlattrxref("defer") }} o {{ htmlattrxref("async") }} en los tag de script que la aplicación Web necesita. Esto permite que el interpretador de HTML no se vea forzado a esperar a que el código se haya descargado y ejecutado para continuar.
+- Si se necesita descodificar archivos de recurso (por ejemplo, descodificar archivos JPEG files y convertirlos en datos de textura para ser usados luegos en WebGL), este es un buen caso de uso para Web workers.
+- When dealing with data supported by the browser (por ejemplo, descodificar images), es mejor utilizar los descodificadores includos en el navegador o el dispositivo en lugar de utilizar un propio migrado del código existente. El descodificador incluído en el navegador es muy probablemente más rápido, y reduce la cantidad de código que se va a necesitar para iniciar la aplicación. Además, es posible que el navegador automáticamente pueda ejecutar en paralelo estos descodificadores.
+- Cualquier procesamiento de información que puede ejecutarse en paralelo debe ser ejecutada en paralelo. No trabaje con porciones de información de manera sequencial; es mejor ejecutarlas en paralelo, siempre que sea posible.
+- No incluya archivos de JavaScript o CSS que no son necesarios para la ruta crítica de iniciar la aplicación web. Cargue los recursos adicionales cuando sean necesarios.
+- Reduzca el tamaño de sus archivos JavaScript. Intente enviar la versión minificada de sus archivos a los navegadores y utilice mecanismos de compresión de recursos como Gzip o Brotli.
+- Utilice directivas (como preload, prefetch, preconnect) para ayudar al navegador a optimizar la carga de los recursos.
+
+A mayor trabajo que se pueda realizar de manera asíncrona, la aplicación va a obtener mayor ventaja de procesadores multinúcleos.
+
+### Problemas de Migración
+
+Una vez que se realiza la carga inicial y el código principal de la aplicación comienza a ejecutarse, es posible que su aplicación esté programada para trabajar en un solo hilo, especialmente cuando es una migración. Lo más importante que se puede hacer para tratar de ayudar con el proceso de inicio del código principal es refactorizar el código en partes pequeñas que se pueden ejecutrar en trozos intercalados en múltiples llamadas del ciclo principal de su aplicación, para que el hilo principal pueda manejar las interacciones del usuario y similares.
+
+Emscripten proporciona una API para ayudar con esta refactorización; por ejemplo, puede usar emscripten_push_main_loop_blocker () para establecer una función que se ejecutará antes de que se permita que el hilo principal continúe. Al establecer una cola de funciones a ser llamadas en secuencia, puede administrar más fácilmente los bits de código en ejecución sin bloquear el hilo principal.
+
+Eso deja, sin embargo, el problema de tener que refactorizar su código existente para que realmente funcione de esa manera. Eso puede llevar algún tiempo.
+
+### ¿Que tan asíncrono debo ser?
+
+Vale la pena tener en cuenta que la mayoría de los navegadores suelen comenzar a quejarse de que un script está bloqueando el hilo principal aproximadamente a los 10 segundos. Idealmente, la aplicación no debería bloquear esa cantidad de tiempo, pero mientras se mantenga debajo de eso, debería estar bien. Sin embargo, tenga en cuenta que si alguien tiene una computadora más antigua y más lenta que la suya, ¡puede experimentar retrasos más prolongados que usted!
+
+## Otras Sugerencias
+
+Hay otras cosas además de ir asíncrono, que pueden ayudarlo a mejorar el tiempo de inicio de su aplicación. Estas son algunos de ellos:
+
+- Tiempo de Descarga
+ - : Tenga en cuenta cuánto tiempo le llevará al usuario descargar los datos de su juego. Si su juego es realmente grande, muy popular o si tiene que volver a descargar contenido con frecuencia, debe intentar tener un servidor de alojamiento lo más rápido posible. También debe considerar utilizar mecanismos de compresión como Gzip o Brotli para que sean lo más pequeños posible.
+- Uso del GPU
+ - : La compilación de sombras y la carga de texturas en el GPU pueden llevar tiempo, especialmente para los juegos realmente complejos. Si bien esto también ocurre con los juegos nativos (que no son de la Web), todavía puede ser bastante molesto. Evita hacer esto sin mantener informado al usuario de que el juego, de hecho, todavía se está iniciando.
+- Tamaño de los Datos
+ - : Haz tu mejor esfuerzo para optimizar el tamaño de tus datos de juego; los archivos de menor nivel se descargarán y procesarán más rápido que los más grandes.
+- Factores Subjetivos
+ - : Cualquier cosa que pueda hacer para ayudar a mantener al usuario involucrado durante el proceso de inicio ayudará a que el tiempo parezca más rápido. Para los juegos, considere la posibilidad de reproducir música de fondo o mostrar una bonita pantalla de bienvenida. Entre cada cálculo, actualice su indicador de progreso, realice cambios en la pantalla o cualquier otra cosa que pueda hacer para ayudar al usuario a sentir que su aplicación está haciendo algo en lugar de quedarse sentado tranquilamente.
+
+## También Podría Interesarte
+
+- [Apps](/es/docs/Web/Progressive_web_apps)
+- [Games](/es/docs/Games)
+
+## Información del Documento Original:
+
+- Autor(s): Alon Zakai
+- Fuente: [BananaBread (or any compiled codebase) Startup Experience](http://mozakai.blogspot.com/2012/07/bananabread-or-any-compiled-codebase.html)
diff --git a/files/es/web/progressive_web_apps/app_structure/index.html b/files/es/web/progressive_web_apps/app_structure/index.html
deleted file mode 100644
index fb6e6b812c56e4..00000000000000
--- a/files/es/web/progressive_web_apps/app_structure/index.html
+++ /dev/null
@@ -1,286 +0,0 @@
----
-title: Estructura de una aplicación web progresiva
-slug: Web/Progressive_web_apps/App_structure
-tags:
- - Estructura
- - Intérprete de la aplicación
- - PWAs
- - Servicio workers
- - Streams
- - Transmisiones
- - aplicaciones web progresivas
- - js13kGames
- - progresiva
-translation_of: Web/Progressive_web_apps/App_structure
----
-{{PreviousMenuNext("Web/Progressive_web_apps/Introduction", "Web/Progressive_web_apps/Offline_Service_workers", "Web/Progressive_web_apps")}}
-
-Ahora que conoces la teoría detrás de las PWAs, veamos la estructura recomendada de una aplicación real. Comenzaremos analizando la aplicación js13kPWA , veamos por qué está construida de esa manera y qué beneficios aporta.
-
-Arquitectura de una aplicación
-
-Hay dos principales y diferentes enfoques para representar un sitio web — en el servidor o en el cliente. Ambos tienen sus ventajas y desventajas, y puedes combinar los dos enfoques hasta cierto punto.
-
-
- La representación del lado del servidor (SSR) significa que un sitio web se representa en el servidor, por lo que ofrece una primera carga más rápida, pero navegar entre páginas requiere descargar contenido HTML nuevo. Funciona muy bien en todos los navegadores, pero adolece en términos de tiempo de navegación entre páginas y, por lo tanto, rendimiento percibido general — cargar una página requiere un nuevo viaje de ida y vuelta al servidor.
- La representación de lado del cliente (CSR) permite que el sitio web se actualice en el navegador casi instantáneamente cuando se navega a diferentes páginas, pero requiere más de un golpe de descarga inicial y una representación adicional en el cliente al principio. El sitio web es más lento en una visita inicial, pero puede ser más rápido para navegar.
-
-
-La combinación de SSR con CSR puede generar los mejores resultados: puedes representar un sitio web en el servidor, almacenar en caché su contenido y luego actualizar la representación en el lado del cliente cuando sea necesario. La carga de la primera página es rápida debido al SSR y la navegación entre páginas es fluida porque el cliente puede volver a renderizar la página solo con las partes que han cambiado.
-
-Las PWAs se pueden crear utilizando cualquier enfoque que desees, pero algunas funcionarán mejor que otras. El enfoque más popular es el concepto de "intérprete de la aplicación", que combina SSR y CSR exactamente de la manera descrita anteriormente, y además sigue la metodología "fuera de línea primero" que explicaremos en detalle en los próximos artículos y utilizaremos en nuestra aplicación de ejemplo. También hay un nuevo enfoque que involucra la {{web.link("/es/docs/Web/API/Streams_API", "API Streams")}}, que mencionaremos brevemente.
-
-Intérprete de la aplicación
-
-El concepto de intérprete de la aplicación se ocupa de cargar una interfaz de usuario mínima lo antes posible y luego almacenarla en caché para que esté disponible sin conexión para visitas posteriores antes de cargar todo el contenido de la aplicación. De esa manera, la próxima vez que alguien visite la aplicación desde el dispositivo, la interfaz de usuario se cargará desde la caché de inmediato y se solicitará cualquier contenido nuevo del servidor (si aún no está disponible en la caché).
-
-Esta estructura es rápida y también se siente rápida, ya que el usuario ve "algo" instantáneamente, en lugar de una ruleta de carga o una página en blanco. También permite que el sitio web sea accesible sin conexión si la conexión de red no está disponible.
-
-Podemos controlar lo que se solicita del servidor y lo que se recupera de la caché con un {{web.link("/es/docs/Web/API/Service_Worker_API", "servicio worker")}}, que se explicará en detalle en el próximo artículo, por ahora centrémonos en la estructura en sí misma.
-
-¿Por qué debería usarla?
-
-Esta arquitectura permite que un sitio web se beneficie al máximo de todas las funciones de PWA — almacena en caché el intérprete de la aplicación y administra el contenido dinámico de una manera que mejora enormemente el rendimiento. Además del intérprete básico, puedes agregar otras funciones como {{web.link("/es/docs/Web/Progressive_web_apps/Add_to_home_screen", "agregar a la pantalla de inicio")}} o {{web.link("/es/docs/Web/API/Push_API", "notificaciones push")}}, con la certeza de que la aplicación seguirá funcionando correctamente si no son compatibles con el navegador del usuario — esta es la belleza de la mejora progresiva.
-
-El sitio web se siente como una aplicación nativa con interacción instantánea y un rendimiento sólido, al tiempo que conserva todos los beneficios de la web.
-
-Ser enlazable, progresiva y adaptable por diseño
-
-Es importante recordar las ventajas de PWA y tenerlas en cuenta al diseñar la aplicación. El enfoque del intérprete de la aplicación permite que los sitios web sean:
-
-
- Enlazable: aunque se comporta como una aplicación nativa, sigue siendo un sitio web; puedes hacer clic en los enlaces dentro de la página y enviar una URL a alguien si deseas compartirla.
- Progresiva: comienza con el "buen, antiguo sitio web básico" y agrega progresivamente nuevas funciones mientras recuerdas detectar si están disponibles en el navegador y manejas con elegancia cualquier error que surja si no hay soporte disponible. Por ejemplo, un modo fuera de línea con la ayuda del servicio workers es solo un rasgo adicional que mejora la experiencia del sitio web, pero aún se puede usar perfectamente sin él.
- Adaptable: El diseño web adaptable también se aplica a las aplicaciones web progresivas, ya que ambas son principalmente para dispositivos móviles. Hay una gran variedad de dispositivos con navegadores — es importante preparar tu sitio web para que funcione en diferentes tamaños de pantalla, ventanas gráficas o densidades de píxeles, utilizando tecnologías como {{web.link("/es/docs/Mozilla/Mobile/Viewport_meta_tag", "metaetiqueta de la ventana gráfica")}}, {{web.link("/es/docs/Web/CSS/Media_Queries/Using_media_queries", "consultas de medios CSS")}}, {{web.link("/es/docs/Web/CSS/CSS_Flexible_Box_Layout", "Flexbox")}} y {{web.link("/es/docs/Web/CSS/CSS_Grid_Layout", "Rejilla CSS")}}.
-
-
-Concepto diferente: streams o transmisiones
-
-Se puede lograr un enfoque completamente diferente para la representación del lado del servidor o del cliente con la {{web.link("/es/docs/Web/API/Streams_API", "API Streams")}}. Con un poco de ayuda del servicio workers , las transmisiones pueden mejorar en gran medida la forma en que analizamos el contenido.
-
-El modelo de intérprete de la aplicación requiere que todos los recursos estén disponibles antes de que el sitio web pueda comenzar a renderizarse. Es diferente con HTML, ya que el navegador ya está transmitiendo los datos y puede ver cuándo se cargan y procesan los elementos en el sitio web. Sin embargo, para que JavaScript esté "operativo", se debe descargar en su totalidad.
-
-La API de Streams permite a los desarrolladores tener acceso directo a la transmisión de datos desde el servidor — si deseas realizar una operación en los datos (por ejemplo, agregar un filtro a un video), ya no necesitas esperar a que se complete la descarga y convertirla en un blob (o lo que sea) — puedes comenzar de inmediato. Proporciona un control detallado: la transmisión se puede iniciar, encadenar con otra transmisión, cancelar, verificar errores y más.
-
-En teoría, la transmisión es un mejor modelo, pero también es más complejo, y en el momento de redactar este artículo (marzo de 2018), la API de Streams todavía está en proceso y aún no está completamente disponible en ninguno de los principales navegadores. Cuando esté disponible, será la forma más rápida de servir el contenido — los beneficios serán enormes en términos de rendimiento.
-
-Para obtener ejemplos trabajando y más información, consulta la {{web.link("/es/docs/Web/API/Streams_API", "documentación de la API de Streams")}}.
-
-Estructura de nuestra aplicación de ejemplo
-
-La estructura del sitio web js13kPWA es bastante simple: consta de un solo archivo HTML (index.html ) con estilo CSS básico (style.css ) y algunas imágenes, scripts y tipos de letra. La estructura de la carpeta se ve así:
-
-
-
-El HTML
-
-Desde el punto de vista HTML, el intérprete de la aplicación es todo lo que está fuera de la sección de contenido:
-
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
- <title>js13kGames — Entradas del marco A</title>
- <meta name="description" content="Una lista de las entradas del marco A enviadas a la competencia js13kGames 2017, que se utiliza como ejemplo para los artículos de MDN sobre Aplicaciones Web Progresivas">
- <meta name="author" content="end3r">
- <meta name="theme-color" content="#B12A34">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <meta property="og:image" content="icons/icon-512.png">
- <link rel="shortcut icon" href="favicon.ico">
- <link rel="stylesheet" href="style.css">
- <link rel="manifest" href="js13kpwa.webmanifest">
- <script src="data/games.js" defer></script>
- <script src="app.js" defer></script>
-</head>
-<body>
-<header>
- <p><a class="logo" href="http://js13kgames.com"><img src="img/js13kgames.png" alt="js13kGames"></a></p>
-</header>
-<main>
- <h1>js13kGames — Entradas del marco A</h1>
- <p class="description">Lista de juegos enviada a <a href="http://js13kgames.com/aframe">categoría Marco A</a> en la competencia de <a href="http://2017.js13kgames.com">js13kGames 2017</a>. Puedes <a href="https://github.com/mdn/pwa-examples/blob/master/js13kpwa">bifurcar js13kPWA en GitHub</a> para revisar su código fuente.</p>
- <button id="notifications">Solicitar notificaciones ficticias</button>
- <section id="content">
- // Contenido insertado aquí
- </section>
-</main>
-<footer>
- <p>© js13kGames 2012-2020, creado y mantenido por <a href="http://end3r.com">Andrzej Mazur</a> de <a href="http://enclavegames.com">Enclave Games</a>.</p>
-</footer>
-</body>
-</html>
-
-La sección {{HTMLElement("head")}} contiene información básica como título, descripción y enlaces a CSS, manifiesto web, archivo JS de contenido de juegos y app.js; ahí es donde se inicia nuestra aplicación JavaScript. El {{HTMLElement("body")}} se divide en {{HTMLElement("header")}} (que contiene la imagen vinculada), {{HTMLElement("main")}} de la página (con título, descripción y lugar para el contenido) y {{HTMLElement("footer")}} (derechos de autor y enlaces).
-
-El único trabajo de la aplicación es enumerar todas las entradas del Marco A de la competencia js13kGames 2017. Como puedes ver, es un sitio web muy común de una página — el objetivo es tener algo simple para que podamos centrarnos en la implementación de las características reales de PWA.
-
-El CSS
-
-El CSS también es lo más sencillo posible: usa {{CSSxRef("@font-face")}} para cargar y usar un tipo de letra personalizado, y aplica un estilo simple de los elementos HTML. El enfoque general es que el diseño se vea bien tanto en dispositivos móviles (con un enfoque de diseño web adaptable) como en dispositivos de escritorio.
-
-El main
de la aplicación JavaScript
-
-El archivo app.js
hace algunas cosas que veremos de cerca en los próximos artículos. En primer lugar, genera el contenido en base a esta plantilla:
-
-var template = "<article>\n\
- <img src='data/img/SLUG.jpg' alt='NAME'>\n\
- <h3>#POS. NAME</h3>\n\
- <ul>\n\
- <li><span>Author:</span> <strong>AUTHOR</strong></li>\n\
- <li><span>Twitter:</span> <a href='https://twitter.com/TWITTER'>@TWITTER</a></li>\n\
- <li><span>Website:</span> <a href='http://WEBSITE/'>WEBSITE</a></li>\n\
- <li><span>GitHub:</span> <a href='https://GITHUB'>GITHUB</a></li>\n\
- <li><span>More:</span> <a href='http://js13kgames.com/entries/SLUG'>js13kgames.com/entries/SLUG</a></li>\n\
- </ul>\n\
-</article>";
-var content = '';
-for(var i=0; i<games.length; i++) {
- var entry = template.replace(/POS/g,(i+1))
- .replace(/SLUG/g,games[i].slug)
- .replace(/NAME/g,games[i].name)
- .replace(/AUTHOR/g,games[i].author)
- .replace(/TWITTER/g,games[i].twitter)
- .replace(/WEBSITE/g,games[i].website)
- .replace(/GITHUB/g,games[i].github);
- entry = entry.replace('<a href=\'http:///\'></a>','-');
- content += entry;
-};
-document.getElementById('content').innerHTML = content;
-
-A continuación, registra un servicio works :
-
-if('serviceWorker' in navigator) {
- navigator.serviceWorker.register('/pwa-examples/js13kpwa/sw.js');
-};
-
-El siguiente bloque de código solicita permiso para recibir notificaciones cuando se hace clic en un botón:
-
-var button = document.getElementById("notifications");
-button.addEventListener('click', function(e) {
- Notification.requestPermission().then(function(result) {
- if(result === 'granted') {
- randomNotification();
- }
- });
-});
-
-El último bloque crea notificaciones que muestran un elemento seleccionado al azar de la lista de juegos:
-
-function randomNotification() {
- var randomItem = Math.floor(Math.random()*games.length);
- var notifTitle = games[randomItem].name;
- var notifBody = 'Creado por '+games[randomItem].author+'.';
- var notifImg = 'data/img/'+games[randomItem].slug+'.jpg';
- var options = {
- body: notifBody,
- icon: notifImg
- }
- var notif = new Notification(notifTitle, options);
- setTimeout(randomNotification, 30000);
-}
-
-El servicio worker
-
-El último archivo que veremos rápidamente es el servicio worker : sw.js
— primero importa datos del archivo games.js
:
-
-self.importScripts('data/games.js');
-
-A continuación, crea una lista de todos los archivos que se almacenarán en caché, tanto del intérprete de la aplicación como del contenido:
-
-var cacheName = 'js13kPWA-v1';
-var appShellFiles = [
- '/pwa-examples/js13kpwa/',
- '/pwa-examples/js13kpwa/index.html',
- '/pwa-examples/js13kpwa/app.js',
- '/pwa-examples/js13kpwa/style.css',
- '/pwa-examples/js13kpwa/fonts/graduate.eot',
- '/pwa-examples/js13kpwa/fonts/graduate.ttf',
- '/pwa-examples/js13kpwa/fonts/graduate.woff',
- '/pwa-examples/js13kpwa/favicon.ico',
- '/pwa-examples/js13kpwa/img/js13kgames.png',
- '/pwa-examples/js13kpwa/img/bg.png',
- '/pwa-examples/js13kpwa/icons/icon-32.png',
- '/pwa-examples/js13kpwa/icons/icon-64.png',
- '/pwa-examples/js13kpwa/icons/icon-96.png',
- '/pwa-examples/js13kpwa/icons/icon-128.png',
- '/pwa-examples/js13kpwa/icons/icon-168.png',
- '/pwa-examples/js13kpwa/icons/icon-192.png',
- '/pwa-examples/js13kpwa/icons/icon-256.png',
- '/pwa-examples/js13kpwa/icons/icon-512.png'
-];
-var gamesImages = [];
-for(var i=0; i<games.length; i++) {
- gamesImages.push('data/img/'+games[i].slug+'.jpg');
-}
-var contentToCache = appShellFiles.concat(gamesImages);
-
-El siguiente bloque instala el servicio worker , que luego almacena en caché todos los archivos contenidos en la lista anterior:
-
-self.addEventListener('install', function(e) {
- console.log('[Service Worker] Install');
- e.waitUntil(
- caches.open(cacheName).then(function(cache) {
- console.log('[Servicio Worker] Almacena todo en caché: contenido e intérprete de la aplicación');
- return cache.addAll(contentToCache);
- })
- );
-});
-
-Por último, el servicio worker obtiene contenido de la caché si está disponible allí, lo cual proporciona una funcionalidad fuera de línea:
-
-self.addEventListener('fetch', function(e) {
- e.respondWith(
- caches.match(e.request).then(function(r) {
- console.log('[Servicio Worker] Obteniendo recurso: '+e.request.url);
- return r || fetch(e.request).then(function(response) {
- return caches.open(cacheName).then(function(cache) {
- console.log('[Servicio Worker] Almacena el nuevo recurso: '+e.request.url);
- cache.put(e.request, response.clone());
- return response;
- });
- });
- })
- );
-});
-
-Los datos de JavaScript
-
-Los datos de los juegos están presentes en el directorio data en forma de un objeto JavaScript (games.js
):
-
-var games = [
- {
- slug: 'perdido-en-el-ciberespacio',
- name: 'Perdido en el ciberespacio',
- author: 'Zosia y Bartek',
- twitter: 'bartaz',
- website: '',
- github: 'github.com/bartaz/lost-in-cyberspace'
- },
- {
- slug: 'vernissage',
- name: 'Vernissage',
- author: 'Platane',
- twitter: 'platane_',
- website: 'github.com/Platane',
- github: 'github.com/Platane/js13k-2017'
- },
-// ...
- {
- slug: 'emma-3d',
- name: 'Emma-3D',
- author: 'Prateek Roushan',
- twitter: '',
- website: '',
- github: 'github.com/coderprateek/Emma-3D'
- }
-];
-
-Cada entrada tiene su propia imagen en el directorio data/img
. Este es nuestro contenido, cargado en la sección de contenido con JavaScript.
-
-Siguiente
-
-En el próximo artículo veremos con más detalle cómo se almacenan en caché el intérprete de la aplicación y el contenido para su uso sin conexión con la ayuda del servicio worker .
-
-{{PreviousMenuNext("Web/Progressive_web_apps/Introduction", "Web/Progressive_web_apps/Offline_Service_workers", "Web/Progressive_web_apps")}}
-
-{{QuickLinksWithSubpages("/es/docs/Web/Progressive_web_apps/")}}
diff --git a/files/es/web/progressive_web_apps/app_structure/index.md b/files/es/web/progressive_web_apps/app_structure/index.md
new file mode 100644
index 00000000000000..38ca6773ca53da
--- /dev/null
+++ b/files/es/web/progressive_web_apps/app_structure/index.md
@@ -0,0 +1,302 @@
+---
+title: Estructura de una aplicación web progresiva
+slug: Web/Progressive_web_apps/App_structure
+tags:
+ - Estructura
+ - Intérprete de la aplicación
+ - PWAs
+ - Servicio workers
+ - Streams
+ - Transmisiones
+ - aplicaciones web progresivas
+ - js13kGames
+ - progresiva
+translation_of: Web/Progressive_web_apps/App_structure
+---
+{{PreviousMenuNext("Web/Progressive_web_apps/Introduction", "Web/Progressive_web_apps/Offline_Service_workers", "Web/Progressive_web_apps")}}
+
+Ahora que conoces la teoría detrás de las PWAs, veamos la estructura recomendada de una aplicación real. Comenzaremos analizando la aplicación [js13kPWA](https://mdn.github.io/pwa-examples/js13kpwa/), veamos por qué está construida de esa manera y qué beneficios aporta.
+
+## Arquitectura de una aplicación
+
+Hay dos principales y diferentes enfoques para representar un sitio web — en el servidor o en el cliente. Ambos tienen sus ventajas y desventajas, y puedes combinar los dos enfoques hasta cierto punto.
+
+- La representación del lado del servidor (SSR) significa que un sitio web se representa en el servidor, por lo que ofrece una primera carga más rápida, pero navegar entre páginas requiere descargar contenido HTML nuevo. Funciona muy bien en todos los navegadores, pero adolece en términos de tiempo de navegación entre páginas y, por lo tanto, rendimiento percibido general — cargar una página requiere un nuevo viaje de ida y vuelta al servidor.
+- La representación de lado del cliente (CSR) permite que el sitio web se actualice en el navegador casi instantáneamente cuando se navega a diferentes páginas, pero requiere más de un golpe de descarga inicial y una representación adicional en el cliente al principio. El sitio web es más lento en una visita inicial, pero puede ser más rápido para navegar.
+
+La combinación de SSR con CSR puede generar los mejores resultados: puedes representar un sitio web en el servidor, almacenar en caché su contenido y luego actualizar la representación en el lado del cliente cuando sea necesario. La carga de la primera página es rápida debido al SSR y la navegación entre páginas es fluida porque el cliente puede volver a renderizar la página solo con las partes que han cambiado.
+
+Las PWAs se pueden crear utilizando cualquier enfoque que desees, pero algunas funcionarán mejor que otras. El enfoque más popular es el concepto de "intérprete de la aplicación", que combina SSR y CSR exactamente de la manera descrita anteriormente, y además sigue la metodología "fuera de línea primero" que explicaremos en detalle en los próximos artículos y utilizaremos en nuestra aplicación de ejemplo. También hay un nuevo enfoque que involucra la {{web.link("/es/docs/Web/API/Streams_API", "API Streams")}}, que mencionaremos brevemente.
+
+## Intérprete de la aplicación
+
+El concepto de intérprete de la aplicación se ocupa de cargar una interfaz de usuario mínima lo antes posible y luego almacenarla en caché para que esté disponible sin conexión para visitas posteriores antes de cargar todo el contenido de la aplicación. De esa manera, la próxima vez que alguien visite la aplicación desde el dispositivo, la interfaz de usuario se cargará desde la caché de inmediato y se solicitará cualquier contenido nuevo del servidor (si aún no está disponible en la caché).
+
+Esta estructura es rápida y también se siente rápida, ya que el usuario ve "algo" instantáneamente, en lugar de una ruleta de carga o una página en blanco. También permite que el sitio web sea accesible sin conexión si la conexión de red no está disponible.
+
+Podemos controlar lo que se solicita del servidor y lo que se recupera de la caché con un {{web.link("/es/docs/Web/API/Service_Worker_API", "servicio worker")}}, que se explicará en detalle en el próximo artículo, por ahora centrémonos en la estructura en sí misma.
+
+### ¿Por qué debería usarla?
+
+Esta arquitectura permite que un sitio web se beneficie al máximo de todas las funciones de PWA — almacena en caché el intérprete de la aplicación y administra el contenido dinámico de una manera que mejora enormemente el rendimiento. Además del intérprete básico, puedes agregar otras funciones como {{web.link("/es/docs/Web/Progressive_web_apps/Add_to_home_screen", "agregar a la pantalla de inicio")}} o {{web.link("/es/docs/Web/API/Push_API", "notificaciones push")}}, con la certeza de que la aplicación seguirá funcionando correctamente si no son compatibles con el navegador del usuario — esta es la belleza de la mejora progresiva.
+
+El sitio web se siente como una aplicación nativa con interacción instantánea y un rendimiento sólido, al tiempo que conserva todos los beneficios de la web.
+
+### Ser enlazable, progresiva y adaptable por diseño
+
+Es importante recordar las ventajas de PWA y tenerlas en cuenta al diseñar la aplicación. El enfoque del intérprete de la aplicación permite que los sitios web sean:
+
+- Enlazable: aunque se comporta como una aplicación nativa, sigue siendo un sitio web; puedes hacer clic en los enlaces dentro de la página y enviar una URL a alguien si deseas compartirla.
+- Progresiva: comienza con el "buen, antiguo sitio web básico" y agrega progresivamente nuevas funciones mientras recuerdas detectar si están disponibles en el navegador y manejas con elegancia cualquier error que surja si no hay soporte disponible. Por ejemplo, un modo fuera de línea con la ayuda del servicio _workers_ es solo un rasgo adicional que mejora la experiencia del sitio web, pero aún se puede usar perfectamente sin él.
+- Adaptable: El diseño web adaptable también se aplica a las aplicaciones web progresivas, ya que ambas son principalmente para dispositivos móviles. Hay una gran variedad de dispositivos con navegadores — es importante preparar tu sitio web para que funcione en diferentes tamaños de pantalla, ventanas gráficas o densidades de píxeles, utilizando tecnologías como {{web.link("/es/docs/Mozilla/Mobile/Viewport_meta_tag", "metaetiqueta de la ventana gráfica")}}, {{web.link("/es/docs/Web/CSS/Media_Queries/Using_media_queries", "consultas de medios CSS")}}, {{web.link("/es/docs/Web/CSS/CSS_Flexible_Box_Layout", "Flexbox")}} y {{web.link("/es/docs/Web/CSS/CSS_Grid_Layout", "Rejilla CSS")}}.
+
+## Concepto diferente: _streams_ o transmisiones
+
+Se puede lograr un enfoque completamente diferente para la representación del lado del servidor o del cliente con la {{web.link("/es/docs/Web/API/Streams_API", "API Streams")}}. Con un poco de ayuda del servicio _workers_, las transmisiones pueden mejorar en gran medida la forma en que analizamos el contenido.
+
+El modelo de intérprete de la aplicación requiere que todos los recursos estén disponibles antes de que el sitio web pueda comenzar a renderizarse. Es diferente con HTML, ya que el navegador ya está transmitiendo los datos y puede ver cuándo se cargan y procesan los elementos en el sitio web. Sin embargo, para que JavaScript esté "operativo", se debe descargar en su totalidad.
+
+La API de _Streams_ permite a los desarrolladores tener acceso directo a la transmisión de datos desde el servidor — si deseas realizar una operación en los datos (por ejemplo, agregar un filtro a un video), ya no necesitas esperar a que se complete la descarga y convertirla en un blob (o lo que sea) — puedes comenzar de inmediato. Proporciona un control detallado: la transmisión se puede iniciar, encadenar con otra transmisión, cancelar, verificar errores y más.
+
+En teoría, la transmisión es un mejor modelo, pero también es más complejo, y en el momento de redactar este artículo (marzo de 2018), la API de _Streams_ todavía está en proceso y aún no está completamente disponible en ninguno de los principales navegadores. Cuando esté disponible, será la forma más rápida de servir el contenido — los beneficios serán enormes en términos de rendimiento.
+
+Para obtener ejemplos trabajando y más información, consulta la {{web.link("/es/docs/Web/API/Streams_API", "documentación de la API de Streams")}}.
+
+## Estructura de nuestra aplicación de ejemplo
+
+La estructura del sitio web [js13kPWA](https://mdn.github.io/pwa-examples/js13kpwa/) es bastante simple: consta de un solo archivo HTML ([index.html](https://github.com/mdn/pwa-examples/blob/master/js13kpwa/index.html)) con estilo CSS básico ([style.css](https://github.com/mdn/pwa-examples/blob/master/js13kpwa/style.css)) y algunas imágenes, scripts y tipos de letra. La estructura de la carpeta se ve así:
+
+![Estructura del directorio de js13kPWA.](https://mdn.mozillademos.org/files/15925/js13kpwa-directory.png)
+
+### El HTML
+
+Desde el punto de vista HTML, el intérprete de la aplicación es todo lo que está fuera de la sección de contenido:
+
+```html
+
+
+
+
+ js13kGames — Entradas del marco A
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ js13kGames — Entradas del marco A
+ Lista de juegos enviada a categoría Marco A en la competencia de js13kGames 2017 . Puedes bifurcar js13kPWA en GitHub para revisar su código fuente.
+ Solicitar notificaciones ficticias
+
+ // Contenido insertado aquí
+
+
+
+
+
+```
+
+La sección {{HTMLElement("head")}} contiene información básica como título, descripción y enlaces a CSS, manifiesto web, archivo JS de contenido de juegos y app.js; ahí es donde se inicia nuestra aplicación JavaScript. El {{HTMLElement("body")}} se divide en {{HTMLElement("header")}} (que contiene la imagen vinculada), {{HTMLElement("main")}} de la página (con título, descripción y lugar para el contenido) y {{HTMLElement("footer")}} (derechos de autor y enlaces).
+
+El único trabajo de la aplicación es enumerar todas las entradas del Marco A de la competencia js13kGames 2017. Como puedes ver, es un sitio web muy común de una página — el objetivo es tener algo simple para que podamos centrarnos en la implementación de las características reales de PWA.
+
+### El CSS
+
+El CSS también es lo más sencillo posible: usa {{CSSxRef("@font-face")}} para cargar y usar un tipo de letra personalizado, y aplica un estilo simple de los elementos HTML. El enfoque general es que el diseño se vea bien tanto en dispositivos móviles (con un enfoque de diseño web adaptable) como en dispositivos de escritorio.
+
+### El `main` de la aplicación JavaScript
+
+El archivo `app.js` hace algunas cosas que veremos de cerca en los próximos artículos. En primer lugar, genera el contenido en base a esta plantilla:
+
+```js
+var template = "\n\
+ \n\
+ #POS. NAME \n\
+ \n\
+ ";
+var content = '';
+for(var i=0; i','-');
+ content += entry;
+};
+document.getElementById('content').innerHTML = content;
+```
+
+A continuación, registra un servicio _works_:
+
+```js
+if('serviceWorker' in navigator) {
+ navigator.serviceWorker.register('/pwa-examples/js13kpwa/sw.js');
+};
+```
+
+El siguiente bloque de código solicita permiso para recibir notificaciones cuando se hace clic en un botón:
+
+```js
+var button = document.getElementById("notifications");
+button.addEventListener('click', function(e) {
+ Notification.requestPermission().then(function(result) {
+ if(result === 'granted') {
+ randomNotification();
+ }
+ });
+});
+```
+
+El último bloque crea notificaciones que muestran un elemento seleccionado al azar de la lista de juegos:
+
+```js
+function randomNotification() {
+ var randomItem = Math.floor(Math.random()*games.length);
+ var notifTitle = games[randomItem].name;
+ var notifBody = 'Creado por '+games[randomItem].author+'.';
+ var notifImg = 'data/img/'+games[randomItem].slug+'.jpg';
+ var options = {
+ body: notifBody,
+ icon: notifImg
+ }
+ var notif = new Notification(notifTitle, options);
+ setTimeout(randomNotification, 30000);
+}
+```
+
+### El servicio _worker_
+
+El último archivo que veremos rápidamente es el servicio _worker_: `sw.js` — primero importa datos del archivo `games.js`:
+
+```js
+self.importScripts('data/games.js');
+```
+
+A continuación, crea una lista de todos los archivos que se almacenarán en caché, tanto del intérprete de la aplicación como del contenido:
+
+```js
+var cacheName = 'js13kPWA-v1';
+var appShellFiles = [
+ '/pwa-examples/js13kpwa/',
+ '/pwa-examples/js13kpwa/index.html',
+ '/pwa-examples/js13kpwa/app.js',
+ '/pwa-examples/js13kpwa/style.css',
+ '/pwa-examples/js13kpwa/fonts/graduate.eot',
+ '/pwa-examples/js13kpwa/fonts/graduate.ttf',
+ '/pwa-examples/js13kpwa/fonts/graduate.woff',
+ '/pwa-examples/js13kpwa/favicon.ico',
+ '/pwa-examples/js13kpwa/img/js13kgames.png',
+ '/pwa-examples/js13kpwa/img/bg.png',
+ '/pwa-examples/js13kpwa/icons/icon-32.png',
+ '/pwa-examples/js13kpwa/icons/icon-64.png',
+ '/pwa-examples/js13kpwa/icons/icon-96.png',
+ '/pwa-examples/js13kpwa/icons/icon-128.png',
+ '/pwa-examples/js13kpwa/icons/icon-168.png',
+ '/pwa-examples/js13kpwa/icons/icon-192.png',
+ '/pwa-examples/js13kpwa/icons/icon-256.png',
+ '/pwa-examples/js13kpwa/icons/icon-512.png'
+];
+var gamesImages = [];
+for(var i=0; i Las aplicaciones web progresivas (mejor conocidas como PWA s por «P rogressive W eb A pps ») son aplicaciones web que utilizan APIs y funciones emergentes del navegador web junto a una estrategia tradicional de mejora progresiva para ofrecer una aplicación nativa —como la experiencia del usuario para aplicaciones web multiplataforma. Las aplicaciones web progresivas son un patrón de diseño útil, aunque no son un estándar formalizado. Se puede pensar que PWA es similar a AJAX u otros patrones similares que abarcan un conjunto de atributos de aplicación, incluido el uso de tecnologías y técnicas web específicas. Este conjunto de documentos te dice todo lo que necesitas saber sobre ellas.
-
-Para poder llamar PWA a una aplicación web, técnicamente hablando debe tener las siguientes características: {{web.link("/es/docs/Web/Security/Secure_Contexts", "Contexto seguro")}} ({{Glossary("HTTPS")}} ), uno o más {{web.link("/es/docs/Web/API/Service_Worker_API", "Servicio Workers")}} y un {{web.link("/es/docs/Web/Manifest", "archivo de manifiesto")}}.
-
-
- {{web.link("/es/docs/Web/Security/Secure_Contexts", "Contexto seguro")}} ({{Glossary("HTTPS")}})
- La aplicación web se debe servir a través de una red segura. Ser un sitio seguro no solo es una buena práctica, sino que también establece tu aplicación web como un sitio confiable, especialmente si los usuarios necesitan realizar transacciones seguras. La mayoría de las funciones relacionadas con una PWA, como la geolocalización e incluso los servicios workers , solamente están disponibles cuando la aplicación se ha cargado mediante HTTPS.
- {{web.link("/es/docs/Web/API/Service_Worker_API", "Servicio workers")}}
- Un servicio worker es un script que permite interceptar y controlar cómo un navegador web maneja tus solicitudes de red y el almacenamiento en caché de activos. Con los servicios worker , los desarrolladores web pueden crear páginas web rápidas y fiables junto con experiencias fuera de línea.
- {{web.link("/es/docs/Web/Manifest", "El archivo manifest")}}
- Un archivo {{Glossary("JSON")}} que controla cómo se muestra tu aplicación al usuario y garantiza que las aplicaciones web progresivas sean detectables. Describe el nombre de la aplicación, la URL de inicio, los iconos y todos los demás detalles necesarios para transformar el sitio web en un formato similar al de una aplicación.
-
-
-Ventajas de PWA
-
-Las PWA deben ser detectables, instalables, enlazables, independientes de la red, progresivas, reconectables, responsivas y seguras. Para obtener más información sobre lo que esto significa, lee {{web.link("/es/docs/Web/Progressive_web_apps/Advantages", "Ventajas de las aplicaciones web progresivas")}}.
-
-Para saber cómo implementar PWA, lee la {{web.link("/es/docs/Web/Progressive_web_apps/Developer_guide", "guía para desarrolladores de PWA")}}.
-
-Documentación
-
-<-- La lista automática temporal a continuación se reemplazará pronto -->
-
-{{LandingPageListSubpages}}
-
-
-
Todo lo que se encuentra debajo de este punto es un remanente de la versión anterior de esta página y se renovará a medida que se revise el resto del contenido.
-
-
-Guías del núcleo de PWA
-
-Las siguientes guías te muestran lo que debes hacer para implementar una PWA, examinando un ejemplo simple y mostrándote cómo funcionan todas las piezas.
-
-
- {{web.link("/es/docs/Web/Progressive_web_apps/Introduction", "Introducción a las aplicaciones web progresivas")}}
- {{web.link("/es/docs/Web/Progressive_web_apps/App_structure", "Estructura de la aplicación web progresiva")}}
- {{web.link("/es/docs/Web/Progressive_web_apps/Offline_Service_workers", "Hacer que las PWAs funcionen sin conexión con el servicio de workers")}}
- {{web.link("/es/docs/Web/Progressive_web_apps/Installable_PWAs", "Cómo hacer que las PWAs se puedan instalar")}}
- {{web.link("/es/docs/Web/Progressive_web_apps/Re-engageable_Notifications_Push", "Cómo hacer que las PWAs puedan volver a interactuar usando Notificaciones y Push")}}
- {{web.link("/es/docs/Web/Progressive_web_apps/Loading", "Carga progresiva")}}
-
-
-
-
-
Guías tecnológicas
-
-
- {{web.link("/es/docs/Learn/JavaScript/Client-side_web_APIs/Client-side_storage", "Almacenamiento del lado del cliente")}} — una extensa guía que muestra cómo y cuándo utilizar el almacenamiento web, IndexedDB
y el servicio workers .
- {{web.link("/es/docs/Web/API/Service_Worker_API/Using_Service_Workers", "Uso del servicio workers")}} — una guía más detallada que cubre la API del servicio workers .
- {{web.link("/es/docs/Web/API/IndexedDB_API/Using_IndexedDB", "Uso de IndexedDB")}} — los fundamentos de IndexedDB
, explicados en detalle.
- {{web.link("/es/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API", "Uso de la API de almacenamiento web")}} — la API de almacenamiento web simplificada.
- Aplicaciones web de carga instantánea con una arquitectura de intérprete de aplicaciones — una guía para usar el patrón de codificación de intérprete de App para crear aplicaciones que se cargan rápidamente.
- {{web.link("/es/docs/Web/API/Push_API/Using_the_Push_API", "Uso de la API Push")}} — aprende los conceptos básicos de la API Web Push
.
- {{web.link("/es/docs/Web/API/Notifications_API/Using_the_Notifications_API", "Uso de la API de notificaciones")}} — notificaciones web en pocas palabras.
- {{web.link("/es/docs/Web/Apps/Modern/Responsive/responsive_design_building_blocks", "Los componentes básicos del diseño responsivo")}} — aprende los conceptos básicos del diseño responsivo, un tema esencial para el diseño de aplicaciones modernas.
- {{web.link("/es/docs/Web/Apps/Modern/Responsive/Mobile_first", "Primero móvil")}} — a menudo, al crear diseños de aplicaciones adaptables, tiene sentido crear el diseño móvil como predeterminado y construir diseños más anchos en la parte superior.
- {{web.link("/es/docs/Web/Apps/Progressive/Add_to_home_screen", "Guía para agregar la pantalla de inicio")}} — aprende cómo tus aplicaciones pueden aprovechar agregar la pantalla de inicio (A2HS).
-
-
-
-
-
Herramientas
-
-
- localForage — una biblioteca de JavaScript sencilla y agradable para almacenar datos en el lado del cliente de manera realmente simple, usa IndexedDB
y recurre a Web SQL
/Web Storage
si es necesario.
- ServiceWorkerWare
— un microframework tipo Express para facilitar el desarrollo del Servicio Worker .
- oghliner
— no solo es una plantilla, sino una herramienta para implementar aplicaciones web sin conexión para Páginas de GitHub.
- sw-precache
— un módulo de node
para generar código del servicio worker que precargará recursos específicos.
- workbox : sucesor espiritual de "sw-precache" con estrategias de almacenamiento en caché más avanzadas y sencillas precargas.
- upup : un diminuto script que garantiza que tu sitio siempre esté disponible para tus usuarios.
- El libro de recetas para servicios worker : una serie de excelentes recetas de servicios worker que muestran cómo implementar una aplicación sin conexión, además de otros muchos concejos.
- Extensión PWA de VS Code : una colección de todos los fragmentos de código esenciales que necesitas para crear aplicaciones web progresivas correctamente allí en tu entorno de VS Code.
-
-
-
-
-
-
-{{QuickLinksWithSubpages("/es/docs/Web/Progressive_web_apps/")}}
diff --git a/files/es/web/progressive_web_apps/index.md b/files/es/web/progressive_web_apps/index.md
new file mode 100644
index 00000000000000..dc8307b269e5f9
--- /dev/null
+++ b/files/es/web/progressive_web_apps/index.md
@@ -0,0 +1,89 @@
+---
+title: Aplicaciones Web Progresivas
+slug: Web/Progressive_web_apps
+tags:
+ - Aplicaciones Web
+ - Aplicaciones web modernas
+ - Aplicación Web Progresiva
+ - Aplicación web
+ - PWA
+ - aplicación
+translation_of: Web/Progressive_web_apps
+---
+![Logotipo de la comunidad PWA](https://mdn.mozillademos.org/files/16742/pwa.png)Las **_aplicaciones web progresivas_** (mejor conocidas como **PWA**s por «_**P**rogressive **W**eb **A**pps_») son aplicaciones web que utilizan APIs y funciones emergentes del navegador web junto a una estrategia tradicional de mejora progresiva para ofrecer una aplicación nativa —como la experiencia del usuario para aplicaciones web multiplataforma. Las aplicaciones web progresivas son un patrón de diseño útil, aunque no son un estándar formalizado. Se puede pensar que PWA es similar a AJAX u otros patrones similares que abarcan un conjunto de atributos de aplicación, incluido el uso de tecnologías y técnicas web específicas. Este conjunto de documentos te dice todo lo que necesitas saber sobre ellas.
+
+Para poder llamar PWA a una aplicación web, técnicamente hablando debe tener las siguientes características: {{web.link("/es/docs/Web/Security/Secure_Contexts", "Contexto seguro")}} (**{{Glossary("HTTPS")}}**), uno o más {{web.link("/es/docs/Web/API/Service_Worker_API", "Servicio Workers")}} y un {{web.link("/es/docs/Web/Manifest", "archivo de manifiesto")}}.
+
+- {{web.link("/es/docs/Web/Security/Secure_Contexts", "Contexto seguro")}} ({{Glossary("HTTPS")}})
+ - : La aplicación web se debe servir a través de una red segura. Ser un sitio seguro no solo es una buena práctica, sino que también establece tu aplicación web como un sitio confiable, especialmente si los usuarios necesitan realizar transacciones seguras. La mayoría de las funciones relacionadas con una PWA, como la geolocalización e incluso los servicios _workers_, solamente están disponibles cuando la aplicación se ha cargado mediante HTTPS.
+- {{web.link("/es/docs/Web/API/Service_Worker_API", "Servicio workers")}}
+ - : Un servicio _worker_ es un script que permite interceptar y controlar cómo un navegador web maneja tus solicitudes de red y el almacenamiento en caché de activos. Con los servicios _worker_, los desarrolladores web pueden crear páginas web rápidas y fiables junto con experiencias fuera de línea.
+- {{web.link("/es/docs/Web/Manifest", "El archivo manifest")}}
+ - : Un archivo {{Glossary("JSON")}} que controla cómo se muestra tu aplicación al usuario y garantiza que las aplicaciones web progresivas sean detectables. Describe el nombre de la aplicación, la URL de inicio, los iconos y todos los demás detalles necesarios para transformar el sitio web en un formato similar al de una aplicación.
+
+## Ventajas de PWA
+
+Las PWA deben ser detectables, instalables, enlazables, independientes de la red, progresivas, reconectables, responsivas y seguras. Para obtener más información sobre lo que esto significa, lee {{web.link("/es/docs/Web/Progressive_web_apps/Advantages", "Ventajas de las aplicaciones web progresivas")}}.
+
+Para saber cómo implementar PWA, lee la {{web.link("/es/docs/Web/Progressive_web_apps/Developer_guide", "guía para desarrolladores de PWA")}}.
+
+## Documentación
+
+**<-- La lista automática temporal a continuación se reemplazará pronto -->**
+
+{{LandingPageListSubpages}}
+
+> **Advertencia:** **Todo lo que se encuentra debajo de este punto es un remanente de la versión anterior de esta página y se renovará a medida que se revise el resto del contenido.**
+
+## Guías del núcleo de PWA
+
+Las siguientes guías te muestran lo que debes hacer para implementar una PWA, examinando un ejemplo simple y mostrándote cómo funcionan todas las piezas.
+
+1. {{web.link("/es/docs/Web/Progressive_web_apps/Introduction", "Introducción a las aplicaciones web progresivas")}}
+2. {{web.link("/es/docs/Web/Progressive_web_apps/App_structure", "Estructura de la aplicación web progresiva")}}
+3. {{web.link("/es/docs/Web/Progressive_web_apps/Offline_Service_workers", "Hacer que las PWAs funcionen sin conexión con el servicio de workers")}}
+4. {{web.link("/es/docs/Web/Progressive_web_apps/Installable_PWAs", "Cómo hacer que las PWAs se puedan instalar")}}
+5. {{web.link("/es/docs/Web/Progressive_web_apps/Re-engageable_Notifications_Push", "Cómo hacer que las PWAs puedan volver a interactuar usando Notificaciones y Push")}}
+6. {{web.link("/es/docs/Web/Progressive_web_apps/Loading", "Carga progresiva")}}
+
+## Guías tecnológicas
+
+- {{web.link("/es/docs/Learn/JavaScript/Client-side_web_APIs/Client-side_storage", "Almacenamiento del lado del cliente")}} — una extensa guía que muestra cómo y cuándo utilizar el almacenamiento web, `IndexedDB` y el servicio _workers_.
+- {{web.link("/es/docs/Web/API/Service_Worker_API/Using_Service_Workers", "Uso del servicio workers")}} — una guía más detallada que cubre la API del servicio _workers_.
+- {{web.link("/es/docs/Web/API/IndexedDB_API/Using_IndexedDB", "Uso de IndexedDB")}} — los fundamentos de `IndexedDB`, explicados en detalle.
+- {{web.link("/es/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API", "Uso de la API de almacenamiento web")}} — la API de almacenamiento web simplificada.
+- [Aplicaciones web de carga instantánea con una arquitectura de intérprete de aplicaciones](https://developers.google.com/web/updates/2015/11/app-shell) — una guía para usar el patrón de codificación de intérprete de App para crear aplicaciones que se cargan rápidamente.
+- {{web.link("/es/docs/Web/API/Push_API/Using_the_Push_API", "Uso de la API Push")}} — aprende los conceptos básicos de la API Web `Push`.
+- {{web.link("/es/docs/Web/API/Notifications_API/Using_the_Notifications_API", "Uso de la API de notificaciones")}} — notificaciones web en pocas palabras.
+- {{web.link("/es/docs/Web/Apps/Modern/Responsive/responsive_design_building_blocks", "Los componentes básicos del diseño responsivo")}} — aprende los conceptos básicos del diseño responsivo, un tema esencial para el diseño de aplicaciones modernas.
+- {{web.link("/es/docs/Web/Apps/Modern/Responsive/Mobile_first", "Primero móvil")}} — a menudo, al crear diseños de aplicaciones adaptables, tiene sentido crear el diseño móvil como predeterminado y construir diseños más anchos en la parte superior.
+- {{web.link("/es/docs/Web/Apps/Progressive/Add_to_home_screen", "Guía para agregar la pantalla de inicio")}} — aprende cómo tus aplicaciones pueden aprovechar agregar la pantalla de inicio (A2HS).
+
+## Herramientas
+
+- [localForage](https://localforage.github.io/localForage/) — una biblioteca de JavaScript sencilla y agradable para almacenar datos en el lado del cliente de manera realmente simple, usa `IndexedDB` y recurre a `Web SQL`/`Web Storage` si es necesario.
+- [`ServiceWorkerWare`](https://github.com/fxos-components/serviceworkerware) — un _microframework tipo Express_ para facilitar el desarrollo del Servicio _Worker_.
+- [`oghliner`](https://github.com/mozilla/oghliner) — no solo es una plantilla, sino una herramienta para implementar aplicaciones web sin conexión para Páginas de GitHub.
+- [`sw-precache`](https://github.com/GoogleChrome/sw-precache) — un módulo de `node` para generar código del servicio _worker que precargará recursos específicos._
+- _[workbox](https://github.com/GoogleChrome/workbox): sucesor espiritual de "sw-precache" con estrategias de almacenamiento en caché más avanzadas y sencillas precargas._
+- _[upup](https://www.talater.com/upup/): un diminuto script que garantiza que tu sitio siempre esté disponible para tus usuarios._
+- _[El libro de recetas para servicios worker](https://serviceworke.rs/): una serie de excelentes recetas de servicios worker que muestran cómo implementar una aplicación sin conexión, además de otros muchos concejos._
+- _[Extensión PWA de VS Code](https://marketplace.visualstudio.com/items?itemName=mayeedwin.vscode-pwa): una colección de todos los fragmentos de código esenciales que necesitas para crear aplicaciones web progresivas correctamente allí en tu entorno de VS Code._
+
+
+
+- _[Aplicaciones web progresivas](https://developers.google.com/web/progressive-web-apps) en Google Developers._
+- _[Aplicaciones web progresivas: escapar de las pestañas sin perder el alma](https://medium.com/@slightlylate/progressive-apps-escaping-tabs-without-losing-our-soul-3b93a8561955#.6czgj0myh) de Alex Russell._
+- _[Lista de verificación de aplicaciones web progresivas](https://developers.google.com/web/progressive-web-apps/checklist)._
+- _[La herramienta Lighthouse](https://developers.google.com/web/tools/lighthouse) de Google._
+- _[Herramientas para crear aplicaciones web progresivas con Angular](https://github.com/angular/mobile-toolkit)._
+- _Kit de guía de React PWA._
+- _[Sitio web de la Pokedex sin conexión](https://pokedex.org/)._
+- _[Lectores de noticias Hacker como aplicaciones web progresivas](https://hnpwa.com/)._
+- _[Aplicación web progresiva: ventajas en pocas palabras](https://goingmeta.io/progressive-web-app/)_
+- _[Por qué las aplicaciones web progresivas son el futuro de la web móvil (investigación de 2019)](https://ymedialabs.com/progressive-web-apps)._
+- _[Aplicaciones web progresivas: todo lo que necesitas saber](https://www.csschopper.com/blog/progressive-web-apps-everything-you-need-to-know/)_
+- _[Colección de recursos, laboratorios de código y herramientas que necesitas para crear PWAs por parte del equipo de pwafire.org](https://pwafire.org)_
+- _[Configuración de tu entorno de desarrollo de aplicaciones web progresivas](https://github.com/pwafire/pwadev-tips)_
+
+_{{QuickLinksWithSubpages("/es/docs/Web/Progressive_web_apps/")}}_
diff --git a/files/es/web/progressive_web_apps/installable_pwas/index.html b/files/es/web/progressive_web_apps/installable_pwas/index.html
deleted file mode 100644
index 89945749047dea..00000000000000
--- a/files/es/web/progressive_web_apps/installable_pwas/index.html
+++ /dev/null
@@ -1,130 +0,0 @@
----
-title: Cómo hacer PWAs instalables
-slug: Web/Progressive_web_apps/Installable_PWAs
-tags:
- - Instalable
- - PWAs
- - aapi
- - agregar a pantalla de inicio
- - aplicaciones web progresivas
- - js13kGames
- - progresiva
-translation_of: Web/Progressive_web_apps/Installable_PWAs
----
-{{PreviousMenuNext("Web/Apps/Progressive/Offline_Service_workers", "Web/Apps/Progressive/Re-engageable_Notifications_Push", "Web/Apps/Progressive")}}
-
-En el último artículo, leímos cómo la aplicación de ejemplo, js13kPWA , funciona sin conexión gracias a su {{web.link("/es/docs/Web/API/Service_Worker_API", "servicio worker")}}, pero podemos ir aún más lejos y permitir que los usuarios instalen la aplicación web en los navegadores móviles y de escritorio que lo admitan. Los usuarios pueden iniciar la aplicación web instalada como si fuera una aplicación nativa. Este artículo explica cómo lograr esto usando el manifiesto de la aplicación web.
-
-Estas tecnologías permiten que la aplicación se inicie directamente desde la pantalla de inicio del dispositivo, en lugar de que el usuario tenga que abrir el navegador y luego navegar al sitio utilizando un marcador o escribiendo la URL. Tu aplicación web se puede sentar junto a aplicaciones nativas como ciudadanos de primera clase. Esto facilita el acceso a la aplicación web; Además, puedes especificar que la aplicación se inicie en modo de pantalla completa o independiente, eliminando así la interfaz de usuario predeterminada del navegador que de otro modo estaría presente, creando una sensación aún más fluida y similar a la nativa.
-
-Requisitos
-
-Para que el sitio web sea instalable, necesitas lo siguiente:
-
-
- Un manifiesto web, con los {{web.link("/es/Apps/Progressive/Add_to_home_screen#Manifest", "campos correctos completados")}}
- Que sitio web se sirva desde un dominio seguro (HTTPS)
- Un icono para representar la aplicación en el dispositivo.
- Un {{web.link("/es/docs/Web/API/Service_Worker_API", "servicio worker")}} registrado para permitir que la aplicación funcione sin conexión (actualmente, esto solo lo requiere Chrome para Android)
-
-
-
-
Actualmente, solo los navegadores basados en Chromium tal como Chrome, Edge y Samsung Internet requieren el servicio worker . Si desarrollas tu aplicación con Firefox, ten en cuenta que necesitarás un servicio worker para que sea compatible con los navegadores basados en Chromium.
-
-
-El archivo de manifiesto
-
-El elemento clave es un archivo de manifiesto web, que enumera toda la información sobre el sitio web en formato JSON.
-
-Suele residir en el directorio raíz de una aplicación web. Contiene información útil, como el título de la aplicación, rutas a iconos de diferentes tamaños que se pueden usar para representar la aplicación en un sistema operativo (como un icono en la pantalla de inicio, una entrada en el menú Inicio o un icono en el escritorio) y un color de fondo para usar en las pantallas de carga o de presentación. Esta información es necesaria para que el navegador presente la aplicación web correctamente durante el proceso de instalación, así como dentro de la interfaz de inicio de la aplicación del dispositivo, como la pantalla de inicio de un dispositivo móvil.
-
-El archivo js13kpwa.webmanifest
de la aplicación web js13kPWA se incluye en el bloque {{HTMLElement("head")}} del archivo index.html
de la aplicación web usando la siguiente línea de código:
-
-<link rel="manifest" href="js13kpwa.webmanifest">
-
-
-
Hay algunos tipos comunes de archivos de manifiesto que se han utilizado en el pasado: manifest.webapp
era popular en los manifiestos de aplicaciones de Firefox OS, y muchos usan manifest.json
para manifestar aplicaciones web ya que el contenido está organizado en una estructura JSON. Sin embargo, el formato de archivo .webmanifest
se menciona explícitamente en la especificación del manifiesto W3C , por lo tanto ese es el que usaremos aquí.
-
-
-El contenido del archivo se ve así:
-
-{
- "name": "js13kGames Progressive Web App",
- "short_name": "js13kPWA",
- "description": "Aplicación web progresiva que enumera los juegos enviados a la categoría del marco A en la competencia js13kGames del 2017.",
- "icons": [
- {
- "src": "icons/icon-32.png",
- "sizes": "32x32",
- "type": "image/png"
- },
- // ...
- {
- "src": "icons/icon-512.png",
- "sizes": "512x512",
- "type": "image/png"
- }
- ],
- "start_url": "/pwa-examples/js13kpwa/index.html",
- "display": "fullscreen",
- "theme_color": "#B12A34",
- "background_color": "#B12A34"
-}
-
-
-La mayoría de los campos se explican por sí mismos, pero para estar seguros de que estamos en la misma página:
-
-
- name
: El nombre completo de tu aplicación web.
- short_name
: Nombre corto que se mostrará en la pantalla de inicio.
- description
: Una o dos frases que explican lo que hace tu aplicación.
- icons
: Gran cantidad de información de íconos — URLs de origen, tamaños y tipos. Asegúrate de incluir al menos algunos, de modo que se elija el que mejor se adapte al dispositivo del usuario.
- start_url
: El documento index
que se iniciará al arrancar la aplicación.
- display
: Cómo se muestra la aplicación; puede ser fullscreen
(pantalla completa), standalone
(independiente), minimal-ui
(interfaz de usuario mínima) o browser
(navegador).
- theme_color
: Un color primario para la interfaz de usuario, utilizado por el sistema operativo.
- background_color
: Un color que se utiliza como fondo predeterminado de la aplicación, usado durante la instalación y en la pantalla de bienvenida.
-
-
-Un manifiesto web mínimo debe tener al menos un name
y un campo icons
con al menos un icono definido; ese icono debe tener al menos los subcampos src
, sizes
y type
también. Más allá de eso, todo es opcional, aunque se recomiendan los campos description
, short_name
y start_url
. Incluso, hay más campos que puedes usar de los que se enumeran anteriormente; asegúrate de consultar la {{web.link("/es/docs/Web/Manifest", "referencia del manifiesto de la aplicación web")}} para obtener más detalles.
-
-Agregar a la pantalla inicial
-
-"Agregar a la pantalla de inicio" (o aapi para abreviar) es una función implementada por los navegadores móviles que toma la información que se encuentra en el manifiesto de una aplicación web y la usa para representar la aplicación en la pantalla de inicio del dispositivo con un icono y un nombre. Esto solo funciona si la aplicación cumple con todos los requisitos necesarios, como se describió anteriormente.
-
-Cuando el usuario visita la PWA con un navegador móvil compatible, debe mostrar una notificación (como un pasquín o un cuadro de diálogo) que indique que es posible instalar la aplicación como una PWA.
-
-
-
-Una vez que el usuario indica que desea continuar con la instalación, se muestra el pasquín de instalación. Ese pasquín es creado automáticamente por el navegador, basado en la información del archivo de manifiesto. Por ejemplo, el mensaje incluye el nombre y el icono de la aplicación.
-
-
-
-Si el usuario hace clic en el botón, hay un paso final que muestra cómo se verá la aplicación y permite que el usuario elija si definitivamente desea agregar la aplicación.
-
-
-
-Cuando se confirme, la aplicación se instalará en la pantalla de inicio.
-
-
-
-Ahora el usuario puede iniciar y utilizar la aplicación web como cualquier otra aplicación en su dispositivo. Dependiendo del dispositivo y el sistema operativo, el icono de la aplicación web puede tener una insignia con un pequeño icono que indica que se trata de una aplicación web. En la captura de pantalla anterior, por ejemplo, la aplicación tiene un pequeño icono de Firefox, lo cual indica que es una aplicación web que usa el entorno de ejecución de Firefox.
-
-Pantalla de bienvenida
-
-En algunos navegadores, también se genera una pantalla de bienvenida a partir de la información del manifiesto, que se muestra cuando se inicia la PWA y mientras se carga.
-
-
-
-El icono y los colores del tema y fondo se utilizan para crear esta pantalla.
-
-Resumen
-
-En este artículo, aprendimos cómo podemos hacer que las PWAs se puedan instalar con un manifiesto web correctamente configurado, y cómo el usuario puede luego instalar la PWA con la función "agregar a la pantalla de inicio" de su navegador.
-
-Para obtener más información sobre aapi , asegúrate de leer nuestra {{web.link("/es/docs/Web/Apps/Progressive/Add_to_home_screen", "guía para agregar a la pantalla de inicio")}}. La compatibilidad con el navegador se limita actualmente a Firefox para Android 58+, Mobile Chrome y Android Webview 31+, y Opera para Android 32+, pero esto debería mejorar en un próximo futuro.
-
-Ahora pasemos a la última pieza del rompecabezas de PWA: usar notificaciones automáticas para compartir anuncios con el usuario y ayudarlo a volver a interactuar con tu aplicación.
-
-{{PreviousMenuNext("Web/Apps/Progressive/Offline_Service_workers", "Web/Apps/Progressive/Re-engageable_Notifications_Push", "Web/Apps/Progressive")}}
-
-{{QuickLinksWithSubpages("/es/docs/Web/Progressive_web_apps/")}}
diff --git a/files/es/web/progressive_web_apps/installable_pwas/index.md b/files/es/web/progressive_web_apps/installable_pwas/index.md
new file mode 100644
index 00000000000000..bc391e8d1da7be
--- /dev/null
+++ b/files/es/web/progressive_web_apps/installable_pwas/index.md
@@ -0,0 +1,125 @@
+---
+title: Cómo hacer PWAs instalables
+slug: Web/Progressive_web_apps/Installable_PWAs
+tags:
+ - Instalable
+ - PWAs
+ - aapi
+ - agregar a pantalla de inicio
+ - aplicaciones web progresivas
+ - js13kGames
+ - progresiva
+translation_of: Web/Progressive_web_apps/Installable_PWAs
+---
+{{PreviousMenuNext("Web/Apps/Progressive/Offline_Service_workers", "Web/Apps/Progressive/Re-engageable_Notifications_Push", "Web/Apps/Progressive")}}
+
+En el último artículo, leímos cómo la aplicación de ejemplo, [js13kPWA](https://mdn.github.io/pwa-examples/js13kpwa/), funciona sin conexión gracias a su {{web.link("/es/docs/Web/API/Service_Worker_API", "servicio worker")}}, pero podemos ir aún más lejos y permitir que los usuarios instalen la aplicación web en los navegadores móviles y de escritorio que lo admitan. Los usuarios pueden iniciar la aplicación web instalada como si fuera una aplicación nativa. Este artículo explica cómo lograr esto usando el manifiesto de la aplicación web.
+
+Estas tecnologías permiten que la aplicación se inicie directamente desde la pantalla de inicio del dispositivo, en lugar de que el usuario tenga que abrir el navegador y luego navegar al sitio utilizando un marcador o escribiendo la URL. Tu aplicación web se puede sentar junto a aplicaciones nativas como ciudadanos de primera clase. Esto facilita el acceso a la aplicación web; Además, puedes especificar que la aplicación se inicie en modo de pantalla completa o independiente, eliminando así la interfaz de usuario predeterminada del navegador que de otro modo estaría presente, creando una sensación aún más fluida y similar a la nativa.
+
+## Requisitos
+
+Para que el sitio web sea instalable, necesitas lo siguiente:
+
+- Un manifiesto web, con los {{web.link("/es/Apps/Progressive/Add_to_home_screen#Manifest", "campos correctos completados")}}
+- Que sitio web se sirva desde un dominio seguro (HTTPS)
+- Un icono para representar la aplicación en el dispositivo.
+- Un {{web.link("/es/docs/Web/API/Service_Worker_API", "servicio worker")}} registrado para permitir que la aplicación funcione sin conexión (actualmente, esto solo lo requiere Chrome para Android)
+
+> **Nota:** Actualmente, solo los navegadores basados en Chromium tal como Chrome, Edge y Samsung Internet requieren el servicio _worker_. Si desarrollas tu aplicación con Firefox, ten en cuenta que necesitarás un servicio _worker_ para que sea compatible con los navegadores basados en Chromium.
+
+### El archivo de manifiesto
+
+El elemento clave es un archivo de manifiesto web, que enumera toda la información sobre el sitio web en formato JSON.
+
+Suele residir en el directorio raíz de una aplicación web. Contiene información útil, como el título de la aplicación, rutas a iconos de diferentes tamaños que se pueden usar para representar la aplicación en un sistema operativo (como un icono en la pantalla de inicio, una entrada en el menú Inicio o un icono en el escritorio) y un color de fondo para usar en las pantallas de carga o de presentación. Esta información es necesaria para que el navegador presente la aplicación web correctamente durante el proceso de instalación, así como dentro de la interfaz de inicio de la aplicación del dispositivo, como la pantalla de inicio de un dispositivo móvil.
+
+El archivo `js13kpwa.webmanifest` de la aplicación web [js13kPWA](https://mdn.github.io/pwa-examples/js13kpwa/) se incluye en el bloque {{HTMLElement("head")}} del archivo `index.html` de la aplicación web usando la siguiente línea de código:
+
+```html
+
+```
+
+> **Nota:** Hay algunos tipos comunes de archivos de manifiesto que se han utilizado en el pasado: `manifest.webapp` era popular en los manifiestos de aplicaciones de Firefox OS, y muchos usan `manifest.json` para manifestar aplicaciones web ya que el contenido está organizado en una estructura JSON. Sin embargo, el formato de archivo `.webmanifest` se menciona explícitamente en la [especificación del manifiesto W3C](https://w3c.github.io/manifest/), por lo tanto ese es el que usaremos aquí.
+
+El contenido del archivo se ve así:
+
+```json
+{
+ "name": "js13kGames Progressive Web App",
+ "short_name": "js13kPWA",
+ "description": "Aplicación web progresiva que enumera los juegos enviados a la categoría del marco A en la competencia js13kGames del 2017.",
+ "icons": [
+ {
+ "src": "icons/icon-32.png",
+ "sizes": "32x32",
+ "type": "image/png"
+ },
+ // ...
+ {
+ "src": "icons/icon-512.png",
+ "sizes": "512x512",
+ "type": "image/png"
+ }
+ ],
+ "start_url": "/pwa-examples/js13kpwa/index.html",
+ "display": "fullscreen",
+ "theme_color": "#B12A34",
+ "background_color": "#B12A34"
+}
+```
+
+La mayoría de los campos se explican por sí mismos, pero para estar seguros de que estamos en la misma página:
+
+- `name`: El nombre completo de tu aplicación web.
+- `short_name`: Nombre corto que se mostrará en la pantalla de inicio.
+- `description`: Una o dos frases que explican lo que hace tu aplicación.
+- `icons`: Gran cantidad de información de íconos — URLs de origen, tamaños y tipos. Asegúrate de incluir al menos algunos, de modo que se elija el que mejor se adapte al dispositivo del usuario.
+- `start_url`: El documento `index` que se iniciará al arrancar la aplicación.
+- `display`: Cómo se muestra la aplicación; puede ser `fullscreen` (pantalla completa), `standalone` (independiente), `minimal-ui` (interfaz de usuario mínima) o `browser` (navegador).
+- `theme_color`: Un color primario para la interfaz de usuario, utilizado por el sistema operativo.
+- `background_color`: Un color que se utiliza como fondo predeterminado de la aplicación, usado durante la instalación y en la pantalla de bienvenida.
+
+Un manifiesto web mínimo debe tener al menos un `name` y un campo `icons` con al menos un icono definido; ese icono debe tener al menos los subcampos `src`, `sizes` y `type` también. Más allá de eso, todo es opcional, aunque se recomiendan los campos `description`, `short_name` y `start_url`. Incluso, hay más campos que puedes usar de los que se enumeran anteriormente; asegúrate de consultar la {{web.link("/es/docs/Web/Manifest", "referencia del manifiesto de la aplicación web")}} para obtener más detalles.
+
+## Agregar a la pantalla inicial
+
+"Agregar a la pantalla de inicio" (o _aapi_ para abreviar) es una función implementada por los navegadores móviles que toma la información que se encuentra en el manifiesto de una aplicación web y la usa para representar la aplicación en la pantalla de inicio del dispositivo con un icono y un nombre. Esto solo funciona si la aplicación cumple con todos los requisitos necesarios, como se describió anteriormente.
+
+Cuando el usuario visita la PWA con un navegador móvil compatible, debe mostrar una notificación (como un pasquín o un cuadro de diálogo) que indique que es posible instalar la aplicación como una PWA.
+
+![Agregar a la ventana emergente de la pantalla de inicio de js13kPWA.](https://mdn.mozillademos.org/files/15928/js13kpwa-icon.png)
+
+Una vez que el usuario indica que desea continuar con la instalación, se muestra el pasquín de instalación. Ese pasquín es creado automáticamente por el navegador, basado en la información del archivo de manifiesto. Por ejemplo, el mensaje incluye el nombre y el icono de la aplicación.
+
+![Pancarta de instalación de js13kPWA.](https://mdn.mozillademos.org/files/15927/js13kpwa-banner.png)
+
+Si el usuario hace clic en el botón, hay un paso final que muestra cómo se verá la aplicación y permite que el usuario elija si definitivamente desea agregar la aplicación.
+
+![Agregar a la ventana emergente de la pantalla de inicio de js13kPWA.](https://mdn.mozillademos.org/files/15926/js13kpwa-add.png)
+
+Cuando se confirme, la aplicación se instalará en la pantalla de inicio.
+
+![Pantalla de inicio](https://mdn.mozillademos.org/files/15834/js13kpwa-installed.png)
+
+Ahora el usuario puede iniciar y utilizar la aplicación web como cualquier otra aplicación en su dispositivo. Dependiendo del dispositivo y el sistema operativo, el icono de la aplicación web puede tener una insignia con un pequeño icono que indica que se trata de una aplicación web. En la captura de pantalla anterior, por ejemplo, la aplicación tiene un pequeño icono de Firefox, lo cual indica que es una aplicación web que usa el entorno de ejecución de Firefox.
+
+### Pantalla de bienvenida
+
+En algunos navegadores, también se genera una pantalla de bienvenida a partir de la información del manifiesto, que se muestra cuando se inicia la PWA y mientras se carga.
+
+![Pantalla de bienvenida](https://mdn.mozillademos.org/files/15835/js13kpwa-splash.png)
+
+El icono y los colores del tema y fondo se utilizan para crear esta pantalla.
+
+## Resumen
+
+En este artículo, aprendimos cómo podemos hacer que las PWAs se puedan instalar con un manifiesto web correctamente configurado, y cómo el usuario puede luego instalar la PWA con la función "agregar a la pantalla de inicio" de su navegador.
+
+Para obtener más información sobre _aapi_, asegúrate de leer nuestra {{web.link("/es/docs/Web/Apps/Progressive/Add_to_home_screen", "guía para agregar a la pantalla de inicio")}}. La compatibilidad con el navegador se limita actualmente a Firefox para Android 58+, Mobile Chrome y Android Webview 31+, y Opera para Android 32+, pero esto debería mejorar en un próximo futuro.
+
+Ahora pasemos a la última pieza del rompecabezas de PWA: usar notificaciones automáticas para compartir anuncios con el usuario y ayudarlo a volver a interactuar con tu aplicación.
+
+{{PreviousMenuNext("Web/Apps/Progressive/Offline_Service_workers", "Web/Apps/Progressive/Re-engageable_Notifications_Push", "Web/Apps/Progressive")}}
+
+{{QuickLinksWithSubpages("/es/docs/Web/Progressive_web_apps/")}}
diff --git a/files/es/web/progressive_web_apps/installing/index.html b/files/es/web/progressive_web_apps/installing/index.html
deleted file mode 100644
index 5eb6cc9f95aa1c..00000000000000
--- a/files/es/web/progressive_web_apps/installing/index.html
+++ /dev/null
@@ -1,96 +0,0 @@
----
-title: Instalar y desinstalar aplicaciones web
-slug: Web/Progressive_web_apps/Installing
-tags:
- - Android
- - Apps
- - Chrome
- - Desinstalar
- - Firefox
- - Guía
- - Lanzar
- - PWA
- - Pantalla de inicio
- - Principiante
- - Samsung
- - Web
- - aplicaciones
- - aplicaciones web progresivas
- - instalar
-translation_of: Web/Progressive_web_apps/Developer_guide/Installing
-original_slug: Web/Progressive_web_apps/Developer_guide/Installing
----
-
-La instalación de aplicaciones web es una función disponible en los navegadores modernos que permite a los usuarios elegir "instalar" fácil y cómodamente una aplicación web en su dispositivo para que puedan acceder a ella de la misma manera que lo harían con cualquier otra aplicación. Dependiendo del dispositivo y las características del sistema operativo y el navegador, esto puede resultar en lo que esencialmente es una aplicación con todas las funciones (por ejemplo, usando WebAPK en Android) o como un acceso directo agregado a la pantalla de tu dispositivo. Esta guía explica cómo se realiza la instalación, qué significa y qué debes hacer como desarrollador para que los usuarios la aprovechen.
-
-¿Por qué la instalación?
-
-La opción de instalar una aplicación web es parte de la filosofía {{web.link("/es/docs/Web/Progressive_web_apps", "Aplicación web progresiva")}}, que proporciona a las aplicaciones web las mismas ventajas de experiencia de usuario que las aplicaciones nativas para que puedan ser competitivas. Las aplicaciones instaladas se invocan de manera más conveniente ya que tienen presencia en la pantalla de inicio de un dispositivo o en la lista o barra de aplicaciones. Esto facilita que un usuario utilice un gesto para acceder a una aplicación tocando o haciendo clic en su icono. La aplicación en sí misma, se puede manifestar como en una vista sin bordes (sin el navegador Chrome completo) pero, no obstante, se está ejecutando de manera efectiva como una pestaña dentro del navegador.
-
-Para los usuarios, la experiencia de una PWA aparentemente nativa es más cómoda y conveniente que un sitio web típico. Al reducir la diferencia de experiencia del usuario entre la aplicación web y las aplicaciones nativas en el dispositivo del usuario, reduce tanto la pérdida de cualquier memoria muscular que tenga relacionada con la interfaz nativa del dispositivo como la sensación de que "algo no va del todo bien" que los usuarios pueden experimentar al cambiar entre aplicaciones nativas y basadas en web.
-
-¿Qué navegadores admiten la instalación?
-
-La instalación es compatible con Chrome para Android y Android WebView versión 31 y posteriores, Opera para Android 32 en adelante, Samsung Internet a partir de la versión 4 y Firefox para Android {{web.link("/es/docs/Mozilla/Firefox/Releases/58", "versión 58")}} y posteriores.
-
-Safari en iOS es un poco diferente. Algunas partes del ecosistema de PWA son compatibles, mientras que otras no. iOS 13 introdujo una experiencia de instalación mucho más comparable, que también se describe aquí.
-
-La instalación en la experiencia del usuario
-
-Hemos escrito un sitio web de ejemplo muy simple (ve nuestra demostración en vivo , y también ve el código fuente ) que no hace mucho, pero fue desarrollado con el código necesario para permitir su instalación, así como un servicio worker> para permitir su uso sin conexión. El ejemplo muestra una serie de imágenes de zorros. Si tienes un dispositivo compatible con la aplicación web disponible, utilízalo para navegar a nuestra demostración en https://mdn.github.io/pwa-examples/a2hs/
. Verás imágenes de zorros, pero lo que es más importante, habrá alguna forma de interfaz de usuario disponible para permitirte instalar el sitio como una aplicación web.
-
-La interfaz de usuario para esto varía de un navegador a otro, pero la idea general es la misma. Desafortunadamente, no existe un estándar para los iconos y símbolos utilizados para operaciones como esta.
-
-Firefox para Android
-
-En un dispositivo Android que usa Firefox, verás un ícono de "inicio" con un ícono más (+) en su interior; este es el ícono "Agregar a la pantalla de inicio" que se muestra para cualquier sitio que tenga las características necesarias en su lugar.
-
-
-
-Al tocar este, se mostrará un pasquín de confirmación; al presionar el botón grande "+ AGREGAR A LA PANTALLA DE INICIO", se completa la acción y se agrega la aplicación a la pantalla de inicio. Ten en cuenta que en Android 8 y versiones posteriores, se mostrará primero un cuadro de diálogo de permiso "Agregar a la pantalla de inicio" a nivel del sistema.
-
-
-
-Navegador de Internet Samsung
-
-Si tiene Samsung Internet en tu dispositivo móvil, verás un icono diferente.
-
-
-
-Tocar ese ícono debería llevarte al mismo pasquín de confirmación que se muestra en Firefox arriba.
-
-Google Chrome para Android
-
-Si tienes Google Chrome para Android disponible, la experiencia es ligeramente diferente; al cargar nuestro sitio, verás un pasquín de instalación emergente que te preguntará si deseas agregar esta aplicación a tu pantalla de inicio.
-
-
-
-
-
-Si eliges no agregarlo a tu pantalla de inicio en este momento, los puedes hacer más tarde usando el ícono "Agregar a la pantalla de inicio" en el menú principal de Chrome.
-
-Safari para iOS/iPhoneOS/iPadOS
-
-En iOS de Apple (incluidos iPhoneOS y iPadOS), el navegador Safari integrado en el dispositivo tiene cierto soporte para aplicaciones web, incluido el soporte para agregar a la función de pantalla de inicio. Para agregar una aplicación web a la pantalla de inicio (también conocida como lanzador o trampolín), toca el botón para compartir ( ) en la parte inferior de la pantalla:
-
-
-
-Esto llama al panel para compartir. Entre las opciones debe estar la opción "Agregar a la pantalla de inicio", a menos que el usuario la haya eliminado específicamente de la lista al editar las opciones mostradas:
-
-
-
-Al elegir "Agregar a la pantalla de inicio" aquí se presenta el cuadro de diálogo de confirmación, que no solo confirma que el usuario desea agregar la aplicación a la pantalla de inicio, sino que también le permite personalizar su nombre.
-
-
-
-Al hacer clic en "Agregar", la aplicación se incluye en la pantalla de inicio.
-
-La aplicación web instalada
-
-Independientemente del navegador y el dispositivo que estés utilizando, cuando eliges agregar la aplicación a tu pantalla de inicio o al iniciador de aplicaciones, aparecerá allí con el mismo aspecto que cualquier aplicación. Normalmente, esto significa que verás el icono de la aplicación junto con un título corto.
-
-
-
-Cuando tocas el icono de la aplicación web en la pantalla de inicio, se abre en un entorno web de pantalla completa, sin la interfaz de usuario del navegador a su alrededor.
diff --git a/files/es/web/progressive_web_apps/installing/index.md b/files/es/web/progressive_web_apps/installing/index.md
new file mode 100644
index 00000000000000..44e39890c4875b
--- /dev/null
+++ b/files/es/web/progressive_web_apps/installing/index.md
@@ -0,0 +1,93 @@
+---
+title: Instalar y desinstalar aplicaciones web
+slug: Web/Progressive_web_apps/Installing
+tags:
+ - Android
+ - Apps
+ - Chrome
+ - Desinstalar
+ - Firefox
+ - Guía
+ - Lanzar
+ - PWA
+ - Pantalla de inicio
+ - Principiante
+ - Samsung
+ - Web
+ - aplicaciones
+ - aplicaciones web progresivas
+ - instalar
+translation_of: Web/Progressive_web_apps/Developer_guide/Installing
+original_slug: Web/Progressive_web_apps/Developer_guide/Installing
+---
+La instalación de aplicaciones web es una función disponible en los navegadores modernos que permite a los usuarios elegir "instalar" fácil y cómodamente una aplicación web en su dispositivo para que puedan acceder a ella de la misma manera que lo harían con cualquier otra aplicación. Dependiendo del dispositivo y las características del sistema operativo y el navegador, esto puede resultar en lo que esencialmente es una aplicación con todas las funciones (por ejemplo, usando [WebAPK](https://developers.google.com/web/fundamentals/integration/webapks) en Android) o como un acceso directo agregado a la pantalla de tu dispositivo. Esta guía explica cómo se realiza la instalación, qué significa y qué debes hacer como desarrollador para que los usuarios la aprovechen.
+
+## ¿Por qué la instalación?
+
+La opción de instalar una aplicación web es parte de la filosofía {{web.link("/es/docs/Web/Progressive_web_apps", "Aplicación web progresiva")}}, que proporciona a las aplicaciones web las mismas ventajas de experiencia de usuario que las aplicaciones nativas para que puedan ser competitivas. Las aplicaciones instaladas se invocan de manera más conveniente ya que tienen presencia en la pantalla de inicio de un dispositivo o en la lista o barra de aplicaciones. Esto facilita que un usuario utilice un gesto para acceder a una aplicación tocando o haciendo clic en su icono. La aplicación en sí misma, se puede manifestar como en una vista sin bordes (sin el navegador Chrome completo) pero, no obstante, se está ejecutando de manera efectiva como una pestaña dentro del navegador.
+
+Para los usuarios, la experiencia de una PWA aparentemente nativa es más cómoda y conveniente que un sitio web típico. Al reducir la diferencia de experiencia del usuario entre la aplicación web y las aplicaciones nativas en el dispositivo del usuario, reduce tanto la pérdida de cualquier memoria muscular que tenga relacionada con la interfaz nativa del dispositivo como la sensación de que "algo no va del todo bien" que los usuarios pueden experimentar al cambiar entre aplicaciones nativas y basadas en web.
+
+## ¿Qué navegadores admiten la instalación?
+
+La instalación es compatible con Chrome para Android y Android WebView versión 31 y posteriores, Opera para Android 32 en adelante, Samsung Internet a partir de la versión 4 y Firefox para Android {{web.link("/es/docs/Mozilla/Firefox/Releases/58", "versión 58")}} y posteriores.
+
+Safari en iOS es un poco diferente. Algunas partes del ecosistema de PWA son compatibles, mientras que otras no. iOS 13 introdujo una experiencia de instalación mucho más comparable, que también se describe aquí.
+
+## La instalación en la experiencia del usuario
+
+Hemos escrito un sitio web de ejemplo muy simple ([ve nuestra demostración en vivo](https://mdn.github.io/pwa-examples/a2hs/), y también [ve el código fuente](https://github.com/mdn/pwa-examples/tree/master/a2hs)) que no hace mucho, pero fue desarrollado con el código necesario para permitir su instalación, así como un servicio _worker> para permitir su uso sin conexión. El ejemplo muestra una serie de imágenes de zorros. Si tienes un dispositivo compatible con la aplicación web disponible, utilízalo para navegar a nuestra demostración en `https://mdn.github.io/pwa-examples/a2hs/`. Verás imágenes de zorros, pero lo que es más importante, habrá alguna forma de interfaz de usuario disponible para permitirte instalar el sitio como una aplicación web._
+
+_La interfaz de usuario para esto varía de un navegador a otro, pero la idea general es la misma. Desafortunadamente, no existe un estándar para los iconos y símbolos utilizados para operaciones como esta._
+
+### _Firefox para Android_
+
+_En un dispositivo Android que usa Firefox, verás un ícono de "inicio" con un ícono más (+) en su interior; este es el ícono "Agregar a la pantalla de inicio" que se muestra para cualquier sitio que tenga las características necesarias en su lugar._
+
+_**![Una captura de pantalla de un navegador web que muestra el ícono Agregar a la pantalla de inicio en la parte superior]()**_
+
+_Al tocar este, se mostrará un pasquín de confirmación; al presionar el botón grande "+ AGREGAR A LA PANTALLA DE INICIO", se completa la acción y se agrega la aplicación a la pantalla de inicio. Ten en cuenta que en Android 8 y versiones posteriores, se mostrará primero un cuadro de diálogo de permiso "Agregar a la pantalla de inicio" a nivel del sistema._
+
+_![Una captura de pantalla de Firefox para Android que solicita confirmación antes de instalar una aplicación web](https://mdn.mozillademos.org/files/17160/fx-a2hs-banner.png)_
+
+### _Navegador de Internet Samsung_
+
+_Si tiene Samsung Internet en tu dispositivo móvil, verás un icono diferente._
+
+_![Una captura de pantalla del navegador de Internet de Samsung que muestra su icono Agregar a la pantalla de inicio](https://mdn.mozillademos.org/files/17161/samsung-internet-add-app.png)_
+
+_Tocar ese ícono debería llevarte al mismo pasquín de confirmación que se muestra en Firefox arriba._
+
+### _Google Chrome para Android_
+
+_Si tienes Google Chrome para Android disponible, la experiencia es ligeramente diferente; al cargar nuestro sitio, verás un mensaje de instalación emergente que te preguntará si deseas agregar esta aplicación a tu pantalla de inicio._
+
+_![Captura de pantalla de un pasquín de Chrome que solicita permiso para instalar la aplicación de muestra Foxes](https://mdn.mozillademos.org/files/17159/chrome-a2hs-banner.png)_
+
+> **Nota:** Puedes obtener más información sobre los mensajes de instalación de Chrome en el artículo [Mensajes de instalación de aplicaciones web](https://developers.google.com/web/fundamentals/app-install-banners/)._
+
+_Si eliges no agregarlo a tu pantalla de inicio en este momento, los puedes hacer más tarde usando el ícono "Agregar a la pantalla de inicio" en el menú principal de Chrome._
+
+### _Safari para iOS/iPhoneOS/iPadOS_
+
+_En iOS de Apple (incluidos iPhoneOS y iPadOS), el navegador Safari integrado en el dispositivo tiene cierto soporte para aplicaciones web, incluido el soporte para agregar a la función de pantalla de inicio. Para agregar una aplicación web a la pantalla de inicio (también conocida como lanzador o trampolín), toca el botón para compartir (![Icono de compartir cuadrado y flecha desde iOS y macOS](https://mdn.mozillademos.org/files/17156/square.svg)) en la parte inferior de la pantalla:_
+
+_![Captura de pantalla que muestra la ubicación del botón Compartir en Safari en iOS 13](https://mdn.mozillademos.org/files/17163/safari-ios-a2hs-icon.png)_
+
+_Esto llama al panel para compartir. Entre las opciones debe estar la opción "Agregar a la pantalla de inicio", a menos que el usuario la haya eliminado específicamente de la lista al editar las opciones mostradas:_
+
+_![Captura de pantalla del panel para compartir de Safari iOS, que muestra la opción](https://mdn.mozillademos.org/files/17165/safari-ios-share-menu.png)_
+
+_Al elegir "Agregar a la pantalla de inicio" aquí se presenta el cuadro de diálogo de confirmación, que no solo confirma que el usuario desea agregar la aplicación a la pantalla de inicio, sino que también le permite personalizar su nombre._
+
+_![Una captura de pantalla de iOS Safari que muestra su panel de configuración y confirmación "Agregar a la pantalla de inicio"](https://mdn.mozillademos.org/files/17167/safari-ios-a2hs-banner.png)_
+
+_Al hacer clic en "Agregar", la aplicación se incluye en la pantalla de inicio._
+
+### _La aplicación web instalada_
+
+_Independientemente del navegador y el dispositivo que estés utilizando, cuando eliges agregar la aplicación a tu pantalla de inicio o al iniciador de aplicaciones, aparecerá allí con el mismo aspecto que cualquier aplicación. Normalmente, esto significa que verás el icono de la aplicación junto con un título corto._
+
+_![Captura de pantalla de una pantalla de inicio de Android con la aplicación "Foxes" mostrada](https://mdn.mozillademos.org/files/17157/a2hs-on-home-screen.png)_
+
+_Cuando tocas el icono de la aplicación web en la pantalla de inicio, se abre en un entorno web de pantalla completa, sin la interfaz de usuario del navegador a su alrededor._
diff --git a/files/es/web/progressive_web_apps/introduction/index.html b/files/es/web/progressive_web_apps/introduction/index.html
deleted file mode 100644
index 5640cfd3f45161..00000000000000
--- a/files/es/web/progressive_web_apps/introduction/index.html
+++ /dev/null
@@ -1,169 +0,0 @@
----
-title: Introducción a aplicaciones web progresivas
-slug: Web/Progressive_web_apps/Introduction
-tags:
- - Aplicaciones web prograsivas
- - Guía
- - Intermedio
- - Intruducción
- - PWA
- - Servicio Worker
- - aplicaciones
- - js13kGames
- - manifiesto web
- - progresiva
-translation_of: Web/Progressive_web_apps/Introduction
----
-{{NextMenu("Web/Progressive_web_apps/App_structure", "Web/Progressive_web_apps")}}
-
-Este articulo provee una introducción a las Aplicaciones web progresivas (PWAs), explica qué son, y las ventajas que brindan sobre las aplicaciones web convencionales.
-
-¿Qué es una aplicación web progresiva?
-
-El término "Aplicación web progresiva" no es un nombre formal u oficial. Solo es una abreviatura utilizada inicialmente por Google para el concepto de crear una aplicación flexible y adaptable utilizando solo tecnologías web.
-
-Las PWA son aplicaciones web desarrolladas con una serie de tecnologías específicas y patrones estándar que les permiten aprovechar las funciones de las aplicaciones nativas y web. Por ejemplo, las aplicaciones web son más fáciles de detectar que las aplicaciones nativas; es mucho más fácil y rápido visitar un sitio web que instalar una aplicación, y también puedes compartir aplicaciones web simplemente enviando un enlace.
-
-Por otro lado, las aplicaciones nativas están mejor integradas con el sistema operativo y, por lo tanto, ofrecen una experiencia más fluida para los usuarios. Puedes instalar una aplicación nativa para que funcione sin conexión, y a los usuarios les encanta tocar sus íconos para acceder fácilmente a sus aplicaciones favoritas, en lugar de navegar a través de un navegador.
-
-Las PWA brindan la capacidad de crear aplicaciones web que pueden disfrutar de estas mismas ventajas.
-
-No es un concepto completamente nuevo; estas ideas se han revisado muchas veces en la plataforma web con varios enfoques en el pasado. La mejora progresiva y el diseño adaptable ya te permiten crear sitios web compatibles con dispositivos móviles.
-
-Sin embargo, las PWA brindan todo esto y más sin perder ninguna de las características existentes que hacen que la web sea excelente.
-
-¿Qué hace que una aplicación sea una PWA?
-
-Como dijimos anteriormente, las PWA no se crean con una sola tecnología. Representan una nueva filosofía para la creación de aplicaciones web, que incluye algunos patrones específicos, API y otras características. A primera vista, no es tan obvio si una aplicación web es una PWA o no. Una aplicación se podría considerar una PWA cuando cumple con ciertos requisitos o implementa un conjunto de características determinadas — funciona sin conexión, es instalable, es fácil de sincronizar, puede enviar notificaciones automáticas, etc.
-
-Además, existen herramientas para medir qué tan completa (como porcentaje) es una aplicación web, como Lighthouse . Al implementar varias ventajas tecnológicas, podemos hacer que una aplicación sea más progresiva, y así terminar con una puntuación de Lighthouse más alta. Pero este es solo un indicador aproximado.
-
-Hay algunos principios clave que una aplicación web debe tratar de observar para ser identificada como PWA. Estos deben ser:
-
-
- {{web.link("/es/docs/Web/Progressive_web_apps/Advantages", "Detectable", "#Discoverable")}}, por lo que el contenido se puede encontrar a través de motores de búsqueda.
- {{web.link("/es/docs/Web/Progressive_web_apps/Advantages", "Instalable", "#Instalable")}}, por lo que puede estar disponible en la pantalla de inicio del dispositivo o en el lanzador de aplicaciones.
- {{web.link("/es/docs/Web/Progressive_web_apps/Advantages", "Enlazable", "#Enlazable")}}, para que puedas compartirla simplemente enviando una URL.
- {{web.link("/es/docs/Web/Progressive_web_apps/Advantages", "Independiente de la red", "#Independiente_de_la_red")}}, por lo que funciona sin conexión o con una deficiente conexión de red.
- {{web.link("/es/docs/Web/Progressive_web_apps/Advantages", "Progresiva", "#Progresiva")}}, por lo que todavía se puede utilizar en un nivel básico en los navegadores más antiguos, pero completamente funcional en los más recientes.
- {{web.link("/es/docs/Web/Progressive_web_apps/Advantages", "Reconectable", "#Reconectable")}}, por lo que puede enviar notificaciones cuando haya contenido nuevo disponible.
- {{web.link("/es/docs/Web/Progressive_web_apps/Advantages", "Adaptable", "#Adaptable")}}, por lo tanto se puede utilizar en cualquier dispositivo con pantalla y navegador: teléfonos móviles, tabletas, computadoras portátiles, televisores, refrigeradores, etc.
- {{web.link("/es/docs/Web/Progressive_web_apps/Advantages", "Segura", "#Segura")}} por lo que las conexiones entre el usuario, la aplicación y tu servidor están protegidos contra terceros que intenten acceder a datos sensibles.
-
-
-Ofrecer estas funciones y hacer uso de todas las Ventajas que ofrecen las aplicaciones web puede crear una oferta atractiva y altamente flexible para tus usuarios y clientes.
-
-¿Vale la pena hacer todo eso?
-
-¡Absolutamente! Con un esfuerzo relativamente pequeño para implementar las características principales de las PWAs, los beneficios son enormes. Por ejemplo:
-
-
- Una disminución en los tiempos de carga después de la instalación de la aplicación, gracias al almacenamiento en caché con el {{web.link("/es/docs/Web/API/Service_Worker_API", "servicio workers")}}, además de ahorrar un valioso ancho de banda y tiempo. Los PWAs tienen una carga casi instantánea (a partir de la segunda visita).
- La capacidad de actualizar solo el contenido que ha cambiado cuando hay disponible una actualización de la aplicación. En contraste, con una aplicación nativa, incluso la más mínima modificación puede obligar al usuario a descargar la aplicación completa nuevamente.
- Una apariencia que está más integrada con la plataforma nativa: íconos de aplicaciones en la pantalla de inicio o el lanzador de aplicaciones, aplicaciones que se ejecutan automáticamente en modo de pantalla completa, etc.
- Reconectable para interactuar con los usuarios mediante el uso de notificaciones del sistema y mensajes push
, lo cual genera usuarios más comprometidos y mejores tasas de conversión.
-
-
-Historias de éxito
-
-Hay muchas historias de éxito de empresas que probaron la ruta PWA, optaron por una experiencia de sitio web mejorada en lugar de una aplicación nativa y, como resultado, obtuvieron importantes beneficios medibles. El sitio web Estadísticas PWA comparte muchos estudios de casos que indican estos beneficios.
-
-La historia de éxito más conocida probablemente es la de Flipkart Lite . El sitio de comercio electrónico más grande de la India se reconstruyó como una aplicación web progresiva en 2015, lo que resultó en un aumento del 70% en las conversiones. La PWA AliExpress también ha obtenido resultados mucho mejores que la web o la aplicación nativa, con un aumento del 104% en las tasas de conversión para los nuevos usuarios. Dado el aumento de sus ganancias y la cantidad relativamente baja de trabajo requerida para la conversión de estas aplicaciones a PWA, la ventaja es clara.
-
-Las puestas en marcha emergentes en etapa temprana como couponmoto también han comenzado a usar aplicaciones web progresivas para impulsar una mayor participación de los consumidores, lo que demuestra que pueden ayudar tanto a pequeñas como a grandes empresas para (re)involucrar a los usuarios de manera más eficaz.
-
-Puedes consultar la lista en pwa.rocks para obtener más ejemplos. Vale la pena mencionar en particular la página hnpwa.com , que muestra una implementación de ejemplo del sitio web de Hacker News (en lugar de la aplicación habitual TodoMVC), en la que puedes ver el uso de varios marcos de desarrollo de la interfaz de usuario web.
-
-Incluso puedes generar PWA en línea utilizando el sitio web PWABuilder .
-
-Para obtener información específica sobre el servicio worker y la inserción, asegúrate de consultar el Libro de recetas del servicio worker , una colección de recetas que utilizan los servicios worker en sitios modernos.
-
-Vale la pena probar un enfoque de PWA, para que puedas ver por ti mismo si funciona para tu aplicación.
-
-Ventajas de las aplicaciones web
-
-Una aplicación web progresiva totalmente capaz debería proporcionar todas las siguientes ventajas al usuario.
-
-Reconocible
-
- El objetivo final es que las aplicaciones web tengan una mejor representación en los motores de búsqueda, sean más fáciles de exponer, catalogar y clasificar, y tener metadatos utilizables por los navegadores para brindarles capacidades especiales.
-
-Algunas de las capacidades ya se han habilitado en ciertas plataformas basadas en web mediante tecnologías patentadas como Open Graph , que proporciona un formato para especificar metadatos similares en el bloque {{HTMLElement("head")}} de {{Glossary("HTML")}} con etiquetas {{HTMLElement("meta")}}.
-
-El estándar web relevante aquí es el {{web.link("/es/docs/Web/Manifest", "manifiesto de la aplicación web")}}, que define las características de una aplicación, como el nombre, el icono, la pantalla de presentación y los colores del tema en un archivo de manifiesto con formato {{Glossary("JSON")}}. Esto es para usar en contextos como listas de aplicaciones y pantallas de inicio de dispositivos.
-
-Instalable
-
-
-
-Una parte fundamental de la experiencia de la aplicación web es que los usuarios tengan iconos de aplicaciones en su pantalla de inicio y los puedan tocar para abrir aplicaciones en su propio contenedor nativo que se sienta bien integrado con la plataforma subyacente.
-
-Las aplicaciones web modernas pueden hacer que esta aplicación nativa se sienta a través de las propiedades establecidas dentro del manifiesto de la aplicación web y mediante una función disponible en los navegadores de teléfonos inteligentes modernos llamada {{web.link("/es/docs/Web/Progressive_web_apps/Developer_guide/Installing", "instalación de la aplicación web")}}.
-
-Enlazable
-
-
-
-Una de las características más poderosas de la web es la capacidad de vincularse a una aplicación en una URL específica sin la necesidad de una tienda de aplicaciones o un proceso de instalación complejo. Así ha sido siempre.
-
-Independiente de la red
-
-
-
-Las aplicaciones web modernas pueden funcionar cuando hay mala (o incluso inexistente) conectividad con la red. Las ideas básicas detrás de la independencia de la red son poder:
-
-
- Volver a visitar un sitio y obtener su contenido incluso si no hay una red disponible.
- Explorar cualquier tipo de contenido que el usuario haya visitado anteriormente al menos una vez, incluso en situaciones de mala conectividad.
- Controlar lo que se muestra al usuario en situaciones donde no hay conectividad.
-
-
-Esto se consigue mediante una combinación de tecnologías: el {{web.link("/es/docs/Web/API/Service_Worker_API", "servicio Workers")}} para controlar las solicitudes de página (por ejemplo, almacenarlas sin conexión), la {{web.link("/es/docs/Web/API/Cache", "API de caché")}} para almacenar respuestas a solicitudes de red sin conexión (muy útil para almacenar activos del sitio) y tecnologías de almacenamiento de datos secundarios como {{web.link("/es/docs/Web/API/Web_Storage_API", "Almacenamiento Web")}} y {{web.link("/es/docs/Web/API/IndexedDB_API", "IndexedDB")}} para almacenar datos de aplicaciones sin conexión.
-
-Compatibilidad de mejora progresiva
-
-
-
-Se pueden desarrollar aplicaciones web modernas para proporcionar una experiencia excelente a los navegadores totalmente compatibles y una experiencia aceptable (aunque no tan brillante) a los navegadores menos capaces. Hemos estado haciendo esto durante años con las mejores prácticas, como la mejora progresiva. Al utilizar {{Glossary("Progressive_Enhancement", "Mejora progresiva")}}, las PWAs se utilizan en varios navegadores. Esto significa que los desarrolladores deben tener en cuenta las diferencias en la implementación de algunas características y tecnologías PWA entre diferentes implementaciones de navegadores.
-
-Reconectable
-
-
-
-Una de las principales ventajas de las plataformas nativas es la facilidad con la que los usuarios pueden volver a interactuar con las actualizaciones y el contenido nuevo, incluso cuando no están mirando la aplicación o usando sus dispositivos. Las aplicaciones web modernas ahora también pueden hacer esto, utilizando nuevas tecnologías como Servicio Workers para controlar páginas, la {{web.link("/es/docs/Web/API/Push_API", "API Web Push")}} para enviar actualizaciones. directamente del servidor a la aplicación a través de un servicio workers y la {{web.link("/es/docs/Web/API/Notifications_API", "API de notificaciones")}} para generar notificaciones del sistema para ayudar a involucrar a los usuarios cuando no están utilizando activamente su navegador web.
-
-Adaptable
-
-
-
-Las aplicaciones web adaptables utilizan tecnologías como {{web.link("/es/docs/Web/CSS/Media_Queries", "consultas de medios")}} y {{web.link("/es/docs/Glossary/Viewport", "viewport")}} para asegurarte de que tu IU se ajuste a cualquier factor de forma: computadora de escritorio, dispositivo móvil, tableta o lo que venga a continuación.
-
-Segura
-
-
-
- La plataforma web proporciona un mecanismo de entrega seguro que evita espionaje y, al mismo tiempo, garantiza que el contenido no haya sido manipulado, siempre que aproveche {{Glossary("HTTPS")}} y desarrolles tus aplicaciones pensando en la seguridad.
-
-También es fácil para los usuarios asegurarse de que están instalando la aplicación correcta, porque su URL coincidirá con el dominio de tu sitio. Esto es muy diferente de las aplicaciones en las tiendas de aplicaciones, que pueden tener varias aplicaciones con nombres similares, algunas de las cuales incluso pueden estar basadas en su propio sitio, lo que aumenta la confusión. Las aplicaciones web eliminan esa confusión y garantizan que los usuarios obtengan la mejor experiencia posible.
-
-Compatibilidad con el navegador
-
-Como se mencionó anteriormente, las PWAs no dependen de una sola API, sino que utilizan varias tecnologías para lograr el objetivo de brindar la mejor experiencia web posible.
-
-El ingrediente clave requerido para las PWAs es la asistencia de {{web.link("/es/docs/Web/API/Service_Worker_API", "servicio workers")}}. Afortunadamente, los servicios de workers ahora son compatibles con los principales navegadores en computadoras de escritorio y dispositivos móviles.
-
-Otras características como {{web.link("/es/docs/Web/Manifest", "manifiesto de App Web")}}, {{web.link("/es/docs/Web/API/Push_API", "Push")}}, {{web.link("/es/docs/Web/API/Notifications_API", "Notificaciones")}} y la funcionalidad {{web.link("/es/docs/Web/Progressive_web_apps/Add_to_home_screen", "Agregar a la pantalla de inicio")}} también tienen un amplio soporte. Actualmente, Safari tiene soporte limitado para el manifiesto de aplicaciones web y Agregar a la pantalla de inicio y no admite notificaciones push web . Sin embargo, otros navegadores importantes admiten todas estas funciones.
-
-Por encima de todo, debes seguir la regla de mejora progresiva: usa tecnologías que mejoren la apariencia y la utilidad de tu aplicación cuando estén disponibles, pero que sigan ofreciendo la funcionalidad básica de tu aplicación cuando esas funciones no estén disponibles. Presentar un sitio web confiable con un buen rendimiento es una consecuencia del uso de estas mejoras; esto, a su vez, significa crear aplicaciones web que sigan las mejores prácticas. De esta manera, todos podrán usar la aplicación, pero aquellos con navegadores modernos se beneficiarán aún más de las funciones de PWA.
-
-Una aplicación de ejemplo
-
-En esta serie de artículos, examinaremos el código fuente de un sitio web súper simple que enumera información sobre juegos enviados a la categoría A-Frame en la Competición js13kGames 2017 . No tienes que pensar en cuál es el contenido real del sitio web; el punto principal es aprender a utilizar las funciones de PWA en sus propios proyectos.
-
-Puedes ver esta aplicación en acción en línea, y el código fuente está disponible en GitHub . Examinaremos este código detenidamente a lo largo de esta serie de artículos.
-
-Por ahora, ve a la segunda parte de esta serie, donde verás la estructura de la aplicación de ejemplo.
-
-{{NextMenu("Web/Progressive_web_apps/App_structure", "Web/Progressive_web_apps")}}
-
-{{QuickLinksWithSubpages("/es/docs/Web/Progressive_web_apps/")}}
diff --git a/files/es/web/progressive_web_apps/introduction/index.md b/files/es/web/progressive_web_apps/introduction/index.md
new file mode 100644
index 00000000000000..45997293dc686e
--- /dev/null
+++ b/files/es/web/progressive_web_apps/introduction/index.md
@@ -0,0 +1,165 @@
+---
+title: Introducción a aplicaciones web progresivas
+slug: Web/Progressive_web_apps/Introduction
+tags:
+ - Aplicaciones web prograsivas
+ - Guía
+ - Intermedio
+ - Intruducción
+ - PWA
+ - Servicio Worker
+ - aplicaciones
+ - js13kGames
+ - manifiesto web
+ - progresiva
+translation_of: Web/Progressive_web_apps/Introduction
+---
+{{NextMenu("Web/Progressive_web_apps/App_structure", "Web/Progressive_web_apps")}}
+
+Este articulo provee una introducción a las Aplicaciones web progresivas (PWAs), explica qué son, y las ventajas que brindan sobre las aplicaciones web convencionales.
+
+## ¿Qué es una aplicación web progresiva?
+
+El término "Aplicación web progresiva" no es un nombre formal u oficial. Solo es una abreviatura utilizada inicialmente por Google para el concepto de crear una aplicación flexible y adaptable utilizando solo tecnologías web.
+
+Las PWA son aplicaciones web desarrolladas con una serie de tecnologías específicas y patrones estándar que les permiten aprovechar las funciones de las aplicaciones nativas y web. Por ejemplo, las aplicaciones web son más fáciles de detectar que las aplicaciones nativas; es mucho más fácil y rápido visitar un sitio web que instalar una aplicación, y también puedes compartir aplicaciones web simplemente enviando un enlace.
+
+Por otro lado, las aplicaciones nativas están mejor integradas con el sistema operativo y, por lo tanto, ofrecen una experiencia más fluida para los usuarios. Puedes instalar una aplicación nativa para que funcione sin conexión, y a los usuarios les encanta tocar sus íconos para acceder fácilmente a sus aplicaciones favoritas, en lugar de navegar a través de un navegador.
+
+Las PWA brindan la capacidad de crear aplicaciones web que pueden disfrutar de estas mismas ventajas.
+
+No es un concepto completamente nuevo; estas ideas se han revisado muchas veces en la plataforma web con varios enfoques en el pasado. La mejora progresiva y el diseño adaptable ya te permiten crear sitios web compatibles con dispositivos móviles.
+
+Sin embargo, las PWA brindan todo esto y más sin perder ninguna de las características existentes que hacen que la web sea excelente.
+
+## ¿Qué hace que una aplicación sea una PWA?
+
+Como dijimos anteriormente, las PWA no se crean con una sola tecnología. Representan una nueva filosofía para la creación de aplicaciones web, que incluye algunos patrones específicos, API y otras características. A primera vista, _no_ es tan obvio si una aplicación web es una PWA o no. Una aplicación se podría considerar una PWA cuando cumple con ciertos requisitos o implementa un conjunto de características determinadas — funciona sin conexión, es instalable, es fácil de sincronizar, puede enviar notificaciones automáticas, etc.
+
+Además, existen herramientas para medir qué tan completa (como porcentaje) es una aplicación web, como [Lighthouse](https://developers.google.com/web/tools/lighthouse/). Al implementar varias ventajas tecnológicas, podemos hacer que una aplicación sea más progresiva, y así terminar con una puntuación de Lighthouse más alta. Pero este es solo un indicador aproximado.
+
+Hay algunos principios clave que una aplicación web debe tratar de observar para ser identificada como PWA. Estos deben ser:
+
+- {{web.link("/es/docs/Web/Progressive_web_apps/Advantages", "Detectable", "#Discoverable")}}, por lo que el contenido se puede encontrar a través de motores de búsqueda.
+- {{web.link("/es/docs/Web/Progressive_web_apps/Advantages", "Instalable", "#Instalable")}}, por lo que puede estar disponible en la pantalla de inicio del dispositivo o en el lanzador de aplicaciones.
+- {{web.link("/es/docs/Web/Progressive_web_apps/Advantages", "Enlazable", "#Enlazable")}}, para que puedas compartirla simplemente enviando una URL.
+- {{web.link("/es/docs/Web/Progressive_web_apps/Advantages", "Independiente de la red", "#Independiente_de_la_red")}}, por lo que funciona sin conexión o con una deficiente conexión de red.
+- {{web.link("/es/docs/Web/Progressive_web_apps/Advantages", "Progresiva", "#Progresiva")}}, por lo que todavía se puede utilizar en un nivel básico en los navegadores más antiguos, pero completamente funcional en los más recientes.
+- {{web.link("/es/docs/Web/Progressive_web_apps/Advantages", "Reconectable", "#Reconectable")}}, por lo que puede enviar notificaciones cuando haya contenido nuevo disponible.
+- {{web.link("/es/docs/Web/Progressive_web_apps/Advantages", "Adaptable", "#Adaptable")}}, por lo tanto se puede utilizar en cualquier dispositivo con pantalla y navegador: teléfonos móviles, tabletas, computadoras portátiles, televisores, refrigeradores, etc.
+- {{web.link("/es/docs/Web/Progressive_web_apps/Advantages", "Segura", "#Segura")}} por lo que las conexiones entre el usuario, la aplicación y tu servidor están protegidos contra terceros que intenten acceder a datos sensibles.
+
+Ofrecer estas funciones y hacer uso de todas las [Ventajas que ofrecen las aplicaciones web](#ventajas_de_las_aplicaciones_web) puede crear una oferta atractiva y altamente flexible para tus usuarios y clientes.
+
+### ¿Vale la pena hacer todo eso?
+
+¡Absolutamente! Con un esfuerzo relativamente pequeño para implementar las características principales de las PWAs, los beneficios son enormes. Por ejemplo:
+
+- Una disminución en los tiempos de carga después de la instalación de la aplicación, gracias al almacenamiento en caché con el {{web.link("/es/docs/Web/API/Service_Worker_API", "servicio workers")}}, además de ahorrar un valioso ancho de banda y tiempo. Los PWAs tienen una carga casi instantánea (a partir de la segunda visita).
+- La capacidad de actualizar solo el contenido que ha cambiado cuando hay disponible una actualización de la aplicación. En contraste, con una aplicación nativa, incluso la más mínima modificación puede obligar al usuario a descargar la aplicación completa nuevamente.
+- Una apariencia que está más integrada con la plataforma nativa: íconos de aplicaciones en la pantalla de inicio o el lanzador de aplicaciones, aplicaciones que se ejecutan automáticamente en modo de pantalla completa, etc.
+- Reconectable para interactuar con los usuarios mediante el uso de notificaciones del sistema y mensajes `push`, lo cual genera usuarios más comprometidos y mejores tasas de conversión.
+
+### Historias de éxito
+
+Hay muchas historias de éxito de empresas que probaron la ruta PWA, optaron por una experiencia de sitio web mejorada en lugar de una aplicación nativa y, como resultado, obtuvieron importantes beneficios medibles. El sitio web [Estadísticas PWA](https://www.pwastats.com/) comparte muchos estudios de casos que indican estos beneficios.
+
+La historia de éxito más conocida probablemente es la de [Flipkart Lite](https://stories.flipkart.com/introducing-flipkart-lite/). El sitio de comercio electrónico más grande de la India se reconstruyó como una aplicación web progresiva en 2015, lo que resultó en un aumento del 70% en las conversiones. La PWA [AliExpress](https://m.aliexpress.com/) también ha obtenido resultados mucho mejores que la web o la aplicación nativa, con un aumento del 104% en las tasas de conversión para los nuevos usuarios. Dado el aumento de sus ganancias y la cantidad relativamente baja de trabajo requerida para la conversión de estas aplicaciones a PWA, la ventaja es clara.
+
+Las puestas en marcha emergentes en etapa temprana como [couponmoto](https://www.couponmoto.com/) también han comenzado a usar aplicaciones web progresivas para impulsar una mayor participación de los consumidores, lo que demuestra que pueden ayudar tanto a pequeñas como a grandes empresas para (re)involucrar a los usuarios de manera más eficaz.
+
+Puedes consultar la lista en pwa.rocks para obtener más ejemplos. Vale la pena mencionar en particular la página [hnpwa.com](https://hnpwa.com/), que muestra una implementación de ejemplo del sitio web de Hacker News (en lugar de la aplicación habitual TodoMVC), en la que puedes ver el uso de varios marcos de desarrollo de la interfaz de usuario web.
+
+Incluso puedes generar PWA en línea utilizando el sitio web [PWABuilder](https://www.pwabuilder.com/).
+
+Para obtener información específica sobre el servicio _worker_ y la inserción, asegúrate de consultar el [Libro de recetas del servicio _worker_](https://serviceworke.rs/), una colección de recetas que utilizan los servicios _worker_ en sitios modernos.
+
+Vale la pena probar un enfoque de PWA, para que puedas ver por ti mismo si funciona para tu aplicación.
+
+## Ventajas de las aplicaciones web
+
+Una aplicación web progresiva totalmente capaz debería proporcionar todas las siguientes ventajas al usuario.
+
+### Reconocible
+
+![Detectabilidad](https://mdn.mozillademos.org/files/12654/discoverable.svg)El objetivo final es que las aplicaciones web tengan una mejor representación en los motores de búsqueda, sean más fáciles de exponer, catalogar y clasificar, y tener metadatos utilizables por los navegadores para brindarles capacidades especiales.
+
+Algunas de las capacidades ya se han habilitado en ciertas plataformas basadas en web mediante tecnologías patentadas como [Open Graph](http://ogp.me/), que proporciona un formato para especificar metadatos similares en el bloque {{HTMLElement("head")}} de {{Glossary("HTML")}} con etiquetas {{HTMLElement("meta")}}.
+
+El estándar web relevante aquí es el {{web.link("/es/docs/Web/Manifest", "manifiesto de la aplicación web")}}, que define las características de una aplicación, como el nombre, el icono, la pantalla de presentación y los colores del tema en un archivo de manifiesto con formato {{Glossary("JSON")}}. Esto es para usar en contextos como listas de aplicaciones y pantallas de inicio de dispositivos.
+
+### Instalable
+
+![Instalabilidad](https://mdn.mozillademos.org/files/12656/installable.svg)
+
+Una parte fundamental de la experiencia de la aplicación web es que los usuarios tengan iconos de aplicaciones en su pantalla de inicio y los puedan tocar para abrir aplicaciones en su propio contenedor nativo que se sienta bien integrado con la plataforma subyacente.
+
+Las aplicaciones web modernas pueden hacer que esta aplicación nativa se sienta a través de las propiedades establecidas dentro del manifiesto de la aplicación web y mediante una función disponible en los navegadores de teléfonos inteligentes modernos llamada {{web.link("/es/docs/Web/Progressive_web_apps/Developer_guide/Installing", "instalación de la aplicación web")}}.
+
+### Enlazable
+
+![Enlazable](https://mdn.mozillademos.org/files/12658/linkable.svg)
+
+Una de las características más poderosas de la web es la capacidad de vincularse a una aplicación en una URL específica sin la necesidad de una tienda de aplicaciones o un proceso de instalación complejo. Así ha sido siempre.
+
+### Independiente de la red
+
+![Independencia de la red](https://mdn.mozillademos.org/files/12660/network-independent.svg)
+
+Las aplicaciones web modernas pueden funcionar cuando hay mala (o incluso inexistente) conectividad con la red. Las ideas básicas detrás de la independencia de la red son poder:
+
+- Volver a visitar un sitio y obtener su contenido incluso si no hay una red disponible.
+- Explorar cualquier tipo de contenido que el usuario haya visitado anteriormente al menos una vez, incluso en situaciones de mala conectividad.
+- Controlar lo que se muestra al usuario en situaciones donde no hay conectividad.
+
+Esto se consigue mediante una combinación de tecnologías: el {{web.link("/es/docs/Web/API/Service_Worker_API", "servicio Workers")}} para controlar las solicitudes de página (por ejemplo, almacenarlas sin conexión), la {{web.link("/es/docs/Web/API/Cache", "API de caché")}} para almacenar respuestas a solicitudes de red sin conexión (muy útil para almacenar activos del sitio) y tecnologías de almacenamiento de datos secundarios como {{web.link("/es/docs/Web/API/Web_Storage_API", "Almacenamiento Web")}} y {{web.link("/es/docs/Web/API/IndexedDB_API", "IndexedDB")}} para almacenar datos de aplicaciones sin conexión.
+
+### Compatibilidad de mejora progresiva
+
+![Mejora progresiva](https://mdn.mozillademos.org/files/12662/progressive.svg)
+
+Se pueden desarrollar aplicaciones web modernas para proporcionar una experiencia excelente a los navegadores totalmente compatibles y una experiencia aceptable (aunque no tan brillante) a los navegadores menos capaces. Hemos estado haciendo esto durante años con las mejores prácticas, como la mejora progresiva. Al utilizar {{Glossary("Progressive_Enhancement", "Mejora progresiva")}}, las PWAs se utilizan en varios navegadores. Esto significa que los desarrolladores deben tener en cuenta las diferencias en la implementación de algunas características y tecnologías PWA entre diferentes implementaciones de navegadores.
+
+### Reconectable
+
+![Reconectable](https://mdn.mozillademos.org/files/12666/re-engageable.svg)
+
+Una de las principales ventajas de las plataformas nativas es la facilidad con la que los usuarios pueden volver a interactuar con las actualizaciones y el contenido nuevo, incluso cuando no están mirando la aplicación o usando sus dispositivos. Las aplicaciones web modernas ahora también pueden hacer esto, utilizando nuevas tecnologías como Servicio _Workers_ para controlar páginas, la {{web.link("/es/docs/Web/API/Push_API", "API Web Push")}} para enviar actualizaciones. directamente del servidor a la aplicación a través de un servicio _workers_ y la {{web.link("/es/docs/Web/API/Notifications_API", "API de notificaciones")}} para generar notificaciones del sistema para ayudar a involucrar a los usuarios cuando no están utilizando activamente su navegador web.
+
+### Adaptable
+
+![Adaptable](https://mdn.mozillademos.org/files/12650/responsive.svg)
+
+Las aplicaciones web adaptables utilizan tecnologías como {{web.link("/es/docs/Web/CSS/Media_Queries", "consultas de medios")}} y {{web.link("/es/docs/Glossary/Viewport", "viewport")}} para asegurarte de que tu IU se ajuste a cualquier factor de forma: computadora de escritorio, dispositivo móvil, tableta o lo que venga a continuación.
+
+### Segura
+
+![Segura](https://mdn.mozillademos.org/files/12664/safe.svg)
+
+La plataforma web proporciona un mecanismo de entrega seguro que evita espionaje y, al mismo tiempo, garantiza que el contenido no haya sido manipulado, siempre que aproveche {{Glossary("HTTPS")}} y desarrolles tus aplicaciones pensando en la seguridad.
+
+![Captura de pantalla que muestra una gran cantidad de resultados al buscar "Messenger" al intentar encontrar Facebook Messenger. ¿Cuál es el correcto?](https://mdn.mozillademos.org/files/17175/InstalingMessengerSoManyOptionsEek.jpeg)
+
+También es fácil para los usuarios asegurarse de que están instalando la aplicación correcta, porque su URL coincidirá con el dominio de tu sitio. Esto es muy diferente de las aplicaciones en las tiendas de aplicaciones, que pueden tener varias aplicaciones con nombres similares, algunas de las cuales incluso pueden estar basadas en su propio sitio, lo que aumenta la confusión. Las aplicaciones web eliminan esa confusión y garantizan que los usuarios obtengan la mejor experiencia posible.
+
+## Compatibilidad con el navegador
+
+Como se mencionó anteriormente, las PWAs no dependen de una sola API, sino que utilizan varias tecnologías para lograr el objetivo de brindar la mejor experiencia web posible.
+
+El ingrediente clave requerido para las PWAs es la asistencia de {{web.link("/es/docs/Web/API/Service_Worker_API", "servicio workers")}}. Afortunadamente, los servicios de _workers_ [ahora son compatibles con los principales navegadores](https://jakearchibald.github.io/isserviceworkerready/) en computadoras de escritorio y dispositivos móviles.
+
+Otras características como {{web.link("/es/docs/Web/Manifest", "manifiesto de App Web")}}, {{web.link("/es/docs/Web/API/Push_API", "Push")}}, {{web.link("/es/docs/Web/API/Notifications_API", "Notificaciones")}} y la funcionalidad {{web.link("/es/docs/Web/Progressive_web_apps/Add_to_home_screen", "Agregar a la pantalla de inicio")}} también tienen un amplio soporte. Actualmente, Safari tiene soporte limitado para el manifiesto de aplicaciones web y Agregar a la pantalla de inicio y no admite notificaciones _push web_. Sin embargo, otros navegadores importantes admiten todas estas funciones.
+
+Por encima de todo, debes seguir la regla de mejora progresiva: usa tecnologías que mejoren la apariencia y la utilidad de tu aplicación cuando estén disponibles, pero que sigan ofreciendo la funcionalidad básica de tu aplicación cuando esas funciones no estén disponibles. Presentar un sitio web confiable con un buen rendimiento es una consecuencia del uso de estas mejoras; esto, a su vez, significa crear aplicaciones web que sigan las mejores prácticas. De esta manera, todos podrán usar la aplicación, pero aquellos con navegadores modernos se beneficiarán aún más de las funciones de PWA.
+
+## Una aplicación de ejemplo
+
+En esta serie de artículos, examinaremos el código fuente de un sitio web súper simple que enumera información sobre juegos enviados a la [categoría A-Frame](http://js13kgames.com/aframe) en la Competición [js13kGames 2017](http://2017.js13kgames.com/). No tienes que pensar en cuál es el contenido real del sitio web; el punto principal es aprender a utilizar las funciones de PWA en sus propios proyectos.
+
+Puedes [ver esta aplicación en acción](https://mdn.github.io/pwa-examples/js13kpwa/) en línea, y el código fuente está [disponible en GitHub](https://github.com/mdn/pwa-examples/tree/master/js13kpwa). Examinaremos este código detenidamente a lo largo de esta serie de artículos.
+
+Por ahora, ve a la segunda parte de esta serie, donde verás la estructura de la aplicación de ejemplo.
+
+{{NextMenu("Web/Progressive_web_apps/App_structure", "Web/Progressive_web_apps")}}
+
+{{QuickLinksWithSubpages("/es/docs/Web/Progressive_web_apps/")}}
diff --git a/files/es/web/progressive_web_apps/loading/index.html b/files/es/web/progressive_web_apps/loading/index.html
deleted file mode 100644
index bc44773494abfb..00000000000000
--- a/files/es/web/progressive_web_apps/loading/index.html
+++ /dev/null
@@ -1,155 +0,0 @@
----
-title: Carga progresiva
-slug: Web/Progressive_web_apps/Loading
-tags:
- - Cargar
- - PWAs
- - aplicaciones web progresivas
- - js13kGames
- - progresiva
-translation_of: Web/Progressive_web_apps/Loading
----
-{{PreviousMenu("Web/Progressive_web_apps/Re-engageable_Notifications_Push", "Web/Progressive_web_apps")}}
-
-En artículos anteriores cubrimos las API que nos ayudan a convertir nuestro ejemplo de js13kPWA en una aplicación web progresiva: {{web.link("/es/docs/Web/Progressive_web_apps/Offline_Service_workers", "El servicio workers")}}, {{web.link("/es/docs/Web/Progressive_web_apps/Installable_PWAs", "Manifiestos web")}}, {{web.link("/es/docs/Web/Progressive_web_apps/Re-engagementable_Notifications_Push", "Notificaciones y Push")}}. En este artículo iremos aún más allá y mejoraremos el rendimiento de la aplicación cargando progresivamente sus recursos.
-
-Primera imagen significativa
-
-Es importante entregar algo significativo al usuario lo antes posible: cuanto más espere a que se cargue la página, mayor será la posibilidad de que se vaya antes de esperar a que todo termine. Deberíamos poder mostrarles al menos la vista básica de la página que quieren ver, con marcadores de posición en los lugares donde eventualmente se cargará más contenido.
-
-Esto se podría lograr mediante la carga progresiva, también conocida como carga diferida . Se trata de aplazar la carga de recursos tanto como sea posible (HTML, CSS, JavaScript) y solo cargar inmediatamente los que realmente se necesitan para la primera experiencia.
-
-Agrupar versus dividir
-
-Muchos visitantes no pasarán por todas las páginas de un sitio web, sin embargo, el enfoque habitual es agrupar todas las funciones que tenemos en un archivo grande. Un archivo bundle.js
puede tener muchos megabytes, y un solo paquete style.css
puede contener de todo, desde definiciones básicas de estructura CSS hasta todos los estilos posibles de cada versión del sitio: móvil, tableta, escritorio, solo impresión, etc.
-
-Es más rápido cargar toda esa información como un archivo en lugar de muchos archivos pequeños, pero si el usuario no necesita todo al principio, podríamos cargar solo lo que es crucial y luego gestionar otros recursos cuando sea necesario.
-
-Recursos que bloquean el renderizado
-
-La agrupación es un problema, porque el navegador tiene que cargar HTML, CSS y JavaScript antes de poder pintar sus resultados renderizados en la pantalla. Durante los pocos segundos entre el acceso inicial al sitio web y la finalización de la carga, el usuario ve una página en blanco, lo cual es una mala experiencia.
-
-Para solucionarlo, podemos, por ejemplo, agregar defer
a los archivos JavaScript:
-
-<script src="app.js" defer></script>
-
-
-Se descargarán y ejecutarán después que el documento en sí haya sido procesado, por lo que no bloqueará la representación de la estructura HTML. También podemos dividir archivos css y agregarles tipos de medios:
-
-<link rel="stylesheet" href="style.css">
-<link rel="stylesheet" href="print.css" media="print">
-
-
-Esto le indicará al navegador que los cargue solo cuando se cumpla la condición.
-
-En nuestra aplicación de demostración js13kPWA, el CSS es lo suficientemente simple como para dejarlo todo en un solo archivo sin reglas específicas sobre cómo cargarlos. Podríamos ir aún más lejos y mover todo desde style.css
a la etiqueta <style>
en el <head>
del index.html
: esto mejoraría aún más el rendimiento, pero para la legibilidad del ejemplo también omitiremos este enfoque.
-
-Imágenes
-
-Además de JavaScript y CSS, es probable que los sitios web contengan varias imágenes. Cuando incluyes elementos {{HTMLElement("img")}} en tu HTML, todas las imágenes a las que se hace referencia se buscarán y descargarán durante el acceso inicial al sitio web. No es inusual tener megabytes de datos de imágenes para descargar antes de anunciar que el sitio está listo, pero esto nuevamente crea una mala percepción del rendimiento. No necesitamos todas las imágenes en la mejor calidad posible al comienzo de la visualización del sitio.
-
-Esto se puede optimizar. En primer lugar, debes utilizar herramientas o servicios similares a TinyPNG , que reducirán el tamaño del archivo de tus imágenes sin alterar demasiado la calidad. Si has superado ese punto, puede empezar a pensar en optimizar la carga de imágenes mediante JavaScript. Explicaremos esto a continuación.
-
-Marcador de posición de imagen
-
-En lugar de tener todas las capturas de pantalla de los juegos referenciados en los atributos del elemento <img>
src
, que obligarán al navegador a descargarlos automáticamente, podemos hacerlo de forma selectiva a través de JavaScript. En su lugar, la aplicación js13kPWA usa una imagen de marcador de posición, que es pequeña y liviana, mientras que las rutas finales a las imágenes de destino se almacenan en los atributos data-src
:
-
-<img src='data/img/placeholder.png' data-src='data/img/SLUG.jpg' alt='NAME'>
-
-
-Esas imágenes se cargarán mediante JavaScript después que el sitio termine de construir la estructura HTML. La imagen del marcador de posición se escala de la misma manera que las imágenes originales, por lo que ocupará el mismo espacio y no hará que el diseño se vuelva a pintar a medida que se cargan las imágenes.
-
-Cargar a través de JavaScript
-
-El archivo app.js
procesa los atributos data-src
así:
-
-let imagesToLoad = document.querySelectorAll('img[data-src]');
-const loadImages = (image) => {
- image.setAttribute('src', image.getAttribute('data-src'));
- image.onload = () => {
- image.removeAttribute('data-src');
- };
-};
-
-La variable imagesToLoad
contiene referencias a todas las imágenes, mientras que la función loadImages
mueve la ruta de data-src
a src
. Cuando cada imagen está realmente cargada, eliminamos su atributo data-src
porque ya no es necesario. Luego recorremos cada imagen y la cargamos:
-
-imagesToLoad.forEach((img) => {
- loadImages(img);
-});
-
-Desenfoque en CSS
-
-Para que todo el proceso sea más atractivo visualmente, el marcador de posición se difumina en CSS.
-
-
-
-Renderizamos las imágenes con un desenfoque al principio, por lo que se puede lograr una transición hacia la nitidez:
-
-article img[data-src] {
- filter: blur(0.2em);
-}
-
-article img {
- filter: blur(0em);
- transition: filter 0.5s;
-}
-
-Esto eliminará el efecto de desenfoque en medio segundo, el cual se ve lo suficientemente bien para el efecto de "carga".
-
-Carga bajo demanda
-
-El mecanismo de carga de imágenes explicado en la sección anterior funciona bien: carga las imágenes después de renderizar la estructura HTML y aplica un agradable efecto de transición en el proceso. El problema es que todavía carga todas las imágenes simultáneamente, aunque el usuario solo verá las dos o tres primeras al cargar la página.
-
-Este problema se puede resolver con la nueva {{web.link("/es/docs/Web/API/Intersection_Observer_API", "API observador de intersecciones")}}; con esto nos podemos asegurar de que las imágenes se carguen solo cuando aparezcan en la ventana gráfica.
-
-Observador de intersecciones
-
-Esta es una mejora progresiva del ejemplo de uso anterior: {{web.link("/es/docs/Web/API/Intersection_Observer_API", "Observador de intersección")}} cargará las imágenes destino solo cuando el usuario se desplaza hacia abajo, lo cual hace que se exhiban en la ventana gráfica.
-
-Así es como se ve el código relevante:
-
-if('IntersectionObserver' in window) {
- const observer = new IntersectionObserver((items, observer) => {
- items.forEach((item) => {
- if(item.isIntersecting) {
- loadImages(item.target);
- observer.unobserve(item.target);
- }
- });
- });
- imagesToLoad.forEach((img) => {
- observer.observe(img);
- });
-} else {
- imagesToLoad.forEach((img) => {
- loadImages(img);
- });
-}
-
-Si se admite el objeto {{DOMxRef("IntersectionObserver")}}, la aplicación crea una nueva instancia del mismo. La función pasada como parámetro está manejando el caso cuando uno o más elementos se cruzan con el observador (es decir, aparecen dentro de la ventana gráfica). Podemos iterar sobre cada caso y reaccionar en consecuencia: cuando una imagen es visible, cargamos la imagen correcta y dejamos de observarla porque ya no necesitamos observarla.
-
-Reiteremos nuestra mención anterior de la mejora progresiva: el código está escrito para que la aplicación funcione tanto si Intersection Observer
es compatible como si no. Si no es así, simplemente cargamos las imágenes usando el enfoque más básico cubierto anteriormente.
-
-Mejoras
-
-Recuerda que hay muchas formas de optimizar los tiempos de carga, y este ejemplo explora solo uno de los enfoques. Puedes intentar hacer que tus aplicaciones sean más a prueba de balas haciéndolas funcionar sin JavaScript, ya sea utilizando {{HTMLElement("noscript")}} para mostrar la imagen con el src
final ya asignado, o envolviendo Etiquetas <img>
con elementos {{HTMLElement("a")}} que apuntan a las imágenes destino, para que el usuario pueda hacer clic y acceder a ellas cuando lo desee.
-
-No lo haremos porque la aplicación en sí depende de JavaScript; sin él, la lista de juegos ni siquiera se cargaría y el código del servicio worker no se ejecutaría.
-
-Podríamos reescribir el proceso de carga para cargar no solo las imágenes, sino los elementos completos que consisten en descripciones completas y enlaces. Funcionaría como un desplazamiento infinito: cargar los elementos de la lista solo cuando el usuario desplaza la página hacia abajo. De esa manera, la estructura HTML inicial sería mínima, el tiempo de carga sería aún menor y tendríamos beneficios de rendimiento aún mayores.
-
-Conclusión
-
-Menos archivos para cargar inicialmente, archivos más pequeños divididos en módulos, uso de marcadores de posición y carga de más contenido bajo demanda: esto ayudará a lograr tiempos de carga inicial más rápidos, lo que brinda beneficios al creador de la aplicación y ofrece una experiencia más fluida para el usuario.
-
-Recuerda el enfoque de mejora progresiva: ofrece un producto utilizable sin importar el dispositivo o la plataforma, pero asegúrate de enriquecer la experiencia a quienes utilizan navegadores modernos.
-
-Pensamientos finales
-
-Eso es todo por esta serie de tutoriales: revisamos el código fuente de la aplicación de ejemplo js13kPWA y aprendimos sobre el uso de funciones de aplicaciones web progresivas, incluida una {{web.link("/es/docs/Web/Progressive_web_apps/Introduction", "Introducción")}}, {{web.link("/es/docs/Web/Progressive_web_apps/App_structure", "estructura PWA")}}, {{web.link("/es/docs/Web/Progressive_web_apps/Offline_Service_workers", "disponibilidad sin conexión con servicio workers")}}, {{web.link("/es/docs/Web/Progressive_web_apps/Installable_PWAs", "PWAs instalables")}}, y finalmente notificaciones. También explicamos el push
con la ayuda del Libro de recetas para el servicio workers . Y en este artículo, hemos analizado el concepto de carga progresiva, incluido un interesante ejemplo que hace uso de la {{web.link("/es/docs/Web/API/Intersection_Observer_API", "API de Intersection Observer")}}.
-
-No dudes en experimentar con el código, mejorar tu aplicación existente con funciones de PWA o crear algo completamente nuevo por tu cuenta. Las PWAs ofrecen una gran ventaja sobre las aplicaciones web habituales.
-
-{{PreviousMenu("Web/Progressive_web_apps/Re-engageable_Notifications_Push", "Web/Progressive_web_apps")}}
-
-{{QuickLinksWithSubpages("/es/docs/Web/Progressive_web_apps/")}}
diff --git a/files/es/web/progressive_web_apps/loading/index.md b/files/es/web/progressive_web_apps/loading/index.md
new file mode 100644
index 00000000000000..696e23343db48f
--- /dev/null
+++ b/files/es/web/progressive_web_apps/loading/index.md
@@ -0,0 +1,166 @@
+---
+title: Carga progresiva
+slug: Web/Progressive_web_apps/Loading
+tags:
+ - Cargar
+ - PWAs
+ - aplicaciones web progresivas
+ - js13kGames
+ - progresiva
+translation_of: Web/Progressive_web_apps/Loading
+---
+{{PreviousMenu("Web/Progressive_web_apps/Re-engageable_Notifications_Push", "Web/Progressive_web_apps")}}
+
+En artículos anteriores cubrimos las API que nos ayudan a convertir nuestro ejemplo de [js13kPWA](https://mdn.github.io/pwa-examples/js13kpwa/) en una aplicación web progresiva: {{web.link("/es/docs/Web/Progressive_web_apps/Offline_Service_workers", "El servicio workers")}}, {{web.link("/es/docs/Web/Progressive_web_apps/Installable_PWAs", "Manifiestos web")}}, {{web.link("/es/docs/Web/Progressive_web_apps/Re-engagementable_Notifications_Push", "Notificaciones y Push")}}. En este artículo iremos aún más allá y mejoraremos el rendimiento de la aplicación cargando progresivamente sus recursos.
+
+## Primera imagen significativa
+
+Es importante entregar algo significativo al usuario lo antes posible: cuanto más espere a que se cargue la página, mayor será la posibilidad de que se vaya antes de esperar a que todo termine. Deberíamos poder mostrarles al menos la vista básica de la página que quieren ver, con marcadores de posición en los lugares donde eventualmente se cargará más contenido.
+
+Esto se podría lograr mediante la carga progresiva, también conocida como [carga diferida](https://en.wikipedia.org/wiki/Lazy_loading). Se trata de aplazar la carga de recursos tanto como sea posible (HTML, CSS, JavaScript) y solo cargar inmediatamente los que realmente se necesitan para la primera experiencia.
+
+## Agrupar versus dividir
+
+Muchos visitantes no pasarán por todas las páginas de un sitio web, sin embargo, el enfoque habitual es agrupar todas las funciones que tenemos en un archivo grande. Un archivo `bundle.js` puede tener muchos megabytes, y un solo paquete `style.css` puede contener de todo, desde definiciones básicas de estructura CSS hasta todos los estilos posibles de cada versión del sitio: móvil, tableta, escritorio, solo impresión, etc.
+
+Es más rápido cargar toda esa información como un archivo en lugar de muchos archivos pequeños, pero si el usuario no necesita todo al principio, podríamos cargar solo lo que es crucial y luego gestionar otros recursos cuando sea necesario.
+
+## Recursos que bloquean el renderizado
+
+La agrupación es un problema, porque el navegador tiene que cargar HTML, CSS y JavaScript antes de poder pintar sus resultados renderizados en la pantalla. Durante los pocos segundos entre el acceso inicial al sitio web y la finalización de la carga, el usuario ve una página en blanco, lo cual es una mala experiencia.
+
+Para solucionarlo, podemos, por ejemplo, agregar `defer` a los archivos JavaScript:
+
+```html
+
+```
+
+Se descargarán y ejecutarán _después_ que el documento en sí haya sido procesado, por lo que no bloqueará la representación de la estructura HTML. También podemos dividir archivos css y agregarles tipos de medios:
+
+```html
+
+
+```
+
+Esto le indicará al navegador que los cargue solo cuando se cumpla la condición.
+
+En nuestra aplicación de demostración js13kPWA, el CSS es lo suficientemente simple como para dejarlo todo en un solo archivo sin reglas específicas sobre cómo cargarlos. Podríamos ir aún más lejos y mover todo desde `style.css` a la etiqueta `
+```
+
+En el ejemplo anterior, el nuevo estilo, por "stylename," es una máscara de SVG que hace referencia a el identificador "localstyle". Una vez que se estableció, que la máscara se aplica a todos los elementos con este estilo CSS.
+
+Esto suena más complicado de lo que realmente es, echar un vistazo a los ejemplos para tener una buena idea de cómo funciona esto.
+
+Hay tres estilos que se pueden aplicar: puede usar la máscara, el recorrido de clip, o un filtro.
+
+### Ejemplo: Enmascaramiento (Máscara)
+
+Por ejemplo, puede establecer un estilo CSS que proporciona una máscara de degradado para el contenido HTML con código SVG similar a lo siguiente en su documento HTML:
+
+> **Nota:** El espaciamiento de nombre no es válida en HTML 5, dejar fuera de la "svg:" en las etiquetas de los documentos en formato HTML.
+
+```xml
+
+
+
+
+
+
+
+
+
+
+
+```
+
+Tenga en cuenta que en la línea 1, la máscara se especifica mediante una dirección URL para el ID "# M1", que es el identificador de la máscara de SVG que se especifican a continuación. Todo lo demás se especifican otros detalles sobre la misma máscara de degradado.
+
+En realidad, de aplicar el efecto SVG a XHTML o HTML se hace simplemente asignar el estilo de destino definido anteriormente para el elemento, así:
+
+```xml
+
+```
+
+En este ejemplo se incrusta un iframe que contiene el sitio web de Mozilla.org, que se representa con la máscara que se le aplica.
+
+[View this example live](/@api/deki/files/3213/=maskdemo.xhtml).
+
+### Ejemplo: Recorte
+
+Este ejemplo muestra cómo utilizar SVG para recortar el contenido HTML. Cuando nos fijamos en la demostración en vivo, cuenta que incluso en las zonas calientes de los enlaces se recortan.
+
+```xml
+
+
+
+
+
+
+
+```
+
+Esto establece un área de recorte compuesto por un círculo y el rectángulo, y le asigna el ID # c1 ". Esto entonces se hace referencia en el estilo. Una vez que el estilo de destino se establece de esta manera, la ruta del clip se puede asignar a cualquier elemento.
+
+Tenga en cuenta también que puede realizar cambios en el SVG en tiempo real y ver los cambios afectan inmediatamente a la prestación del HTML. Por ejemplo, puede cambiar el tamaño del círculo en el camino clip establecido:
+
+```xml
+ var circle = document.getElementById("circle");
+ circle.r.baseVal.value = 0.40 - circle.r.baseVal.value;
+```
+
+[View this example live](/@api/deki/files/3214/=clipdemo.xhtml). El ejemplo incluye un botón, puede hacer clic para cambiar la ruta de clip y ver que el cambio surta efecto.
+
+### Ejemplo: Filtrar
+
+Este ejemplo muestra cómo se puede aplicar un filtro para el contenido HTML utilizando SVG. Establece varios filtros que se aplican con estilos para cada uno de los tres elementos, tanto en los Estados suspender normal y el ratón.
+
+Cualquier SVG filtro se puede aplicar de esta manera. Por ejemplo, para aplicar un efecto de desenfoque gaussiano, puede utilizar:
+
+```xml
+
+
+
+```
+
+También puede aplicar una matriz de color, de esta manera:
+
+```xml
+
+
+
+
+```
+
+Estos son sólo dos de los cinco filtros de muestra en este ejemplo. Asegúrese de echar un vistazo al código completo si le gustaría ver más.
+
+Los cinco filtros se aplican mediante el siguiente código CSS:
+
+```xml
+
+```
+
+[View this example live](/@api/deki/files/3217/=filterdemo.xhtml).
+
+## Uso de referencias externas
+
+Los elementos SVG se utiliza para cortar, el enmascaramiento, y así sucesivamente se pueden cargar desde un documento externo, mientras que el documento proviene del mismo origen que el documento HTML al que se aplica.
+
+Por ejemplo, si tu CSS en un archivo llamado default.css, puede tener el siguiente aspecto:
+
+```xml
+.target { clip-path: url(resources.svg#c1); }
+```
+
+El SVG se importa desde un archivo llamado `resources.svg`, utilizando la ruta del clip con el ID `c1`.
+
+## Véa también
+
+- [SVG](/en/SVG)
+- [SVG Effects for HTML Content](/web-tech/2008/09/15/svg-effects-for-html-content) (blog post)
+- [SVG External Document References](/web-tech/2008/10/10/svg-external-document-references) (blog post)
diff --git a/files/es/web/svg/element/script/index.html b/files/es/web/svg/element/script/index.html
deleted file mode 100644
index 71ff0b292a1a64..00000000000000
--- a/files/es/web/svg/element/script/index.html
+++ /dev/null
@@ -1,129 +0,0 @@
----
-title:
+
+
+
+```
+
+## Especificaciones
+
+| Especificación | Estado | Comentario |
+| ------------------------------------------------------------------------------------------------------------ | -------------------------------------------- | ----------------------------- |
+| {{SpecName('HTML WHATWG', "scripting.html#the-script-element", "<script>")}} | {{Spec2('HTML WHATWG')}} | Agrega el tipo module. |
+| {{SpecName('HTML5 W3C', 'scripting-1.html#script', '<script>')}} | {{Spec2('HTML5 W3C')}} | |
+| {{SpecName('HTML4.01', 'interact/scripts.html#h-18.2.1', '<script>')}} | {{Spec2('HTML4.01')}} | |
+| {{SpecName('Subresource Integrity', '#htmlscriptelement', '<script>')}} | {{Spec2('Subresource Integrity')}} | Agrega el atributo integrity. |
+
+## Compatibilidad de navegadores
+
+{{Compat("svg.elements.script")}}
+
+## Ver también
+
+- {{domxref("document.currentScript")}}
+- [Ryan Grove's \
+