<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Julio Vargas - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Descubre miles de cursos de programación escritos por expertos. Aprende Desarrollo Web, Ciencia de Datos, DevOps, Seguridad y obtén asesoramiento profesional para desarrolladores. ]]>
        </description>
        <link>https://www.freecodecamp.org/espanol/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Julio Vargas - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/espanol/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Wed, 10 Jun 2026 10:15:28 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/espanol/news/author/julioceva/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ ¿Qué es una Promesa? Promesas de JavaScript para principiantes. ]]>
                </title>
                <description>
                    <![CDATA[ Artículo original escrito por Kingsley Ubah [https://www.freecodecamp.org/news/author/ubahthebuilder/] Artículo original What is a Promise? JavaScript Promises for Beginners [https://www.freecodecamp.org/news/what-is-promise-in-javascript-for-beginners/] Traducido y adaptado por Julio Vargas [https://twitter.com/DevJulio1] Si eres un principiante en JavaScript, puede que estés luchando para entender lo que realmente es una promesa. Recientemente publiqué esto como un hilo en ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/que-es-una-promesa-promesas-de-javascript-para-principiantes/</link>
                <guid isPermaLink="false">6153d2a3c757580942e5bccd</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Julio Vargas ]]>
                </dc:creator>
                <pubDate>Mon, 11 Oct 2021 12:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2021/09/JS-Promises-Expl.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p><strong><strong><strong><strong>Artículo original escrito por </strong></strong></strong></strong><a href="https://www.freecodecamp.org/news/author/ubahthebuilder/">Kingsley Ubah</a><br><strong><strong><strong><strong>Artículo original </strong></strong></strong></strong><a href="https://www.freecodecamp.org/news/what-is-promise-in-javascript-for-beginners/">What is a Promise? JavaScript Promises for Beginners</a><br><strong><strong><strong><strong>Traducido y adaptado por </strong></strong></strong></strong><a href="https://twitter.com/DevJulio1">Julio Vargas</a></p><p>Si eres un principiante en JavaScript, puede que estés luchando para entender lo que realmente es una promesa.</p><p>Recientemente publiqué esto como un hilo en Twitter y se llenó de respuestas. Entonces decidí expandirlo a este tutorial introductorio de promesas de JavaScript.</p><p>He leído un montón de artículos sobre promesas y el problema es que muchas de estas guías no las explican de una forma entendible. La gente no entiende lo que es una promesa en JavaScript porque realmente no saben de qué se trata y como se comporta de una manera simple y en términos entendibles.</p><p>Entonces, en este artículo, te estaré contando una historia que explica que son exactamente las promesas y como funcionan exactamente. También te voy a mostrar como usarlas en JavaScript con algunos ejemplos.</p><h2 id="-qu-es-una-promesa-en-javascript"><strong>¿Qué es una promesa en JavaScript<strong>?</strong></strong></h2><p>Imagina que estás entrevistando gente que busca empleo en tu compañía.</p><p>Un hombre joven entra frenéticamente a la entrevista, cuando su turno está a punto de llegar, se da cuenta de que olvidó su currículo.</p><p>Sería un fastidio ¿verdad?</p><p>Sin embargo, no está intimidado. Por suerte, para él, tiene un compañero que aún está en casa en ese momento.</p><p>Lo llama rápidamente y le pide ayuda, le suplica que le ayude a encontrar su currículo. Su compañero le PROMETE enviar un mensaje de texto tan pronto tenga algo para reportar.</p><p>Asumiendo que el currículo es encontrado eventualmente, podría escribirle:</p><blockquote>“!Listo, encontré tu currículo¡”</blockquote><p>Pero si no la encuentra, se supone que mandará un mensaje de texto reportando la razón por la que no pudo encontrar su currículo. Por ejemplo, podría enviar el siguiente mensaje para su amigo que está siendo entrevistado</p><blockquote>“Lo siento, no pude encontrar tu currículo porque no encontré la llave de tu caja fuerte.”</blockquote><p>Mientras tanto, la entrevista continúa según lo planeado y el entrevistador se aferra a la promesa de encontrar el currículum, no en el currículum. En ese momento, el entrevistador pone el currículo como PENDIENTE por entregar.</p><p>El entrevistado responde todas las preguntas que le hacen. Aunque en última instancia, su empleo sigue dependiendo en el ESTADO FINAL de su currículo.</p><p>Finalmente su compañero le escribe. Como lo habíamos discutido antes, Si él no encuentra el currículo, te lo dirá junto como la razón de porque no lo encontró.</p><p>Si eso sucede, la entrevista podría terminar y el entrevistado sería.</p><p>Por otro lado, si su compañero encuentra el currículo, le diría muy felizmente que cumplió con su cometido y que puede seguir adelante y CUMPLIR sus esperanzas de conseguir el trabajo. </p><h2 id="-entonces-como-se-traslada-esto-a-javascript"><strong>¿Entonces como se traslada esto a JavaScript?</strong></h2><p>El compañero prometiendo encontrar el currículo y escribirle, es sinónimo de como definimos una promesa en JavaScript. El código no devuelve directa o inmediatamente un valor, en vez de eso devuelve una promesa de que eventualmente nos retornará el valor posteriormente.</p><p>Una promesa es asincrónica, lo que significa que necesita tiempo para resolverse o finalizar. Justamente como la búsqueda del currículo tomó tiempo. </p><p>Por esa razón, el entrevistador decide no perder el tiempo, entonces comienza a entrevistar el candidato basado en su promesa de que su currículo llegará. Estamos utilizando la promesa de traer un currículum en lugar del currículum.</p><p>El motor de JavaScript tampoco pierde el tiempo, él comienza a ejecutar otras partes del código, a la espera del valor devuelto de la promesa.</p><p>El mensaje de texto contiene el estado de la búsqueda del currículum. Con una promesa de JavaScript, esto también es llamado “valor devuelto”.</p><p>Si el mensaje es de “éxito”, procederíamos a contratar el candidato y a concederle el puesto. Si falla, rechazamos su candidatura.</p><p>Con las promesas de JavaScript hacemos esto usando una <a href="https://www.freecodecamp.org/news/javascript-callback-functions-what-are-callbacks-in-js-and-how-to-use-them/">función callback</a> (gestores de promesas). Estas funciones están definidas en el método anidado<code>then()</code>. </p><p>Para especificar que callbacks usar, usa las siguientes funciones:</p><ul><li><code>resolve(value)</code>: Esta indica que la tarea asincrónica se realizó correctamente. Esto ejecutará el callback de cumplimiento en el controlador <code>then()</code>.</li><li><code>reject(error)</code>: Esta indica un error mientras se intenta realizar la tarea asincrónica. Esta ejecutará el callback de error en el controlador &nbsp;<code>then()</code>.</li></ul><p>Si la promesa se cumple, el callback de cumplimiento se ejecutará, de lo contrario se ejecuta el callback de error.</p><p>Una promesa es un simple texto provisional para una tarea asincrónica que aún no se ha completado. Cuando defines una promesa en tu script, en vez de devolver un valor inmediatamente, esta devuelve una promesa.</p><h2 id="como-escribir-una-promesa-en-javascript-">Como escribir una promesa en JavaScript.</h2><p>Puedes definir una promesa en JavaScript llamando a la clase <code>Promise</code> y construyendo un objeto, así:</p><figure class="kg-card kg-code-card"><pre><code class="language-js">const miPromesa = new Promise((resolve, reject) =&gt; {
  setTimeout(() =&gt; {
    resolve('este es el valor que eventualmente devolverá la promesa');
  }, 300);
});

console.log(miPromesa);</code></pre><figcaption>Ejemplo uno</figcaption></figure><p>Ejecutar esto en la consola, devolverá un objeto <code>Promise</code>:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/08/promise-console-1.png" class="kg-image" alt="promise-console-1" width="600" height="400" loading="lazy"></figure><p>Aunque, crear un objeto no es la única forma de definir una promesa. También puedes usar la API incorporada <code>Promise</code> para lograr lo mismo:</p><figure class="kg-card kg-code-card"><pre><code class="language-js">const otraPromesa = Promise.resolve("este es el valor que eventualmente devolverá la promesa")

console.log(otraPromesa);</code></pre><figcaption>Ejemeplo dos</figcaption></figure><p>Mientras que la promesa en el primer ejemplo esperará 3 segundos antes de cumplir la promesa con el mensaje &nbsp;<code>este es el mensaje que eventual...</code>, la promesa en el segundo ejemplo cumplirá inmediatamente y con el mismo mensaje.</p><h2 id="promesas-rechazadas-en-javascript-"><strong>Promesas rechazadas en JavaScript.</strong></h2><p>Una promesa también puede ser rechazada. La mayoría del tiempo, se rechazan porque JS encuentra algún tipo de error mientras ejecuta el código asincrónico. En ese escenario, llama la función <code>reject()</code>.</p><p>Mira un ejemplo simple e inventado de como una promesa puede ser rechazada:</p><figure class="kg-card kg-code-card"><pre><code class="language-js">const miPromesa = new Promise((resolve, reject) =&gt; {
  let a = false;
  setTimeout(() =&gt; {
    return (a) ? resolve('se encontró a'): reject('lo siento, no se encontró a');
  }, 300);
}); 




</code></pre><figcaption>Ejemplo tres</figcaption></figure><p>¿Puedes encontrar la razón por la cual esta promesa es rechazada? Si dijiste “porque <code>a</code> no es falso” !Felicitaciones¡</p><p>La promesa en el tercer ejemplo se resolverá con un rechazo, después de un tiempo de espera de 3 segundos, porque la declaración <code>(a)?</code> se resuelve en falso, lo que desencadenará <code>reject</code>.</p><h2 id="como-encadenar-promesas-con-then-"><strong>Como encadenar promesas con<strong> <code>then()</code></strong></strong></h2><p>Cuando finalmente la promesa devuelva un valor, normalmente querrás hacer algo con ese valor devuelto.</p><p>Por ejemplo, si estabas haciendo una solicitud de red, podrías querer acceder a ese valor y mostrarlo en la página para el usuario.</p><p>Puedes definir las dos funciones callback que quieres llamar cuando una promesa se cumple o se rechaza. Estas funciones se definen dentro de un método <code>then()</code> anidado:</p><figure class="kg-card kg-code-card"><pre><code class="language-js">const otraPromesa = new Promise((resolve, reject) =&gt; {
  setTimeout(() =&gt; {
    resolve('este es el valor eventual que devolverá la promesa');
  }, 300);
});

// CONTINUACIÓN
otraPromesa
.then(value =&gt; { console.log(value) }) </code></pre><figcaption>Ejemplo cuatro</figcaption></figure><p>Ejecutar el código anterior, mostrará el mensaje de cumplimiento en la consola, después de tres segundos:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/08/EVENTAL-RETURN.png" class="kg-image" alt="EVENTAL-RETURN" width="600" height="400" loading="lazy"><figcaption>'este es el valor eventual que devolverá la promesa'</figcaption></figure><p>Ten en cuenta que puedes anidar tantas promesas como quieras. Cada paso se ejecutará después del paso anterior, tomando el valor devuelto de ese paso anterior:</p><figure class="kg-card kg-code-card"><pre><code class="language-js">const otraPromesa = new Promise((resolve, reject) =&gt; {
  setTimeout(() =&gt; {
    resolve('este es el valor que eventualmente devolverá la promesa');
  }, 300);
});

