> For the complete documentation index, see [llms.txt](https://tomas-dulanto.gitbook.io/tomas-dulanto/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://tomas-dulanto.gitbook.io/tomas-dulanto/guia-de-ias-y-herramientas/prototipando-codepen.md).

# Prototipando: Codepen

Bienvenido al segundo capítulo de este módulo, donde trataré de guiarte en el uso de "Codepen". Esta herramienta nos ayudará a crear nuestros prototipos. Ya sabes, seré lo más breve posible cuando se trate de conceptos, por lo que, si deseas profundizar en alguno siempre puedes visitar mi blog donde tiendo a explayarme más en el análisis de estos. **De manera sencilla...**

CodePen es una **plataforma online para probar y mostrar código HTML, CSS y JavaScript**. Aquí se puede experimentar, crear pequeños proyectos llamados **"pens"** y compartirlos con otros. Es muy útil para aprender, hacer prototipos rápidos y mostrar tu trabajo.

Puedes optar por crear una cuenta directamente con tu cuenta de Google o creando una manualmente dando clic [aquí.](https://codepen.io/)

<figure><img src="https://3815686015-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOADZFU9e6Ikq8UpPxLFN%2Fuploads%2Fjbqfmme0HrMHkJEeyu9j%2Fimage.png?alt=media&amp;token=f63d9a67-cc46-4cd3-bf6f-3673fbdc1b94" alt=""><figcaption><p>Interfaz de inicio de Codepen</p></figcaption></figure>

***

### Empecemos...&#x20;

...lo primero que veremos es un menú con varias opciones. Yo me concentraré en explicarte las dos primeras: **"Pen"** y **"Collection"**. Pero te sugiero que explores por tu cuenta qué hace cada una.&#x20;

<figure><img src="https://3815686015-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOADZFU9e6Ikq8UpPxLFN%2Fuploads%2F09KOMBFfwEiAMtsnio6i%2Fimage.png?alt=media&amp;token=8566d91e-d5d6-4635-9805-fd26a8b387c5" alt=""><figcaption></figcaption></figure>

Empecemos dando clic en **"Pen",** el cual nos abrirá la siguiente interfaz:

<figure><img src="https://3815686015-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOADZFU9e6Ikq8UpPxLFN%2Fuploads%2FeJCpjW0ESodb04UWVa1P%2Fimage.png?alt=media&amp;token=0654a751-3d2a-4220-b002-47279d222173" alt=""><figcaption></figcaption></figure>

A lado izquierdo encontraremos un rótulo que dice **"Untitled"** y un icono de lápiz, al igual que otras herramientas, al hacer clic podremos cambiar el nombre al que más nos convenga.

Debajo, encontraremos un lienzo en blanco. En él aparecerá traducido el código que ingresemos en las cajas que están al lado derecho.

**¿Recuerdas los tres lenguajes que trabajamos en la guía de** [**"programación básica"**](/tomas-dulanto/basicos/programacion-basica.md)**?** Bueno, aquí tendremos un cajón para cada lenguaje: **HTML, CSS y JS.**

<figure><img src="https://3815686015-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOADZFU9e6Ikq8UpPxLFN%2Fuploads%2F9YHyTHRhuOfkDtPMPXDK%2Fimage.png?alt=media&amp;token=2cda2e75-f2c3-4cc8-bdd7-dc5cd71c353f" alt=""><figcaption></figcaption></figure>

Arriba de los cajones tienes algunas opciones como **"Save",** que nos servirá para guardar el **"pen"** que estemos creando en nuestras colecciones. **"Settings",** donde podremos hacer algunas configuraciones sobre el uso de los cajones **(aunque yo no lo he usado porque no soy programador).** También encontraremos un **"icono de cubos",** este nos permite cambiar el tipo de vista del entorno. Y poco más...

<figure><img src="https://3815686015-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOADZFU9e6Ikq8UpPxLFN%2Fuploads%2FKGHQibldCdNPqJ9IUPTu%2Fimage.png?alt=media&amp;token=486c50f4-c380-4aa2-b91b-e6647d867455" alt=""><figcaption></figcaption></figure>

***

### Ahora...

...como soy fiel creyente que la práctica supera a la teoría, he preparado un ejemplo que se replicará cuando veamos las diferentes maneras que tenemos para **"prototipar".**&#x20;

Haremos un reloj digital usando **HTML, CSS y JS.** Si no te has familiarizado con estos lenguajes te recomiendo que vayas a la guía de ["programación básica".](/tomas-dulanto/basicos/programacion-basica.md)&#x20;

Vamos a pedirle a la IA de Google que nos ayude creando un **"reloj digital"** y que para ello use los tres lenguajes: **HTML, CSS y JS.** Y así obtenemos los siguientes códigos:&#x20;

```html
<!DOCTYPE html>
<html>
<head>
  <title>Reloj Analógico</title>
  <link rel="stylesheet" href="style.css">
</head>
<body>
  <div class="clock">
    <div class="hand hour" id="hour"></div>
    <div class="hand minute" id="minute"></div>
    <div class="hand second" id="second"></div>
    <div class="center-dot"></div>
  </div>
  <script src="script.js"></script>
</body>
</html>
```

El primer código que nos ha generado es un **HTML.** Vamos a ingresarlo en la caja que dice **"HTML"** y procederemos a ver el resultado:

<figure><img src="https://3815686015-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOADZFU9e6Ikq8UpPxLFN%2Fuploads%2FPqpp1AteW1J2ikKoSe2I%2Fimage.png?alt=media&amp;token=ed039947-2585-473a-a184-05e11327d9a7" alt=""><figcaption></figcaption></figure>

Como verás, el código se ingresó, pero no ha aparecido nada, **¿por qué?.** Bueno, si recuerdas, habíamos dicho que el lenguaje **"HTML"** es solo la estructura de lo que queremos construir, por lo que, nos faltaría la parte visual y la parte funcional. Entonces, **¿qué hace falta?...**

**...¡Exacto!** Nos hace falta el **CSS** para la parte visual y el **JS** para la parte dinámica y funcional. Por lo que procederemos a copiar el código CSS que nos ha generado:

```css
.clock {
  width: 200px;
  height: 200px;
  border-radius: 50%;
  background-color: #f0f0f0;
  position: relative;
  border: 5px solid #333;
}

.hand {
  position: absolute;
  bottom: 50%;
  left: 50%;
  transform-origin: 50% 100%;
  background-color: #333;
  border-radius: 5px;
}

.hour {
  width: 6px;
  height: 60px;
  margin-left: -3px;
}

.minute {
  width: 4px;
  height: 80px;
  margin-left: -2px;
}

.second {
  width: 2px;
  height: 90px;
  margin-left: -1px;
  background-color: red;
}

.center-dot {
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background-color: #333;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}
```

Ahora, vamos a ingresarlo en la caja que dice **"CSS"** y veremos qué sucede en nuestro lienzo en blanco:&#x20;

<figure><img src="https://3815686015-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOADZFU9e6Ikq8UpPxLFN%2Fuploads%2FqzeBLlkfg1rWee9OsXqH%2Fimage.png?alt=media&amp;token=531444b7-014d-4bb6-81e7-15a4949eefa3" alt=""><figcaption></figcaption></figure>

Como verás, el código se ingresó y ya apareció nuestro reloj. Sin embargo, si lo estás haciendo en tu propio **"Codepen"** (que espero que lo estés haciendo), verás que no se mueve. Esto pasa poque habíamos dicho que el **JS** nos aporta la parte dinámica y funcional. Copiaremos el código JS que nos generó la IA...

```javascript
const hourHand = document.getElementById("hour");
const minuteHand = document.getElementById("minute");
const secondHand = document.getElementById("second");

function updateClock() {
  const now = new Date();
  const hours = now.getHours() % 12;
  const minutes = now.getMinutes();
  const seconds = now.getSeconds();

  const hourDeg = (hours * 30) + (0.5 * minutes); // 360/12 = 30 grados por hora + 0.5 grados por minuto
  const minuteDeg = (minutes * 6) + (0.1 * seconds); // 360/60 = 6 grados por minuto + 0.1 grados por segundo
  const secondDeg = seconds * 6; // 360/60 = 6 grados por segundo

  hourHand.style.transform = `rotate(${hourDeg}deg)`;
  minuteHand.style.transform = `rotate(${minuteDeg}deg)`;
  secondHand.style.transform = `rotate(${secondDeg}deg)`;
}

setInterval(updateClock, 1000);
```

Lo ingresaremos en nuestro cajón que dice **"JS"** y debería quedarnos algo como la imagen de abajo:

<figure><img src="https://3815686015-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOADZFU9e6Ikq8UpPxLFN%2Fuploads%2FNB67cm9J4LN9yUQ77WKz%2Fimage.png?alt=media&amp;token=67cb18ee-faa2-4c45-94b3-9847b198c8e5" alt=""><figcaption></figcaption></figure>

Ahora usaré un **"Codepen"** para mostrarte que está 100% funcional. Recuerda que puedes darle clic donde dice **"Run Pen"** y esperar que cargue para ver el resultado:

{% embed url="<https://codepen.io/Tomasduf/pen/gOVbBWG>" %}

**¿Qué te pareció? ¿Fácil?** Bueno, así es como esta herramienta nos ayuda a prototipar nuestras ideas. Lo bueno es que, como te habrás dado cuenta, nos ayuda a incrustrar nuestros prototipos en cualquier sitio o aplicación web que permita incrustar código, como lo he hecho yo en todas las guías.

***

Existen varias maneras de compartir tu **"Pen",** pero yo mostraré dos. La primera es dando clic en el botón **"Embed"** que está debajo de todos los cajones:

<figure><img src="https://3815686015-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOADZFU9e6Ikq8UpPxLFN%2Fuploads%2F2d6bBdWj2oHmwzdRfwFy%2Fimage.png?alt=media&amp;token=88566044-86b1-4897-b412-3a99ff8b7d7e" alt=""><figcaption></figcaption></figure>

Esta opción abrirá una ventana, como la mostrada debajo, en la que podremos elegir cómo incrustrar el código según el tipo de página o aplicación, además de dejarnos elegir si queremos mostrar solo los código, solo el resultado o ambos. Si te parece complicado lo aprenderás mejor cuando revises los ["casos de uso".](/tomas-dulanto/casos-de-uso/herramienta-de-gestion-de-proyectos.md)

<figure><img src="https://3815686015-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOADZFU9e6Ikq8UpPxLFN%2Fuploads%2FVg8KeGTgiW6Zx6jgaG4P%2Fimage.png?alt=media&amp;token=d01a763f-fb3a-4eef-b824-eef515338894" alt=""><figcaption></figcaption></figure>

***

La siguiente forma de compartir el **"Pen",** es a través del link que está arriba, en la barra de tu web. Este link te aparecerá automáticamente después de que hayas dado **"Save".**

<figure><img src="https://3815686015-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOADZFU9e6Ikq8UpPxLFN%2Fuploads%2FCL3d6EMKJ5YOFNcjQimi%2Fimage.png?alt=media&amp;token=fc19f619-3869-4f5c-b5ae-d45e9726bbe3" alt=""><figcaption></figcaption></figure>

***

Ahora, me gustaría comentarte algunas de las **razones** por las que uso "Codepen" y que creo deberías tener en consideración:

* **Facilidad de uso:** CodePen es muy fácil de usar, incluso para principiantes. La interfaz es intuitiva y puedes empezar a codificar en segundos.
* **Prototipado rápido:** Es ideal para crear prototipos rápidos de ideas o experimentar con nuevas tecnologías sin tener que configurar un entorno de desarrollo local.
* **Colaboración:** Puedes colaborar con otros desarrolladores en tiempo real, lo que facilita el trabajo en equipo y la enseñanza.
* **Comunidad:** CodePen tiene una gran comunidad activa de desarrolladores que comparten sus creaciones, ofrecen feedback y ayudan a resolver problemas.
* **Inspiración:** Puedes explorar miles de **"Pens"** (proyectos) creados por otros usuarios, lo que te puede inspirar para tus propios proyectos.
* **Aprendizaje:** Es una excelente herramienta para aprender **HTML, CSS y JavaScript,** ya que puedes ver cómo otros desarrolladores utilizan estas tecnologías y experimentar con el código.
* **Integración:** Puedes incrustar tus **"Pens"** en otras páginas web o blogs fácilmente.
* **Gratuito:** CodePen ofrece un plan gratuito que es suficiente para la mayoría de los usuarios y que te permite crear **"Pens"** ilimitados.

Y esto sería todo. **Espera...**

***

Al inicio te dije que te iba a explicar las dos primera opciones y solo te he explicado una. Así que hablemos de la segunda opción: **"Collection"**

Si estás en un proyecto puedes ingresar a tu **"Collection"** dando clic en el icono que se encuentra al lado del nombre de tu **"Pen".**

<figure><img src="https://3815686015-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOADZFU9e6Ikq8UpPxLFN%2Fuploads%2Fvh6iQRDNzhVIOi02tTuG%2Fimage.png?alt=media&amp;token=0195549a-48cf-4ae0-9739-14ded1dfce43" alt=""><figcaption></figcaption></figure>

O si ingresas por la página principal dando clic donde dice **"Collection".** Ambas te llevarán a la siguiente pantalla:

<figure><img src="https://3815686015-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOADZFU9e6Ikq8UpPxLFN%2Fuploads%2FzXcNADUOZkB7qUQvdDVx%2Fimage.png?alt=media&amp;token=d10814cd-e7d5-42a5-bc0b-14607ee31e89" alt=""><figcaption></figcaption></figure>

Aquí podrás encontrar todos los **"Pens"** que hayas creado, ordenarlos según creas conveniente, filtrarlos, eliminarlos, etc. Me gusta **"Codepen"** por la facilidad de uso y la inmediatez que me ofrece al mostrarme el resultado. Ahora sí, hemos completado este capítulo, por ahora.

**¡Nos vemos pronto!**

***
