diff --git a/2-ui/2-events/01-introduction-browser-events/01-hide-other/task.md b/2-ui/2-events/01-introduction-browser-events/01-hide-other/task.md
index 7cb0cb0c9..f0209e6ca 100644
--- a/2-ui/2-events/01-introduction-browser-events/01-hide-other/task.md
+++ b/2-ui/2-events/01-introduction-browser-events/01-hide-other/task.md
@@ -2,10 +2,10 @@ importance: 5
---
-# Hide on click
+# Ocultar con un click
-Add JavaScript to the `button` to make `
` disappear when we click it.
+Agrega JavaScript al `button` para hacer que `
` desaparezca al clickearlo.
-The demo:
+El demo:
[iframe border=1 src="solution" height=80]
diff --git a/2-ui/2-events/01-introduction-browser-events/02-hide-self-onclick/solution.md b/2-ui/2-events/01-introduction-browser-events/02-hide-self-onclick/solution.md
index cded5b622..ff7109a82 100644
--- a/2-ui/2-events/01-introduction-browser-events/02-hide-self-onclick/solution.md
+++ b/2-ui/2-events/01-introduction-browser-events/02-hide-self-onclick/solution.md
@@ -1,5 +1,5 @@
-Can use `this` in the handler to reference "the element itself" here:
+Podemos usar `this` en el handler para referenciar "al propio elemento" aquí:
```html run height=50
-
+
```
diff --git a/2-ui/2-events/01-introduction-browser-events/02-hide-self-onclick/task.md b/2-ui/2-events/01-introduction-browser-events/02-hide-self-onclick/task.md
index 9ee8f18e1..d727b75bc 100644
--- a/2-ui/2-events/01-introduction-browser-events/02-hide-self-onclick/task.md
+++ b/2-ui/2-events/01-introduction-browser-events/02-hide-self-onclick/task.md
@@ -2,11 +2,11 @@ importance: 5
---
-# Hide self
+# Ocultarse
-Create a button that hides itself on click.
+Crea un botón que se oculte a sí mismo al darle un click.
```online
-Like this:
-
+Así:
+
```
diff --git a/2-ui/2-events/01-introduction-browser-events/03-which-handlers-run/solution.md b/2-ui/2-events/01-introduction-browser-events/03-which-handlers-run/solution.md
index d569f0e4d..e49e88347 100644
--- a/2-ui/2-events/01-introduction-browser-events/03-which-handlers-run/solution.md
+++ b/2-ui/2-events/01-introduction-browser-events/03-which-handlers-run/solution.md
@@ -1,8 +1,8 @@
-The answer: `1` and `2`.
+La respuesta: `1` y `2`.
-The first handler triggers, because it's not removed by `removeEventListener`. To remove the handler we need to pass exactly the function that was assigned. And in the code a new function is passed, that looks the same, but is still another function.
+El primer handler se activa porque no es removido por `removeEventListener`. Para remover el handler necesitamos pasar exactamente la función que fue asignada. Y en el código se pasa una función que luce igual pero es otra función.
-To remove a function object, we need to store a reference to it, like this:
+Para remover un objeto de función necesitamos almacenar una referencia a él, así:
```js
function handler() {
@@ -13,4 +13,4 @@ button.addEventListener("click", handler);
button.removeEventListener("click", handler);
```
-The handler `button.onclick` works independently and in addition to `addEventListener`.
+El handler `button.onclick` funciona independientemente y en adición a `addEventListener`.
diff --git a/2-ui/2-events/01-introduction-browser-events/03-which-handlers-run/task.md b/2-ui/2-events/01-introduction-browser-events/03-which-handlers-run/task.md
index f8cd75d5a..e83f6b55e 100644
--- a/2-ui/2-events/01-introduction-browser-events/03-which-handlers-run/task.md
+++ b/2-ui/2-events/01-introduction-browser-events/03-which-handlers-run/task.md
@@ -2,11 +2,11 @@ importance: 5
---
-# Which handlers run?
+# ¿Qué handlers se ejecutan?
-There's a button in the variable. There are no handlers on it.
+Hay un botón en la variable. No hay handlers en él.
-Which handlers run on click after the following code? Which alerts show up?
+¿Qué handlers se ejecutan con el click después del siguiente código? ¿Qué alertas se muestran?
```js no-beautify
button.addEventListener("click", () => alert("1"));
diff --git a/2-ui/2-events/01-introduction-browser-events/04-move-ball-field/solution.md b/2-ui/2-events/01-introduction-browser-events/04-move-ball-field/solution.md
index b04cb8231..b2f205839 100644
--- a/2-ui/2-events/01-introduction-browser-events/04-move-ball-field/solution.md
+++ b/2-ui/2-events/01-introduction-browser-events/04-move-ball-field/solution.md
@@ -1,11 +1,11 @@
-First we need to choose a method of positioning the ball.
+Primero necesitamos elegir un método para posicionar el balón.
-We can't use `position:fixed` for it, because scrolling the page would move the ball from the field.
+No podemos usar `position:fixed` para ello, porque al desplazar la página se movería el balón del campo.
-So we should use `position:absolute` and, to make the positioning really solid, make `field` itself positioned.
+Así que deberíamos usar `position:absolute` y, para que el posicionamiento sea realmente sólido, hacer que `field` sea posicione a sí mismo.
-Then the ball will be positioned relatively to the field:
+Entonces el balón se posicionará en relación al campo:
```css
#field {
@@ -16,36 +16,36 @@ Then the ball will be positioned relatively to the field:
#ball {
position: absolute;
- left: 0; /* relative to the closest positioned ancestor (field) */
+ left: 0; /* relativo al predecesor más cercano (field) */
top: 0;
- transition: 1s all; /* CSS animation for left/top makes the ball fly */
+ transition: 1s all; /* Animación CSS para que left/top hagan al balón volar */
}
```
-Next we need to assign the correct `ball.style.left/top`. They contain field-relative coordinates now.
+Lo siguiente es asignar el `ball.style.left/top` correcto. Ahora contienen coordenadas relativas al campo.
-Here's the picture:
+Aquí está la imagen:

-We have `event.clientX/clientY` -- window-relative coordinates of the click.
+Tenemos `event.clientX/clientY`, las cuales son las coordenadas del click relativas a la ventana.
-To get field-relative `left` coordinate of the click, we can substract the field left edge and the border width:
+Para obtener la coordenada `left` del click relativa al campo necesitamos restar el limite izquierdo del campo y el ancho del borde:
```js
let left = event.clientX - fieldCoords.left - field.clientLeft;
```
-Normally, `ball.style.left` means the "left edge of the element" (the ball). So if we assign that `left`, then the ball edge, not center, would be under the mouse cursor.
+Normalmente `ball.style.left` significa el "borde izquierdo del elemento" (el balón). Por lo que si asignamos ese `left`, entonces el borde del balón, no el centro, es el que se encontraría debajo del cursor del mouse.
-We need to move the ball half-width left and half-height up to make it center.
+Necesitamos mover la mitad del ancho del balón a la izquierda y la mitad del alto hacia arriba para que quede en el centro.
-So the final `left` would be:
+Por lo que el `left` final debería ser:
```js
let left = event.clientX - fieldCoords.left - field.clientLeft - ball.offsetWidth/2;
```
-The vertical coordinate is calculated using the same logic.
+La coordenada vertical es calculada usando la misma lógica.
-Please note that the ball width/height must be known at the time we access `ball.offsetWidth`. Should be specified in HTML or CSS.
+Por favor, nota que el ancho/alto del balón se debe conocer al momento que accedemos a `ball.offsetWidth`. Se debe especificar en HTML o CSS.
diff --git a/2-ui/2-events/01-introduction-browser-events/04-move-ball-field/solution.view/index.html b/2-ui/2-events/01-introduction-browser-events/04-move-ball-field/solution.view/index.html
index 3ebe8739e..5b82bff34 100644
--- a/2-ui/2-events/01-introduction-browser-events/04-move-ball-field/solution.view/index.html
+++ b/2-ui/2-events/01-introduction-browser-events/04-move-ball-field/solution.view/index.html
@@ -27,7 +27,7 @@
- Click on a field to move the ball there.
+ Haz click en un lugar del campo para mover el balón allí.
@@ -39,29 +39,29 @@
diff --git a/2-ui/2-events/01-introduction-browser-events/06-hide-message/task.md b/2-ui/2-events/01-introduction-browser-events/06-hide-message/task.md
index 152cf41fe..349d62ace 100644
--- a/2-ui/2-events/01-introduction-browser-events/06-hide-message/task.md
+++ b/2-ui/2-events/01-introduction-browser-events/06-hide-message/task.md
@@ -2,12 +2,12 @@ importance: 5
---
-# Add a closing button
+# Agregar un botón de cierre
-There's a list of messages.
+Hay una lista de mensajes.
-Use JavaScript to add a closing button to the right-upper corner of each message.
+Usa JavaScript para agregar un botón de cierre en la esquina superior derecha de cada mensaje.
-The result should look like this:
+El resultado debería verse algo así:
[iframe src="solution" height=450]
diff --git a/2-ui/2-events/01-introduction-browser-events/07-carousel/solution.md b/2-ui/2-events/01-introduction-browser-events/07-carousel/solution.md
index 1c6b52cea..390d49f4d 100644
--- a/2-ui/2-events/01-introduction-browser-events/07-carousel/solution.md
+++ b/2-ui/2-events/01-introduction-browser-events/07-carousel/solution.md
@@ -1,17 +1,17 @@
-The images ribbon can be represented as `ul/li` list of images ``.
+La cinta de imágenes se puede representar como una lista `ul/li` de imágenes ``.
-Normally, such a ribbon is wide, but we put a fixed-size `
` around to "cut" it, so that only a part of the ribbon is visible:
+Normalmente dicha cinta es ancha pero colocamos un tamaño fijo `
` alrededor para "cortarla", de modo que solo una parte de la cinta sea visible:

-To make the list show horizontally we need to apply correct CSS properties for `
`, like `display: inline-block`.
+Para que la lista se muestre horizontalmente debemos aplicar las propiedades CSS correctas para `
`, como `display: inline-block`.
-For `` we should also adjust `display`, because by default it's `inline`. There's extra space reserved under `inline` elements for "letter tails", so we can use `display:block` to remove it.
+Para `` también deberíamos ajustar `display`, ya que es `inline` por default. Hay espacio adicional reservado debajo de los "letter tails", por lo que podemos usar `display:block` para eliminarlo.
-To do the scrolling, we can shift `
`. There are many ways to do it, for instance by changing `margin-left` or (better performance) use `transform: translateX()`:
+Para hacer el desplazamiento, podemos cambiar `
`. Hay muchas formas de hacerlo, por ejemplo, cambiando `margin-left` o (para mejor rendimiento) usando `transform: translateX()`:

-The outer `
` has a fixed width, so "extra" images are cut.
+El `
` exterior tiene un ancho fijo, por lo que se cortan las imágenes "extra".
-The whole carousel is a self-contained "graphical component" on the page, so we'd better wrap it into a single `
` and style things inside it.
+Todo el carrusel es un "componente gráfico" autónomo en la página, por lo que será mejor que lo envuelva en un solo elemento `
` y le apliquemos estilo.
diff --git a/2-ui/2-events/01-introduction-browser-events/07-carousel/solution.view/index.html b/2-ui/2-events/01-introduction-browser-events/07-carousel/solution.view/index.html
index 2c6073316..75daac266 100644
--- a/2-ui/2-events/01-introduction-browser-events/07-carousel/solution.view/index.html
+++ b/2-ui/2-events/01-introduction-browser-events/07-carousel/solution.view/index.html
@@ -27,7 +27,7 @@
diff --git a/2-ui/2-events/01-introduction-browser-events/07-carousel/source.view/style.css b/2-ui/2-events/01-introduction-browser-events/07-carousel/source.view/style.css
index 75c68f01a..08b0ec549 100644
--- a/2-ui/2-events/01-introduction-browser-events/07-carousel/source.view/style.css
+++ b/2-ui/2-events/01-introduction-browser-events/07-carousel/source.view/style.css
@@ -30,9 +30,9 @@ ul {
ul img {
width: 130px;
height: 130px;
- display: block; /* removes extra space near images */
+ display: block; /* remueve el espacio extra cerca de las imágenes */
}
ul li {
- display: inline-block; /* removes extra space between list items
+ display: inline-block; /* remueve el espacio extra entre los elementos li
}
diff --git a/2-ui/2-events/01-introduction-browser-events/07-carousel/task.md b/2-ui/2-events/01-introduction-browser-events/07-carousel/task.md
index a6adbffa5..b39014595 100644
--- a/2-ui/2-events/01-introduction-browser-events/07-carousel/task.md
+++ b/2-ui/2-events/01-introduction-browser-events/07-carousel/task.md
@@ -2,12 +2,12 @@ importance: 4
---
-# Carousel
+# Carrusel
-Create a "carousel" -- a ribbon of images that can be scrolled by clicking on arrows.
+Crea un "carrusel": una cinta de imágenes que se puede desplazar haciendo clic en las flechas.
[iframe height=200 src="solution"]
-Later we can add more features to it: infinite scrolling, dynamic loading etc.
+Más adelante podemos agregarle más funciones: desplazamiento infinito, carga dinámica, etc.
-P.S. For this task HTML/CSS structure is actually 90% of the solution.
+P.D. Para esta tarea, la estructura HTML / CSS es en realidad el 90% de la solución.
diff --git a/2-ui/2-events/01-introduction-browser-events/article.md b/2-ui/2-events/01-introduction-browser-events/article.md
index 19394e49e..f034f8272 100644
--- a/2-ui/2-events/01-introduction-browser-events/article.md
+++ b/2-ui/2-events/01-introduction-browser-events/article.md
@@ -1,256 +1,256 @@
-# Introduction to browser events
+# Introducción a los eventos en el navegador
-*An event* is a signal that something has happened. All DOM nodes generate such signals (but events are not limited to DOM).
+*Un evento* es una señal de que algo ocurrió. Todos los nodos del DOM generan dichas señales (pero los eventos no est{an limitados sólo al DOM).
-Here's a list of the most useful DOM events, just to take a look at:
+Aquí hay una lista con los eventos del DOM más utilizados, solo para echar un vistazo:
-**Mouse events:**
-- `click` -- when the mouse clicks on an element (touchscreen devices generate it on a tap).
-- `contextmenu` -- when the mouse right-clicks on an element.
-- `mouseover` / `mouseout` -- when the mouse cursor comes over / leaves an element.
-- `mousedown` / `mouseup` -- when the mouse button is pressed / released over an element.
-- `mousemove` -- when the mouse is moved.
+**Eventos del mouse:**
+- `click` -- cuando el mouse hace click sobre un elemento (los dispositivos touch lo generan con un toque).
+- `contextmenu` -- cuando el mouse hace click derecho sobre un elemento.
+- `mouseover` / `mouseout` -- cuando el cursor del mouse ingresa / abandona un elemento.
+- `mousedown` / `mouseup` -- cuando el botón del mouse es presionado / soltado sobre un elemento.
+- `mousemove` -- cuando el mouse se mueve.
-**Keyboard events:**
-- `keydown` and `keyup` -- when a keyboard key is pressed and released.
+**Eventos del teclado:**
+- `keydown` / `keyup` -- cuando se presiona / suelta una tecla.
-**Form element events:**
-- `submit` -- when the visitor submits a `