otraPromesa
.then(fulfillFn, rejectFn)
.then(fulfilFn, rejectFn)
.then(value =&gt; { console.log(value) })</code></pre><figcaption>Ejemplo cinco</figcaption></figure><p>Pero se nos olvidó algo importante.</p><p>Mantén siempre en mente que el método <code>then()</code> debe tomar ambos valores, el manipulador de cumplimiento y el de rechazo. De esta forma, el primero es llamado si la promesa se cumple y el segundo si la promesa es rechazada con un error.</p><p>Las promesas en los ejemplos cuatro y cinco no incluyen un segundo controlador. Entonces, asumiendo que se encuentra un error, no habrá un manipulador de rechazo para dicho error.</p><p>Si solo vas a definir una función callback (también conocida como un manipulador de cumplimiento) en <code>then()</code>, después necesitarás anidar un método <code>catch()</code> en el final de la cadena de promesas para &nbsp;detectar cualquier posible error.</p><h3 id="como-usar-el-m-todo-catch-en-js-"><strong>Como usar el método<strong> </strong></strong><code><strong><strong>catch()</strong></strong></code><strong><strong> </strong>e<strong>n JS</strong>.</strong></h3><p>El método<code>catch()</code> &nbsp;siempre será llamado cuando quiera que se encuentre un error en cualquier punto a lo largo de la cadena de promesas:</p><figure class="kg-card kg-code-card"><pre><code class="language-js">const miPromesa = new Promise((resolve, reject) =&gt; {
  let a = false;
  setTimeout(() =&gt; {
    return (a) ? resolve('se encontró a'): reject('lo siento, no se encontró a');
  }, 300);
}); 

myPromise
.then(value =&gt; { console.log(value) })
.catch(err =&gt; { console.log(err) });


</code></pre><figcaption>Ejemplo seis</figcaption></figure><p>Dado que &nbsp;<code>myPromise</code> eventualmente se resolverá como un rechazo la función definida en el <code>then()</code> anidado será ignorado. En su lugar el manipulador se ejecutará <code>catch()</code> &nbsp;lo que debería mostrar el siguiente mensaje de error en la consola:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/08/Catch.png" class="kg-image" alt="Catch" width="600" height="400" loading="lazy"><figcaption>"lo siento, no se encontró a"</figcaption></figure><h2 id="para-terminar-">Para terminar.</h2><p>Las promesas de JavaScript son una poderosa característica que te ayudarán a ejecutar código asincrónico en JavaScript. En la mayoría, si no en todas las entrevistas para empleos que usen JS, tu entrevistador probablemente hará una pregunta sobre las promesas.</p><p>En este artículo, expliqué lo que es una promesa en términos simples, y mostré su uso práctico con algunos ejemplos en código.</p><p>Espero que hayas adquirido algo útil de este artículo. Si te gustan los tutoriales con respecto a la programación, deberías ver<a href="https://ubahthebuilder.tech/user-authentication-vs-user-authorization-what-do-they-mean-in-back-end-web-development"> mi blog</a> (en inglés), Regularmente publico artículos sobre desarrollo de software.</p><p>Gracias por leer y nos vemos pronto.</p><p><strong>Posdata</strong>: Si estás aprendiendo JavaScript, he creado un eBook que te enseña 50 temas en JS con notas digitales dibujadas a mano <a href="https://ubahthebuilder.gumroad.com/l/js-50">Miralo aqu</a>í. (en inglés)</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Aprende unidades CSS - Em, Rem, VH y VW con ejemplos de códigos ]]>
                </title>
                <description>
                    <![CDATA[  Artículo original escrito por Joy Shaheb [https://www.freecodecamp.org/news/author/joy/] Artículo original Learn CSS Units – Em, Rem, VH, and VW with Code Examples ✨✨ [https://www.freecodecamp.org/news/learn-css-units-em-rem-vh-vw-with-code-examples/] Traducido y adaptado por Julio Vargas [https://twitter.com/DevJulio1] Hoy vamos a aprender como usar las unidades CSS EM, REM, VW y VH a través de ejemplos prácticos, ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/aprende-unidades-de-medidad-css-em-rem-vh-y-vw-con-ejemplos-de-codigos/</link>
                <guid isPermaLink="false">6136cc1d16398708f3170a23</guid>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Julio Vargas ]]>
                </dc:creator>
                <pubDate>Wed, 15 Sep 2021 12:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2021/09/FCC-Thumbnail.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p></p><p><strong><strong>Artículo original escrito por </strong></strong><a href="https://www.freecodecamp.org/news/author/joy/">Joy Shaheb</a><br><strong><strong>Artículo original </strong></strong><a href="https://www.freecodecamp.org/news/learn-css-units-em-rem-vh-vw-with-code-examples/">Learn CSS Units – Em, Rem, VH, and VW with Code Examples <strong>✨✨</strong></a><br><strong><strong>Traducido y adaptado por</strong> </strong><a href="https://twitter.com/DevJulio1">Julio Vargas</a></p><p>Hoy vamos a aprender como usar las unidades CSS EM, REM, VW y VH a través de ejemplos prácticos, también veremos como hacer sitios web responsivos con esas unidades.</p><p>Comencemos.</p><h2 id="tabla-de-contenidos">Tabla de contenidos</h2><ul><li>¿Por qué aprender unidades relativas de CSS?</li><li>¿Qué son las unidades REM?</li><li>Como hacer sitios web responsivos con unidades REM &nbsp; </li><li>¿Qué son las unidades EM?</li><li>¿Qué son las unidades VW?</li><li>¿Qué son las unidades VH?</li><li>Recursos Adicionales</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/09/Frame-25.png" class="kg-image" alt="Frame-25" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2021/09/Frame-25.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2021/09/Frame-25.png 748w" sizes="(min-width: 720px) 720px" width="748" height="539" loading="lazy"><figcaption>Temas por ver</figcaption></figure><p></p><p><strong>También puedes ver este tutorial en YouTube si quieres (en inglés).</strong></p><figure class="kg-card kg-embed-card" data-test-label="fitted">
        <div class="fluid-width-video-container">
          <div style="padding-top: 56.17977528089888%;" class="fluid-width-video-wrapper">
            <iframe width="356" height="200" src="https://www.youtube.com/embed/6uJPTM0AaFc?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" name="fitvid0"></iframe>
          </div>
        </div>
      </figure><p></p><h2 id="-por-qu-aprender-unidades-relativas-de-css">¿Por qué aprender unidades relativas de CSS?</h2><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/09/YT-Thumbnail-1.png" class="kg-image" alt="YT-Thumbnail-1" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2021/09/YT-Thumbnail-1.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2021/09/YT-Thumbnail-1.png 861w" sizes="(min-width: 720px) 720px" width="861" height="438" loading="lazy"><figcaption>¿Por qué aprender unidades relativas de CSS?</figcaption></figure><p>Si tú quieres hacer sitios web responsivos muy fácilmente, rápido y eficientemente, entonces definitivamente deberías aprender unidades relativas de CSS.</p><p><strong>REM, EM, VW, VH son unidades relativas,</strong> si las combinas con consultas de medios construirás diseños perfectamente escalables. Mira este GIF ? el texto es responsivo en escritorio, tableta y pantallas móviles.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/09/final-1.gif" class="kg-image" alt="final-1" width="1636" height="924" loading="lazy"><figcaption>La fuente usa la unidad <strong>REM</strong></figcaption></figure><p>Recuerda que<strong> los pixeles son unidades absolutas</strong>, no cambiarán cuando modifiques el tamaño de tu ventana. Mira este GIF ? observa que el tamaño de la fuente de <strong>50px no cambia</strong> cuando se modifica la ventana.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/09/aaaaaaaaaaa.gif" class="kg-image" alt="aaaaaaaaaaa" width="1920" height="1080" loading="lazy"><figcaption><strong>Usando pixeles en la fuente</strong></figcaption></figure><p>Consejo: Antes de comenzar el tutorial, te sugiero que no pienses en EM o REM como unidades, sino más bien como multiplicadores de un número base.</p><h2 id="configuraci-n-del-proyecto-">Configuración del proyecto.</h2><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/09/YT-Thumbnail.png" class="kg-image" alt="YT-Thumbnail" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2021/09/YT-Thumbnail.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2021/09/YT-Thumbnail.png 861w" sizes="(min-width: 720px) 720px" width="861" height="438" loading="lazy"><figcaption><strong>Codifiquemos juntos</strong></figcaption></figure><p>Primero, copia el código de este link de <a href="https://codepen.io/joyshaheb/pen/XWMqEdV">Code Pen</a> y pégalo en VS Code o en tu editor de código de preferencia, luego sigue estos pasos.</p><ul><li>Crea una carpeta llamada proyecto-1.</li><li>Crea los archivos HTML, CSS y JS y vincúlalos.</li><li>Instala los plugins que necesitamos - <strong>px to rem y Live Server</strong></li><li>Ejecuta Live Server</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/09/textthat.gif" class="kg-image" alt="textthat" width="1108" height="408" loading="lazy"><figcaption>Probando archivos iniciales.</figcaption></figure><p>Como puedes ver en el gif ? JavaScript está haciendo los cálculos así que nos enfocaremos en el tutorial. Solo cambiaremos el CSS y experimentaremos con diferentes valores.</p><p>¡Empecemos a codificar!</p><h2 id="-qu-son-las-unidades-rem">¿Qué son las unidades Rem?</h2><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/09/YT-Thumbnail--1---1-.png" class="kg-image" alt="YT-Thumbnail--1---1-" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2021/09/YT-Thumbnail--1---1-.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2021/09/YT-Thumbnail--1---1-.png 861w" sizes="(min-width: 720px) 720px" width="861" height="438" loading="lazy"><figcaption>La unidad <strong>REM</strong></figcaption></figure><p></p><p>La unidad <strong>REM</strong> depende del elemento raíz (El elemento <strong>HTML</strong>). Mira una imagen que muestra como funciona.?</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/09/YT-Thumbnail--5-.png" class="kg-image" alt="YT-Thumbnail--5-" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2021/09/YT-Thumbnail--5-.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2021/09/YT-Thumbnail--5-.png 861w" sizes="(min-width: 720px) 720px" width="861" height="305" loading="lazy"><figcaption>Tamaño por defecto de la fuente del elemento raíz.</figcaption></figure><p></p><p>El tamaño por defecto de la fuente del elemento raíz (en HTML) es de 16px. Entonces 1 REM = 16px</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/09/YT-Thumbnail--7-.png" class="kg-image" alt="YT-Thumbnail--7-" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2021/09/YT-Thumbnail--7-.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2021/09/YT-Thumbnail--7-.png 861w" sizes="(min-width: 720px) 720px" width="861" height="373" loading="lazy"><figcaption>Experimentando con REM 3.</figcaption></figure><p></p><p>Pero si cambiamos el tamaño de fuente del elemento raíz, la unidad REM cambia, así ?</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/09/YT-Thumbnail--6-.png" class="kg-image" alt="YT-Thumbnail--6-" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2021/09/YT-Thumbnail--6-.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2021/09/YT-Thumbnail--6-.png 861w" sizes="(min-width: 720px) 720px" width="861" height="305" loading="lazy"><figcaption><strong>Tamaño de fuente del elemento raíz cambiado.</strong></figcaption></figure><p></p><p>Estamos configurando el tamaño de fuente de HTML en 50px.</p><p>Ahora, si escribimos 3 rem, nos mostrará 3*50px = 150px así ?</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/09/YT-Thumbnail--8-.png" class="kg-image" alt="YT-Thumbnail--8-" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2021/09/YT-Thumbnail--8-.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2021/09/YT-Thumbnail--8-.png 861w" sizes="(min-width: 720px) 720px" width="861" height="407" loading="lazy"><figcaption>Experimentando con 3 rem</figcaption></figure><p></p><p>Recreemos los resultados con código y veamos sus casos de uso en la práctica.?</p><p>Primero experimentemos con el tamaño por defecto de fuente de todo sitio web, el cual es 16 pixeles y configuraremos la clase <code>.texto</code> con un tamaño de fuente de 1 rem.</p><pre><code class="language-css">html {
  font-size: 16px;
}

.texto {
  font-size: 1rem;
}

/** Cálculos 
 1 rem * 16px = 16px
**/</code></pre><p>El resultado sería el siguiente. ?</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/09/YT-Thumbnail--6---1-.png" class="kg-image" alt="YT-Thumbnail--6---1-" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2021/09/YT-Thumbnail--6---1-.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2021/09/YT-Thumbnail--6---1-.png 706w" width="706" height="175" loading="lazy"><figcaption>El tamaño de fuente es de 1 rem, la raíz es 16 px.</figcaption></figure><p></p><p>Ahora incrementemos el tamaño de fuente de <code>.texto</code> a 2 rem:</p><pre><code class="language-css">html {
  font-size: 16px;
}

.texto {
  font-size: 2rem;
}

/** Cálculos
 2 rem * 16px = 32px
**/</code></pre><p></p><p>Así se vería el resultado.?</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/09/YT-Thumbnail--5---1-.png" class="kg-image" alt="YT-Thumbnail--5---1-" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2021/09/YT-Thumbnail--5---1-.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2021/09/YT-Thumbnail--5---1-.png 706w" width="706" height="175" loading="lazy"><figcaption>El tamaño de fuente es de 2 rem, la raíz es 16 px.</figcaption></figure><p>Como puedes ver, el tamaño de fuente se hace más grande, pero el ancho continúa igual (1536px).</p><h2 id="como-cambiar-el-tama-o-de-fuente-de-la-ra-z-">Como cambiar el tamaño de fuente de la raíz.</h2><p>Ahora experimentemos cambiando el tamaño de fuente de la raíz, el cual, está dentro de HTML. Primero escribe este código para obtener el resultado por defecto. ?</p><pre><code class="language-css">html {
  font-size: 16px;
}

.texto {
  font-size: 1rem;
}

/** Cálculos
 1 rem * 16px = 16px
**/</code></pre><p></p><p>Se vería así. ?</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/09/YT-Thumbnail--6--1.png" class="kg-image" alt="YT-Thumbnail--6--1" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2021/09/YT-Thumbnail--6--1.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2021/09/YT-Thumbnail--6--1.png 706w" width="706" height="175" loading="lazy"><figcaption>Configuracón por defecto.</figcaption></figure><p></p><p>Ahora cambiemos el tamaño de fuente de la raíz a 40px.</p><pre><code class="language-css">html {
  font-size: 40px;
}

.texto {
  font-size: 1rem;
}

/** Cálculos
 1 rem * 40px = 40px
**/</code></pre><p></p><p>Mira el resultado. ?</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/09/YT-Thumbnail--4-.png" class="kg-image" alt="YT-Thumbnail--4-" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2021/09/YT-Thumbnail--4-.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2021/09/YT-Thumbnail--4-.png 706w" width="706" height="175" loading="lazy"><figcaption>El elemento raíz es de 40px</figcaption></figure><p></p><p>Ahora cambiemos &nbsp;el tamaño de fuente de <code>.texto</code> a 2 rem. ?</p><pre><code class="language-css">html {
  font-size: 40px;
}

.texto {
  font-size: 2rem;
}

/** Cálculos
 2 rem * 40px = 80px
**/</code></pre><p></p><p>Y el resultado sería el siguiente.?</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/09/YT-Thumbnail--17-.png" class="kg-image" alt="YT-Thumbnail--17-" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2021/09/YT-Thumbnail--17-.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2021/09/YT-Thumbnail--17-.png 706w" width="706" height="166" loading="lazy"><figcaption>Resultado</figcaption></figure><p>Como cambiamos el tamaño de fuente de la raíz a 40px cuando cambiamos el tamaño de texto de <code>.texto</code> a 2 rem, obtenemos: 2*40 = 80px.</p><h2 id="como-hacer-sitios-web-responsivos-con-unidades-rem">Como hacer sitios web responsivos con unidades REM</h2><p>Hacer sitios web responsivos con REM es muy fácil. Solamente escribe tus estilos en <strong>unidades rem</strong> en vez de pixeles y cambia elementos raíz en diferentes breakpoints usando consultas de medios.</p><p>Te dejo una demostración para que veas como se hace y como agregar consultas de medios.?</p><pre><code class="language-css">// Pantallas grandes

@media (max-width: 1400px) {
  html {
    font-size: 25px;
  }
}

// Tabletas 

@media (max-width: 768px) {
  html {
    font-size: 18px;
  }
}

// Celulares 

@media (max-width: 450px) {
  html {
    font-size: 12px;
  }
}</code></pre><p></p><p>Ahora configura la clase <code>.texto</code> a 3 rem, así.?</p><pre><code class="language-css">.texto{
	font-size : 3rem;
}</code></pre><p></p><p>Resultado.?</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/09/final-1--1--1.gif" class="kg-image" alt="final-1--1--1" width="1636" height="924" loading="lazy"></figure><h3 id="mira-los-c-lculos">Mira los cálculos</h3><ul><li>Pantallas grandes &nbsp;-&gt; 3 rem * 25px = 75px</li><li>Tabletas &nbsp; &nbsp; &nbsp; &nbsp;-&gt; 3 rem * 18px = 54px</li><li>Celulares &nbsp; &nbsp; &nbsp;-&gt; 3 rem &nbsp;* 12px = 36px</li><li>Por defecto &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -&gt; 3rem * 16px = 48px</li></ul><h2 id="-qu-son-las-unidades-em">¿Qué son las unidades EM?</h2><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/09/YT-Thumbnail--2-.png" class="kg-image" alt="YT-Thumbnail--2-" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2021/09/YT-Thumbnail--2-.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2021/09/YT-Thumbnail--2-.png 861w" sizes="(min-width: 720px) 720px" width="861" height="438" loading="lazy"><figcaption>La unidad<strong> EM</strong></figcaption></figure><p></p><p>EM es lo mismo que REM, pero depende del tamaño de fuente del padre. Así.? <strong>Nota</strong>: asegúrate de remover todas las consultas de medios.</p><pre><code class="language-css">html {
  font-size: 16px;
}

.texto {
  font-size: 3em;
}

/** Cálculos
  font-size should be 
  3 em * 16px = 48px
**/</code></pre><p>Resultado.?</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/09/YT-Thumbnail--8---1-.png" class="kg-image" alt="YT-Thumbnail--8---1-" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2021/09/YT-Thumbnail--8---1-.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2021/09/YT-Thumbnail--8---1-.png 706w" width="706" height="166" loading="lazy"></figure><p>Ahora intentemos agregar 3 em de padding a la clase <code>.texto</code>.</p><pre><code class="language-css">html {
  font-size: 16px;
}

.texto {
  font-size: 3em;
  padding: 3em;
}

/** Cálculos
text    =&gt; 3em * 16px = 48px
padding =&gt; 3em * 3em * 16px = 144px
**/</code></pre><p></p><p>En vez de tener 48px de relleno, obtenemos 144px de relleno. Como puedes ver, es multiplicado por los números previos.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/09/YT-Thumbnail--7---1-.png" class="kg-image" alt="YT-Thumbnail--7---1-" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2021/09/YT-Thumbnail--7---1-.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2021/09/YT-Thumbnail--7---1-.png 706w" width="706" height="175" loading="lazy"><figcaption><strong>Resultado de padding: 3em</strong></figcaption></figure><p></p><p>Aquí está la parte calculada de la consola del desarrollador: ?</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/09/ss.png" class="kg-image" alt="ss" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2021/09/ss.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2021/09/ss.png 867w" sizes="(min-width: 720px) 720px" width="867" height="497" loading="lazy"><figcaption><strong>Padding de 3 em para nuestro texto.</strong></figcaption></figure><p></p><p><strong>No uses EM</strong> .<strong>?❌</strong></p><p>Usar EM no vale el esfuerzo porque:</p><ul><li>Tienes un alto probabilidad de cometer error de cálculo.</li><li>Tienes que escribir un montón de código en las consultas de medios mientras intentas hacer que un sitio web sea responsivo en todos los tamaños de pantallas.</li><li>Consume mucho tiempo.</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/09/YT-Thumbnail--9--1.png" class="kg-image" alt="YT-Thumbnail--9--1" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2021/09/YT-Thumbnail--9--1.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2021/09/YT-Thumbnail--9--1.png 861w" sizes="(min-width: 720px) 720px" width="861" height="438" loading="lazy"><figcaption>Unidad <strong>VW</strong></figcaption></figure><p></p><p>VW significa Viewport Width (ancho del dispositivo). Funciona como las unidades de porcentaje, especificar 10vw es equivalente a ocupar 10% del ancho visible de la pantalla.</p><p>Para experimentar con resultados, haz estos cambios en tu código CSS.?</p><p><strong>Nota</strong>: <em>comenta la última línea en la clase <code>.caja</code>.</em></p><pre><code class="language-css">.text {
  display: none;
}

.caja {
  width: 50vw;
  
  height: 300px;
  /* display: none; */
}</code></pre><p></p><p>Si observas con cuidado, puedes ver que <strong>50vw significa 50%</strong>, lo cual cubrirá la mitad del ancho de la pantalla.</p><p>En JavaScript, descomenta esta línea al final.?</p><pre><code class="language-javascript">  // Caja ancho y alto

  caja.innerHTML = "Width : " + caja_width;
  
  // caja.innerHTML = "Height : " + caja_height;</code></pre><p>El resultado sería el siguiente.?</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/09/YT-Thumbnail--11-.png" class="kg-image" alt="YT-Thumbnail--11-" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2021/09/YT-Thumbnail--11-.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2021/09/YT-Thumbnail--11-.png 706w" width="706" height="251" loading="lazy"><figcaption><strong>50vw ocupa el 50% del ancho de pantalla.</strong></figcaption></figure><p></p><p>Como podrás ver, ese elemento siempre cubrirá ese espacio incluso si cambiamos el tamaño de la ventana.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/09/ttt.gif" class="kg-image" alt="ttt" width="1192" height="408" loading="lazy"><figcaption>Cambiando el tamaño de la caja que tiene 50vw de tamaño.</figcaption></figure><p></p><h2 id="-qu-son-las-unidades-vh">¿Qué son las unidades VH?</h2><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/09/YT-Thumbnail--10-.png" class="kg-image" alt="YT-Thumbnail--10-" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2021/09/YT-Thumbnail--10-.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2021/09/YT-Thumbnail--10-.png 861w" sizes="(min-width: 720px) 720px" width="861" height="438" loading="lazy"><figcaption>Unidad <strong>VH</strong></figcaption></figure><p></p><p>VH significa <strong>viewport height</strong> (altura del dispositivo). También funciona como <strong>porcentaje</strong>, especificar <strong>10vh</strong> es equivalente a ocupar 10% de la altura visible de la pantalla.</p><p>Mira esta demostración.?</p><pre><code class="language-css">.texto {
  display: none;
}

.caja {
  width: 300px;
  
  height: 50vh;
   /* display: none; */
}</code></pre><p></p><p>Si miras cuidadosamente puedes ver que <strong>50vh significa 50%</strong>, lo que cubrirá el 50% de la altura de la pantalla.</p><p>En JavaScript, descomenta esta línea al final.?</p><pre><code class="language-javascript">//Caja ancho y alto

  // caja.innerHTML = "Width : " + Caja_width;
  
  caja.innerHTML = "Height : " + Caja_height;</code></pre><p></p><p>También cambia esto.?</p><pre><code class="language-javascript">  // Tamaño de la pantalla (ancho y alto)

  // tamaño.innerHTML = "Width : " + Width + " px";
  tamaño.innerHTML = "Height : " + Height + " px";</code></pre><p></p><p>Resultado.?</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/09/YT-Thumbnail--21-.png" class="kg-image" alt="YT-Thumbnail--21-" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2021/09/YT-Thumbnail--21-.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2021/09/YT-Thumbnail--21-.png 706w" width="706" height="355" loading="lazy"><figcaption><strong>50vh ocupa el 50% del alto de la pantalla.</strong></figcaption></figure><p></p><p>Como puedes ver, siempre cubrirá ese espacio incluso si cambiamos el tamaño de la pantalla.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/09/gggg.gif" class="kg-image" alt="gggg" width="1032" height="680" loading="lazy"><figcaption>Redimensionando la caja que tiene un tamaño de 50vh.</figcaption></figure><p>! Eso es todo¡</p><h2 id="conclusi-n">Conclusión</h2><p>!Felicitaciones¡ Ahora puedes usar REM, EM, VW y VH con confianza para hacer sitios web responsivos.</p><p>Aquí está tu medalla ?️ por haber leído hasta el fin. &nbsp;❤️</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/09/yx020xpcqeh1wg30wc5c.png" class="kg-image" alt="yx020xpcqeh1wg30wc5c" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2021/09/yx020xpcqeh1wg30wc5c.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2021/09/yx020xpcqeh1wg30wc5c.png 1000w" sizes="(min-width: 720px) 720px" width="1000" height="245" loading="lazy"></figure><h2 id="recursos-adicionales">Recursos adicionales</h2><p><a href="https://youtu.be/HY8q4TD3KGM">Tutorial completo de consulta de medios.</a></p><figure class="kg-card kg-embed-card" data-test-label="fitted">
        <div class="fluid-width-video-container">
          <div style="padding-top: 56.17977528089888%;" class="fluid-width-video-wrapper">
            <iframe width="356" height="200" src="https://www.youtube.com/embed/HY8q4TD3KGM?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" name="fitvid1"></iframe>
          </div>
        </div>
      </figure><h3 id="cr-ditos">Créditos</h3><ul><li>Imágenes de <a href="https://www.freepik.com/user/collections/rem/2273142">Freepik</a></li></ul><h3 id="sugerencias-y-cr-ticas-"><strong>Sugerencias y críticas. ❤️️</strong></h3><ul><li><a href="https://www.youtube.com/c/joyshaheb"><strong><strong>YouTube </strong></strong>/ JoyShaheb</a></li><li><a href="https://www.linkedin.com/in/joyshaheb/"><strong><strong>LinkedIn </strong></strong>/ JoyShaheb</a></li><li><a href="https://twitter.com/JoyShaheb"><strong><strong>Twitter </strong></strong>/ JoyShaheb</a></li><li><a href="https://www.instagram.com/joyshaheb/"><strong><strong>Instagram </strong></strong>/ JoyShaheb</a></li></ul> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Tutorial de JavaScript: cómo configurar un proyecto de desarrollo  de front end. ]]>
                </title>
                <description>
                    <![CDATA[ Artículo original escrito por Hunor Márton Borbély [https://www.freecodecamp.org/news/author/hunor/]  Artículo original JavaScript Tutorial — How to Set Up a Front End Development Project [https://www.freecodecamp.org/news/how-to-set-up-a-front-end-development-project/]    Traducido y adaptado por Julio Vargas [https://twitter.com/DevJulio1] Digamos que tienes planes en construir un sitio web. Antes de empezar, debes configurar algunas herramientas ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/tutorial-de-javascript-como-configurar-un-proyecto-de-desarrollo-front-end/</link>
                <guid isPermaLink="false">611551cc3e80820908da4ac9</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Julio Vargas ]]>
                </dc:creator>
                <pubDate>Mon, 13 Sep 2021 12:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2021/09/Set-up-a-frontend-project.001.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p><strong>Artículo original escrito por </strong><a href="https://www.freecodecamp.org/news/author/hunor/">Hunor Márton Borbély</a><strong> </strong><br><strong>Artículo original </strong><a href="https://www.freecodecamp.org/news/how-to-set-up-a-front-end-development-project/">JavaScript Tutorial — How to Set Up a Front End Development Project</a> <br><strong>Traducido y adaptado por </strong><a href="https://twitter.com/DevJulio1">Julio Vargas</a></p><p>Digamos que tienes planes en construir un sitio web. Antes de empezar, debes configurar algunas herramientas para hacer tu vida más fácil. Pero, ¿Cuáles herramientas deberías tener?</p><p>El ecosistema JavaScript<strong> </strong>cambia tan rápido que puede ser abrumador elegir las mejores herramientas para usar. Para resolver este problema, en este artículo voy a explicarte como configurar un proyecto front end<strong> </strong>desde cero. </p><p>Veremos cosas como extensiones del editor que deberías tener, como agregar librerías de JavaScript a tu proyecto, &nbsp;por qué deberías usar Node.js incluso si lo que deseas es hacer desarrollo de front end, &nbsp;y como configurar un paquete de aplicaciones que generara una vista previa en vivo a medida que vas escribiendo código en tu navegador.</p><p>Ahora, adentrémonos en ello.</p><h2 id="como-elegir-editor-de-c-digo-">Como elegir editor de código.</h2><p>Comencemos con los fundamentos. Como desarrollador Web, principalmente escribirás y o editarás &nbsp;texto, entonces necesitas un buen editor. Así que, ¿Cuál deberías usar?</p><p>Elegir un editor es altamente basado en tus preferencias personales, ya que la mayoría de editores tienen características similares.</p><p>Si no tienes preferencia personal, te recomiendo mucho <a href="https://code.visualstudio.com/">VS Code</a>. Últimamente, VS Code se ha vuelto el editor estándar de facto para desarrollo web.</p><p>Aquí tenemos un gráfico de la última edición de la encuesta <a href="https://stateofjs.com/">State of JS</a>. En esta encuesta, se le preguntó a más de 23.000 desarrolladores sobre sus preferencias con respecto a desarrollo web. La inmensa mayoría eligió VS Code en lo que a editores se refiere.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/08/Screenshot-2021-05-26-at-11.23.50.png" class="kg-image" alt="Screenshot-2021-05-26-at-11.23.50" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2021/08/Screenshot-2021-05-26-at-11.23.50.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2021/08/Screenshot-2021-05-26-at-11.23.50.png 1000w" sizes="(min-width: 720px) 720px" width="1000" height="620" loading="lazy"><figcaption><strong>Datos de la encuesta.</strong></figcaption></figure><p>Si no has visto las encuestas de <a href="https://stateofjs.com/">State of JS</a> antes, te recomiendo mucho que lo hagas. Te puede brindar una excelente descripción general de las últimas tendencias con JavaScript. Puedes ver cuáles librerías y herramientas usa la gente y cuáles podrían abandonar pronto.</p><p>Una de las principales características de los editores convencionales es que puedes agregarles extensiones. Veamos dos extensiones que son imprescindibles.</p><h2 id="como-darle-formato-a-tu-c-digo-autom-ticamente-en-vs-code-">Como darle formato a tu código automáticamente en VS Code.</h2><p>Prettier es una extensión que hace que tu código sea más consistente y fácil de leer.</p><p>Digamos que copiaste algo de Stack Overflow y es difícil de leer. La tabulación está desactivada, una línea es demasiado larga y etc. Luego solo debes guardar el archivo, y mágicamente, todo luce como debería. </p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/08/Set-up-a-frontend-project.001-1.jpeg" class="kg-image" alt="Set-up-a-frontend-project.001-1" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2021/08/Set-up-a-frontend-project.001-1.jpeg 600w, https://www.freecodecamp.org/espanol/news/content/images/size/w1000/2021/08/Set-up-a-frontend-project.001-1.jpeg 1000w, https://www.freecodecamp.org/espanol/news/content/images/2021/08/Set-up-a-frontend-project.001-1.jpeg 1600w" sizes="(min-width: 720px) 720px" width="1600" height="900" loading="lazy"><figcaption>Así funciona <strong>Prettier</strong>.</figcaption></figure><p>Esto es lo que hace Prettier. Le da formato al código basado en buenas prácticas. No solo corrige la tabulación y ajusta las líneas, también agrega paréntesis para mejorar la legibilidad del código, se asegura &nbsp;de que seas consistente con las comillas y mucho más. </p><p>Para hacer que funciones, primero debes instalar la extensión de Prettier. En VS Code vamos al panel de extensiones, escribe Prettier y luego instálalo.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/08/Set-up-a-frontend-project.001-5.jpeg" class="kg-image" alt="Set-up-a-frontend-project.001-5" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2021/08/Set-up-a-frontend-project.001-5.jpeg 600w, https://www.freecodecamp.org/espanol/news/content/images/size/w1000/2021/08/Set-up-a-frontend-project.001-5.jpeg 1000w, https://www.freecodecamp.org/espanol/news/content/images/2021/08/Set-up-a-frontend-project.001-5.jpeg 1600w" sizes="(min-width: 720px) 720px" width="1600" height="900" loading="lazy"><figcaption>Como instalar <strong>Prettier</strong>.</figcaption></figure><p>Instalar la extensión no le da formato a tus archivos automáticamente al guardar por defecto. El funcionamiento por defecto es que una vez instalada la extensión, puedes presionar clic derecho dentro de tu archivo y luego seleccionar<strong> formato de documento. </strong>O seleccionar parte del archivo y luego<strong> </strong>selecciona<strong> seleccion de formato.</strong></p><p>La primera vez que haces esto deberás seleccionar el formateador por defecto. Actualmente VS Code tiene un formateador, pero no es tan poderoso como Prettier. Entonces ahora que tenemos dos formateadores, tenemos que hacerle saber a VS Code que en el futuro, cuando se trate de dar formato a nuestro código, queremos usar Prettier.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/08/Screenshot-2021-05-29-at-13.37.54-2.png" class="kg-image" alt="Screenshot-2021-05-29-at-13.37.54-2" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2021/08/Screenshot-2021-05-29-at-13.37.54-2.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2021/08/Screenshot-2021-05-29-at-13.37.54-2.png 650w" width="650" height="600" loading="lazy"><figcaption>Selecciona <strong>Prettier </strong>como formateador por defecto.</figcaption></figure><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/08/Screenshot-2021-05-29-at-13.38.03-2.png" class="kg-image" alt="Screenshot-2021-05-29-at-13.38.03-2" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2021/08/Screenshot-2021-05-29-at-13.38.03-2.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2021/08/Screenshot-2021-05-29-at-13.38.03-2.png 650w" width="650" height="600" loading="lazy"></figure><p>Si quieres darle formato automáticamente a tus archivos cuando guardes, debes cambiar una configuración.</p><p>Ve a configuraciones en las preferencias de tu VS Code y busca <strong>Format On Save</strong> (dar formato al guardar). Por defecto, esto es falso entonces asegúrate de marcar la casilla de verificación. Después de eso cada vez que guardes tus archivos, el formateo debería hacerse automáticamente.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/08/Set-up-a-frontend-project.001-2.jpeg" class="kg-image" alt="Set-up-a-frontend-project.001-2" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2021/08/Set-up-a-frontend-project.001-2.jpeg 600w, https://www.freecodecamp.org/espanol/news/content/images/size/w1000/2021/08/Set-up-a-frontend-project.001-2.jpeg 1000w, https://www.freecodecamp.org/espanol/news/content/images/2021/08/Set-up-a-frontend-project.001-2.jpeg 1600w" sizes="(min-width: 720px) 720px" width="1600" height="900" loading="lazy"></figure><p></p><p>Formatear puede ser controversial, sin embargo, en la mayoría de los casos, especialmente para principiantes, recomiendo mucho las configuraciones por defecto. Pero si prefieres un estilo diferente puedes personalizar cosas.</p><p>Puedes indicar comentarios para <a href="https://prettier.io/docs/en/ignore.html">ignorar líneas específicas</a> y puedes crear un archivo <em>rc</em> donde puedes listar tus preferencias.</p><p>En la carpeta principal de tu proyecto, puedes crear un archivo llamado <strong>.prettierrc</strong> y agregar algunas opciones. Una opción típica sería si prefieres comillas sencillas en lugar de dobles en tu archivo. O si no quieres agregar punto y coma al final de tus líneas de código.</p><p>Con esta configuración, una vez que guardés tus archivos deberías ver un resultado diferente.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/08/Screenshot-2021-05-30-at-11.58.50.png" class="kg-image" alt="Screenshot-2021-05-30-at-11.58.50" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2021/08/Screenshot-2021-05-30-at-11.58.50.png 600w, https://www.freecodecamp.org/espanol/news/content/images/size/w1000/2021/08/Screenshot-2021-05-30-at-11.58.50.png 1000w, https://www.freecodecamp.org/espanol/news/content/images/2021/08/Screenshot-2021-05-30-at-11.58.50.png 1600w" sizes="(min-width: 720px) 720px" width="1600" height="900" loading="lazy"></figure><p></p><p>Hay muchas opciones por supuesto. Si quieres investigar más a fondo, puedes hacerlo en <a href="https://prettier.io/docs/en/configuration.html">Prettier's documentation</a>. (en inglés)</p><h2 id="-por-qu-necesitas-node-para-un-proyecto-de-desarrollo-de-front-end"><strong>¿Por qué necesitas Node para un proyecto de desarrollo de front end?</strong></h2><p>Antes de adentrarnos en la segunda extensión que deberíamos tener, necesitamos configurar un par de cosas más. Primero debemos hablar de Node.js. ¿Qué es Node y por qué lo necesitas incluso si trabajas como un desarrollador de front end?</p><p>Node es a menudo asociado con el desarrollo back end, pero eso no es del todo cierto. Si ves la descripción de un trabajo donde estén buscando un desarrollador de Node, entonces probablemente estén buscando un desarrollador Back End.</p><p>Aun así usaras Node incluso si haces desarrollo de front end.</p><p>Entonces qué es Node, ¿Por qué la gente piensa que es para desarrollo Back-End y por qué la necesitas incluso como desarrollador de front end?</p><p>Node es un tiempo de ejecución de JavaScript. Ejecuta archivos de JavaScript fuera de un navegador. Hay dos formas de ejecutar código de JavaScript. Lo tienes como parte de un sitio web y lo ejecutas en todo el sitio web en un navegador, o lo ejecutas solamente en el archivo JavaScript con Node.</p><p>En este ejemplo tenemos un simple archivo JavaScript que imprime Hola Mundo en la consola.</p><p>Si tenemos Node instalado, podemos ir a la terminal, buscar la carpeta donde está el archivo y luego ejecutarlo con Node, así, puedes ver como se ejecuta el archivo y el resultado está en la consola.</p><p>Eso es Node en realidad, una herramienta que ejecuta archivos JavaScript por sí mismos.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/08/Screenshot-2021-05-30-at-12.01.08.png" class="kg-image" alt="Screenshot-2021-05-30-at-12.01.08" srcset="https://www.freecodecamp.org/espanol/news/content/images/2021/08/Screenshot-2021-05-30-at-12.01.08.png 600w" width="600" height="243" loading="lazy"></figure><p>JavaScript se comporta principalmente de la misma manera en ambos casos. Pero hay algunas diferencias en lo que puede hacer en un navegador y lo que puede hacer cuando se ejecuta con Node.</p><p>Por ejemplo, cuando se ejecuta en el navegador, JavaScript puede acceder a los elementos HTML y &nbsp;modificarlos. Esa es el punto principal de tener JavaScript en primer lugar.</p><p>En Node, no hay archivo HTML circundante al cual JavaScript pueda acceder. JavaScript se ejecuta por sí mismo.</p><p>Por otro lado, en Node JavaScript puede acceder a tus archivos del sistema, leerlos y escribirlos. </p><p>Por ejemplo, puedes ejecutar scripts que generen el esqueleto de tu proyecto en tu computadora por ti. Puedes ejecutar comprobaciones en tus archivos y automáticamente corregir los errores. O puedes ejecutar tus archivos de prueba.</p><p>En resumen, Node te deja ejecutar algunos scripts que hacen tu vida más fácil.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/08/Set-up-a-frontend-project.001-1-1.jpeg" class="kg-image" alt="Set-up-a-frontend-project.001-1-1" srcset="https://www.freecodecamp.org/espanol/news/content/images/2021/08/Set-up-a-frontend-project.001-1-1.jpeg 600w" width="600" height="338" loading="lazy"></figure><p>Para instalar node ve a <a href="https://nodejs.org/es/">nodejs.org</a> e instala la última versión estable, marcada con LTS. Si aún no estás seguro de que ya tienes Node, también puedes ir a tu terminal y ejecutar el código <strong>node-v</strong> para comprobarlo. Si obtienes un número de versión, tienes Node.</p><p>Entonces, para responder a la pregunta, ¿Por qué la gente asocia Node con el desarrollo Back End? Porque si el código back end es escrito en JavaScript, los servidores necesitan una forma de ejecutarlo sin el navegador. Entonces sí, si tú eres un desarrollador back end usando JavaScript, vas a usar Node. Pero Node es muchísimo más que eso.</p><h2 id="como-ejecutar-tu-proyecto-">Como ejecutar tu proyecto.</h2><p>Ahora que tenemos Node instalado podemos instalar un empaquetador. ¿Qué es un empaquetador? Un empaquetador es una herramienta que toma todos tus archivos y los convierte en paquetes ordenados que podrás ejecutar en el navegador.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/08/Set-up-a-frontend-project.005.jpeg" class="kg-image" alt="Set-up-a-frontend-project.005" srcset="https://www.freecodecamp.org/espanol/news/content/images/2021/08/Set-up-a-frontend-project.005.jpeg 600w" width="600" height="338" loading="lazy"></figure><p>¿Por qué no podrías ejecutar &nbsp;tus archivos en el navegador? Si usas HTML, CSS y JavaScript simple entonces tienes razón, puede que ni siquiera necesites un empaquetador.</p><p>Pero las herramientas de desarrollo web han evolucionado, y en el momento en que utilices algo más avanzado tu navegador no entenderá tus archivos.</p><p>¿Estás usando React? La sintaxis de React JSX que se ve como HTML, no es parte de la sintaxis de JavaScript. Necesitas una herramienta que lo convierta en JavaScript simple. De otro modo, no se ejecutará en el navegador.</p><p>¿Estás usando SCSS o algún otro dialecto de CSS? Entonces, de nuevo, tienes que convertirlo a CSS simple para que el navegador lo entienda.</p><p>Otra razón por la que quieres usar un empaquetador es que puede generar una previsualización en vivo de tu sitio web mientras lo creas. Cada vez que guardes verás el resultado de inmediato en tu navegador</p><p>Entonces, ¿cómo elegir empaquetador? Hay muchas opciones. Actualmente, el empaquetador más usado es <strong><strong><a href="https://webpack.js.org/">webpack</a></strong></strong>. Webpack es una herramienta poderosa con un montón de opciones de configuración. Pero todo este montón de opciones son también sus debilidades. Configurarla no es algo fácil si eres nuevo en la herramienta.</p><p>Otra &nbsp;opción que ganó popularidad recientemente es <strong><strong><a href="https://parceljs.org/">Parcel</a></strong></strong>. Parcel tiene características similares a Webpack. De alguna manera, es incluso mejor.</p><p>Lo realmente genial es que una vez instalado, no necesita una sola configuración. Parcel automáticamente se da cuenta de lo que usas e interpreta tus archivos.</p><p>¿Estás usando React? No hay problema, Parcel lo reconoce e interpreta JSX. ¿Estás usando SCSS? No hay problema. Parcel sabe qué hacer.</p><p>Para instalar Parcel tienes que ejecutar un comando en tu terminal. Vamos a usar npm (node package manager) para instalarlo. npm es una herramienta que viene con Node. Si instalaste Node ya tienes npm. </p><p>Con npm puedes instalar librerias de JavaScript en tu computador global o específicamente para un proyecto.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/08/Screenshot-2021-05-30-at-14.32.40.png" class="kg-image" alt="Screenshot-2021-05-30-at-14.32.40" srcset="https://www.freecodecamp.org/espanol/news/content/images/2021/08/Screenshot-2021-05-30-at-14.32.40.png 600w" width="600" height="209" loading="lazy"></figure><p></p><p>Ve a tu terminal y ejecuta el siguiente comando. La etiqueta <strong>-g </strong>significa global. Una vez que hayas instalado Parcel en tu computador, serás capaz de ejecutar cualquier proyecto con él. No tienes que instalar Parcel para cada proyecto que crees, solo lo haces una vez.</p><pre><code class="language-shell">npm install -g parcel-bundler</code></pre><blockquote>Nota: El comando de arriba instalará Parcel 1. Al momento de escribir este articulo, Parcel 2 está en fase Beta y tambien lo puedes instalar con <strong>npm install -g parcel.</strong></blockquote><p>Después de instalar Parcel globalmente, veamos como lo usamos para ejecutar un proyecto.</p><p>Digamos que tenemos un sitio web con archivos HTML, CSS y JavaScript. Podemos usar Parcel para crear una previsualización en vivo.</p><p>Abre la terminal y asegúrate de estar en la carpeta en la que tienes tu proyecto. Si usas VS Code puedes usar la terminal incorporada que comenzará automáticamente a la derecha de la pantalla.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/08/Screenshot-2021-05-30-at-18.35.20.png" class="kg-image" alt="Screenshot-2021-05-30-at-18.35.20" srcset="https://www.freecodecamp.org/espanol/news/content/images/2021/08/Screenshot-2021-05-30-at-18.35.20.png 600w" width="600" height="338" loading="lazy"><figcaption>Ejecutando Parcel con la terminal incorporada de VS Code.</figcaption></figure><p>Una vez que estemos seguros de estar en la carpeta correcta podemos ejecutar parcel con el siguiente comando. Este te dará una URL donde puedes ver los resultados. Y cada vez que editemos un archivo podemos ver el resultado guardado en vivo en el navegador.</p><pre><code class="language-shell">parcel index.html</code></pre><p>Una vez que inicies con el código este ejecutará y generará una vista previa en vivo de tu sitio hasta que cierres o pares la ventana de la terminal. En general, la puedes ejecutar mientras estás desarrollando tu sitio. Entonces &nbsp;una vez que hayas terminado puedes presionar <strong>Ctrl+C</strong> para pararla.</p><p>Si se desincroniza o la interrumpes con un error, entonces puedes reiniciarla presionando Ctrl+C para pararla y después ejecutarla en el mismo script de nuevo.</p><p>Por supuesto, Parcel es mucho mas que eso. Ahora en vez de CSS simple, también puedes usar SCSS por ejemplo. Esto te permite usar muchas características diferentes como declaraciones anidadas, usar mixins o llamar funciones y mucho más. Es como CSS con superpoderes. O incluso puedes reemplazar HTML y usar Pug en su lugar.</p><h2 id="como-a-adir-librerias-a-tu-proyecto-de-javascript-">Como añadir librerias a tu proyecto de JavaScript.</h2><p>Ahora que tenemos Node instalado y &nbsp;una vista previa de npm, veamos como podemos añadir librerías a nuestro proyecto</p><p>En el pasado los desarrolladores usaban una CDN para agregar librerias. Tu podrías &nbsp;importar una librería teniendo la etiqueta script en tu código HTML apuntando a una URL.</p><p>Eso está bien y sigue funcionando bien, pero hoy en día muchos desarrolladores usan npm o node package manager para agregar libraries a sus proyectos. Entonces ¿cómo funciona?</p><p>Primero tienes que inicializar el proyecto con el siguiente comando en tu terminal. De nuevo, necesitas ejecutar este comando en el directorio raíz de tu proyecto (consejo: Usa la terminal incorporada de VS Code para comenzar en la carpeta correcta).</p><pre><code class="language-shell">npm init —yes</code></pre><p>Este comando inicializó un archivo package.json en tu raíz con algunos metadatos. Tiene cosas como: nombre del proyecto, descripción, número de versión y etc. Cuando agregas el indicador si, todos estos valores tendrán un valor por defecto.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/08/Screenshot-2021-05-31-at-18.36.56.png" class="kg-image" alt="Screenshot-2021-05-31-at-18.36.56" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2021/08/Screenshot-2021-05-31-at-18.36.56.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2021/08/Screenshot-2021-05-31-at-18.36.56.png 1000w" sizes="(min-width: 720px) 720px" width="1000" height="563" loading="lazy"><figcaption>Inicializando un proyecto e instalando Three.js.</figcaption></figure><p>Ahora podemos agregar librerías a nuestro paquete con el comando de instalación de npm. En un <a href="https://www.freecodecamp.org/news/render-3d-objects-in-browser-drawing-a-box-with-threejs/">artículo previo</a>, usamos Three.js para renderizar cajas 3d en el navegador.</p><p>Así que como ejemplo instalemos Three.js. Ve a tu terminal de nuevo, asegurate de estar en la carpeta correcta y ejecuta el siguiente código:</p><pre><code class="language-shell">npm install three</code></pre><p>Esto instalará Three.js. ¿Cómo &nbsp;sabes que la palabra clave aquí es Three y no threejs?</p><p>Cuando no sabes el nombre de tu paquete puedes googlear "npm" &nbsp;y el nomre de la librería que necesitas. O en caso de que incluso no sepas el nombre de la librería también puedes buscar &nbsp;"npm librería 3D" y ver que encuentra Google.</p><p>Podemos mirar estos resultados uno por uno y elegir uno basado en sus capacidades y otras informaciones. La mayoría de estos paquetes vienen con descripciones y ejemplos rápidos para darte una idea de lo que puede hacer la librería.</p><p>Otro indicador que puedes mirar son las descargas semanales y su última actualización para asegurarte que sea una librería activa que la gente sigue usando.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/08/Set-up-a-frontend-project.001-2-1.jpeg" class="kg-image" alt="Set-up-a-frontend-project.001-2-1" srcset="https://www.freecodecamp.org/espanol/news/content/images/2021/08/Set-up-a-frontend-project.001-2-1.jpeg 600w" width="600" height="338" loading="lazy"></figure><p>Una vez que encuentres el paquete que estás buscando, puedes ver el comando de instalación en la esquina superior derecha: <strong>npm i three</strong>. La<em> i</em> aquí no es más que un diminutivo de <em>instalar.</em></p><p>Cuando ejecutemos este comando, sucederán tres cosas.</p><p>Primero, agregará la última versión de Three.js a tu archivo &nbsp;package.json como una dependencia del proyecto. Después también crea un archivo package-lock. Ambas cosas nunca deberías editarlas manualmente. Para añadir, quitar o actualizar paquetes, deberías usar comandos como <em>npm install, npm uninstall</em> y etc.</p><p>Lo tercero que sucederá una vez que ejecutes <em>npm install</em> es que se creara una carpeta llamada <em>node_modules</em>. Esta es la carpeta donde estará el código fuente de Three.js.</p><p>Entonces, cuando importes Three.js en tu proyecto, lo buscarás en esta carpeta. No debes modificarla de forma manual como dijimos anteriormente.</p><p>Ahora que tenemos instalado Three.js podemos crear un sitio web simple que muestre una caja en 3D. Es un simple archivo HTML y JavaScript con el código para una Caja 3D.</p><p>La clave aquí es que en tu archivo JavaScript importes Three.js con la declaración de importar. Y usará el paquete que instalaste.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/08/Screenshot-2021-05-31-at-18.47.00.png" class="kg-image" alt="Screenshot-2021-05-31-at-18.47.00" srcset="https://www.freecodecamp.org/espanol/news/content/images/2021/08/Screenshot-2021-05-31-at-18.47.00.png 600w" width="600" height="338" loading="lazy"></figure><p>Luego podemos ejecutar el proyecto con Parcel. Usar importar significa que ahora usamos el módulo del sistema. Ejecutar un proyecto con la sitaxis del módulo puede ser un poco complicado, pero como estamos usando Parcel para ejecutar nuestro proyecto, funciona sin problemas y sin preguntas. Esa es una de las razones por la cual usamos Parcel.</p><p>Si quieres aprender más sobre crear juegos en 3D con Three.js puedes ver mi <a href="https://www.freecodecamp.org/news/three-js-tutorial/">artículo</a> sobre como construir un carro minimalístico en el navegador.</p><h2 id="c-mo-obtener-consejos-de-codificaci-n-mientras-codifica-">Cómo obtener consejos de codificación mientras codifica.</h2><p>La segunda extensión que deberías tener para VS Codde es <strong>ESLint</strong>. Mientras que <em>Prettier </em>es para darle formato a tu código, ESLint puede darte consejos de codificación.</p><p>Existen muchos patrones en JavaScript que pueden causar &nbsp;un error o que pueden ser engañosos cuando tratas de entender el código.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/08/Screenshot-2021-06-01-at-01.49.24.png" class="kg-image" alt="Screenshot-2021-06-01-at-01.49.24" srcset="https://www.freecodecamp.org/espanol/news/content/images/2021/08/Screenshot-2021-06-01-at-01.49.24.png 600w" width="600" height="338" loading="lazy"><figcaption>Un error de escritura puede llevar a errores molestos.</figcaption></figure><p>En este ejemplo declaramos una variable pero luego tenemos un error de escritura y tratamos de usar otra variable que no existe.</p><p>ESLint lo resaltará. Te mostrará una advertencia en ambos, en la declaración diciendo que creaste una variable que no usas, y en el uso donde te dirá que tratas de usar una variable que no está declarada.</p><p>Después de estas advertencias, es fácil encontrar donde tuviste el error. Por supuesto, ESLint es mucho más complejo que solo tratar de encontrar este &nbsp;simple error. También hay otros menos obvios donde podrías no entender al principio, porque te muestra una advertencia.</p><p>En ese punto, también puedes dar clic en el enlace para ver una explicación más detallada de por qué &nbsp;este patrón es malo y que puedes hacer para evitarlo.</p><p>¿Cómo puedes usar ESLint en tu proyecto? Configurarlo requiere algunos pasos más allá de instalarlo. Por suerte, la mayoría de estos pasos los tienes que hacer una sola vez.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/08/Set-up-a-frontend-project.002-1.jpeg" class="kg-image" alt="Set-up-a-frontend-project.002-1" srcset="https://www.freecodecamp.org/espanol/news/content/images/2021/08/Set-up-a-frontend-project.002-1.jpeg 600w" width="600" height="338" loading="lazy"></figure><p>Primero, como hiciste con Prettier, tienes que instalar la extensión de ESLint. Ve a extensiones, busca ESLint e instálala.</p><p>Luego necesitas generar una configuración de ESLint. Aunque antes de hacer esto, debes asegurarte de que tu proyecto está inicializado con <em>npm ini</em>t.</p><p>Si aún no tienes un archivo package.json entonces primero tienes que ejecutar npm init. Sí, para inicializar tu proyecto.</p><p>Luego puedes generar una configuración para ESLint con el siguiente comando.</p><pre><code class="language-shell">npx eslint —-init</code></pre><p>npx es otra herramienta que viene con Node. Puede ejecutar scripts que ni siquiera están en tu computador.</p><p>En este caso ejecutamos el script ESLint, pero en realidad nunca instalamos ESLint. Instalamos &nbsp;la extensión de ESLint, pero no es el script que estamos ejecutando aquí.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/08/Screenshot-2021-05-31-at-23.07.47.png" class="kg-image" alt="Screenshot-2021-05-31-at-23.07.47" srcset="https://www.freecodecamp.org/espanol/news/content/images/2021/08/Screenshot-2021-05-31-at-23.07.47.png 600w" width="600" height="338" loading="lazy"><figcaption>Inicializando la configuración de ESLint desde la terminal, añadiendo el archivo .eslintignore.</figcaption></figure><p>Este script te preguntará alguna cosas. La mayoría obvias excepto la primera.</p><p><strong>¿Cómo te gustaría usar ESLint?</strong></p><p>¿Quieres ESLint solo para comprobar los errores de &nbsp;sintaxis, &nbsp;quieres que también encuentre posibles problemas o incluso quieres que compruebe errores de estilo?</p><p> Si también usas Prettier, necesitas seleccionar la segunda opción. Porque ambos te recomendaran estilos, lo que hará que entren en conflicto.</p><p>Entonces si usas Prettier no necesitas ESLint para comprobar los estilos, solo para la sintaxis y posibles problemas.</p><p><strong>¿Qué tipo de </strong>módulos<strong> usa tu proyecto?</strong></p><p>En un proyecto de desarrollo de front end probablemente usas importar y exportar por lo que seleccionarás la primera opción.</p><p><strong>¿Qué framework usa tu proyecto?</strong></p><p>Si usas React o Vue.js selecciona la opción apropiada, de otra forma no selecciones nada.</p><p><strong>¿Tu proyecto usa Typescript?</strong></p><p>Si usas Typescript selecciona si, si no presiona enter y continua.</p><p><strong>¿</strong>Dónde<strong> ejecutas tu proyecto?</strong></p><p>¿Tu proyecto se &nbsp;ejecutará en un navegador o con Node? Aquí configuramos proyectos de desarrollo de front end entonces seleccionamos Navegador.</p><p><strong>¿En qué formato quieres que esté tu archivo de configuración?</strong></p><p>Esto realmente no importa, &nbsp;pero si quieres personalizar la configuración más tarde probablemente tienes que escoger entre JavaScript o JSON.</p><p>Finalmente, el script pregunta si debería instalar ESLint como dependencia de desarrollo, deberías pulsar si, esto instalará ESLint entonces estará disponible en tu carperta node_modules.</p><p>Después de este paso, podrás tener tu configuración y podrás encontrar ESLint en tu archivo package.json como dependencia de desarrollo.</p><p>Dependencia de desarrollo significa que ESLint no es parte del código fuente de tu sitio web, pero las herramientas lo requieren. En este caso la extensión &nbsp;ESLint requiere que el paquete esté instalado en tu proyecto.</p><p>Ahora que tenemos ESLint instalado, configurado y su paquete instalado, también necesitamos garantizarle acceso a este paquete.</p><p>Esto es un requerimiento de seguridad que tendrás que hacer solo una vez. En la parte de abajo del editor, una vez que ESLint esté instalado, encontrarás un botón con un círculo atravesado por una línea. Dale clic y selecciona Permitir en todos lados, esto permite que ESLint funcione apropiadamente en cualquier proyecto futuro.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/08/Screenshot-2021-05-31-at-23.17.14.png" class="kg-image" alt="Screenshot-2021-05-31-at-23.17.14" srcset="https://www.freecodecamp.org/espanol/news/content/images/2021/08/Screenshot-2021-05-31-at-23.17.14.png 600w" width="600" height="601" loading="lazy"></figure><p>Después de todos estos pasos, ESLint debería funcionar por fin. Si vamos a un archivo JavaScript y tratamos de usar una variable sin declarar, luego al guardarla la señalará.</p><p>ESLint también podría mostrarte errores en lugares donde todo está bien. Irónicamente si seleccionaste que la configuración de ESLint debería estar en un archivo JavaScript, entonces te podrá arrojar un error de configuración por sí mismo.</p><p>Esto es porque configuramos que el entorno para nuestros proyectos sea el navegador y esta configuración se basa en una variable global que no existe en el navegador.</p><p>Sin embargo, este archivo no es parte del sitio web exactamente. Es un archivo de configuración que no será parte del código fuente definitivo y su entorno natural es el navegador sino más bien de Node.js y en Node esta variable global existe. Por lo tanto este archivo está bien y no debería haber un error.</p><p>Una forma de arreglarlo es establecer una lista de archivos que ESLint debería ignorar. En la carpeta raíz de la aplicación, puedes crear un archivo llamado .eslintignore y agregarle .eslintrc.js, una vez que guardemos, ESLint no ejecutara ninguna verificación en el archivo de configuración nunca más.</p><p>ESLint es también altamente personalizable. Para más detalles puedes ver la documentación de <a href="https://eslint.org/docs/user-guide/configuring/">ESLint</a>.</p><h2 id="como-configurar-un-proyecto-en-react-o-vue-">Como configurar un proyecto en React o Vue.</h2><p>¿Planeas crear un sitio web con React o Vue.js? Esencialmente harás los mismos pasos.</p><p>Inicializa un proyecto con <em>npm init, </em>instala las dependencias, configura ESLint y luego ejecuta tu proyecto con Parcel.</p><p>Mira mis videos en YouTube en los cuales veremos paso a paso de lo que hicimos antes y un ejemplo rápido con React y Vue.js (en inglés).</p><figure class="kg-card kg-embed-card" data-test-label="fitted">
        <div class="fluid-width-video-container">
          <div style="padding-top: 56.17977528089888%;" class="fluid-width-video-wrapper">
            <iframe width="356" height="200" src="https://www.youtube.com/embed/TxKz5U-uL2I?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" name="fitvid0"></iframe>
          </div>
        </div>
      </figure><h2 id="pr-ximos-pasos-">Próximos pasos.</h2><p>Estas son las herramientas básicas &nbsp;que puedes usar cuando trabajes en un proyecto de desarrollo de front end con JavaScript. Añade librerías con npm, mantén tu código ordenado con Prettier, evita dolores de cabeza innecesarios con ESLint y ejecuta tu proyecto con Parcel.</p><p>Ahora que configuramos un proyecto, estás listo para construir tu Sitio web.</p><p>¿Qué pasa una vez que termines? Necesitas empaquetarlo en una compilación final que puedas subir a la web, si usas Parcel puedes crear un paquete final con el siguiente comando.</p><pre><code class="language-shell">parcel build index.html —public-url '.'</code></pre><p>Esto creará un paquete en la carpeta raíz que tú puedes ejecutar en el navegador, puedes simplemente ejecutar tu nuevo index.html en la carpeta raíz para verlo en el navegador.</p><p>¡Y eso es todo! Gracias por Leer:)</p><h2 id="suscribete-para-m-s-tutoriales-de-desarrollo-web-">Suscribete para más tutoriales de desarrollo web:</h2> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Como funciona la propiedad posición en CSS - Explicada con códigos de ejemplo. ]]>
                </title>
                <description>
                    <![CDATA[  Artículo original escrito por Joy Shaheb [https://www.freecodecamp.org/news/author/joy/] Articulo original: How the CSS Position Property Works [https://www.freecodecamp.org/news/css-position-property-explained/] Traducido y adaptado por: Julio Vargas [/espanol/news/author/julioceva/]  Hoy  aprenderemos todo lo que necesitas saber sobre la propiedad posición (position) de CSS con ejemplos. Comencemos?️ Tabla de contenidos  * ¿Qué es la ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/como-funciona-la-propiedad-posicion-en-css-explicada-con-codigos-de-ejemplo/</link>
                <guid isPermaLink="false">610d78cfbd9dff09271bf4d2</guid>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Julio Vargas ]]>
                </dc:creator>
                <pubDate>Tue, 10 Aug 2021 01:52:22 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2021/08/FCC-Thumbnail--4-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p><strong> <strong>Artículo original escrito por</strong> </strong><a href="https://www.freecodecamp.org/news/author/joy/">Joy Shaheb</a><br><strong>Articulo original:</strong> <a href="https://www.freecodecamp.org/news/css-position-property-explained/">How the CSS Position Property Works</a><strong> Traducido y adaptado por: </strong><a href="https://www.freecodecamp.org/espanol/news/author/julioceva/">Julio Vargas</a></p><p> Hoy &nbsp;aprenderemos todo lo que necesitas saber sobre la propiedad posición (position) de CSS con ejemplos. Comencemos?️</p><h1 id="tabla-de-contenidos"><strong><strong>Tab</strong>la de contenidos</strong></h1><ul><li>¿Qué es la propiedad <strong><em>posición</em></strong> de CSS?</li><li>¿Qué es la <strong><em>posición estática</em></strong> en CSS?</li><li>¿Qué son las <strong><em>posiciones</em></strong><em> </em><strong><em>Relativa</em></strong> y <em><strong>Absoluta</strong></em> &nbsp;en CSS?</li><li>¿Qué la <strong><em>posición</em></strong> <em><strong>Fija</strong></em> en CSS?</li><li>¿Qué es la <strong><em>posición</em></strong> <em><strong>Pegadiza</strong></em><strong> </strong>en CSS?</li></ul><h2 id="puedes-ver-este-tutorial-en-ingl-s-en-youtube-si-quieres-"><strong>Puedes ver este tutorial (en inglés) en YouTube si quieres. </strong></h2><figure class="kg-card kg-embed-card" data-test-label="fitted">
        <div class="fluid-width-video-container">
          <div style="padding-top: 56.17959949937421%;" class="fluid-width-video-wrapper">
            <iframe src="https://www.youtube.com/embed/yFXEur3SCGI?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" name="fitvid0" style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 19px; vertical-align: middle; position: absolute; top: 0px; left: 0px; width: 434.656px; height: 244.188px;"></iframe>
          </div>
        </div>
      </figure><h1 id="-qu-es-la-propiedad-posici-n-en-css">¿Qué es la propiedad p<strong><em>osición</em></strong> en CSS?</h1><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/06/Frame-3--6-.png" class="kg-image" alt="Frame-3--6-" width="600" height="400" loading="lazy"><figcaption><strong>¿Por qué aprender la propiedad Position?</strong></figcaption></figure><p>Si quieres hacer <strong>sitios web impresionantes que se vean artísticos, únicos y bonitos</strong>, entonces definitivamente debes aprender como usar la propiedad <em><strong>posición</strong></em> de CSS. Veamos como funciona.</p><p>Usando <strong>Flexbox </strong>o<strong> Grid, </strong>puedes hacer un sitio <strong>web simétrico</strong> como este: ?</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/08/Frame-35--2--4.png" class="kg-image" alt="Sitio web hecho con Flexbox." srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2021/08/Frame-35--2--4.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2021/08/Frame-35--2--4.png 1000w" sizes="(min-width: 720px) 720px" width="1000" height="560" loading="lazy"><figcaption><strong style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 15.2px; vertical-align: baseline; color: var(--gray85);">Website made w/ Flexbox</strong></figcaption></figure><p>Con la propiedad<strong> </strong><em><strong>posición</strong></em><strong>, </strong>puedes hacer<strong> sitios web </strong>asimétricos como este:?</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/06/A-1-1--2-.png" class="kg-image" alt="Sitio web hecho con Grid y las propiedades de Position." width="600" height="400" loading="lazy"><figcaption><strong style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 15.2px; vertical-align: baseline; color: var(--gray85);">Website made w/ Grid &amp; position properties</strong></figcaption></figure><p>No puedes poner tu contenido en cualquier lugar que desees usando<strong> Flexbox</strong> y <strong>Grid</strong>. Estás limitado alrededor de los<strong> ejes (Axis) X e Y</strong>. Mira este diagrama para entender lo que quiero decir: ?</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/08/Frame-1--6-.png" class="kg-image" alt="Diseño de contenido que muestra están posicionados los elementos con respecto al eje X e Y." srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2021/08/Frame-1--6-.png 600w, https://www.freecodecamp.org/espanol/news/content/images/size/w1000/2021/08/Frame-1--6-.png 1000w, https://www.freecodecamp.org/espanol/news/content/images/2021/08/Frame-1--6-.png 1200w" sizes="(min-width: 720px) 720px" width="1200" height="550" loading="lazy"><figcaption><strong style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 15.2px; vertical-align: baseline; color: var(--gray85);">Symmetrical content layout showing elements placed respective to the x and y axis</strong></figcaption></figure><p>Tus cajas seguirán estas medidas exactas. ?</p><p>Pero, usando la propiedad<em><strong> posición,</strong></em><strong> </strong>puedes ubicar tu contenido donde quiera que lo desees, <strong>separando</strong> los elementos uno del otro.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/06/Frame-2--4-.png" class="kg-image" alt="Contenido  asimétrico mostrando los elementos ubicados sin importar el eje X o Y." width="600" height="400" loading="lazy"><figcaption><strong style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 15.2px; vertical-align: baseline; color: var(--gray85);">Asymmetrical content layout showing elements placed irrespective of x and y axis.</strong></figcaption></figure><p>Puedes colocar tus cajas <strong>donde</strong> lo desees con este tipo de diseño.? En otras palabras, te podrás <strong>mover libremente</strong> alrededor de tu pantalla. </p><p>Aquí tenemos otro ejemplo de lo que puedes hacer con la propiedad <strong>posición</strong>:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/06/Frame-3--8-.png" class="kg-image" alt="Sitio web Asimétrico." width="600" height="400" loading="lazy"><figcaption><strong style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 15.2px; vertical-align: baseline; color: var(--gray85);">An Asymmetrical Website</strong></figcaption></figure><p>Puedes mover o colocar esos patrones de puntos y ondas y la imagen de la rosquilla alrededor de la página ☝ donde quieras, usando la propiedad <strong><em>posición</em></strong>.</p><h1 id="organizaci-n-del-proyecto-"><strong>Organización del proyecto.</strong></h1><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/06/Frame-4--7-.png" class="kg-image" alt="Codifiquemos juntos/as." width="600" height="400" loading="lazy"><figcaption><strong>Codifiquemos juntos/as.</strong></figcaption></figure><p>Para este, puedes usar cualquier editor de código que tenga el <strong>plugin emmet</strong> instalado. Yo voy a usar <a href="https://codepen.io/">CodePen.io</a>.</p><h3 id="html"><strong><strong>HTML</strong></strong></h3><p>Dentro de la etiqueta <em>body</em>, escribe este código: ?</p><pre><code class="language-html">&lt;div class="caja-1"&gt; &lt;/div&gt;</code></pre><h3 id="css"><strong><strong>CSS</strong></strong></h3><p>Reinicia las configuraciones por defecto de tu navegador y agrega este código CSS:?</p><pre><code class="language-css">*{
   margin: 0px;
   padding: 0px;
   box-sizing: border-box;
}</code></pre><p>Estiliza la clase: caja-1 así:?</p><pre><code class="language-css">.caja-1{
   width: 120px;
   height: 120px;
   background-color: skyblue;
   border: 2px solid black;
}</code></pre><p>Nuestra propiedad <strong><em>p</em></strong><em><strong>osición</strong></em>, tiene 5 valores:</p><ol><li>relative (relativa)</li><li>absolute (absoluta)</li><li>static (estática)</li><li>fixed (fija)</li><li>sticky (pegadiza)</li></ol><p>Para mover nuestras cajas, usaremos 4 propiedades:</p><ul><li><strong><strong>Top</strong> </strong>(arriba)</li><li><strong><strong>Bottom</strong> </strong>(abajo)</li><li><strong><strong>Left</strong> </strong>(izquierda)</li><li><strong><strong>Right</strong> </strong>(derecha)</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/06/Frame-12--1-.png" class="kg-image" alt="Frame-12--1-" width="600" height="400" loading="lazy"><figcaption><strong>¡Codifiquemos!</strong></figcaption></figure><h1 id="-qu-es-la-posici-n-est-tica-en-css"><strong>¿Qué es la posición estática en CSS?</strong></h1><p>Esta no tiene <strong>casos de uso</strong>. Este es el <strong>valor por defecto</strong> de todo elemento.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/08/Default-element-property.png" class="kg-image" alt="Default-element-property" width="500" height="250" loading="lazy"><figcaption><strong>Posición por defecto de todo elemento.</strong></figcaption></figure><h1 id="-qu-son-las-posiciones-relativas-y-absolutas-en-css"><strong>¿Qué son las posiciones relativas y absolutas en CSS?</strong></h1><p>Ambas posiciones, la relativa y la absoluta, funcionan de la misma manera excepto en un campo. Usamos <em><strong>relative</strong></em> para identificar las clases padre. Y usamos <em><strong>absolute</strong></em> para identificar las clases hijo.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/08/relab.png" class="kg-image" alt="relab" width="500" height="250" loading="lazy"><figcaption><strong style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 15.2px; vertical-align: baseline; color: var(--gray85);">Position VS relative position</strong></figcaption></figure><h3 id="miremos-estos-dos-ejemplos-"><strong>Miremos estos dos ejemplos.<strong> ?</strong></strong></h3><p>Primero, experimentemos con el valor <code><strong><strong>relative</strong></strong></code>. Intenta este código:</p><pre><code class="language-css">.caja-1{
/* Aquí irían otros códigos*/

   position: relative;
   left: 100px;
}</code></pre><p>Esto es lo que obtendrías:?</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/06/Frame-13--1-.png" class="kg-image" alt="Frame-13--1-" width="600" height="400" loading="lazy"></figure><p>Podemos duplicar el mismo resultado usando el valor <strong><strong><code>absolute</code></strong></strong> así: ?</p><pre><code class="language-css">.caja-1{
/* Aquí irían otros códigos*/
    
   position: absolute;
   left: 100px;
}</code></pre><p>Investiguemos la principal diferencia entre las posiciones<strong> relativas </strong>y<strong> absolutas</strong>.</p><h3 id="posici-n-relativa-vs-absoluta-en-css-">Posición relativa vs. absoluta en CSS.</h3><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/06/BEM-1--1-.png" class="kg-image" alt="BEM-1--1-" width="600" height="400" loading="lazy"><figcaption><strong>Hora de investigar.</strong></figcaption></figure><h3 id="html-1"><strong><strong>HTML</strong></strong></h3><p>Escribe esto dentro de tu código HTML: ?</p><pre><code class="language-html">&lt;body&gt;
   &lt;div class="caja-1"&gt;
    
       &lt;div class="caja-2"&gt; &lt;/div&gt;	
        
   &lt;/div&gt;
&lt;/body&gt;</code></pre><h3 id="css-1">CSS</h3><p>Dale estilo a tus cajas con los siguientes códigos CSS:?</p><pre><code class="language-css">.caja-1{
	width: 300px;
	height: 300px;
	background-color: skyblue;
	border: 2px solid black;
    margin: auto;
}

.caja-2{
	width: 100px;
	height:100px;
	background-color: pink;
	border: 2px solid black;
}</code></pre><p>Debería verse así:?</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/06/dd-2.png" class="kg-image" alt="El resultado es una caja azul con una caja rosa en la esquina superior izquierda." width="600" height="400" loading="lazy"><figcaption><strong style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 15.2px; vertical-align: baseline; color: var(--gray85);">The result is a blue box with a smaller pink box in the upper left</strong></figcaption></figure><p>Ahora, seleccionamos nuestras clases así: ?</p><pre><code class="language-css">body{ }

.caja-1{ }

.caja-2{ }</code></pre><p>Ahora, escribe esto en tu código CSS: ?</p><pre><code class="language-css">body{
	
}

.caja-1{
/* Este es el padre ? */
	position: relative;
}
.caja-2{
/* Este es el hijo ? */
	position: absolute;
	left: 100px;
}</code></pre><p>Aquí está el resultado: ?</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/06/Frame-14.png" class="kg-image" alt="Frame-14" width="600" height="400" loading="lazy"><figcaption><strong style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 15.2px; vertical-align: baseline; color: var(--gray85);">The result is that the pink box has moved right 100px</strong></figcaption></figure><p>Observa que la<em> .caja-2</em> se movió <strong>100px</strong> a partir <em>.caja-1</em>.</p><p>Esto es porque <em>.caja-1</em> es el <strong>padre</strong> y <em>.caja-2</em> es el <strong>hijo</strong>.</p><p>Cambiémoslo otra vez. Escribe esto en tu código CSS:</p><pre><code class="language-css">body{
/* Este es el padre ? */
   position: relative;	
}

.caja-1{

}
.caja-2{
/* Este es el hijo ? */
   position: absolute;
    left: 100px;
}</code></pre><p>Aquí tenemos el resultado: ?</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/06/Frame-15.png" class="kg-image" alt="El resultado es que la caja rosa se movió 100px desde el body." width="600" height="400" loading="lazy"><figcaption><strong style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 15.2px; vertical-align: baseline; color: var(--gray85);">The result is that the pink box has moved 100px from the body</strong></figcaption></figure><p>Observa que <em>.caja-2</em> se movió 100px a partir el elemento <strong>body</strong>.</p><p>Esto es porque el <strong>body</strong> es el <strong>padre</strong> y <em>.caja-2</em> es el <strong>hijo</strong>.</p><h1 id="-qu-es-la-posici-n-fija-en-css"><strong>¿Qué es la posición fija en CSS? </strong></h1><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/06/Frame-16--1-.png" class="kg-image" alt="Frame-16--1-" width="600" height="400" loading="lazy"></figure><p>Este valor <strong>fijará la posición</strong> de tu elemento en la pantalla incluso cuando te <strong>desplaces</strong> en el navegador. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Miremos algunos ejemplos para ver como funciona.</p><h3 id="ejemplo-de-posici-n-fija-"><strong>Ejemplo de posición fija.</strong></h3><p>Escribe esto en tu código HTML. ? Una vez que escribas <code>lorem200</code>, asegúrate de presionar la tecla <strong>Tab </strong>en tu teclado:</p><pre><code class="language-html">&lt;div class="contenedor"&gt;
	
	&lt;p&gt;lorem200&lt;/p&gt;
    
	&lt;div class="caja-1"&gt; fixed &lt;/div&gt;
    
	&lt;p&gt;lorem200&lt;/p&gt;		

&lt;/div&gt;</code></pre><p>Y aquí tenemos el código CSS:</p><pre><code class="language-css">.contenedor{
	height: 3000px;
}

.caja-1{
	height: 120px;
	width: 120px;
	background-color: skyblue;
	border: 2px solid black;
	
	display: grid;
	place-content: center;
}</code></pre><p>Luego añade este código CSS al final:</p><pre><code class="language-css">.caja-1{

	position: fixed;
	top: 100px;
	left: 200px;
}
</code></pre><p>Aquí está el resultado:?</p><figure class="kg-card kg-image-card"><img src="https://media.giphy.com/media/J6hbBulobEQz6HftRv/giphy.gif" class="kg-image" alt="giphy" width="480" height="270" loading="lazy"></figure><p>Puedes ver que el elemento se mantiene fijo incluso cuando nos desplazamos en nuestro navegador.</p><h1 id="-qu-es-la-posici-n-pegadiza-en-css">¿Qué es la posición pegadiza en CSS?</h1><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/06/Frame-17.png" class="kg-image" alt="Frame-17" width="600" height="400" loading="lazy"></figure><p>Después de desplazarnos a cierto punto de nuestra pantalla este valor, podrá <strong>fijar la posición</strong> de nuestro elemento en la pantalla entonces no se moverá.</p><h3 id="ejemplo-de-posici-n-pegadiza-"><strong>Ejemplo de posición pegadiza.</strong></h3><p>No cambies nada en tu HTML actual ni en CSS excepto por este valor:</p><pre><code class="language-css">.caja-1{
/*  Juega Con ? este valor */
   position: sticky;
   top: 30px;
   left: 200px;
}
</code></pre><p>El resultado será: ?</p><figure class="kg-card kg-image-card"><img src="https://media.giphy.com/media/175hkevbKC3yUfiLQc/giphy.gif" class="kg-image" alt="giphy" width="480" height="270" loading="lazy"></figure><p>Como puedes ver, después de <strong>desplazarnos hasta cierto punto</strong>, el elemento se mantiene fijo exactamente arriba de navegador en pantalla.</p><p>Puedes mirar estos sitios web para ver como funciona la <strong>posición pegadiza</strong> en sitios web de verdad.</p><ul><li><a href="https://awakeboards.com/">AwakeBoards</a></li><li><a href="https://ferme.shop/">Ferme</a></li><li><a href="https://www.ascensionlatorre.com/">LATORRE</a></li></ul><h1 id="conclusi-n"><strong><strong>Conclusión</strong></strong></h1><p>Ahora puedes hacer sitios web hermosos con confianza, y resolver problemas simples de diseño usando la propiedad posición.</p><p>Aquí está tu medalla por leer hasta el final. ❤️</p><h3 id="sugerencias-y-cr-ticas-son-muy-apreciadas-"><strong>Sugerencias y críticas son muy apreciadas.<strong> ❤️</strong></strong></h3><figure class="kg-card kg-image-card"><img src="https://dev-to-uploads.s3.amazonaws.com/i/usxsz1lstuwry3jlly4d.png" class="kg-image" alt="Alt Text" width="1000" height="245" loading="lazy"></figure><p><strong><strong>YouTube<a href="https://youtube.com/c/joyshaheb"> / Joy Shaheb</a></strong></strong></p><p><strong><strong>LinkedIn<a href="https://www.linkedin.com/in/joyshaheb/"> / JoyShaheb</a></strong></strong></p><p><strong><strong>Twitter<a href="https://twitter.com/JoyShaheb"> / JoyShaheb</a></strong></strong></p><p><strong><strong>Instagram<a href="https://www.instagram.com/joyshaheb/"> / JoyShaheb</a></strong></strong></p><h2 id="cr-ditos-"><strong>Créditos.</strong></h2><ul><li><a href="https://www.freepik.com/free-vector/young-girl-holding-pile-papers-cartoon-illustration_12566300.htm">Cute Girl Illustration</a></li><li><a href="https://www.flaticon.com/packs/kitty-avatars-3">Kitty Avatar</a></li></ul> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
