<?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[ Sil Zubikarai - 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[ Sil Zubikarai - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/espanol/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sat, 09 May 2026 13:42:03 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/espanol/news/author/sil/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ ¿Donde están mis contactos en Gmail? Encuéntrelos y acceda a ellos rápidamente. ]]>
                </title>
                <description>
                    <![CDATA[ Si todavía te estás acostumbrando al nuevo Gmail, es posible que te preguntes dónde fueron tus contactos. No temas- son fáciles de encontrar una vez que sabes donde buscar. En esta guía paso a paso, repasaremos:  *  Cómo entrar en Gmail y encontrar tus contactos  *  ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/donde-estan-mis-contactos-en-gmail/</link>
                <guid isPermaLink="false">639761e584f230093051d2e3</guid>
                
                    <category>
                        <![CDATA[ Gmail ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Sil Zubikarai ]]>
                </dc:creator>
                <pubDate>Sun, 11 Jun 2023 00:49:30 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2023/01/5f9c9f3a740569d1a4ca4177.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/how-to-open-your-google-contacts-list-in-the-new-gmail/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Where Are My Contacts in Gmail? Find and Access Them Fast.</a>
      </p><p>Si todavía te estás acostumbrando al nuevo Gmail, es posible que te preguntes dónde fueron tus contactos. No temas- son fáciles de encontrar una vez que sabes donde buscar.</p><p>En esta guía paso a paso, repasaremos:</p><ul><li> Cómo entrar en Gmail y encontrar tus contactos</li><li> Cómo agregar nuevos contactos(de dos maneras)</li><li> Cómo administrar sus contactos(verificar duplicados, crear etiquetas/grupos)</li><li> Cómo importar y exportar tus contactos</li></ul><p>Así que comencemos.</p><h2 id="paso-1-abra-el-gmail"><strong>Paso 1: Abra el Gmail</strong></h2><p>Ve a tu cuenta de Gmail y mira la página de inicio. En la esquina superior derecha verás un cuadro formado por nueve puntos (esas son sus aplicaciones):</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2019/09/Gmail-home-screen-1.png" class="kg-image" alt="Gmail-home-screen-1" width="600" height="400" loading="lazy"><figcaption>Welcome to Gmail :)</figcaption></figure><h2 id="paso-2-abre-tus-aplicaciones"><strong>Paso 2: Abre tus aplicaciones</strong></h2><p>De clic en ese cuadrado, y verás un menú desplegable que contiene todas tus aplicaciones disponibles. Es posible que la aplicación de contactos no este en la parte superior, pero puedes arrastrar las aplicaciones a cualquier disposición que desees.</p><p>Si no ves la aplicación de contactos, haz clic en "más" en la parte inferior y agréguela.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2019/09/Gmail-app-menu.png" class="kg-image" alt="Gmail-app-menu" width="600" height="400" loading="lazy"><figcaption>Your Gmail apps</figcaption></figure><h2 id="paso-3-de-clic-en-ese-icono-de-contacto-y-administre-tus-contactos-"><strong>Paso 3: De clic en ese icono de contacto y administre tus contactos.</strong></h2><p>Una vez que haya hecho clic en el icono azul de "contactos", se le llevara a esta pantalla (puede o no tener más de un contacto- o puede que aún no tenga ninguno todavía):</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2019/09/Gmail-create-contact-1.png" class="kg-image" alt="Gmail-create-contact-1" width="600" height="400" loading="lazy"><figcaption>Gmail's contacts page</figcaption></figure><p>Si ya tienes un montón de contactos, aquí es donde estarán. Más información sobre lo que puede hacer con ellos a continuación (en el paso 5).</p><h3 id="c-mo-crear-nuevos-contactos"><strong>Cómo crear nuevos contactos</strong></h3><p>Si aún no tiene contacto, o deseas agregar nuevos contactos, este también es el lugar para usted.</p><p>Puedes crear un nuevo contacto de dos maneras. Puedes crear un nuevo contacto de dos maneras. La primera forma de crear un contacto, que usará si aún no ha enviado un correo electrónico a la persona que deseas agregar, es haciendo clic en el botón "crear contacto":</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2019/09/Gmail-create-contact-2.png" class="kg-image" alt="Gmail-create-contact-2" width="600" height="400" loading="lazy"><figcaption>One way to create new contacts in Gmail - click the "create contact" button</figcaption></figure><p>Cuando creas un nuevo contacto con ese botón, te pedirá información para completar la entrada del contacto. Puedes completar tanto o tan poco como desee: un nombre y un correo electrónico suelen ser bastantes útiles.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2019/09/Gmail-create-contact-form.png" class="kg-image" alt="Gmail-create-contact-form" width="600" height="400" loading="lazy"><figcaption>New contact information in Gmail</figcaption></figure><p>Luego da clic "guardar", ¡y listo! Nuevo contacto creado.</p><p>Pero hay otra manera superfácil de crear un contacto, si ya tienes un correo electrónico de la persona. Simplemente, coloque el cursor sobre la dirección de correo electrónico en tu bandeja de entrada, y espere a que aparezca el cuadro, como se muestra a continuación:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2019/09/Add-contact-method-2-1.png" class="kg-image" alt="Add-contact-method-2-1" width="600" height="400" loading="lazy"><figcaption>A second way to create a new contact in Gmail - hover over the email address</figcaption></figure><p>Luego, haga clic en "agregar contactos" y voilà: se lo llevará a la misma pantalla de creación de contactos(ver arriba).</p><p>Si ya has agregado a esa persona a tus contactos, verás "Editar Contacto" en lugar de "Agregar a contactos".</p><p><strong>Nota: </strong>después de agregar algunos contactos nuevos de esta manera, es posible que deba actualizar su navegador para que aparezcan esos contactos.</p><h2 id="paso-5-explora-qu-m-s-puedes-hacer-con-tus-contactos"><strong>Paso 5: Explora qué más puedes hacer con tus contactos</strong></h2><p>Hay mucho más que puedes hacer con la página de contactos. Vamos a ver más de cerca.</p><h3 id="contactos-frecuentes-y-duplicados"><strong>Contactos frecuentes y duplicados</strong></h3><p>Primero, puede ver a las personas a las que envía correos electrónicos con más frecuencia, en la pestaña "contactado con frecuencia" en el menú de la barra lateral izquierda.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2019/09/Gmail-create-a-label-1.png" class="kg-image" alt="Gmail-create-a-label-1" width="600" height="400" loading="lazy"><figcaption>Other ways to manage Gmail contacts - "frequently contacted" and "duplicates"</figcaption></figure><p>A continuación, puede verificar si hay contactos duplicados en la pestaña "duplicados". Gmail limpiará esos duplicados por usted, entonces no se acumularan en tu lista de contactos, para que no abarroten su lista de contactos, pero puede encontrar esos duplicados aquí.</p><h3 id="etiquetas"><strong> Etiquetas</strong></h3><p>También puedes crear grupos de contactos a los que envía correos electrónicos frecuentemente - como su equipo de trabajo- miembros de familia, sus mejores amigos, y así.</p><p>Para crear un grupo etiquetado, vaya a la pestaña "etiquetas" en el menú de la barra lateral izquierda y haga clic en "crear etiqueta", luego asígnele el nombre que desee. Como freeCodeCamp Unicorns er core team. Luego guárdalo.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2019/09/Gmail-create-a-label.png" class="kg-image" alt="Gmail-create-a-label" width="600" height="400" loading="lazy"><figcaption>The label tab in Gmail contacts</figcaption></figure><p>Ahora, cuando vayas a tus contactos y pases el ratón sobre la imagen de perfil de un contacto, se convertirá en una casilla de verificación. Si deseas agregar ese contacto al grupo, simplemente marque la casilla.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2019/09/Gmail-add-users-to-label-1.png" class="kg-image" alt="Gmail-add-users-to-label-1" width="600" height="400" loading="lazy"><figcaption>How to create a label (like a group) in Gmail contacts</figcaption></figure><p>A continuación, haga clic en la pestaña superior "administrar etiquetas", en la parte superior y seleccione la etiqueta que desee usar:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2019/09/Screen-Shot-2019-09-17-at-2.44.54-PM.png" class="kg-image" alt="Screen-Shot-2019-09-17-at-2.44.54-PM" width="600" height="400" loading="lazy"><figcaption>The "manage labels" tab in Gmail contacts</figcaption></figure><p>Una vez que seleccione esa etiqueta, todos los contactos seleccionados se agregarán a ella para que puedas enviar correos electrónicos en el futuro.</p><h3 id="eliminar-un-contacto"><strong> Eliminar un contacto</strong></h3><p>Si, por alguna razón, desea eliminar a alguien de sus contactos, es bastante simple. Simplemente, pase el cursor sobre ese contacto/fila y haga clic en los tres puntos verticales que aparecen a la derecha:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2019/09/Gmail-delete-contact.png" class="kg-image" alt="Gmail-delete-contact" width="600" height="400" loading="lazy"><figcaption>How to delete a contact in Gmail contacts</figcaption></figure><p>Luego de clic en la opción "Eliminar" &nbsp;y confirme. Adios</p><h3 id="importaci-n-y-exportaci-n-de-contactos"><strong> Importación y exportación de contactos</strong></h3><p> hacerlo utilizando la función importación(en ese mismo menú de la barra de herramientas izquierda).</p><p>Simplemente haga clic en el botón "importar", y luego seleccione una lista de contactos que desea importar a Gmail(en formato CSV o vCard):</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2019/09/Gmail-import-contacts.png" class="kg-image" alt="Gmail-import-contacts" width="600" height="400" loading="lazy"><figcaption>How to import contacts in Gmail</figcaption></figure><p>Sigue un proceso similar si desea exportar sus contactos de Gmail como un archivo CSV o Outlook:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2019/09/Gmail-export-contacts.png" class="kg-image" alt="Gmail-export-contacts" width="600" height="400" loading="lazy"><figcaption>How to export contacts in Gmail</figcaption></figure><p>¡Así de simple!</p><p>Si necesita administrar sus contactos de cualquier otra &nbsp;manera: actualizar una entrada, y eliminar una entrada, o &nbsp;cualquier cosa que desee hacer, simplemente vuelva a esa lista de contactos y edítela.</p><h3 id="m-todos-abreviados"><strong>Métodos abreviados</strong></h3><p>Hay un par de maneras súper rápidas y fáciles de llegar a tus contactos.</p><ol><li>Si aún no estás en Gmail, solo tienes que &nbsp;visitar &nbsp;<strong><strong><a href="https://www.freecodecamp.org/news/how-to-open-your-google-contacts-list-in-the-new-gmail/contacts.google.com">contacts.google.com</a></strong> </strong>en tu navegador. Incluso puede marcarlo para facilitar el acceso.</li><li> Si tu está en Gmail, puede usar un método abreviado de teclado (si los tienes habilitados, verifique en su menú de configuración). Simplemente escriba G seguido inmediatamente de C y se abrirá la página de contactos. </li></ol><h3 id="ahora-eres-un-mago-de-los-contactos-de-gmail"><strong>Ahora eres un mago de los contactos de Gmail</strong></h3><p> O al menos un hobbit mucho más sabio.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Qué es una máquina virtual y cómo configurar una máquina virtual en Windows, Linux y Mac ]]>
                </title>
                <description>
                    <![CDATA[ Una máquina virtual es un programa que se ejecuta en un equipo que actúa como si fuera un equipo independiente. Es básicamente una forma de crear una computadora dentro de una computadora. Una máquina virtual se ejecuta en una ventana en el equipo host y ofrece al usuario la misma ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/que-es-una-maquina-virtual-y-como-configurar-una-vm-en-windows-linux-y-mac/</link>
                <guid isPermaLink="false">636a946518d65708b29b8237</guid>
                
                    <category>
                        <![CDATA[ virtualbox ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Sil Zubikarai ]]>
                </dc:creator>
                <pubDate>Thu, 01 Dec 2022 00:36:50 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2022/11/5f9c9e98740569d1a4ca3df6.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/what-is-a-virtual-machine-and-how-to-setup-a-vm-on-windows-linux-and-mac/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">What is a Virtual Machine And How to Setup a VM on Windows, Linux, and Mac</a>
      </p><p>Una máquina virtual es un programa que se ejecuta en un equipo que actúa como si fuera un equipo independiente. Es básicamente una forma de crear una computadora dentro de una computadora.</p><p>Una máquina virtual se ejecuta en una ventana en el equipo host y ofrece al usuario la misma experiencia que tendría si estuviera usando un equipo completamente diferente. Las máquinas virtuales se almacenan en un espacio aislado desde el equipo host. Esto significa que nada de lo que se ejecuta en la máquina virtual puede afectar al equipo host.</p><p>Las máquinas virtuales a menudo son usadas para ejecutar software en sistemas operativos para los que el software no estaba diseñado inicialmente. Por ejemplo, si está utilizando una computadora Mac, puede ejecutar un programa de Windows dentro de una máquina virtual de Windows en la computadora Mac. Las máquinas virtuales también se utilizan para configurar rápidamente software con una imagen, acceder datos con virus, y probar otros sistemas operativos.</p><p>Un solo equipo físico puede ejecutar varias máquinas virtuales al mismo tiempo. A menudo un servidor usará un programa llamado hipervisor para administrar varias máquinas virtuales que se ejecutan el mismo tiempo. Las máquinas virtuales tienen un hardware virtual, incluida CPU, memoria, discos duros y más. Cada pieza de hardware virtual se asigna al hardware real en el equipo host.</p><p>Hay algunos inconvenientes con las máquinas virtuales. Dado que los recursos de hardware son indirectos, no son tan eficientes como una computadora física. Además, cuando muchas máquinas virtuales se ejecutan al mismo tiempo en un solo equipo, el rendimiento puede volverse inestable.</p><h2 id="programas-de-m-quina-virtual"><strong> Programas de máquina virtual</strong></h2><p>Hay muchos diferentes programas de máquina virtual diferentes que puede usar. Algunas opciones son VirtualBox (Windows, Linux, Mac OS X), VMware Player (Windows, Linux), VMware Fusion (Mac OS X) y Parallels Desktop (Mac OS X).</p><p>VirtualBox es una de los programas de máquinas virtuales más populares, ya que es gratuito, de código abierto, y está disponible en todos los sistemas operativos. Le mostraremos cómo configurar una máquina virtual usando VirtualBox.</p><h2 id="configuraci-n-de-una-m-quina-virtual-virtualbox-"><strong>Configuración de una Máquina Virtual (VirtualBox)</strong></h2><figure class="kg-card kg-image-card"><img src="https://upload.wikimedia.org/wikipedia/commons/d/d5/Virtualbox_logo.png" class="kg-image" alt="Virtualbox_logo" width="512" height="512" loading="lazy"></figure><p>VirtualBox es un programa de máquina virtual de código abierto de Oracle. Permite a los usuarios instalar virtualmente muchos sistemas operativos en unidades virtuales, incluyendo Windows, BSD, Linux, Solaris, y más.</p><p>Desde que VirtualBox se ejecuta en Windows, Linux, y &nbsp;Mac, el proceso para configurar una máquina virtual es prácticamente el mismo en cada sistema operativo.</p><p>Comience con descargar e instalación de VirtualBox. Puedes descargarlo en este enlace: <a href="https://www.virtualbox.org/wiki/Downloads">VirtualBox Downloads</a></p><p>También deberá descargar un archivo .iso para el sistema operativo que se va a ejecutar en la máquina virtual. Por ejemplo, puedes descargar un archivo .iso de Windows 10 aquí: <a href="https://www.microsoft.com/en-us/software-download/windows10ISO">https://www.microsoft.com/en-us/software-download/windows10ISO</a></p><p>Una vez que tenga VirtualBox en ejecución, haga clic en el botón "Nuevo".</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2019/10/image-68.png" class="kg-image" alt="image-68" width="600" height="400" loading="lazy"><figcaption>Create a new virtual machine.</figcaption></figure><p>A continuación, deberá elegir qué sistema operativo planea instalar. En el cuadro "Nombre", escriba el nombre del sistema operativo que desea instalar. VirtualBox adivinará el tipo y la versión en función del nombre que escriba, pero puede cambiar esta configuración si es necesario.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2019/10/image-69.png" class="kg-image" alt="image-69" width="600" height="400" loading="lazy"><figcaption>Configure the virtual machine.</figcaption></figure><p>Este instalador automáticamente seleccionará la configuración predeterminada en función del tipo de sistema operativo y versión que seleccionó. Siempre se puede cambiar la configuración a medida que avanza en el asistente. Simplemente, siga haciendo clic en "Continuar" y "Crear" hasta que pase por el asistente. Por lo general, está bien usar los valores predeterminados.</p><p>A continuación, inicie la máquina virtual que acaba de crear haciendo clic en "Inicio".</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2019/10/image-71.png" class="kg-image" alt="image-71" width="600" height="400" loading="lazy"><figcaption>Start the virtual machine.</figcaption></figure><p>Una vez que se inicie la máquina virtual, seleccione el archivo de imagen .iso que desea usar.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2019/10/image-72.png" class="kg-image" alt="image-72" width="600" height="400" loading="lazy"><figcaption>Install the operating system on the virtual machine.</figcaption></figure><p>Tu máquina virtual ahora cargará el sistema operativo seleccionado. El sistema operativo puede requerir alguna configuración, pero será la misma configuración que se requeriría se lo hubiera instalado en una computadora estándar.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2019/10/image-73.png" class="kg-image" alt="image-73" width="600" height="400" loading="lazy"><figcaption>Windows 10 is successfully running inside a virtual machine.</figcaption></figure><p>¡Felicidades! Has ejecutado tu primera máquina virtual en VirtualBox.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Sentencia If...Else en C explicada ]]>
                </title>
                <description>
                    <![CDATA[ El flujo de código condicional es la capacidad de cambiar la forma en la que se comporta un fragmento de código en función en ciertas condiciones. En tales situaciones puedes usar las sentencias if. La sentencia if también se conoce como una sentencia de toma de decisiones, ya que toma ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/sentencia-if-else-en-c-explicada/</link>
                <guid isPermaLink="false">6319f7bdb1786008d5614741</guid>
                
                    <category>
                        <![CDATA[ programacion c ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Sil Zubikarai ]]>
                </dc:creator>
                <pubDate>Wed, 30 Nov 2022 03:58:28 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2022/09/5f9c9da9740569d1a4ca38ef.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/if-statements-in-c/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">If...Else Statement in C Explained</a>
      </p><p>El flujo de código condicional es la capacidad de cambiar la forma en la que se comporta un fragmento de código en función en ciertas condiciones. En tales situaciones puedes usar las sentencias <code>if</code>.</p><p>La sentencia <code>if</code> también se conoce como una sentencia de toma de decisiones, ya que toma una decisión sobre la base de una condición o expresión dada. El bloque de código dentro de la instrucción <code>if</code> que se ejecuta es la condición evaluada como true. Sin embargo, el código dentro de las llaves se omite si la condición es evalúa como false, y el código después de la sentencia <code>if</code> es ejecutada.</p><h3 id="sintaxis-de-sentencia-if"><strong>Sintaxis de sentencia <strong><code>if</code></strong></strong></h3><pre><code class="language-text">if (testCondition) {
   // statements
}</code></pre><h3 id="un-ejemplo-sencillo"><strong>Un ejemplo sencillo</strong></h3><p>Vamos a ver un ejemplo de esto en acción:</p><pre><code class="language-c">#include &lt;stdio.h&gt;
#include &lt;stdbool.h&gt;

int main(void) {
    if(true) {
        printf("Statement is True!\n");
    }

    return 0;
}</code></pre><p><strong> Salida:</strong></p><pre><code class="language-text">Statement is True!</code></pre><p>Si el código entre el paréntesis de la sentencia <code>if</code> es true, todo dentro de las llaves es ejecutado. En este caso, <code>true</code> evalúa a true, entonces el código ejecuta la función <code>printf</code>.</p><h3 id="sentencias-if-else"><strong> </strong>Sentencias<strong> <strong><code>if..else</code> </strong></strong></h3><p>En una sentencia <code>if...else</code>, si el código en el paréntesis de la sentencia <code>if</code> &nbsp;es true, el código dentro de las llaves es ejecutado. Pero si la sentencia dentro del paréntesis es falso, todo el código dentro de las llaves de la sentencia <code>else</code> es ejecutada en su lugar.</p><p>Claro, en el ejemplo anterior no fue muy útil en este caso porque <code>true</code> siempre evalúa a verdadero. Aquí hay otro que es un poco más práctico:</p><pre><code class="language-c">#include &lt;stdio.h&gt;

int main(void) {
    int n = 2;

    if(n == 3) { // comparing n with 3
        printf("Statement is True!\n");
    } 
    else { // if the first condition is not true, come to this block of code
        printf("Statement is False!\n");
    }

    return 0;
}</code></pre><p><strong>Salida:</strong></p><pre><code class="language-text">Statement is False!</code></pre><p>Hay algunas diferencias importantes aquí. En primer lugar, <code>stdbool.h</code> no se ha sido incluido. Eso está bien porque <code>true</code> &nbsp;y &nbsp;<code>false</code> no se usan como en el primer ejemplo. En C, como en otros lenguajes de programación, puede usar sentencias que evalúan como verdadero o falso en lugar de usar los valores booleanos <code>true</code> o <code>false</code> directamente.</p><p>Observe también la condición en el paréntesis de la sentencia <code>if</code>: <code>n == 3</code>. Esta condición compara <code>n</code> y el número 3. <code>==</code> es el operador comparación, &nbsp;y es una de varias operaciones de comparación C.</p><h3 id="if-else-anidado"><strong><strong> <code>if...else</code></strong> anidado</strong></h3><p>La sentencia <code>if...else</code> permite elegir entre dos posibilidades. Pero algunas veces necesita elegir entre tres o más posibilidades.</p><p>Por ejemplo, el signo función en matemáticas devuelve -1 si es argumento es menor que cero, +1 si el argumento es mayor que cero, y devuelve cero si el argumento es cero.</p><p>El siguiente código implementa esta función:</p><pre><code class="language-c">if (x &lt; 0)
   sign = -1;
else
   if (x == 0)
      sign = 0;
   else
      sign = 1;</code></pre><p>Como puede ver, una segunda sentencia <code>if...else</code> es anidada dentro de la sentencia de la primera sentencia <code>if..else</code>.</p><p>Si <code>x</code> &nbsp;es menor que 0, entonces <code>sign</code> se establece en -1. Sin embargo, si <code>x</code> no es menor que 0, la segunda sentencia <code>if...else</code> es ejecutada. Allí, si <code>x</code> es igual a 0, <code>sign</code> también se establece en 0. Pero si <code>x</code> es mayor que 0, <code>sign</code> en lugar de ser establece en 1.</p><p>En lugar en una sentencia <code>if...else</code> anidada, los principiantes a menudo usan una cadena de sentencias <code>if</code>:</p><pre><code class="language-c">if (x &lt; 0) {
   sign = -1;
}
   
if (x == 0) {
   sign = 0;
}
   
if (x &gt; 0) {
   sign = 1;
}</code></pre><p>Si bien esto funciona, no se recomienda, ya que no está claro que solo una de las instrucciones de asignación (<code>sign = ...</code>) está destinada al ejecutarse dependiendo del valor de <code>x</code>. También es ineficiente: cada vez que se ejecuta el código, se prueban la tras condiciones, incluso si una o dos no tienen que serlo.</p><h3 id="sentencia-else-if">Sentencia<strong> <strong>else...if </strong></strong></h3><p>Sentencias <code>if...else</code> son una alternativa a una cadena de sentencias <code>if</code>. Considere lo siguiente:</p><pre><code class="language-c">#include &lt;stdio.h&gt;

int main(void) {
    int n = 5;

    if(n == 5) {
        printf("n is equal to 5!\n");
    } 
    else if (n &gt; 5) {
        printf("n is greater than 5!\n");
    }

    return 0;
}</code></pre><p><strong>Salida<strong>:</strong></strong></p><pre><code class="language-text">n is equal to 5!</code></pre><p>Si la condición de la sentencia <code>if</code> se evalúa a false, la condición para la sentencia <code>else...if</code> es revisada. Si la condición evalúa a true, el código dentro de las llaves de la sentencia <code>else...if</code> se ejecuta.</p><h3 id="operadores-de-comparaci-n"><strong>Operadores de comparación</strong></h3><!--kg-card-begin: html--><table style="box-sizing: inherit; margin: 0.5em 0px 2.5em; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, Oxygen, Ubuntu, Cantarell, &quot;Open Sans&quot;, &quot;Helvetica Neue&quot;, sans-serif; font-size: 1.6rem; vertical-align: top; border-spacing: 0px; border-collapse: collapse; display: inline-block; overflow-x: auto; max-width: 100%; width: auto; white-space: nowrap; background: radial-gradient(at left center, rgba(0, 0, 0, 0.2) 0px, rgba(0, 0, 0, 0) 75%) 0px center / 10px 100% no-repeat scroll, radial-gradient(at right center, rgba(0, 0, 0, 0.2) 0px, rgba(0, 0, 0, 0) 75%) 100% center / 10px 100% scroll;"><thead 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: 16px; vertical-align: baseline;"><tr 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: 16px; vertical-align: baseline;"><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: left; text-transform: uppercase; background-color: var(--gray10);">OPERATOR NAME</th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: left; text-transform: uppercase; background-color: var(--gray10);">USAGE</th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: left; text-transform: uppercase; background-color: var(--gray10);">RESULT</th></tr></thead><tbody 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: 16px; vertical-align: baseline;"><tr 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: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">Equal To</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">a == b</code></td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">True if<span>&nbsp;</span><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">a</code><span>&nbsp;</span>is equal to<span>&nbsp;</span><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">b</code>, false otherwise</td></tr><tr 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: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">Not Equal To</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">a != b</code></td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">True if<span>&nbsp;</span><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">a</code><span>&nbsp;</span>is not equal to<span>&nbsp;</span><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">b</code>, false otherwise</td></tr><tr 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: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">Greater Than</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">a &gt; b</code></td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">True if<span>&nbsp;</span><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">a</code><span>&nbsp;</span>is greater than<span>&nbsp;</span><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">b</code>, false otherwise</td></tr><tr 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: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">Greater Than or Equal To</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">a &gt;= b</code></td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">True if<span>&nbsp;</span><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">a</code><span>&nbsp;</span>is greater than or equal to<span>&nbsp;</span><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">b</code>, false otherwise</td></tr><tr 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: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">Less Than</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">a &lt; b</code></td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">True if<span>&nbsp;</span><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">a</code><span>&nbsp;</span>is less than<span>&nbsp;</span><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">b</code>, false otherwise</td></tr><tr 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: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">Less Than or Equal To</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">a &lt;= b</code></td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">True if<span>&nbsp;</span><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">a</code><span>&nbsp;</span>is less than or equal to<span>&nbsp;</span><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">b</code>, false otherwise</td></tr></tbody></table><!--kg-card-end: html--><h2 id="operadores-l-gicos"><strong>Operadores Lógicos</strong></h2><p>Es posible que deseemos ejecutar un poco de código si algo no es cierto, o si dos cosas son verdaderas. Para eso tenemos operadores lógicos:</p><!--kg-card-begin: html--><table style="box-sizing: inherit; margin: 0.5em 0px 2.5em; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, Oxygen, Ubuntu, Cantarell, &quot;Open Sans&quot;, &quot;Helvetica Neue&quot;, sans-serif; font-size: 1.6rem; vertical-align: top; border-spacing: 0px; border-collapse: collapse; display: inline-block; overflow-x: auto; max-width: 100%; width: auto; white-space: nowrap; background: radial-gradient(at left center, rgba(0, 0, 0, 0.2) 0px, rgba(0, 0, 0, 0) 75%) 0px center / 10px 100% no-repeat scroll, radial-gradient(at right center, rgba(0, 0, 0, 0.2) 0px, rgba(0, 0, 0, 0) 75%) 100% center / 10px 100% scroll;"><thead 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: 16px; vertical-align: baseline;"><tr 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: 16px; vertical-align: baseline;"><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: left; text-transform: uppercase; background-color: var(--gray10);">OPERATOR NAME</th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: left; text-transform: uppercase; background-color: var(--gray10);">USAGE</th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: left; text-transform: uppercase; background-color: var(--gray10);">RESULT</th></tr></thead><tbody 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: 16px; vertical-align: baseline;"><tr 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: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">Not (<code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">!</code>)</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">!(a == 3)</code></td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">True if<span>&nbsp;</span><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">a</code><span>&nbsp;</span>is<span>&nbsp;</span><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: 16px; vertical-align: baseline; color: var(--gray85);">not</strong><span>&nbsp;</span>equal to 3</td></tr><tr 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: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">And (<code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">&amp;&amp;</code>)</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">a == 3 &amp;&amp; b == 6</code></td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">True if<span>&nbsp;</span><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">a</code><span>&nbsp;</span>is equal to 3<span>&nbsp;</span><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: 16px; vertical-align: baseline; color: var(--gray85);">and</strong><span>&nbsp;</span><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">b</code><span>&nbsp;</span>is equal to 6</td></tr><tr 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: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;">Or (<code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">||</code>)</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">a == 2 || b == 4</code></td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">True if<span>&nbsp;</span><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">a</code><span>&nbsp;</span>is equal to 2<span>&nbsp;</span><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: 16px; vertical-align: baseline; color: var(--gray85);">or</strong><span>&nbsp;</span><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">b</code><span>&nbsp;</span>is equal to 4</td></tr></tbody></table><!--kg-card-end: html--><p>Por ejemplo:</p><pre><code class="language-c">#include &lt;stdio.h&gt;

int main(void) {
    int n = 5;
    int m = 10;

    if(n &gt; m || n == 15) {
        printf("Either n is greater than m, or n is equal to 15\n");
    } 
    else if( n == 5 &amp;&amp; m == 10 ) {
        printf("n is equal to 5 and m is equal to 10!\n");
    } 
    else if ( !(n == 6)) {
        printf("It is not true that n is equal to 6!\n");
    }
    else if (n &gt; 5) {
        printf("n is greater than 5!\n");
    }

    return 0;
}</code></pre><p><strong>Salida<strong>:</strong></strong></p><pre><code class="language-text">n is equal to 5 and m is equal to 10!</code></pre><h3 id="una-nota-importante-sobre-las-comparaciones-c"><strong>Una nota importante sobre las comparaciones C </strong></h3><p>Como lo mencionamos con anterioridad que cada comparación verifica si algo es verdadero o falso, pero eso solo es una verdad a medias. C es muy ligero y cercano al hardware en el que se está ejecutando. Con el hardware es fácil comprobar si algo es 0 o falso, pero cualquier otra cosa es mucho más difícil.</p><p>En cambio, mucho más preciso decir que las comparaciones realmente están comprobando si algo es 0/ falso, o si es cualquier otro valor.</p><p>Por ejemplo, esta sentencia if es verdadera y válida:</p><pre><code class="language-c">if(12452) {
    printf("This is true!\n")
}</code></pre><p>Por diseño, 0 es falso, y por convención, 1 es verdadero. De hecho, aquí hay un vistazo a la biblioteca <code>stdbool.h</code>:</p><pre><code class="language-c">#define false   0
#define true    1</code></pre><p>Si bien hay un poco más, este es el núcleo de cómo funcionan los booleanos y cómo funciona la biblioteca. Estas dos líneas indican al compilador que reemplace la palabra false con 0 y true con 1.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Los mejores ejemplos HTML y HTML5 ]]>
                </title>
                <description>
                    <![CDATA[ HTML proporciona la estructura de los sitios web. Estos son algunos ejemplos en cómo usar la sintaxis HTML para crear sitios web, incluidos algunos ejemplos de las características  HTML5 más recientes. Ejemplo del atributo a href  El atributo <a href> se refiere a un destino provisto por un enlace. ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/los-mejores-ejemplos-html-y-html5/</link>
                <guid isPermaLink="false">62be1f90c5b22c08edf8cd01</guid>
                
                    <category>
                        <![CDATA[ HTML ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Sil Zubikarai ]]>
                </dc:creator>
                <pubDate>Mon, 17 Oct 2022 02:52:54 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2022/07/html-examples.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/html-and-html5-example/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">The Best HTML Examples and HTML5 Examples</a>
      </p><p>HTML proporciona la estructura de los sitios web. Estos son algunos ejemplos en cómo usar la sintaxis HTML para crear sitios web, incluidos algunos ejemplos de las características &nbsp;HTML5 más recientes.</p><h2 id="ejemplo-del-atributo-a-href">Ejemplo del atributo a href </h2><p>El atributo <code>&lt;a href&gt;</code> se refiere a un destino provisto por un enlace. La etiqueta &nbsp;<code>a</code> (anchor) está muerta sin el atributo <code>&lt;href&gt;</code>. A veces, en su flujo de trabajo, no desea un enlace en vivo o aún no sabrá el destino del enlace. En este caso, es útil establecer el atributo <code>href</code> a <code>"#"</code> para crear un enlace muerto. El atributo <code>href</code> puede ser utilizar para vincular los archivos locales o archivos en Internet.</p><p>Por ejemplo:</p><pre><code class="language-html">&lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;Ejemplo de atributo Href&lt;/title&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;h1&gt;Ejemplo de atributo Href&lt;/h1&gt;
    &lt;p&gt;
      &lt;a href="https://www.freecodecamp.org/contribute/"&gt;La pagina de de contribucion de freeCodeCamp&lt;/a&gt; te muestra como y donde puedes contribuir a la comunidad y al crecimiento de freeCodeCamp.
    &lt;/p&gt;
  &lt;/body&gt;
&lt;/html&gt;</code></pre><p>El atributo <code>&lt;a href&gt;</code> es compatible con todos los navegadores.</p><h4 id="m-s-atributos-"><strong>Más atributos:</strong></h4><p><code>hreflang</code> : Especifica el idioma del recurso vinculado.</p><p> <code>target</code> : Especifica el contexto en el que se abrirá el recurso vinculado.</p><p> <code>title</code> : Define el título de un vínculo, que aparece al usuario como una información sobre herramientas.</p><h3 id="ejemplos-"><strong>Ejemplos:</strong></h3><pre><code class="language-html">&lt;a href="#"&gt;This is a dead link&lt;/a&gt;
&lt;a href="https://www.freecodecamp.org"&gt;This is a live link to freeCodeCamp&lt;/a&gt;
&lt;a href="https://html.com/attributes/a-href/"&gt;more with a href attribute&lt;/a&gt;</code></pre><h3 id="anclajes-en-p-gina"><strong>Anclajes en-página </strong></h3><p>También es posible establecer un ancla en un lugar determinado en la página. Para hacer esto, deberá colocar en primer lugar un tab en la ubicación de la página con la etiqueta y el atributo necesario "name" con cualquier descripción palabra-clave, como esta: </p><pre><code class="language-html">&lt;a name="top"&gt;&lt;/a&gt;</code></pre><p>No se requiere ninguna descripción entre etiquetas. Después de eso, puede colocar un enlace que conduzca a esta ancla a cualquier otro lugar en la misma página. Para hacer esto deberías usar la etiqueta con el atributo necesario "href" con un simbolo # (sharp) y la descripción de la palabra-clave ancla, como esto:</p><pre><code class="language-html">&lt;a href="#top"&gt;Go to Top&lt;/a&gt;</code></pre><h3 id="enlaces-de-imagen"><strong>Enlaces de imagen</strong></h3><p>El &nbsp;<code>&lt;a href="#"&gt;</code> &nbsp;también puede ser aplicado a imágenes y otros elementos HTML</p><h3 id="ejemplo"><strong>Ejemplo</strong></h3><pre><code class="language-html">&lt;a href="#"&gt;
  &lt;img itemprop="image" style="height: 90px;" src="https://bit.ly/fcc-relaxing-cat" alt="A cute orange cat lying on its back."&gt;
&lt;/a&gt;</code></pre><h2 id="ejemplo-1">Ejemplo </h2><h3 id="el-a-target-ejemplo"><strong>El a target ejemplo</strong></h3><p>El atributo <code>&lt;a target&gt;</code> específica dónde abrir el documento vinculado en una etiqueta &nbsp;<code>a</code> &nbsp;(ancla).</p><h3 id="ejemplos--1">Ejemplos:</h3><p>El atributo target con el valor de “_blank” &nbsp;abre un documento vinculado en una nueva ventana o tab.</p><pre><code class="language-html">&lt;a href="https://www.freecodecamp.org/" target="_blank"&gt;freeCodeCamp&lt;/a&gt;</code></pre><p>Un atributo target con el valor de “_self” abre el documento vinculado en el mismo marco en el que se hizo clic (este es el valor predeterminado y usualmente no necesita ser especificado).</p><pre><code class="language-html">&lt;a href="https://www.freecodecamp.org/" target="_self"&gt;freeCodeCamp&lt;/a&gt;</code></pre><pre><code class="language-html">&lt;a href="https://www.freecodecamp.org/"&gt;freeCodeCamp&lt;/a&gt;</code></pre><p>Un atributo target con el valor del “_parent” abre el documento vinculado en el marco principal.</p><pre><code class="language-html">&lt;a href="https://www.freecodecamp.org/" target="_parent"&gt;freeCodeCamp&lt;/a&gt;</code></pre><p>A target attribute with the value of “_top” opens the linked document in the full body of the window.</p><p>En atributo target con el valor de &nbsp; “_top” abre el documento vinculado en el cuerpo completo de la ventana.</p><pre><code class="language-html">&lt;a href="https://www.freecodecamp.org/" target="_top"&gt;freeCodeCamp&lt;/a&gt;</code></pre><p>Un atributo target con el valor de <em><em>“framename”</em> </em>abre el documento vinculado en un marco con un nombre especificado.</p><pre><code class="language-html">&lt;a href="https://www.freecodecamp.org/" target="framename"&gt;freeCodeCamp&lt;/a&gt;</code></pre><h2 id="el-atributo-body-background-ejemplo">El atributo body background ejemplo</h2><p>Si desea agregar una imagen de fondo en lugar de un color, una solución es el atributo <code>&lt;body background&gt;</code>. Especifica una imagen de fondo por un documento HTML.</p><p>Sintaxis:</p><p><code>&lt;body background="URL"&gt;</code></p><p> Atributo:</p><p><code>background - URL for background image</code></p><p> Ejemplo:</p><pre><code class="language-html">&lt;html&gt;
  &lt;body background="https://assets.digitalocean.com/blog/static/hacktoberfest-is-back/hero.png"&gt;
  &lt;/body&gt;
&lt;/html&gt;</code></pre><h2 id="el-atributo-body-background-es-depreciado-"><strong>El atributo body-background es depreciado.</strong></h2><p>El atributo body-background a caido en deshuso en HTML5. La forma correcta de estilizar el tag <code>&lt;body&gt;</code> es con CSS.</p><p>Hay diferentes propiedades CSS usadas para poner el fondo de un elemento. Estas pueden ser usadas para colocar el fondo de una página completa.</p><h2 id="el-atributo-body-bgcolor-ejemplo"><strong>El atributo body bgcolor ejemplo</strong></h2><p>El atributo <code>&lt;body bgcolor&gt;</code> asigna el color de fondo por un documento HTML.</p><p><strong>Sintaxis:</strong></p><p><code>&lt;body bgcolor="color"&gt;</code> El valor del color puede ser el nombre de un color (como, morado) o un valor hex (like, <code>#af0000</code>).</p><p>Para añadir un color de fondo a una página web puedes usar el atributo <code>&lt;body bgcolor="######"&gt;</code>. Especifica un color para que se muestre en el documento HTML</p><p><strong> Por ejemplo:</strong></p><pre><code class="language-html">&lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;Body bgcolor Attribute example&lt;/title&gt;
  &lt;/head&gt;
  &lt;body bgcolor="#afafaf"&gt;
    &lt;h1&gt;This webpage has colored background.&lt;/h1&gt;
  &lt;/body&gt;
&lt;/html&gt;</code></pre><p>Puedes cambiar de color reemplanzando ###### con un valor hexadecimal. Para colores simples también puedes usar la palabra, como es "red" o "black".</p><p>Todos los principales navegadores admiten el atributo <code>&lt;body bgcolor&gt;</code>.</p><p><em>Nota:</em></p><ul><li> HTML5 no admite el atributo <code>&lt;body bgcolor&gt;</code>. Usa CSS para este propósito. ¿Cómo? Usando el siguiente código: <code>&lt;body style="background-color: color"&gt;</code> Por supuesto, también puedes hacerlo en un documento separado en lugar del método inline. </li><li>No uses el valor RGB en el atributo <code>&lt;body bgcolor&gt;</code> porque &nbsp;<code>rgb()</code> es para CSS solamente, es decir, &nbsp;no funcionará en HTML. </li></ul><h2 id="el-atributo-div-align-ejemplo"><strong>El atributo div align ejemplo</strong></h2><p>El atributo <code>&lt;div align=""&gt;</code> es usado para alinear el texto en una etiqueta div a left, right, center o justify.</p><p> Por ejemplo:</p><pre><code class="language-html">&lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;Div Align Attribbute&lt;/title&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;div align="left"&gt;
      Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut
      labore et dolore magna aliqua.
    &lt;/div&gt;
    &lt;div align="right"&gt;
      Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut
      labore et dolore magna aliqua.
    &lt;/div&gt;
    &lt;div align="center"&gt;
      Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut
      labore et dolore magna aliqua.
    &lt;/div&gt;
    &lt;div align="justify"&gt;
      Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut
      labore et dolore magna aliqua.
    &lt;/div&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre><h2 id="-importante-"><strong>¡Importante!</strong></h2><p>Este atributo ya no se admite &nbsp;en HTML5. CSS es el camino a seguir.</p><p>El atributo Div Align puede ser usado para alinear horizontalmente el contenido dentro de un div. En el siguiente ejemplo, el texto se centrará dentro del div.</p><pre><code class="language-html">&lt;div align="center"&gt;
  This Text Will Be Centered
&lt;/div&gt;</code></pre><p>** Este atributo no es compatible con &nbsp;HTML5 &nbsp;y &nbsp;<a href="https://github.com/freeCodeCamp/guides/blob/f50b7370be514b2a03ee707cd0f0febe2bb713ae/src/pages/css/text-align/index.md">CSS Text Align</a> debe ser usado en su lugar.</p><h2 id="ejemplo-del-atributo-font-color"><strong>Ejemplo del atributo font color </strong></h2><p>Este atributo se utiliza para establecer un color para el texto encerrado en una etiqueta &nbsp;<code>&lt;font&gt;</code>.</p><h3 id="importante-"><strong>Importante:</strong></h3><p>Este atributo no es compatible con HTML5. En lugar, este artículo de <a href="https://guide.freecodecamp.org/css/colors">freeCodeCamp </a>específica un método CSS que se puede utilizar.</p><h3 id="nota-"><strong>Nota:</strong></h3><p>Un color puede también ser especificado usando un 'código hex' o un 'código rgb', en lugar de usar un nombre.</p><h3 id="ejemplo-"><strong>Ejemplo:</strong></h3><ol><li>El Atributo de nombre de color</li></ol><pre><code class="language-html">&lt;html&gt;
  &lt;body&gt;
    &lt;font color="green"&gt;Font color example using color attribute&lt;/font&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre><p> Atributo de código Hex</p><pre><code class="language-html">&lt;html&gt;
  &lt;body&gt;
    &lt;font color="#00FF00"&gt;Font color example using color attribute&lt;/font&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre><p> Atributo RGB</p><pre><code class="language-html">&lt;html&gt;
  &lt;body&gt;
    &lt;font color="rgb(0,255,0)"&gt;Font color example using color attribute&lt;/font&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre><h2 id="ejemplo-del-atributo-font-size"><strong>Ejemplo del atributo font size</strong></h2><p>Este atributo especifica el tamaño de la fuente, ya sea como un valor numérico o relativo. Los valores numéricos van del <code>1</code> al <code>7</code>, siendo <code>1</code> el más pequeño y <code>3</code> el predeterminado. También se puede &nbsp;definir utilizando un valor relativo, como <code>+2</code> o <code>-3</code>, que lo establece en relación con el valor del atributo de tamaño del elemento <code>&lt;basefont&gt;</code>, o en relación con <code>3</code>, el valor predeterminado, si no existe ninguno.</p><p> Sintaxis:</p><p><code>&lt;font size="number"&gt;</code></p><p>Ejemplo:</p><pre><code class="language-html">&lt;html&gt;
  &lt;body&gt;
    &lt;font size="6"&gt;This is some text!&lt;/font&gt;
  &lt;/body&gt;
&lt;/html&gt;</code></pre><p>Nota: &nbsp;El tamaño del atributo <code>&lt;font&gt;</code> no es compatible con HTML5. Utilice CSS en su lugar.</p><h2 id="ejemplo-del-atributo-img-align"><strong>Ejemplo del atributo img align</strong></h2><p>El atributo align de una imagen específica dónde debe alinearse la imagen de acuerdo con el elemento circundante.</p><p>Valores de Atributo:</p><p>right- Alinea la imagen con la derecha </p><p>left - Alinea la imagen a la izquierda</p><p>top - Alinea la imagen en la parte superior</p><p>bottom - Alinea la imagen en el fondo </p><p>middle - Alinea la imagen en el medio.</p><p>Por ejemplo:</p><pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
  &lt;head&gt;
    &lt;title&gt;Img Align Attribute&lt;/title&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;p&gt;
      This is an example. &lt;img src="image.png" alt="Image" align="middle" /&gt; More text right here
      &lt;img src="image.png" alt="Image" width="100" /&gt;
    &lt;/p&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre><p>También podemos alinear a la derecha si queremos:</p><pre><code class="language-html">&lt;p&gt;This is another example&lt;img src="image.png" alt="Image" align="right" /&gt;&lt;/p&gt;
</code></pre><p><strong>Por favor, tenga en cuenta que el atributo align no es compatible en HTML5, y debe usar CSS en su lugar. Sin embargo, todavía es compatible con todos los principales navegadores.</strong></p><h2 id="el-atributo-img-width"><strong>El atributo img width</strong></h2><p>El atributo HTML &nbsp;'width' se refiere al ancho de una imagen. El valor en las comillas es la cantidad de píxeles. </p><p>Por ejemplo, si ya tiene un enlace a una imagen configurada a través del atributo <code>src</code>, puedes agregar el atributo width de la siguiente manera:</p><pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
  &lt;head&gt;
    &lt;title&gt;Img Width Attribute&lt;/title&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;img src="image.png" alt="Image" width="100" /&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre><p>En el fragmento de código anterior hay una etiqueta de imagen y la imagen tiene un ancho de &nbsp;100 píxeles. <code>width="100"</code>.</p><h2 id="ejemplo-del-atributo-img-src"><strong>Ejemplo del atributo img src</strong></h2><p>El atributo <code>&lt;img src&gt;</code> se refiere a la fuente de una imagen que desea mostrar. La etiqueta <code>img</code> no mostrará una imagen sin el atributo <code>src</code>. Sin embargo, si se establece la fuente en la ubicación de la imagen, puede mostrar cualquier imagen.</p><p>Hay una imagen del logotipo de freeCodeCamp ubicada en: <code>https://avatars0.githubusercontent.com/u/9892522?v=4&amp;s=400</code></p><p> Puede configurar eso como &nbsp;la imagen usando el atributo <code>src</code>.</p><pre><code class="language-html">&lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;Img Src Attribute Example&lt;/title&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;img src="https://avatars0.githubusercontent.com/u/9892522?v=4&amp;s=400" /&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre><p>El cógido de anterior se muestra así:</p><figure class="kg-card kg-image-card"><img src="https://avatars0.githubusercontent.com/u/9892522?v=4&amp;s=400?raw=true" class="kg-image" alt="The freeCodeCamp Avatar" width="460" height="460" loading="lazy"></figure><p>El atributo <code>src</code> es compatible con todos los navegadores.</p><p>También puede tener un archivo alojado localmente como su imagen.</p><p>Por ejemplo, <code>&lt;img src="images/freeCodeCamp.jpeg&gt;</code> &nbsp;funcionaría si tuviera una carpeta llamada <code>images</code> que tuviera el <code>freeCodeCamp.jpeg</code> dentro, siempre que la carpeta 'images' estuviera en la misma ubicación que el archivo <code>index.html</code>.</p><p><code>../files/index.html</code></p><p><code>..files/images/freeCodeCamp.jpeg</code></p><h2 id="visi-n-general"><strong>Visión general</strong></h2><h3 id="-qu-son-las-entidades-html"><strong>¿Qué son las entidades HTML?</strong></h3><p>Las entidades HTML son caracteres que se utilizan para remplazar &nbsp;caracteres reservados en HTML o para caracteres que no aparecen en el teclado. Algunos caracteres están reservados en HTML. Si utiliza los signos menos que (&lt;) o más que (&gt;) en su texto, el navegador podría confundirlos con etiquetas.</p><h3 id="-para-qu-se-usan"><strong>¿Para qué se usan?</strong></h3><p>Como se mencionó acerca de las entidades HTML se utilizan para reemplazar los caracteres reservados que están reservados por HTML.</p><h3 id="-c-mo-los-utilizamos"><strong> ¿Cómo los utilizamos?</strong></h3><p>Un carácter entidad tiene un aspecto similar a esto:</p><pre><code class="language-html">&lt;!-- format &amp;[entity_name]; --&gt;
&lt;!-- example for a less-than sign (&lt;) --&gt;
&amp;lt;</code></pre><p> O</p><pre><code class="language-html">&lt;!-- &amp;#[entity_number]; --&gt;
&lt;!-- example for a less-than sign (&lt;) --&gt;
&amp;#60;</code></pre><h2 id="gu-a-de-referencia"><strong>Guía de referencia</strong></h2><p>Esto no es una lista exhaustiva, pero los enlaces a continuación podrán brindarle más entidades &nbsp;si las que se encuentran a continuación no funcionan para sus necesidades. Happy Coding :bowtie: </p><pre><code>Character	Entity Name	Entity Number	Description
&amp;#32;	Space
!		&amp;#33;	Exclamation mark
”		&amp;#34;	Quotation mark
#		&amp;#35;	Number sign
$		&amp;#36;	Dollar sign
¢	&amp;cent;	&amp;#162;	Cent sign
€	&amp;euro;	&amp;#8364;	Euro sign
£	&amp;pound;	&amp;#163;	GBP sign
¥	&amp;yen;	&amp;#165;	Yen sign
%		&amp;#37;	Percent sign
&amp;	&amp;amp;	&amp;#38;	Ampersand
’		&amp;#39;	Apostrophe
(		&amp;#40;	Opening/Left Parenthesis
)		&amp;#41;	Closing/Right Parenthesis
*		&amp;#42;	Asterisk
+		&amp;#43;	Plus sign
,		&amp;#44;	Comma
-		&amp;#45;	Hyphen
.		&amp;#46;	Period
/		&amp;#47;	Slash
©	&amp;copy;	&amp;#169;	Copyright
®	&amp;reg;	&amp;#174;	Registered Trademark
”	&amp;quot;	&amp;#34;	double quotation mark
&gt;	&amp;gt;	&amp;#62;	Greater-than sign
&lt;	&amp;lt;	&amp;#60;	Less-than sign
•	&amp;bull;	&amp;#8226	Bullet point</code></pre><h2 id="ejemplo-de-formulario-html"><strong>Ejemplo de formulario HTML</strong></h2><p>Básicamente, los formularios se utilizan para recolectar datos ingresados por un usuario, que luego se envían al servidor para su posterior procesamiento. Se pueden usar para diferentes tipos de entradas de usuario, como nombre, correo electrónico, etc.</p><p>El formulario contiene elementos de control que se envuelven alrededor de etiquetas <code>&lt;form&gt;&lt;/form&gt;</code>, como <code>input</code>, que puede tener tipos como:</p><ul><li><code>text</code></li><li><code>email</code></li><li><code>password</code></li><li><code>checkbox</code></li><li><code>radio</code></li><li><code>submit</code></li><li><code>range</code></li><li><code>search</code></li><li><code>date</code></li><li><code>time</code></li><li><code>week</code></li><li><code>color</code></li><li><code>datalist</code></li></ul><p>Ejemplo de código:</p><pre><code class="language-html">&lt;form&gt;
  &lt;label for="username"&gt;Username:&lt;/label&gt;
  &lt;input type="text" name="username" id="username" /&gt;
  &lt;label for="password"&gt;Password:&lt;/label&gt;
  &lt;input type="password" name="password" id="password" /&gt;
  &lt;input type="radio" name="gender" value="male" /&gt;Male&lt;br /&gt;
  &lt;input type="radio" name="gender" value="female" /&gt;Female&lt;br /&gt;
  &lt;input type="radio" name="gender" value="other" /&gt;Other
  &lt;input list="Options" /&gt;
  &lt;datalist id="Options"&gt;
    &lt;option value="Option1"&gt;&lt;/option&gt;
    &lt;option value="Option2"&gt;&lt;/option&gt;
    &lt;option value="Option3"&gt;&lt;/option&gt;
  &lt;/datalist&gt;

  &lt;input type="submit" value="Submit" /&gt;
  &lt;input type="color" /&gt;
  &lt;input type="checkbox" name="correct" value="correct" /&gt;Correct
&lt;/form&gt;
</code></pre><p>Otros elementos que el formulario puede contener:</p><ul><li><code>textarea</code> - Es un cuadro de varias líneas, se usa con mayor frecuencia para agregar texto, por ejemplo, comentario. El tamaño del área se define por el número de filas y columnas.</li><li><code>select</code> - Junto con la etiqueta <code>&lt;option&gt;&lt;/option&gt;</code> crea un menú de selección desplegable.</li><li><code>button</code> - El elemento botón se puede utilizar para definir un botón en el que se puede hacer clic.</li></ul><p>MÁS INFORMACIÓN SOBRE FORMULARIOS HTML</p><p>Los formularios HTML son necesarios cuando deseas recolectar algunos datos del visitante del sitio. Por ejemplo, durante el registro del usuario, le gustaría recopilar &nbsp;información como nombre, dirección de correo electrónico, tarjeta de crédito, etc.</p><p>Un formulario tomará la entrada de del visitante del sitio y luego la publicará en una aplicación de back-end como CGI, ASP Script o PHP script, etc. La aplicación back-end realizará el procesamiento requerido de los datos pasados en función de la lógica empresarial definida dentro de la aplicación.</p><p>Hay varios elementos de formulario disponibles, como campos de texto, campos de área de texto, menús desplegables, botones de radio, casillas de verificación, etc.</p><p>La etiqueta HTML <code>&lt;form&gt;</code> es usa para crear un formulario en HTML y tiene la siguiente sintaxis -</p><pre><code class="language-html">&lt;form action="Script URL" method="GET|POST"&gt;form elements like input, textarea etc.&lt;/form&gt;
</code></pre><p>Si el método form no está definido, por defecto será "GET".</p><p>La etiqueta form también puede tener un atributo llamado "target" que especifica dónde se abrirá el enlace. Se puede abrir en la pestaña del navegador, en un marco, o en la actual ventana.</p><p>El atributo action define la acción que se realizará cuando se envíe formulario. Normalmente, los datos del formulario se envían a una página web &nbsp;en el URL del script cuando el usuario hace clic en el boton submit Enviar. Si se omite el atributo action, la acción se establece en la página actual.</p><h2 id="ejemplo-de-audio-html5"><strong>Ejemplo de audio HTML5</strong></h2><p>Antes HTML5, los archivos de audio tenían que reproducirse en un navegador usando un complemento como Adobe Flash. El HTML</p><p>El siguiente fragmento de código agrega un archivo de audio con el nombre de archivo <code>tutorial.ogg</code> o <code>tutorial.mp3</code>. El elemento indica archivos de audio alternativos entre los que puede elegir el navegador. El navegador utilizará el primer formato reconocido.</p><h4 id="ejemplo-1"><strong>Ejemplo 1</strong></h4><pre><code class="language-html">&lt;audio controls&gt;
  &lt;source src="tutorial.ogg" type="audio/ogg" /&gt;
  &lt;source src="tutorial.mp3" type="audio/mpeg" /&gt;
  Your browser does not support the audio element.
&lt;/audio&gt;
</code></pre><h4 id="ejemplo-2"><strong>Ejemplo 2</strong></h4><pre><code class="language-html">&lt;audio src="https://s3.amazonaws.com/freecodecamp/simonSound1.mp3" controls loop autoplay&gt;&lt;/audio&gt;
</code></pre><p>El atributo <code>controls</code> incluye controles de audio como reproducir, pausa y volumen. Si no utiliza este atributo, no se mostrará ningún control.</p><p>El elemento <code>&lt;source&gt;</code> permite indicar archivos de audio alternativos entre los que puede elegir el navegador. El navegador utilizará el primer formato que reconozca. El texto entre las etiquetas <code>&lt;audio&gt;</code> y <code>&lt;/audio&gt;</code> puede mostrarse en el navegador que no admita el elemento &nbsp; <code>&lt;audio&gt;</code> HTML5 .</p><p>El atributo autoplay reproducirá automáticamente su archivo de audio en segundo plano. Se considera mejor práctica permitir que los visitantes elijan reproducir un audio.</p><p>El atributo precarga indica lo que debe hacer el navegador si el reproductor no está configurado para reproducción automática.</p><p>El atributo loop reproducirá el archivo de audio en un bucle continuo si se menciona.</p><p>Como se trata de html5, algunos navegadores no lo admiten. Puedes comprobarlo en <a href="https://caniuse.com/#search=audio">https://caniuse.com/#search=audio</a></p><h2 id="ejemplo-de-elementos-sem-nticos-html5"><strong>Ejemplo de elementos semánticos HTML5 </strong></h2><p>Los elementos semánticos de HTML describen claramente su significado de una manera legible por humanos y máquinas. Elementos como <code>&lt;header&gt;</code>, <code>&lt;footer&gt;</code> y <code>&lt;article&gt;</code> todos se consideran semánticos porque describen con precisión el propósito del elemento y el tipo de contenido que hay dentro de ellos.</p><h3 id="una-historia-r-pida"><strong>Una historia rápida</strong></h3><p>HTML fue originalmente creado como un lenguaje de marcado para describir documentos en los inicios de Internet. A medida que el Internet creció y fue adoptado por más personas, sus necesidades cambiaron. Donde el internet originalmente fue destinado para compartir documentos cinetificos, ahora las personas también quería compartir otras cosas. Muy rápidamente, la gente empezó a querer hacer que la web se viera mejor. Debido a que la web no se creo inicialmente para ser diseñada, los programadores utilizaron diferentes trucos para diseñar las cosas de diferentes maneras. En lugar de usar &nbsp;el <code>&lt;table&gt;&lt;/table&gt;</code> &nbsp;para describir información usando una tabla, los programadores las usarían para colocar otros elementos en la página. A medida que avanzaba el uso de diseños diseñados visualmente , los programadores comenzaron a usar una etiqueta genérica "no semántica" como &lt;div&gt;. A menudo darían a estos elementos un atributo de &nbsp;<code>class</code> o <code>id</code> para describir su propósito. Por ejemplo, en lugar de &nbsp;<code>&lt;header&gt;</code> &nbsp;a menudo se escribía como &nbsp;<code>&lt;div class="header"&gt;</code>. Como HTML5 es todavía relativamente nuevo, este uso de elementos no semánticos sigue siendo muy común en los sitios web de hoy.</p><h4 id="lista-de-nuevos-elementos-sem-nticos"><strong>Lista de nuevos elementos semánticos</strong></h4><p> Los elementos semánticos agregados en HTML5 son:</p><ul><li><code>&lt;article&gt;</code></li><li><code>&lt;aside&gt;</code></li><li><code>&lt;details&gt;</code></li><li><code>&lt;figcaption&gt;</code></li><li><code>&lt;figure&gt;</code></li><li><code>&lt;footer&gt;</code></li><li><code>&lt;header&gt;</code></li><li><code>&lt;main&gt;</code></li><li><code>&lt;mark&gt;</code></li><li><code>&lt;nav&gt;</code></li><li><code>&lt;section&gt;</code></li><li><code>&lt;summary&gt;</code></li><li><code>&lt;time&gt;</code></li></ul><p>Elementos como <code>&lt;header&gt;</code>, <code>&lt;nav&gt;</code>, <code>&lt;section&gt;</code>, <code>&lt;article&gt;</code>, <code>&lt;aside&gt;</code>, y<code>&lt;footer&gt;</code> actúan más o menos como elementos &nbsp;<code>&lt;div&gt;</code>. Agrupan otros elementos &nbsp;en secciones de página. Sin embargo, cuando una etiqueta <code>&lt;div&gt;</code> puede contener cualquier tipo de información, es fácil identificar que tipo de información iría en una región semántica.</p><p><strong> Un ejemplo de diseño de elementos semánticos por <strong><strong><strong>w3schools</strong></strong></strong>.</strong></p><figure class="kg-card kg-image-card"><img src="https://www.w3schools.com/html/img_sem_elements.gif" class="kg-image" alt="Semantic elements laying out a page by w3schools" width="219" height="258" loading="lazy"></figure><h3 id="beneficios-de-elementos-sem-nticos"><strong>Beneficios de elementos semánticos</strong></h3><p>Para ver los beneficios de los elementos semánticos, aquí hay dos piezas de código HTML. El primer bloque de código utiliza elementos semánticos.</p><pre><code class="language-text">&lt;header&gt;&lt;/header&gt;
&lt;section&gt;
  &lt;article&gt;
    &lt;figure&gt;
      &lt;img /&gt;
      &lt;figcaption&gt;&lt;/figcaption&gt;
    &lt;/figure&gt;
  &lt;/article&gt;
&lt;/section&gt;
&lt;footer&gt;&lt;/footer&gt;
</code></pre><p>Mientras que este segundo bloque de código utiliza elementos no semánticos:</p><pre><code class="language-text">&lt;div id="header"&gt;&lt;/div&gt;
&lt;div class="section"&gt;
  &lt;div class="article"&gt;
    &lt;div class="figure"&gt;
      &lt;img /&gt;
      &lt;div class="figcaption"&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div id="footer"&gt;&lt;/div&gt;
</code></pre><p>En primer lugar, es mucho <strong>más fácil de leer</strong>. Esto es probablemente la primera cosa que notará al mirar el primer bloque de código usando elementos semánticos. Este es un pequeño ejemplo, pero como programador puedes estar leyendo cientos o miles de líneas de código. Cuanto más fácil sea de leer y entender ese código, más fácil será su trabajo.</p><p>Tiene <strong>mayor accesibilidad. </strong>No eres el único que encuentra &nbsp;los elementos semánticos más fáciles de entender. Los motores de búsqueda y las tecnologías de asistencia (como los lectores de pantalla para usuarios con discapacidad visual) también pueden comprender el contexto y contenido de su sitio web, lo que significa una mejor experiencia para sus usuarios.</p><p>En general, los elementos semánticos también conducen a un código más consistente. Al crear un encabezado usando elementos no semánticos, diferentes programadores pueden escribirlo &nbsp;como <code>&lt;div class="header"&gt;</code>, <code>&lt;div id="header"&gt;</code>, <code>&lt;div class="head"&gt;</code>, o simplemente <code>&lt;div&gt;</code>. Hay muchas formas en las que puedes crear un elemento header, y todas dependen de la preferencia personal del programador. Al crear un elemento semántico estándar, lo hace más fácil para todos.</p><p>Desde octubre 2014; HTML4 se actualizó a HTML5, junto con algunos "nuevos" elementos "semánticos". Hasta el día hoy, puede que algunos de nosotros todavía podríamos estar confundidos en cuanto a porque tantos elementos diferentes que no parecen mostrar cambios importantes.</p><h4 id="section-y-article"><strong><strong><strong><strong><code>&lt;section&gt;</code> </strong></strong></strong>y<strong><strong><strong> <code>&lt;article&gt;</code></strong></strong></strong></strong></h4><p></p><p>¿Cuál es la diferencia?, te preguntarás. Ambos elementos se utilizan para seccionar un contenido, y sí, &nbsp;definitivamente se pueden usar indistintamente. Es una cuestión de en qué situación. HTML4 ofrecía solo un tipo de elemento contenedor, que es <code>&lt;div&gt;</code>. Si bien esto todavía se usa en HTML5, HTML5 nos proporcionó con <code>&lt;section&gt;</code> y &nbsp;<code>&lt;article&gt;</code> y de cierta forma remplazar <code>&lt;div&gt;</code>.</p><p>Los elementos <code>&lt;section&gt;</code> y &nbsp;<code>&lt;article&gt;</code> &nbsp;son conceptualmente similares e intercambiables. Para decidir cuál de estos se deben elegir, tome nota de lo siguiente:</p><ol><li> Se pretende que un artículo sea distribuible o reutilizable de forma independiente.</li><li>Una sección es una agrupación temática de contenido.</li></ol><pre><code class="language-html">&lt;section&gt;
  &lt;p&gt;Top Stories&lt;/p&gt;
  &lt;section&gt;
    &lt;p&gt;News&lt;/p&gt;
    &lt;article&gt;Story 1&lt;/article&gt;
    &lt;article&gt;Story 2&lt;/article&gt;
    &lt;article&gt;Story 3&lt;/article&gt;
  &lt;/section&gt;
  &lt;section&gt;
    &lt;p&gt;Sport&lt;/p&gt;
    &lt;article&gt;Story 1&lt;/article&gt;
    &lt;article&gt;Story 2&lt;/article&gt;
    &lt;article&gt;Story 3&lt;/article&gt;
  &lt;/section&gt;
&lt;/section&gt;
</code></pre><h4 id="header-y-hgroup"><strong><strong><strong><strong><code>&lt;header&gt;</code> </strong></strong></strong> y<strong><strong><strong> <code>&lt;hgroup&gt;</code></strong></strong></strong></strong></h4><p>El elemento <code>&lt;header&gt;</code> &nbsp;generalmente se encuentra en la parte superior de un documento, una sección o un artículo y generalmente contiene el encabezado principal y algunas herramientas de navegación y de búsqueda.</p><pre><code class="language-html">&lt;header&gt;
  &lt;h1&gt;Company A&lt;/h1&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href="/home"&gt;Home&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="/about"&gt;About&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="/contact"&gt;Contact us&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;form target="/search"&gt;
    &lt;input name="q" type="search" /&gt;
    &lt;input type="submit" /&gt;
  &lt;/form&gt;
&lt;/header&gt;
</code></pre><p>El elemento <code>&lt;hgroup&gt;</code> debe usarse donde desee un encabezado principal con uno o más subtítulos.</p><pre><code class="language-html">&lt;hgroup&gt;
  &lt;h1&gt;Heading 1&lt;/h1&gt;
  &lt;h2&gt;Subheading 1&lt;/h2&gt;
  &lt;h2&gt;Subheading 2&lt;/h2&gt;
&lt;/hgroup&gt;
</code></pre><p>RECUERDA, que el elemento <code>&lt;header&gt;</code> puede contener cualquier contenido, pero el elemento <code>&lt;hgroup&gt;</code> solo puede contener otros encabezados, es decir <code>&lt;h1&gt;</code> &nbsp;a &nbsp;<code>&lt;h6&gt;</code> &nbsp;e incluido <code>&lt;hgroup&gt;</code>.</p><h4 id="aside"><strong><strong><strong><strong><code>&lt;aside&gt;</code></strong></strong></strong></strong></h4><p>El elemento <code>&lt;aside&gt;</code> está diseñado a contenido que no es parte del flujo del texto en el cual aparece, sin embargo, todavía está relacionado de alguna manera. &nbsp;Esto de <code>&lt;aside&gt;</code> como una barra lateral de su contenido principal.</p><pre><code class="language-html">&lt;aside&gt;
  &lt;p&gt;
    This is a sidebar, for example a terminology definition or a short background to a historical
    figure.
  &lt;/p&gt;
&lt;/aside&gt;
</code></pre><p>Antes de HTML5, nuestros menús eran creados con <code>&lt;ul&gt;</code> y <code>&lt;li&gt;</code>. Ahora, junto con estos, podemos separar los elementos de nuestro menú con un <code>&lt;nav&gt;</code>, para navegar entre sus páginas. Puede tener cualquier cantidad de elementos <code>&lt;nav&gt;</code> en una página, por ejemplo, es común tener una navegador global en la parte superior (en el <code>&lt;header&gt;</code>) y un navegación local como barra lateral(en un elemento <code>&lt;aside&gt;</code>).</p><pre><code class="language-html">&lt;nav&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href="/home"&gt;Home&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="/about"&gt;About&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="/contact"&gt;Contact us&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/nav&gt;
</code></pre><h4 id="footer"><strong><strong><strong><strong><code>&lt;footer&gt;</code></strong></strong></strong></strong></h4><p>Si hay un <code>&lt;header&gt;</code> &nbsp;debe de haber un <code>&lt;footer&gt;</code>. Un <code>&lt;footer&gt;</code> es genralmente encontrado en el fondo de un &nbsp;documento, una sección, o un artículo. Al igual que el <code>&lt;header&gt;</code> el contenido es generalmente metainfromación, como detalles del autor, información legal, y /o links a infromación relacionada. También es válido incluir elementos <code>&lt;section&gt;</code> dentro de un pie de página.</p><pre><code class="language-html">&lt;footer&gt;&amp;copy;Company A&lt;/footer&gt;</code></pre><h4 id="small"><strong><strong><strong><strong><code>&lt;small&gt;</code></strong></strong></strong></strong></h4><p>El elemento <code>&lt;small&gt;</code> a menudo aparece dentro de un elemento &nbsp;<code>&lt;footer&gt;</code> o <code>&lt;aside&gt;</code> que normalmente contiene información de derechos de autor o de avisos legales, y otras letras pequeñas similares. &nbsp;Sin embargo, esto no pretende hacer el texto más pequeño. Simplemente, describe su contenido, no prescribir la presentación.</p><pre><code class="language-html">&lt;footer&gt;&lt;small&gt;&amp;copy;Company A&lt;/small&gt; Date&lt;/footer&gt;</code></pre><h4 id="time"><strong><strong><strong><strong><code>&lt;time&gt;</code></strong></strong></strong></strong></h4><p>El elemento <code>&lt;time&gt;</code> permite adjuntar una fecha &nbsp;ISO 8601 inequívoca a una versión legible por humanos de esa fecha.</p><pre><code class="language-html">&lt;time datetime="2017-10-31T11:21:00+02:00"&gt;Tuesday, 31 October 2017&lt;/time&gt;</code></pre><p>¿Por qué molestarnos con <code>&lt;time&gt;</code>? Mientras los humanos pueden leer la hora que puede eliminar la ambigüedad a través del contexto de manera normal, las computadoras pueden leer la fecha ISO 8601 y ver la fecha, la hora, y la zona horaria.</p><h4 id="figure-y-figcaption"><strong><strong><strong><strong><code>&lt;figure&gt;</code> </strong></strong></strong>y<strong><strong><strong> <code>&lt;figcaption&gt;</code></strong></strong></strong></strong></h4><p><code>&lt;figure&gt;</code> es para envolver el contenido de su imagen a su alrededor, y <code>&lt;figcaption&gt;</code> es para subtitular su imagen.</p><pre><code class="language-html">&lt;figure&gt;
  &lt;img src="https://en.wikipedia.org/wiki/File:Shadow_of_Mordor_cover_art.jpg" alt="Shadow of Mordor" /&gt;
  &lt;figcaption&gt;Cover art for Middle-earth: Shadow of Mordor&lt;/figcaption&gt;
&lt;/figure&gt;</code></pre><h2 id="ejemplo-de-v-deo-html5"><strong>Ejemplo de vídeo HTML5</strong></h2><p>Antes de HTML5, para reproducir un video en una página web, se necesitaba usar un complemento, como Adobe Flash Player. Con la introducción de HTML5, ahora puede colocarlo directamente en la &nbsp;página misma. El HTML.</p><p>Para colocar el archivo de video en la página web, simplemente agregue este fragmento de código y cambie el src de archivo de audio.</p><pre><code class="language-html">&lt;video controls&gt;
  &lt;source src="tutorial.ogg" type="video /ogg" /&gt;
  &lt;source src="tutorial.mp4" type="video /mpeg" /&gt;
  Your browser does not support the video element. Kindly,update it to latest version.
&lt;/video&gt;
</code></pre><p>El atributo controles incluye los controles de vídeo, similares a la reproducción, la pausar, y el volumen.</p><p>Esta función es compatible con todos los navegadores modernos/actualizados. Sin embargo, no todos admiten el mismo formato de video. Mi recomendación para una amplia gama de compatibilidad es MP4, ya que es el formato más ampliamente aceptado. También hay otros dos formatos (WebM y Ogg) que son compatibles con Chrome, Firefox, y Opera.</p><p>El elemento permite indicar los archivos de video alternativos entre los cuales el navegador puede elegir. El navegador utilizará el primer formato que reconozca. En HTML5, hay tres formatos de videos compatibles: MP4, WebM, y Ogg.</p><p>El texto entre etiquetas solo se mostrará en los navegadores que no lo admitan.</p><p>Hay varios elementos diferentes de etiquetas de video, muchas de estas explicaciones son basan en los documentos web de Mozilla(enlace a continuación). Hay aún más si hace clic en el enlace a continuación. </p><h4 id="autoplay"><strong><strong><strong><strong>autoplay</strong></strong></strong></strong></h4><p>"autoplay" se puede establecer true o false. Para establecerlo en true agrégualo a la etiqueta, si no está presente en la etiqueta, se establece en false. Si se establece true el video comenzará a reproducirse tan pronto como se haya almacenado en búfer lo suficiente para que pueda reproducirse. Muchas personas encuentran que la reproducción automática de videos es pertubadora o molesta, así que use esta función con moderación. También tenga en cuenta que algunos navegadores móviles, como Safari para iOS, ignoran este atributo.</p><pre><code class="language-html">&lt;video autoplay&gt;
  &lt;source src="video.mp4" type="video/mp4" /&gt;
&lt;/video&gt;
</code></pre><h4 id="poster"><strong><strong><strong><strong>poster</strong></strong></strong></strong></h4><p>El atributo "poster" es la imagen que se muestra en el vídeo hasta que el usuario hace clic para reproducirlo.</p><pre><code class="language-html">&lt;video poster="poster.png"&gt;
  &lt;source src="video.mp4" type="video/mp4" /&gt;
&lt;/video&gt;
</code></pre><h4 id="controls"><strong><strong><strong><strong>controls</strong></strong></strong></strong></h4><p>El atributo "controls" se puede establecer true o false y contralara si aparecen controles &nbsp;como el botón de reproducir/pausa o el control deslizante de volumen. Para establecerlo en true, agréguelo a la etiqueta, si no está presente en la etiqueta, se establece en false.</p><pre><code class="language-html">&lt;video controls&gt;
  &lt;source src="video.mp4" type="video/mp4" /&gt;
&lt;/video&gt;
</code></pre><p>Hay muchos más atributos que se pueden agregar que son opcionales para personalizar el reproductor de video en la página. Para obtener más información, haga clic en los enlaces a continuación.</p><h2 id="ejemplo-de-almacenamiento-web-html5"><strong>Ejemplo de almacenamiento Web HTML5</strong></h2><p>El almacenacmiento Web permite a las aplicaciones web almacenar hasta 5MB de información en el almacenamiento del navegador por origen (por dominio y protocolo).</p><h3 id="tipos-de-almacenamiento-web"><strong>Tipos de Almacenamiento Web</strong></h3><p>Hay dos objetos para almacenar datos en el cliente:</p><p><code>window.localStorage</code>: almacena datos sin fecha de caducidad y dura hasta que se eliminan.</p><pre><code class="language-javascript">// Store Item
localStorage.setItem("foo", "bar");

// Get Item
localStorage.getItem("foo"); //returns "bar"</code></pre><p><code>window.sessionStorage</code>: &nbsp;almacena datos para una sesión, donde los datos se pierden cuando se cierra el navegador/pestaña del navegador.</p><pre><code class="language-javascript">// Store Item
sessionStorage.setItem("foo", "bar");

// Get Item
sessionStorage.getItem("foo"); //returns "bar"</code></pre><p>Dado que la &nbsp;implementación actual solo admite asignaciones de cadena a cadena, debe serializar y des serializar otras estructuras de datos. </p><p>Puede hacerlo usando JSON.stringify() and JSON.parse().</p><p>Por ejemplo, para el JSON dado</p><pre><code class="language-text">var jsonObject = { 'one': 1, 'two': 2, 'three': 3 };</code></pre><p>Primero convertimos el objeto JSON en cadena y lo guardamos en el almacenamiento local:</p><pre><code class="language-text">localStorage.setItem('jsonObjectString', JSON.stringify(jsonObject));</code></pre><p>Para obtener el objeto JSON de la cadena guardada en el almacenamiento local:</p><pre><code class="language-text">var jsonObject = JSON.parse(localStorage.getItem('jsonObjectString'));</code></pre><h2 id="ejemplo-de-enlaces-mailto"><strong>Ejemplo de enlaces mailto</strong></h2><p>En enlace mailto es un tipo de hipervínculo (<code>&lt;a href=""&gt;&lt;/a&gt;</code>) con parámetros especiales que permite especificar destinatarios adicionales, una línea de asunto y/o un texto de cuerpo.</p><h3 id="la-sintaxis-b-sica-con-un-destinatario-es-"><strong>La sintaxis básica con un destinatario es:</strong></h3><pre><code class="language-html">&lt;a href="mailto:friend@something.com"&gt;Some text&lt;/a&gt;</code></pre><h3 id="-m-s-perzonalizaci-n-"><strong>¡Más perzonalización!</strong></h3><h4 id="agregar-un-asunto-a-ese-correo"><strong>Agregar un asunto a ese correo</strong></h4><p>Si desea agregar un asunto específico a ese correo, tenga cuidado de agregar %20 o + en todas partes donde haya un espacio en la línea de asunto. Una manera fácil de asegurarse de que está correctamente formateado es utilizar un decodificador / codificador de URL.</p><h4 id="agregando-el-cuerpo-de-texto-"><strong>Agregando el cuerpo de texto:</strong></h4><p>Del mismo modo, puedes agregar un mensaje específico en la parte del cuerpo del correo electrónico: Nuevamente, los espacios deben remplazarse por &nbsp; <code>%20</code> o <code>+</code> . Después el parámetro del sujeto, cualquier parámetro adicional debe ser precedido de <code>&amp;</code>.</p><p>Ejemplo: Supongamos que quieres que los usuarios envíen un correo electrónico a sus amigos sobre su progreso en Free Code Camp:</p><p>Dirección: vacía</p><p>Sujeto: &nbsp;Grandes noticias</p><p>Cuerpo: Me estoy convirtiendo en desarrollador</p><p>Tu enlace html ahora:</p><pre><code class="language-html">&lt;a href="mailto:?subject=Great%20news&amp;body=I%20am%20becoming%20a%20developer"&gt;Send mail!&lt;/a&gt;</code></pre><p>Aquí, hemos dejado mailto vacío (mailto:?). Esto abrirá el cliente de correo electrónico del usuario y el usuario agregará la dirección del destinatario ellos mismos.</p><h4 id="agregar-m-s-destinatarios-">Agregar más destinatarios:</h4><p>De la misma manera, puede agregar parámetros CC y bcc. ¡Separa cada dirección por una coma!</p><p>Los parámetros adicionales deben ir precedidos de &amp;.</p><pre><code class="language-html">&lt;a href="mailto:firstfriend@something.com?subject=Great%20news&amp;cc=secondfriend@something.com,thirdfriend@something.com&amp;bcc=fourthfriend@something.com"&gt;Send mail!&lt;/a&gt;</code></pre><h2 id="gracias-por-usar-esta-referencia-html">Gracias por usar esta referencia HTML</h2><p></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Como centrar una imagen usando Text Align: Center ]]>
                </title>
                <description>
                    <![CDATA[ Un elemento <img> es un elemento en línea (el valor display de inline-block). Puede ser fácilmente centrado añadiendo el text-align: center; propiedad CSS al elemento padre que lo contiene. Para centrar una imagen usando text-align: center; debes colocar el <img> dentro del elemento de nivel de bloque como es un ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/como-centrar-una-imagen-usando-text-align-center/</link>
                <guid isPermaLink="false">62b4eefdc5b22c08edf8beae</guid>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Sil Zubikarai ]]>
                </dc:creator>
                <pubDate>Wed, 06 Jul 2022 18:00:57 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2022/06/5f9c9e5e740569d1a4ca3cbb.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/how-to-center-an-image-using-text-align/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Center an Image Using Text Align: Center</a>
      </p><p>Un elemento <code>&lt;img&gt;</code> es un elemento en línea (el valor display de <code>inline-block</code>). Puede ser fácilmente centrado añadiendo el <code>text-align: center;</code> propiedad CSS al elemento padre que lo contiene.</p><p>Para centrar una imagen usando <code>text-align: center;</code> debes colocar el <code>&lt;img&gt;</code> dentro del elemento de nivel de bloque como es un <code>div</code>. Ya que la propiedad <code>text-align</code> solo aplica a los elementos nivel de bloque, coloque <code>text-align: center;</code> encerrar dentro del elemento nivel de bloque para lograr un<code>&lt;img&gt;</code> un centrado horizontal. </p><h3 id="ejemplo"><strong> Ejemplo</strong></h3><pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;Center an Image using text align center&lt;/title&gt;
    &lt;style&gt;
      .img-container {
        text-align: center;
      }
    &lt;/style&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;div class="img-container"&gt; &lt;!-- Block parent element --&gt;
      &lt;img src="user.png" alt="John Doe"&gt;
    &lt;/div&gt;
  &lt;/body&gt;
&lt;/html&gt;</code></pre><p><strong>Nota:</strong> El elemento padre debe ser un elemento de bloque. Si no es un elemento de bloque, deberías añadir <code>display: block;</code> propiedad de CSS junto con la propiedad <code>text-align</code>.</p><pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;Center an Image using text align center&lt;/title&gt;
    &lt;style&gt;
      .img-container {
        text-align: center;
        display: block;
      }
    &lt;/style&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;span class="img-container"&gt; &lt;!-- Inline parent element --&gt;
      &lt;img src="user.png" alt=""&gt;
    &lt;/span&gt;
  &lt;/body&gt;
&lt;/html&gt;</code></pre><p><strong><strong><strong><strong>Demo:</strong></strong></strong></strong> <a href="https://codepen.io/aravindio/pen/PJMXbp">Codepen</a></p><h2 id="ajuste-de-objeto"><strong>Ajuste de objeto</strong></h2><p>Una vez que la imagen es centrada, es posible que desee cambiar el tamaño. La propiedad <code>object-fit</code> específica como un elemento responde al ancho/altura del box padre.</p><p>Esta propiedad puede ser usada para imagen, video, o cualquier otro medio. También puede ser usado con la propiedad &nbsp;<code>object-position</code> para obtener más control en como el medio es mostrado.</p><p>Básicamente, usamos la propiedad &nbsp;<code>object-fit</code> para definir como alargar o encoger un medio inline.</p><h3 id="sintaxis"><strong> Sintaxis</strong></h3><pre><code class="language-css">.element {
    object-fit: fill || contain || cover || none || scale-down;
}</code></pre><h3 id="valores"><strong> Valores</strong></h3><ul><li><code>fill</code>: <strong>Este es el valor predeterminado</strong>. Cambie el tamaño del contenido para que coincida con su box padre, independientemente de la relación de aspecto.</li><li><code>contain</code>: Cambie el tamaño del contenido para llenar el box padre usando el apropiado aspect-radio.</li><li><code>cover</code>: Similar a <code>contain</code> pero a menudo recortando el contenido.</li><li><code>none</code>: Muestra la imagen a su tamaño original.</li><li><code>scale-down</code>: Compara la diferencia entre <code>none</code> y <code>contain</code> para encontrar &nbsp;el tamaño de objeto concreto más pequeño.</li></ul><h3 id="compatibilidad-del-buscador"><strong> Compatibilidad del buscador</strong></h3><p>El <code>object-fit</code> es soportado por la mayoría de los buscadores modernos, para información más actualizada acerca de compatibilidad puedes ver esto en <a href="http://caniuse.com/#search=object-fit">http://caniuse.com/#search=object-fit</a>. </p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Explicación de Formas CSS: Como dibujar un círculo, un triángulo, y más usando solamente CSS ]]>
                </title>
                <description>
                    <![CDATA[ Antes de empezar. Si quieres más contenido gratis pero en formato video. No te pierdas mi canal de Youtube donde publico videos semanales de código FrontEnd. https://www.youtube.com/user/Weibenfalk ---------- ¿Eres nuevo en el desarrollo web y CSS? ¿Te has preguntado como esas lindas formas son hechas para que tú puedas verlas ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/explicacion-de-formas-css-como-dibujar-un-circulo-un-triangulo-y-amas-usando-solamente-css/</link>
                <guid isPermaLink="false">62a237ca29d2a808a725fdc8</guid>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Sil Zubikarai ]]>
                </dc:creator>
                <pubDate>Sun, 03 Jul 2022 04:04:12 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2022/06/delila-ziebart-b0GSCFJ-Gzg-unsplash.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/css-shapes-explained-how-to-draw-a-circle-triangle-and-more-using-pure-css/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">CSS Shapes Explained: How to Draw a Circle, Triangle, and More Using Pure CSS</a>
      </p><p>Antes de empezar. Si quieres más contenido gratis pero en formato video. No te pierdas mi canal de Youtube donde publico videos semanales de código FrontEnd.<br><br><a href="https://www.youtube.com/user/Weibenfalk">https://www.youtube.com/user/Weibenfalk</a><br><br>----------<br></p><p>¿Eres nuevo en el desarrollo web y CSS? ¿Te has preguntado como esas lindas formas son hechas para que tú puedas verlas por todo el internet? No preguntes más. Has venido al sitio correcto.</p><p>A continuación explicaré los conceptos básicos de crear figuras con CSS. ¡Hay mucho que decir acerca de este tema! Por lo tanto, no cubriré todas (ni mucho menos todas) las herramientas y figuras, pero te dará una idea básica de como las figuras son creadas con CSS.</p><p>Algunas formas requieren más "arreglos y trucos" que otros. Creando formas con CSS es usualmente una combinación de usar <strong><strong>width, height, top, right, left, border, bottom, transform</strong> </strong>y pseudo-elementos como: <strong><strong>:before</strong></strong> y <strong><strong>:after.</strong> </strong>También tenemos propiedades CSS más modernas para crear formas como <strong><strong>shape-outside</strong></strong> y <strong><strong>clip-path. </strong></strong>Escribiré sobre ellos a continuación.</p><h2 id="formas-css-la-forma-b-sica"><strong>Formas CSS: La forma básica</strong></h2><p>Usando unos cuantos trucos en CSS siempre hemos podido crear formas básicas como cuadrados, círculos, y triángulos con propiedades CSS regulares. Vamos a ver algunas de ellas ahora.</p><h3 id="cuadrados-y-rect-ngulos"><strong> Cuadrados y rectángulos</strong></h3><p>Cuadrados y rectángulos, son probablemente las formas más sencillas de lograr. Por defecto, a div siempre es un cuadrado o un rectángulo.</p><p>Establece el ancho y altura como es mostrado en el código debajo. Entonces solo es cuestión de darle al elemento un color fondo. Puede tener cualquier otra propiedad que desee en el elemento.</p><pre><code class="language-css">#square {
    background: lightblue;
    width: 100px;
    height: 100px;
}</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/01/square.png" class="kg-image" alt="square" width="600" height="400" loading="lazy"><figcaption>A CSS square</figcaption></figure><h3 id="c-rculos"><br><strong>Círculos</strong></h3><p>Es casi tan fácil crear un círculo. Para crear un círculo podemos establecer el border-radius en el elemento. Esto creará esquinas curveadas en el elemento.</p><p>Si lo establecemos a 50% creará un círculo. Si lo estableces en un ancho y altura diferente, obtendremos un óvalo en su lugar.</p><pre><code class="language-css">#circle {
    background: lightblue;
    border-radius: 50%;
    width: 100px;
    height: 100px;
}</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/01/circle.png" class="kg-image" alt="circle" width="600" height="400" loading="lazy"><figcaption>A CSS Circle</figcaption></figure><h3 id="tri-ngulos"><strong>Triángulos</strong></h3><p>Los triángulos son un poco más complicados. Tenemos que establecer los bordes en el elemento para que formen un triángulo. Estableciendo el ancho y altura a cero en el elemento, el ancho actual del elemento será el ancho del borde.</p><p>Ten en cuenta que los bordes de los bordes en el elemento son diagonales de 45 grados entre sí. Es por eso que este método funciona para crear un triángulo. &nbsp;Al establecer un de los bordes a un color sólido y el otro borde a uno transparente, este tomará la forma de un triángulo.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/01/borders.png" class="kg-image" alt="borders" width="600" height="400" loading="lazy"><figcaption>CSS Borders have angled edges</figcaption></figure><pre><code class="language-css">#triangle {
    width: 0;
    height: 0;
    border-left: 40px solid transparent;
    border-right: 40px solid transparent;
    border-bottom: 80px solid lightblue;
}</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/01/triangle.png" class="kg-image" alt="triangle" width="600" height="400" loading="lazy"><figcaption>A CSS Triangle</figcaption></figure><p></p><p>Si tú deseas tener un triángulo/flecha apuntando en otra dirección Puede cambiar los valores del borde correspondientes a que lado que desea que sea visible. O puede rotar el elemento con la propiedad <em><em>transform</em> </em>si desea ser realmente elegante.</p><pre><code class="language-css"> #triangle {
     width: 0;
     height: 0;
     border-top: 40px solid transparent;
     border-right: 80px solid lightblue;
     border-bottom: 40px solid transparent;
 }</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/01/triangle2.png" class="kg-image" alt="triangle2" width="600" height="400" loading="lazy"><figcaption>Another CSS Triangle</figcaption></figure><p>Muy bien- eso fue una introducción a las formas básicas con CSS. Hay probablemente una cantidad infinita de formas que puedes pensar en crear. Estos son solamente fundamentos, pero con un poco de creatividad y determinación tú puedes lograr mucho con solo propiedades básicas de CSS.</p><p>En algunos casos, con figuras más avanzadas, también es buena idea usar los pseudo selectores :after y :before. Esto está fuera del alcance de este artículo, ya que mi intención es cubrir los básicos para que pueda comenzar.</p><h3 id="desventajas"><strong>Desventajas</strong></h3><p><strong>Hay una gran desventaja con el enfoque anterior.</strong> Por ejemplo, si tú quieres que tu texto fluya y se ajuste a la forma. Un div HTML con background bordes para componer la forma no lo permitirá. El texto no se ajustará y fluirá alrededor de su forma. En su lugar, fluirá alrededor del div en sí (que es un cuadrado o un rectángulo).</p><p>Abajo hay una ilustración mostrando el triángulo y como el texto fluirá.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2020/01/textflow-bad.png" class="kg-image" alt="textflow-bad" width="600" height="400" loading="lazy"></figure><p>Por suerte tenemos algunas propiedades modernas de CSS para usar en su lugar.</p><h2 id="formas-css-la-otra-manera"><strong> Formas CSS- La otra manera</strong></h2><p>Estos días tenemos la propiedad llamada <strong>shape-outside</strong> para usar en CSS. Esta propiedad le permite definir una forma alrededor de la cual el texto se ajustara/fluirá.</p><p>Junto con esta propiedad tenemos algunas formas básicas:<br><br><strong><strong>inset()</strong></strong><br><strong><strong>circle()</strong></strong><br><strong><strong>ellipse()</strong></strong><br><strong><strong>polygon()</strong></strong></p><p><strong>Aquí hay un consejo</strong>: Puedes también usar la propiedad <strong>clip-path</strong>. Puedes crear la forma de la misma manera, pero no permitirá que el texto se ajuste alrededor de su forma como lo hace la forma anterior.</p><p>El elemento que vamos a aplicar la forma con la propiedad shape-outside tiene que ser flotante. También tiene que tener definido, width y height. <strong>¡Eso es muy importante saberlo!</strong></p><p> Puedes leer más acerca del porqué <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/shape-outside">aquí</a>. Abajo también hay un texto que he tomado del link provisto a developer.mozilla.org.</p><blockquote> La propiedad <code>shape-outside</code> es especificada usando valores de la lista de abajo, que define el area flotante para los elementos flotantes. El area flotante determina la forma alrededor de la cual se ajusta el contenido en inline(elementos flotantes).</blockquote><h3 id="inset-"><strong><strong>inset()</strong></strong></h3><p>El tipo inset() puede ser usado para crear un rectángulo/cuadrado con un desplazamiento opcional para el ajuste del texto. Le permite proporcionar valores sobre cuantos valores, sobre cuanto quiere ajustando el texto que se superponga las formas.</p><p>Puedes especificar el desplazamiento para que sea el mismo en todas las cuatro direcciones como esto: <strong>inset(20px). </strong>O puede ser individualmente colocada para cada dirección: <strong><strong>inset(20px 5px 30px 10px)</strong></strong>.</p><p>Puedes usar otras unidades también para colocar el desplazamiento, por ejemplo, porcentajes. Los valores corresponden como esto: <strong><strong>inset(top right bottom left)</strong></strong><em><em><strong><strong>.</strong></strong></em></em></p><p>Revisa el código de ejemplo abajo. He especificado los valores de "inset" sean 20px en la parte superior, 5px en la derecha, 30px en el fondo y 10px a la izquierda. Si quieres que tu texto valla al alrededor de tu cuadro en lugar puedes saltarlo usando inset() en todo. En lugar, establece el fondo en tu div y especificar el tamaño como siempre.</p><pre><code class="language-css"> #square {
     float: left;
     width: 100px;
     height: 100px;
     shape-outside: inset(20px 5px 30px 10px);
     background: lightblue;
 }</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/01/inset.png" class="kg-image" alt="inset" width="600" height="400" loading="lazy"><figcaption>The text is offset by the specified values. In this case 20px at top, 5px to the right, 30px at the bottom and 10 px to the left</figcaption></figure><p>También es posible dar el inset() un segundo valor que especifica el border-radius del inset. Como abajo:</p><pre><code class="language-css"> #square {
     float: left;
     width: 100px;
     height: 100px;
     shape-outside: inset(20px 5px 30px 10px round 50px);
     background: lightblue;
 }</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/01/inset2.png" class="kg-image" alt="inset2" width="600" height="400" loading="lazy"><figcaption>border-radius set to 50px on the inset</figcaption></figure><h3 id="circle-"><strong><strong>circle()</strong> </strong></h3><p>En este un círculo es creado usando la propiedad <strong>shape-outside. </strong>También tienes que aplicar un clip-path con la propiedad correspondiente para que el círculo se muestre.</p><p>La propiedad <strong>clip-path </strong>puede tomar los mismos valores como la propiedad shape-outside entonces podemos darle la forma estándar <strong>circle() </strong>que hemos usado para<strong> shape-outside.</strong> También, véase que he aplicado un margen 20px en el elemento de aquí para dar al texto algo de espacio.</p><pre><code class="language-css">#circle {
    float: left;
    width: 300px;
    height: 300px;
    margin: 20px;
    shape-outside: circle();
    clip-path: circle();
    background: lightblue;
}</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/01/circle-shape-margin-1.png" class="kg-image" alt="circle-shape-margin-1" width="600" height="400" loading="lazy"><figcaption>Text flows around the shape!</figcaption></figure><p>En el ejemplo de arriba, no especifique el radio del círculo. Esto es porque quería que fuera tan grande como es el div(300px). Si quieres especificar un tamaño diferente para el círculo puedes hacerlo.</p><p>El circle() toma dos valores. El primer valor es el radio y el segundo valor es la posición. Estos valores especificarán el centro del círculo.</p><p>En el ejemplo de abajo he establecido el radio a 50%. Entonces he cambiado el centro del círculo a un 30%. Note la palabra "at" se ha usado entre los valores, el radio y la posición.</p><p>También he especificado otro valor de posición en el clip-path. Esto recortará el círculo por la mitad a medida que mueva la posición a cero.</p><pre><code class="language-css"> #circle {
      float: left;
      width: 150px;
      height: 150px;
      margin: 20px;
      shape-outside: circle(50% at 30%);
      clip-path: circle(50% at 0%);
      background: lightblue;
    }</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2020/01/circle2.png" class="kg-image" alt="circle2" width="600" height="400" loading="lazy"></figure><h3 id="ellipse-"><strong><strong>ellipse()</strong></strong></h3><p>El eclipse trabaja de la misma forma que los círculos, excepto que crea un óvalo. Puedes definir ambos el valor de X y el valor de Y, como esto: <strong>ecllipse(25px 50px).</strong></p><p>Igual que el círculo, también toma el valor posición como el último valor.</p><pre><code class="language-css">   #ellipse {
      float: left;
      width: 150px;
      height: 150px;
      margin: 20px;
      shape-outside: ellipse(20% 50%);
      clip-path: ellipse(20% 50%);
      background: lightblue;
    }</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2020/01/ellipse.png" class="kg-image" alt="ellipse" width="600" height="400" loading="lazy"></figure><h3 id="polygon-"><strong><strong>polygon()</strong></strong></h3><p>Un polígono es una forma con diferentes vértices/coordenadas definidos. Abajo he creado una forma "T" la cual es la primera letra de mi nombre. He empezado por las coordenadas 0,0 y movido desde la izquierda a la derecha para crear la forma "T".</p><pre><code class="language-css">#polygon {
      float: left;
      width: 150px;
      height: 150px;
      margin: 0 20px;
      shape-outside: polygon(
        0 0,
        100% 0,
        100% 20%,
        60% 20%,
        60% 100%,
        40% 100%,
        40% 20%,
        0 20%
      );
      clip-path: polygon(
        0 0,
        100% 0,
        100% 20%,
        60% 20%,
        60% 100%,
        40% 100%,
        40% 20%,
        0 20%
      );
      background: lightblue;
    }</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2020/01/polygon_t.png" class="kg-image" alt="polygon_t" width="600" height="400" loading="lazy"></figure><h3 id="im-genes"><strong> Imágenes</strong></h3><p>También puedes usar imágenes con fondos transparentes para crear tu forma. Como esta redonda y hermosa luna de abajo.</p><p>Esta es una imagen .png con un fondo transparente.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2020/01/moon.png" class="kg-image" alt="moon" width="600" height="400" loading="lazy"></figure><pre><code class="language-html">&lt;img src="src/moon.png" id="moon" /&gt;</code></pre><pre><code class="language-css">#moon {
      float: left;
      width: 150px;
      height: 150px;
      shape-outside: url("./src/moon.png");
    }</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2020/01/moon2.png" class="kg-image" alt="moon2" width="600" height="400" loading="lazy"></figure><p></p><p>Y eso es todo. Gracias por leerlo.</p><h2 id="sobre-el-autor-de-este-art-culo">Sobre el autor de este artículo</h2><p>Mi nombre es Thomas Weibenfalk y soy un desarrollador de Suecia. Regularmente, creo tutoriales gratuitos en mi canal de YouTube. También hay algunos cursos premium en React y Gatsby. Siéntase libre de visitarme en estos enlaces:</p><p>Twitter — <a href="https://twitter.com/weibenfalk">@weibenfalk</a>,<br>Weibenfalk on <a href="https://www.youtube.com/c/weibenfalk">Youtube</a>,<br>Weibenfalk <a href="https://www.weibenfalk.com/">Courses Website</a>.<br></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Como remover imágenes y contenedores en Docker ]]>
                </title>
                <description>
                    <![CDATA[ Artículo original: How to Remove Images and Containers in Docker [https://www.freecodecamp.org/news/how-to-remove-images-in-docker/] Traducido y adaptado por: Sil Zubikarai [/espanol/news/author/sil/] Docker rmi docker rmi remueve imágenes por su  ID. Para remover la imagen, primero necesitas una lista de todas las imágenes para obtener las IDs de imagen, nombre de la imagen, y ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/como-remover-imagenes-y-contenedores-en-docker/</link>
                <guid isPermaLink="false">6294d419d7f32e088af5e30f</guid>
                
                    <category>
                        <![CDATA[ docker ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Sil Zubikarai ]]>
                </dc:creator>
                <pubDate>Sat, 11 Jun 2022 17:47:52 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2022/06/5f9c9e04740569d1a4ca3ae5.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>Artículo original</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong>:</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong> <a href="https://www.freecodecamp.org/news/how-to-remove-images-in-docker/"><strong>How to Remove Images and Containers in Docker</strong> </a></strong><br><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>Traducido y adaptado por</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong>:</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong> </strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong><a href="https://www.freecodecamp.org/espanol/news/author/sil/">Sil Zubikarai</a></p><h2 id="docker-rmi"><strong><strong><strong><strong>Docker rmi</strong></strong></strong></strong></h2><p><code>docker rmi</code> remueve imágenes por su &nbsp;ID.</p><p>Para remover la imagen, primero necesitas una lista de todas las imágenes para obtener las IDs de imagen, nombre de la imagen, y otros detalles. Ejecutando un simple comando <code>docker imagenes -a</code> &nbsp;o &nbsp;<code>docker imagenes</code>.</p><p>Después de eso asegúrate que imagen quieres remover, para hacer eso ejecuta este simple comando <code>docker rmi &lt;tu-imagen-id&gt;</code>. Luego puedes confirmar que la imagen se ha eliminado o no, enumerando todas las imágenes y verificando.</p><h3 id="eliminar-m-ltiples-im-genes"><strong>Eliminar múltiples imágenes</strong></h3><p>Hay una forma para eliminar más de una imagen al mismo tiempo, cuando quieras eliminar varias imágenes específicas. Entonces para hacer esto primero obtén los IDs de la imagen simplemente enlistando las imágenes y luego ejecutando el simple comando a continuación.</p><p><code>docker rmi &lt;tu-imagen-id&gt; &lt;tu-imagen-id&gt; ...</code></p><p>Escribe los IDs de la imagen en el comando seguido de los espacios entre ellos.</p><h3 id="elimina-todas-las-im-genes-de-una-vez-"><strong>Elimina todas las imágenes de una vez.</strong></h3><p>Para eliminar todas las imágenes hay un comando simple para hacer eso. <code>docker rmi $(docker imagenes -q)</code></p><p>En el comando de arriba, solo hay dos comandos, el primero se ejecuta en la &nbsp;<code>$()</code> es la sintaxis de shell y devuelve los resultados independientemente de lo que se ejecute en la sintaxis. Entonces en este <code>-q- es una opción para proporcionar al retunr las unicas IDs,</code> $() regresa los resultados del IDs de la imagen y luego <code>docker rmi</code> remueve todas las imágenes.</p><h2 id="docker-rm"><strong><strong><strong><strong>Docker rm</strong></strong></strong></strong></h2><p> <code>docker rm</code> remueve contenedores por su nombre o ID.</p><p> Cuando tienes contenedores Docker ejecutándose, primero necesitas detenerlos antes de borrarlos.</p><ul><li>Detén todos los contenedores ejecutándose: <code>docker stop $(docker ps -a -q)</code> </li><li>Elimina todos los contenedores detenidos: <code>docker rm $(docker ps -a -q)</code></li></ul><h3 id="eliminar-m-ltiples-contenedores"><strong><strong>Eliminar múltiples contenedores</strong></strong></h3><p>Puedes detener y eliminar múltiples contenedores pasando los comando una lista de los contenedores que quieres eliminar. La sintaxis shell <code>$()</code> regresa los resultados de cualquiera que es ejecutado dentro de los corchetes. Entonces puedes crear tu lista de contenedores dentro de estos para pasar a los comandos <code>stop</code> y <code>rm</code>.</p><h3 id="aqu-hay-un-desglose-de-docker-ps-a-q"><strong> Aquí hay un desglose de docker ps -a -q</strong></h3><ul><li><code>docker ps</code> &nbsp;lista de contenedores</li><li><code>-a</code> &nbsp;la opción para enlistar todos los contenedores, inclusive los detenidos. Sin esto, de forma predeterminada solo se numeran los contenedores en ejecución.</li><li><code>-q</code> la opción silenciosa para proporcionar solo el Id del contenedor, en lugar de toda la tabla de información sobre los contenedores.</li></ul> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Git Fetch vs Pull ¿Cuál es la diferencia entre los comandos Git Fetch y Git Pull? ]]>
                </title>
                <description>
                    <![CDATA[ Artículo original: Git Fetch vs Pull: What's the Difference Between the Git Fetch and Git Pull Commands? [https://www.freecodecamp.org/news/git-fetch-vs-pull/]  Traducido y adaptado por: Sil Zubikarai [/espanol/news/author/sil/] Git pull y fetch son dos comandos que regularmente son usados por los usuarios de Git. Veamos la diferencia entre estos dos comandos. Por ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/git-fetch-vs-pull-cual-es-la-diferencia-entre-los-comandos-git-fetch-y-git-pull-2/</link>
                <guid isPermaLink="false">6286a5ea17d14108aa145890</guid>
                
                    <category>
                        <![CDATA[ Git ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Sil Zubikarai ]]>
                </dc:creator>
                <pubDate>Mon, 30 May 2022 04:09:25 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2022/05/5f9c9e70740569d1a4ca3d14.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>Artículo original</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong>:</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong> <a href="https://www.freecodecamp.org/news/git-fetch-vs-pull/">Git Fetch vs Pull: What's the Difference Between the Git Fetch and Git Pull Commands?</a> </strong><br><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>Traducido y adaptado por</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong>:</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong> </strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong><a href="https://www.freecodecamp.org/espanol/news/author/sil/">Sil Zubikarai</a></p><p>Git <code>pull</code> y <code>fetch</code> son dos comandos que regularmente son usados por los usuarios de Git. Veamos la diferencia entre estos dos comandos.</p><p>Por el bien del contexto, vale la pena recordar que probablemente trabajemos en un repositorio clon. ¿Qué es un clon? Es simplemente un duplicado de otro repositorio. Es básicamente el tener tu propia copia del código fuente de otra persona.</p><p>Con eso, dicho, para mantener tu clon actualizado con cualquier cambio que se haya aplicado al original, necesitaras traerlos a tu clon.</p><p>Ahí es donde <code>fetch</code> y <code>pull</code> &nbsp;entran.</p><p><code>git fetch</code> es el comando que dice a su local git que recupere la información de metadatos más reciente del original(pero no realiza ninguna transferencia de archivo. Es más como simplemente verificar si hay algún cambio disponible).</p><p><code>git pull</code> por otro lado, hace eso Y trae (una copia) de esos cambios de un repositorio remoto.</p><p>Por ejemplo:</p><pre><code class="language-text">git pull origin ankur bugfix</code></pre><p>La conclusión es tener en cuenta que generalmente hay al menos tres copias de un proyecto en su estación de trabajo.</p><ul><li> Una copia de tu propio repositorio con su propio historia de commit (el ya guardado, por así decirlo).</li><li> La segunda copia es su copia de trabajo donde está editando y construyendo(aún no comprometido con su repositorio).</li><li>La tercera copia es tu copia local "cached" de un repositorio remoto(probablemente el original de donde has clonado el tuyo)</li></ul><p>Puedes usar <code>git fetch</code> para conocer los cambios realizados en un repo/rama remota desde tú última pull. Esto es útil para permitir la comprobación antes de hacer el actual pull, lo que podría cambiar los archivos de tu actual rama y la copia de trabajo(y potencialmente perder sus cambios, etc.).</p><pre><code class="language-text">git fetch    
git diff ...origin</code></pre> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Como iniciar la prueba unitaria de tu código JavaScript ]]>
                </title>
                <description>
                    <![CDATA[ Artículo original escrito por: Ondrej Polesny [https://www.freecodecamp.org/news/author/ondrej/]  Artículo original: How to Start Unit Testing Your JavaScript Code [https://www.freecodecamp.org/news/how-to-start-unit-testing-javascript/]  Traducido y adaptado por: Sil Zubikarai [/espanol/news/author/sil/] Todos sabemos que debemos escribir pruebas unitarias. Pero, es difícil saber donde comenzar y cuanto tiempo debemos dedicar a probar comparado a la ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/como-iniciar-la-prueba-unitaria-de-tu-codigo-javascript/</link>
                <guid isPermaLink="false">624f00b09a87f708bdd10885</guid>
                
                    <category>
                        <![CDATA[ pruebas unitarias ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Sil Zubikarai ]]>
                </dc:creator>
                <pubDate>Sun, 15 May 2022 19:10:02 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2022/05/ferenc-almasi-EWLHA4T-mso-unsplash-1.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>Artículo original escrito por</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong>:</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong> </strong><a href="https://www.freecodecamp.org/news/author/ondrej/">Ondrej Polesny</a> <br><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>Artículo original</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong>:</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong> </strong><a href="https://www.freecodecamp.org/news/how-to-start-unit-testing-javascript/">How to Start Unit Testing Your JavaScript Code</a><strong> </strong><br><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>Traducido y adaptado por</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong>:</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong> </strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong><a href="https://www.freecodecamp.org/espanol/news/author/sil/">Sil Zubikarai</a></p><p>Todos sabemos que debemos escribir pruebas unitarias. Pero, es difícil saber donde comenzar y cuanto tiempo debemos dedicar a probar comparado a la implementación actual. Entonces ¿dónde comenzar? ¿Y se trata solo de probar el código o las pruebas unitarias tienen otros beneficios?</p><p>En este artículo, vamos a explicar los diferentes tipos de pruebas, y que beneficios las pruebas unitarias traen a los equipos de desarrolladores. Mostraré Jest, un marco de pruebas de JavaScript.</p><h2 id="diferentes-tipos-de-pruebas-"><strong>Diferentes tipos de pruebas.</strong></h2><p>Antes de sumergirnos en los detalles de las pruebas unitarias. Quiero &nbsp;hacer un recorrido rápido a los diferentes tipos de pruebas. A menudo hay cierta confusión &nbsp;a su alrededor y no estoy sorprendido. A menudo la línea entre ellos es bastante delgada.</p><h3 id="pruebas-unitarias"><strong>Pruebas Unitarias</strong></h3><p>Las pruebas unitarias solo prueban una sola parte de tu implementación. Una unidad. Sin dependencias, ni integraciones, ni detalles del framework. Son como un método que regresa un link en un lenguaje específico:</p><pre><code class="language-js">export function getAboutUsLink(language){
  switch (language.toLowerCase()){
    case englishCode.toLowerCase():
      return '/about-us';
    case spanishCode.toLowerCase():
      return '/acerca-de';
  }
  return '';
}</code></pre><h3 id="pruebas-de-integraci-n"><strong>Pruebas de integración</strong></h3><p>En cierto punto, tu código se comunica con una base de datos, el sistema de archivos u otro tercero. Incluso podría ser otro módulo en tu aplicación.</p><p>Esa pieza de implementación debe ser probada por las pruebas de integrador. Por lo general, tienen una configuración más complicada que implica preparar entornos de prueba, inicializando dependencias, etc.</p><h3 id="pruebas-funcionales"><strong>Pruebas Funcionales</strong></h3><p>Las pruebas unitarias y las pruebas de integración te dan la confianza que tu aplicación trabaja. Las pruebas Funcionales ven a la app &nbsp;desde el punto de vista del usuario y prueba que el sistema trabaja como es esperado.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2020/03/presentation.jpg" class="kg-image" alt="presentation" width="600" height="400" loading="lazy"></figure><p>En el diagrama de arriba, viste que las pruebas unitarias forman la gran base del conjunto de pruebas de aplicación. Por lo general, son pequeños, hay muchos de ellos, y sé ejecutados automáticamente.</p><p>Entonces ahora vamos a ver las pruebas unitarias en mayor detalle.</p><h2 id="-por-qu-te-debes-molestarte-en-escribir-pruebas-unitarias">¿Por qué te debes molestarte en escribir pruebas unitarias?</h2><p>Siempre que pregunto a desarrolladores si escriben prueban unitarias para su aplicación, ellos siempre me dicen: &nbsp;"No tengo tiempo para ellas" o "No las necesito, yo sé cómo trabaja"</p><p>Entonces sonrío educadamente y les digo lo que quiero decirles. La pruebas unitarias no se tratan solo de pruebas. También te ayudan de otras maneras, para que puedas:</p><p><strong>Confía en que tu código funciona</strong>. ¿Cuándo fue la última vez que cometiste un cambio en el código, &nbsp;fallo la compilación, y la mitad de tu aplicación dejo de trabajar? La mía fue la semana pasada.</p><p>Pero eso todavía está bien. El verdadero problema es cuando la compilación se realiza correctamente, el cambio es llevado, y tu aplicación empieza a ser inestable.</p><p>Cuando eso pasa, empiezas a perder confianza en tu código y eventualmente solo pedirás que tu aplicación funcione. Las pruebas unitarias te ayudarán a descubrir errores mucho antes y a ganar confianza.</p><p><strong>Tomar mejores decisiones de arquitectónicas.</strong> El código cambia, pero algunas decisiones sobre la plataforma, módulos, estructura, y otros cambios se necesitan hacer en tempranas etapas del proyecto.<br></p><p>Cuando empiezas a pensar acerca de las pruebas unitarias justo al inicio, le ayudara a estructurar mejor su código y lograr una separación adecuada de las preocupaciones. No tendrá la tentación de asignar múltiples responsabilidades a un solo bloques de código único, ya que serian una pesadilla para la prueba unitaria.</p><p><strong>Identifique la funcionalidad antes de codificar</strong>. Escribe la firma del método y comienza a implementarlo de inmediato. Ah, pero ¿qué debería suceder en caso de que un parámetro sea nulo? ¿Qué sucede si su valor está fuera del rango esperado o contiene demasiados caracteres? ¿Lanza una excepción o devuelve null?</p><p>Las pruebas unitarias ayudarán a descubrir todos los casos. Mira las preguntas otra vez y encontrarás exactamente que definirás tus casos de pruebas unitarias.</p><p>Estoy seguro de que hay muchos otros beneficios de escribir pruebas unitaria. Estos solo algunos de los que recuerdo por mi experiencia. Estos los he aprendido de la manera difícil.</p><h2 id="como-escribir-tu-primera-prueba-unitaria-de-javascript"><strong>Como escribir tu primera prueba unitaria de JavaScript</strong></h2><p>Pero vamos a regresar a JavaScript. Vamos a empezar con Jest, que es un marco de pruebas de JavaScript. Es una herramienta que permite realizar &nbsp;pruebas unitarias automáticas, proporciona &nbsp;cobertura de código, y nos permite simular fácilmente objetos. Jest también tiene una extensión para Visual Studio Code disponible <a href="https://marketplace.visualstudio.com/items?itemName=Orta.vscode">aquí</a>.</p><p>También hay otros marcos, si tú estás interesado, tú puedes revisarlos en <a href="https://www.browserstack.com/guide/top-javascript-testing-frameworks">este artículo</a>.</p><pre><code class="language-js">npm i jest --save-dev
</code></pre><p>Vamos a usar el método mencionado anteriormente <code>getAboutUsLink</code> como una implementación que queremos probar:</p><pre><code class="language-js">const englishCode = "en-US";
const spanishCode = "es-ES";
function getAboutUsLink(language){
    switch (language.toLowerCase()){
      case englishCode.toLowerCase():
        return '/about-us';
      case spanishCode.toLowerCase():
        return '/acerca-de';
    }
    return '';
}
module.exports = getAboutUsLink;
</code></pre><p>Puse esto en el archivo <code>index.js</code> . Podemos escribir pruebas en el mismo archivo, pero una buena práctica es separar las pruebas unitarias en archivo dedicado.</p><p>Los patrones de nomenclatura &nbsp;incluyen <code>{filename}.test.js</code> y <code>{filename}.spec.js</code>. Utilice el primero, <code>index.test.js</code>:</p><pre><code class="language-js">const getAboutUsLink = require("./index");
test("Returns about-us for english language", () =&gt; {
    expect(getAboutUsLink("en-US")).toBe("/about-us");
});
</code></pre><p>Primero, necesitamos importar la función que queremos probar. Cada prueba se definía como una invocación de &nbsp;función <code>test</code>. &nbsp;El primer parámetro es el nombre de la prueba para su referencia. El otro es una función de flecha donde llamamos a la función que queremos probar y especificamos que resultado esperamos. </p><p>En este caso, llamamos a la función <code>getAboutUsLink</code> con <code>en-US</code> como parámetro de lenguaje. Esperamos que el resultado sea <code>/about-us</code>.</p><p>Ahora podemos instalar el Jest CLI globalmente y ejecutar la prueba:</p><pre><code class="language-js">npm i jest-cli -g
jest
</code></pre><p>Si ve el error relacionado con la configuración, asegúrese de tener presente &nbsp;el archivo <code>package.json</code>. &nbsp;En ese caso que no lo hagas, genera uno usando <code>npm init</code>.</p><p>Debes ver algo como esto:</p><pre><code class="language-js"> PASS  ./index.test.js
  √ Returns about-us for english language (4ms)
  console.log index.js:15
    /about-us
Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        2.389s
</code></pre><p>¡Buen trabajo! Este fue la primera prueba unitaria simple JavaScript desde el principio al fin. Si tienes instalado la extensión Visual Studio Code, ejecutará la prueba automáticamente una vez salvado el archivo. Vamos a intentarlo extendiendo la prueba con esta línea:</p><pre><code class="language-js">expect(getAboutUsLink("cs-CZ")).toBe("/o-nas");
</code></pre><p>Una vez salvado el archivo, &nbsp;Jest te informará que la prueba ha fallado. Esto te ayuda a descubrir potenciales problemas, inclusive antes de cometer un cambio.</p><h2 id="probando-funcionalidad-avansada-y-servicios-de-simulaci-n"><strong>Probando funcionalidad avansada y servicios de simulación</strong></h2><p>En la vida real, los códigos &nbsp;de idioma para el método getAboutUsLink no serían constantes en el mismo archivo. Su valor se usa típicamente en todo el proyecto, por lo que se definirían en su propio módulo y se importarían a todas las funciones que las usan.</p><pre><code class="language-js">import { englishCode, spanishCode } from './LanguageCodes'
</code></pre><p>Puedes importar estas constantes dentro de la prueba de la misma manera. Pero la situación se complicaría si trabajas con objetos en lugar de simples constantes. Echa un vistazo a este método:</p><pre><code class="language-js">import { UserStore } from './UserStore'
function getUserDisplayName(){
  const user = UserStore.getUser(userId);
  return `${user.LastName}, ${user.FirstName}`;
}
</code></pre><p>Este método utiliza &nbsp;<code>UserStore</code> importado:</p><pre><code class="language-js">class User {
    getUser(userId){
        // logic to get data from a database
    }
    setUser(user){
        // logic to store data in a database
    }
}
let UserStore = new User();
export { UserStore }
</code></pre><p>En orden, para hacer una prueba unitaria de este método, necesitamos simular <code>UserStore</code>. Una simulación es un substituto del objeto original. Nos permite separar dependencias y datos reales de los métodos probados implementados justo como los dummies ayudaban a las pruebas de choquen de autos en lugar de personas reales.</p><p>Si no usamos el simulacro, estaríamos probando tanto esta función como la tienda. Eso sería una prueba de integración y probablemente tendríamos que simular una base de datos utilizados. </p><h3 id="simulaci-n-de-servicios">Simulación de servicios</h3><p>Para simular objetos, puede proporcionar una función de simulación o una simulación manual. Me centraré en esto último, ya que tengo un caso de uso simple y llanamente. Pero siéntase libre de <a href="https://jestjs.io/docs/en/mock-functions.html">echar un vistazo a otras posibilidades de simulación que Jest ofrece</a>.</p><pre><code class="language-js">jest.mock('./UserStore', () =&gt; ({
    UserStore: ({
        getUser: jest.fn().mockImplementation(arg =&gt; ({
            FirstName: 'Ondrej',
            LastName: 'Polesny'
        })),
        setUser: jest.fn()
    })
}));
</code></pre><p>Primero, necesitamos especificaciones que hemos simulado- el módulo <code>./UserStore</code>. &nbsp;Siguiente, necesitamos regresar la simulación que contiene todos los objetos exportados del módulo.</p><p>En esta muestra, es únicamente el objeto <code>User</code> nombrado <code>UserStore</code> &nbsp;con la función <code>getUser</code>. Pero con las implementaciones reales, la simulación podría ser mucho más larga. &nbsp;Cualquier función que no &nbsp;importe &nbsp;el resultado de la prueba unitaria puede ser fácilmente simulada con <code>jest.fn()</code>.</p><p>La prueba unitaria para la función <code>getUserDisplayName</code> es simular a la que hemos creado antes:</p><pre><code class="language-js">test("Returns display name", () =&gt; {
    expect(getUserDisplayName(1)).toBe("Polesny, Ondrej");
})
</code></pre><p>Tan pronto como he salvado el archivo, Jest me dice que ha pasado dos pruebas. Si tú estás ejecutando las pruebas manualmente, &nbsp;hazlo ahora y asegúrate que tienen el mismo resultado.</p><h3 id="informe-de-cobertura-de-c-digo">Informe de cobertura de código</h3><p>Ahora que sabemos como probar el código JavaScript, es bueno cubrir la mayor cantidad de código como sea posible con pruebas. Y eso es difícil de &nbsp;hacer. Al final, solo somos personas. Queremos que nuestras tareas y las pruebas unitarias generalmente producen una carga de trabajo no deseada que tendemos a pasar por alto. La cobertura de código es una herramienta que nos ayuda a combatir eso.</p><p>La cobertura de código te dirá que tan grande es la proporción de tu código, es cubierta por las pruebas unitarias. Tomemos, por ejemplo, mi primera prueba de unitaria comprobando la función <code>getAboutUsLink</code>:</p><pre><code class="language-js">test("Returns about-us for english language", () =&gt; {
   expect(getAboutUsLink("en-US")).toBe("/about-us");
});
</code></pre><p>Revisa el link en inglés, pero la versión en Español no se ha probado. La cobertura de código es 50%. La otra prueba unitaria es verificar la función <code>getDisplayName</code> a fondo y su cobertura de código es el 100%. En conjunto, la cobertura total de código es del 67%. Tenemos &nbsp;3 casos de uso para probar, pero nuestras pruebas solo cubren dos de ellas.</p><p>Para ver el reporte de cobertura de código, escribe el siguiente comando en la terminal:</p><pre><code class="language-js">jest --coverage
</code></pre><p>O, si tú estás usando Visual Studio Code con la extensión Jest, tú puedes ejecutar el comando (CTRL+SHIFT+P) <em><em>Jest: Toggle Coverage Overlay</em>. </em>Le mostrará justo en la &nbsp;implementación que líneas de código no están cubiertas por la prueba.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2020/03/code-coverage-inline.jpg" class="kg-image" alt="code-coverage-inline" width="600" height="400" loading="lazy"></figure><p>Ejecutando la revisión de cobertura, Jest también creará un reporte HTML. Encuéntralo en la carpeta del proyecto en <code>coverage/lcov-report/index.html</code>.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2020/03/code-coverage.jpg" class="kg-image" alt="code-coverage" width="600" height="400" loading="lazy"></figure><p>Ahora, no tengo que mencionar que debe esforzarse por obtener una cobertura de código del 100%, ¿verdad? :-)</p><h2 id="en-resumen"><strong>En resumen</strong></h2><p>En este artículo, muestra como empezar con las pruebas unitarias en JavaScript. Si bien es bueno que su cobertura de código brille al 100% en el informe, en realidad, no siempre es posible(significativamente) llegar ahí. El objetivo es permitir que las pruebas unitarias te ayuden a mantener tu código y de asegurarte de que siempre funcione como es previsto. Te permiten:</p><ul><li> claramente, define la implementación de los requerimientos.</li><li>diseñar mejor su código y separación de preocupaciones</li><li>descubrir los problemas que puede introducir con tus nuevos commits.</li><li> y darte la confianza de que tu código trabaja.</li></ul><p>El mejor lugar para empezar es la página &nbsp;<a href="https://jestjs.io/docs/en/getting-started">Getting started</a> en la documentación Jest así tú puedes probar estas prácticas por ti mismo.</p><p>¿Tienes tu propia experiencia con pruebas de código? Me encantaría escucharlo, déjamelo saber en twitter o únete a alguno de mis streams Twitch.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Tres formas de factorizar un numero en JavaScript ]]>
                </title>
                <description>
                    <![CDATA[ Artículo original escrito por: Sonya Moisset [https://www.freecodecamp.org/news/author/sonya/] Artículo original: Three Ways to Factorialize a Number in JavaScript [https://www.freecodecamp.org/news/how-to-factorialize-a-number-in-javascript-9263c89a4b38/] Traducido y adaptado por: Sil Zubikarai [/espanol/news/author/sil/] Este artículo está basado en freeCodeCamp Programación de Algoritmos Básicos "Factoriza un  número". En matemáticas, el factorial de un entero no negativo n puede ser ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/tres-formas-de-factorizar-un-numero-en-javascript/</link>
                <guid isPermaLink="false">6247224df3332c08559e7d3b</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Sil Zubikarai ]]>
                </dc:creator>
                <pubDate>Mon, 11 Apr 2022 01:28:43 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2022/04/1-uKMWUxeIBoqzbgBNRHiyjQ.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>Artículo original escrito por</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong>:</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong> </strong></strong></strong></strong></strong></strong></strong></strong><a href="https://www.freecodecamp.org/news/author/sonya/">Sonya Moisset</a><br><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>Artículo original</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong>:</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong> </strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong><a href="https://www.freecodecamp.org/news/how-to-factorialize-a-number-in-javascript-9263c89a4b38/">Three Ways to Factorialize a Number in JavaScript</a></strong><br><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>Traducido y adaptado por</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong>:</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong> </strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong><a href="https://www.freecodecamp.org/espanol/news/author/sil/">Sil Zubikarai</a></p><p><em>Este artículo está basado en freeCodeCamp Programación de Algoritmos Básicos "Factoriza un &nbsp;número".</em></p><p><strong>En matemáticas</strong>, el factorial de un entero no negativo n puede ser un algoritmo complicado. En este artículo, voy a explicar tres enfoques, primero con la función recursiva, segundo usando el bucle while y tercero usando el bucle for.</p><p>Ya hemos visto el enfoque de recursión en la cadena de texto en el artículo previo, <a href="https://www.freecodecamp.org/espanol/news/tres-formas-de-invertir-una-cadena-en-javascript/">¿Como invertir una cadena en JavaScript en tres diferentes formas?</a> Esta vez vamos a aplicar el mismo concepto en un número.</p><h4 id="desaf-o-del-algoritmo"><strong> Desafío del algoritmo</strong></h4><blockquote> Devuelve el factorial del entero proporcionado.<br><br> Si el entero es representado con la letra n, el producto factorial de todos los enteros positivos menores o iguales a n.<br><br><strong> </strong>Los factoriales regularmente son representados &nbsp;con la abreviatura <strong>n!</strong><br><br>Por ejemplo: <strong><strong>5! = 1 * 2 * 3 * 4 * 5 = 120</strong></strong></blockquote><pre><code class="language-js">
function factorialize(num) {
  return num;
}
factorialize(5);</code></pre><h4 id="casos-de-prueba-proporcionados"><strong><em> Casos de prueba proporcionados</em></strong></h4><ul><li><strong><strong><em><em>factorialize(0)</em></em></strong></strong> Debe regresar 1</li><li><strong><strong><em><em>factorialize(5)</em></em></strong></strong> &nbsp;Debe regresar 120</li><li><strong><strong><em><em>factorialize(10)</em></em></strong></strong> &nbsp;Debe regresar 3628800</li><li><strong><strong><em><em>factorialize(20)</em></em></strong></strong> &nbsp;Debe regresar 2432902008176640000</li></ul><h3 id="-de-qu-se-trata-factorizar-un-n-mero"><strong> ¿De qué se trata factorizar un número?</strong></h3><p>Cuando tú factorizas un número, tú estás multiplicando ese número por cada &nbsp;número consecutivo menos uno.</p><p>Si tu número es 5, deberías tener:</p><pre><code>5! = 5 * 4 * 3 * 2 * 1</code></pre><p> El patrón deberá ser:</p><pre><code>0! = 1
1! = 1
2! = 2 * 1
3! = 3 * 2 * 1
4! = 4 * 3 * 2 * 1
5! = 5 * 4 * 3 * 2 * 1</code></pre><h3 id="1-factorizar-un-n-mero-con-recursi-n"><strong><strong>1. </strong> Factorizar un número con recursión</strong></h3><pre><code class="language-js">function factorialize(num) {
  // Si el número es menor que 0, rechacelo. 
  if (num &lt; 0) 
        return -1;
    
  // Si el número es 0, su factorial es 1.
  else if (num == 0) 
      return 1;
    
  // De otra forma, llama al procedimiento de nuevo
    else {
        return (num * factorialize(num - 1));
        /* 
   Primera parte del metodo recursion
        Necesitas recordar que no solo tendras solo una llamada, tendras varias llamadas anidadas.
        
        cada llamada: num === "?"        	         num * factorialize(num - 1)
        1ª llamada – factorialize(5) devolvera    5  * factorialize(5 - 1) // factorialize(4)
        2ª llamada – factorialize(4) devolvera    4  * factorialize(4 - 1) // factorialize(3)
        3ª llamada – factorialize(3) devolvera    3  * factorialize(3 - 1) // factorialize(2)
        4ª llamada – factorialize(2) devolvera    2  * factorialize(2 - 1) // factorialize(1)
        5ª llamada – factorialize(1) devolvera    1  * factorialize(1 - 1) // factorialize(0)
        
         Segunda parte del metodo recursion
     Si el metodo toca la condicion if, y regresa 1 cuando el numero se multiplica asi mismo.
         La funcion regresara con el valor total
        
        5ª la llamada devolvera (5 * (5 - 1))     // num = 5 * 4
        4ª la llamada devolvera (20 * (4 - 1))    // num = 20 * 3
        3ª la llamada devolvera (60 * (3 - 1))    // num = 60 * 2
        2ª la llamada devolvera (120 * (2 - 1))   // num = 120 * 1
        1ª la llamada devolvera (120)             // num = 120
        
        Si sumamonos todas las llamadas en una linea, tenemos
        (5 * (5 - 1) * (4 - 1) * (3 - 1) * (2 - 1)) = 5 * 4 * 3 * 2 * 1 = 120
        */
    }
}
factorialize(5);</code></pre><p><strong>Sin comentarios:</strong></p><pre><code class="language-js">function factorialize(num) {
  if (num &lt; 0) 
        return -1;
  else if (num == 0) 
      return 1;
  else {
      return (num * factorialize(num - 1));
  }
}
factorialize(5);</code></pre><h3 id="2-factorizar-un-n-mero-con-el-bucle-while"><strong><strong>2. </strong> Factorizar un número con el bucle WHILE</strong></h3><pre><code class="language-js">function factorialize(num) {
  // Paso 1. Crea una variable resultado que guarda num
  var result = num;
   
  // Si num = 0 O num = 1, el factorial devolverá 1
  if (num === 0 || num === 1) 
    return 1; 
 
  // Paso 2. Crea un bucle WHILE
  while (num &gt; 1) { 
    num--; // decrementation by 1 at each iteration
    result = result * num; // or result *= num; 
    /* 
                    num           num--      var result      result *= num         
    1ª iteración:   5             4            5             20 = 5 * 4      
    2ª iteración:   4             3           20             60 = 20 * 3
    3ª iteración:   3             2           60            120 = 60 * 2
    4ª iteración:   2             1          120            120 = 120 * 1
    5ª iteración:   1             0          120
    Fin del bucle WHILE
    */
  }
     
  // Paso 3. Regresa el factorialdel integral dado
  return result; // 120
}
factorialize(5);</code></pre><h4 id="sin-comentarios-"><strong>Sin comentarios:</strong></h4><pre><code class="language-js">function factorialize(num) {
  var result = num;
  if (num === 0 || num === 1) 
    return 1; 
  while (num &gt; 1) { 
    num--;
    result *= num;
  }
  return result;
}
factorialize(5);</code></pre><h3 id="3-factorizar-un-n-mero-con-el-bucle-for"><strong><strong>3. </strong>Factorizar un número con el bucle FOR</strong></h3><pre><code class="language-js">function factorialize(num) {
  // Si num = 0 OR num = 1, el factorial regresa 1
  if (num === 0 || num === 1)
    return 1;
  
  // Empezamos el bucle FOR con i = 4
  //Decremento i después de cada iteración
  for (var i = num - 1; i &gt;= 1; i--) {
    //Guardamos el valor de num en cada iteración
    num = num * i; // o num *= i;
    /* 
                    num      var i = num - 1       num *= i         i--       i &gt;= 1?
    1ª iteración:   5           4 = 5 - 1         20 = 5 * 4        3          yes   
    2ª iteración:  20           3 = 4 - 1         60 = 20 * 3       2          yes
    3ª iteración:  60           2 = 3 - 1        120 = 60 * 2       1          yes  
    4ª iteración: 120           1 = 2 - 1        120 = 120 * 1      0          no             
    5ª iteración: 120               0                120
    Fin del bucle FOR 
    */
  }
  return num; //120
}
factorialize(5);</code></pre><p><strong>Sin comentarios:</strong></p><pre><code class="language-js">function factorialize(num) {
  if (num === 0 || num === 1)
    return 1;
  for (var i = num - 1; i &gt;= 1; i--) {
    num *= i;
  }
  return num;
}
factorialize(5);</code></pre><p>Espero que hayas encontrado esto útil.</p><p>Puedes seguirme en <a href="https://medium.com/@sonya.moisse"><strong><strong>Medium</strong></strong></a><strong><strong>, </strong></strong><a href="https://twitter.com/SonyaMoisset"><strong><strong>Twitter</strong></strong></a><strong><strong>, </strong></strong><a href="https://github.com/SonyaMoisset"><strong><strong>Github</strong></strong></a><strong><strong>, </strong></strong>y<strong><strong> </strong></strong><a href="https://www.linkedin.com/in/sonyamoisset"><strong><strong>LinkedIn</strong></strong></a></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Validación de datos: Cómo verificar la entrada del usuario en formularios HTML con código JavaScript de ejemplo. ]]>
                </title>
                <description>
                    <![CDATA[ Artículo original escrito por: Shruti Kapoor [https://www.freecodecamp.org/news/author/shrutikapoor08/] Artículo original: Data Validation – How to Check User Input on HTML Forms with Example JavaScript Code [https://www.freecodecamp.org/news/form-validation-with-html5-and-javascript/] Traducido y adaptado por: Sil Zubikarai [/espanol/news/author/sil/] Los formularios son omnipresentes en las aplicaciones web. Algunas aplicaciones usan formularios para recolectar datos para registrar  usuarios ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/validacion-de-data-como-revisar-la-entrada-del-usuario-en-formularios-html-con-ejemplo/</link>
                <guid isPermaLink="false">6230f7be8a4d8908bdad02ef</guid>
                
                    <category>
                        <![CDATA[ Validaciones de Formularios ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Sil Zubikarai ]]>
                </dc:creator>
                <pubDate>Mon, 28 Mar 2022 01:23:14 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2022/03/6003768298be260817e4aadc.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>Artículo original escrito por</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong>:</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong> </strong></strong></strong></strong></strong></strong></strong></strong><a href="https://www.freecodecamp.org/news/author/shrutikapoor08/">Shruti Kapoor</a><br><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>Artículo original</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong>:</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong> </strong><a href="https://www.freecodecamp.org/news/form-validation-with-html5-and-javascript/">Data Validation – How to Check User Input on HTML Forms with Example JavaScript Code</a><br><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>Traducido y adaptado por</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong>:</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong> </strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong><a href="https://www.freecodecamp.org/espanol/news/author/sil/">Sil Zubikarai</a></p><p>Los formularios son omnipresentes en las aplicaciones web. Algunas aplicaciones usan formularios para recolectar datos para registrar &nbsp;usuarios y proporcionar una dirección de correo electrónico. Otros los usan para realizar &nbsp;transacciones en línea electrónicas para facilitar una experiencia de compra.</p><p>Puedes usar algunos formularios web para solicitar &nbsp;un &nbsp;préstamo de automóvil nuevo, mientras que usaras otros para pedir una pizza para la cena. Por lo tanto, es importante que los datos recolectados de estos formularios hayan sido limpiados, estén en el &nbsp;formato correcto, y carezcan de cualquier código malicioso. Este proceso es llamado validación de formularios.</p><p>Necesitamos validación de formulario en cualquier momento que estamos aceptando una entrada de un usuario. Debemos asegurarnos que los datos estén ingresados en el formato correcto, se encuentre dentro del rango válido de datos (como para los campos de datos de fechas), y no contengan código malicioso que pueda conducir a inyecciones SQL. Mal formados o datos faltantes que puedan causar que la API genere errores. </p><h2 id="-cu-les-son-los-diferentes-tipos-de-validaciones">¿Cuáles son los diferentes tipos de validaciones?</h2><p>La validación de formulario puede pasar en el lado del cliente y en el lado del servidor.</p><p>La validación del lado del cliente se produce mediante atributos HTML5 &nbsp;y del lado del cliente JavaScript.</p><p>Puedes haber notado que algunos formularios, &nbsp;tan pronto como ingresas un correo electrónico inválido, el formulario marca un error "Por favor ingresa un correo electrónico válido". &nbsp;Este tipo inmediato de validación usualmente es hecho por el lado del cliente vía JavaScript.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/04/form-validation-cc.gif" class="kg-image" alt="Validation error for incorrect credit card number" width="600" height="400" loading="lazy"></figure><p></p><p>En otros casos, tú puedes haber notado que cuando tú llenas un formulario e ingresas detalles como la tarjeta de crédito, este puede mostrar una pantalla de carga y luego mostrar un error "La tarjeta de crédito es inválida".</p><p>Aquí, el formulario hace una llamada a su código de lado del servidor, y regresa un error de validación después de realizar revisiones adicionales de tarjeta de crédito. Este caso de validación donde la llamada del lado del servidor &nbsp;es llamada validación del lado del servidor.</p><h2 id="-por-qu-los-datos-deben-ser-validados"><strong>¿Por qué los datos deben ser validados?</strong></h2><p></p><p>La validación es requerida en cualquier momento que aceptas datos del usuario. Esto puede incluir:</p><ol><li> Validar el formato de los campos como dirección de correo electrónico, número telefónico, &nbsp;código postal, nombre, contraseña.</li><li>Validar campos obligatorios.</li><li>Revisar los datos como cadenas de texto vs. números para campos como número de seguridad social.</li><li>Asegurar que el valor ingresado es un valor válido como país, datos y así.</li></ol><h2 id="como-configurar-la-validaci-n-del-lado-del-cliente"><strong>Como configurar la validación del lado del cliente</strong></h2><p>En el lado del cliente, la validación se puede llevar a cabo de dos maneras:</p><ol><li>Usando funcionalidad HTML5</li><li>Usando JavaScript</li></ol><h3 id="como-configurar-la-validaci-n-con-funcionalidad-html5"><strong>Como configurar la validación con funcionalidad HTML5</strong></h3><p>HTML5 &nbsp;provee un montón de atributos para ayudar con la validación de datos. Aquí hay algunos casos comunes de validación.</p><!--kg-card-begin: markdown--><ul>
<li>Crear campos requeridos usando <code>required</code></li>
<li>Limitar la longitud de los datos:
<ul>
<li><code>minlength</code>, <code>maxlength</code>: para datos de texto</li>
<li><code>min</code> y <code>max</code> para el valor máximo del tipo num</li>
</ul>
</li>
<li>Restringir el tipo de datos usando <code>type</code>:
<ul>
<li><code>&lt;input type="email" name="multiple&gt;</code></li>
</ul>
</li>
<li>Especificación de patrones de datos usando <code>pattern</code>:
<ul>
<li>Especifica un patrón de expresiones regulares que los datos ingresados deben coincidir</li>
</ul>
</li>
</ul>
<!--kg-card-end: markdown--><p>Cuando el valor de entrada coincide la validación HTML5, es asignado a una clase psuedo <code>:valid</code>, y <code>:invalid</code> si no lo hace.</p><p>Vamos a intentar un ejemplo:</p><pre><code class="language-html">&lt;form&gt;
&lt;label for="firstname primernombre"&gt; Nombre: &lt;/label&gt;
&lt;input type="text" name="firstname" id="firstname" required maxlength="45"&gt;
&lt;label for="lastname"&gt; Apellido: &lt;/label&gt;
&lt;input type="text" name="lastname" id="lastname" required maxlength="45"&gt;
&lt;button&gt;Submit&lt;/button&gt;
&lt;/form&gt;
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/04/form-validation-required.png" class="kg-image" alt="Client side form validation for required fields using HTML5 attributes" width="600" height="400" loading="lazy"></figure><p><a href="https://jsfiddle.net/58xc2qyj/">Enlace a JSFiddle</a> </p><p>Aquí tenemos dos campos requeridos: Primer Nombre y Apellido. Intenta este ejemplo en JSFidle. Si omites cualquiera de estos campos y presionas enviar, recibirás un mensaje, "Por favor llena este campo". Esta es la validación usando HTML5 &nbsp;incorporado.</p><h3 id="como-configurar-la-validaci-n-usando-javascript"><strong>Como configurar la validación usando JavaScript</strong></h3><p>Cuando implementamos la validación de formulario, hay algunas cosas que debemos considerar:</p><ol><li>¿Qué se define como datos "válidos"? Esto le ayuda a responder preguntas sobre el formato, la longitud, los campos obligatorios, y el tipo de datos.</li><li>¿Qué pasa cuando un dato inválido ingresa? Esto te ayudará a definir la experiencia del usuario de la validación - si desea mostrar un mensaje de error en línea o en la parte superior del formulario, ¿qué tan detallado debe de ser el mensaje de error, &nbsp;si el formulario debe omitirse de todos modos, debe de haber análisis para rastrear formatos inválidos o datos? Y así sucesivamente.</li></ol><p>Puedes realizar la validación de JavaScript en dos formas:</p><ol><li>Validación en línea usando JavaScript</li><li> API de validación de restricciones HTML5</li></ol><p><strong>Validación en línea mediante JavaScript</strong></p><pre><code class="language-html">&lt;form id="form"&gt;
  &lt;label for="firstname"&gt; Nombre* &lt;/label&gt;
  &lt;input type="text" name="firstname" id="firstname" /&gt;
  &lt;button id="submit"&gt;Submit&lt;/button&gt;

  &lt;span role="alert" id="nameError" aria-hidden="true"&gt;
    Por favor ingresa el nombre.
  &lt;/span&gt;
&lt;/form&gt;
</code></pre><pre><code class="language-javascript">const submit = document.getElementById("submit");

submit.addEventListener("click", validate);

function validate(e) {
  e.preventDefault();

  const firstNameField = document.getElementById("firstname");
  let valid = true;

  if (!firstNameField.value) {
    const nameError = document.getElementById("nameError");
    nameError.classList.add("visible");
    firstNameField.classList.add("invalid");
    nameError.setAttribute("aria-hidden", false);
    nameError.setAttribute("aria-invalid", true);
  }
  return valid;
}
</code></pre><pre><code class="language-css">#nameError {
  display: none;
  font-size: 0.8em;
}

#nameError.visible {
  display: block;
}

input.invalid {
  border-color: red;
}
</code></pre><p><a href="https://jsfiddle.net/0tq3e49w/4/">Enlace a JSFiddle</a></p><p>En este ejemplo, vamos a revisar los campos requeridos usando JavaScript. Si un campo requerido no está presente, usamos CSS para mostrar un mensaje de error.</p><p>Las etiquetas Aria sé modifican en consecuencia para mostrar un error. Usando CSS para mostrar/ocultar un error, estamos reduciendo el número de manipulaciones que necesitamos hacer en el DOM. El mensaje de error se proporciona en contexto, lo que hace que la experiencia del usuario sea intuitiva.</p><h3 id="api-de-validaci-n-de-restricciones-html5"><strong>API de validación de restricciones HTML5</strong></h3><p>Los atributos HTML <code>required</code> y <code>pattern</code> pueden ayudar a realizar una validación básica. Pero si requieres una validación más compleja o quieres proporcionar un mensaje de error detallado, puedes usar la API de validación de restricciones.</p><p>Algunos métodos provistos por esta API son:</p><ol><li><code>checkValidity</code></li><li><code>setCustomValidity</code></li><li><code>reportValidity</code></li></ol><p>Las siguientes propiedades son útiles:</p><ol><li><code>validity</code></li><li><code>validationMessage</code></li><li><code>willValidate</code></li></ol><p>En este ejemplo, vamos a validar utilizando métodos incorporados HTML5, como <code>required</code> y <code>length</code> &nbsp;junto con la API de validación de restricciones para proporcionar mensajes de error detallados.</p><pre><code class="language-html">&lt;form&gt;
&lt;label for="firstname"&gt; First Name: &lt;/label&gt;
&lt;input type="text" name="firstname" required id="firstname"&gt;
&lt;button&gt;Submit&lt;/button&gt;
&lt;/form&gt;
</code></pre><pre><code class="language-javascript">const nameField = document.querySelector("input");

nameField.addEventListener("input", () =&gt; {
  nameField.setCustomValidity("");
  nameField.checkValidity();
  console.log(nameField.checkValidity());
});

nameField.addEventListener("invalid", () =&gt; {
  nameField.setCustomValidity("Please fill in your First Name.");
});
</code></pre><p><a href="https://jsfiddle.net/xz2wjLck/1/">Enlace a JSFiddle</a></p><h2 id="no-olvides-la-validaci-n-del-lado-del-servidor"><strong>No olvides la validación del lado del servidor</strong></h2><p>La validación del lado del cliente no es la única revisión de validación que deberías hacer. Debes también validar los datos recibidos por el cliente en el código del lado el servidor para asegurar que los datos coincidan con lo que esperas que sea. </p><p>También se puede utilizar la validación del lado del servidor para realizar verificaciones de lógica empresarial que no deberían estar activas en el lado del cliente.</p><h2 id="mejores-pr-cticas-de-validaci-n-de-formularios"><strong>Mejores prácticas de validación de formularios</strong></h2><ol><li> Siempre ten una validación del lado del servidor, dado que maliciosos actores puede pasar la validación del lado del cliente.</li><li>Proporciona mensajes de error detallados en contexto con el campo que produjo el error.</li><li> Proporciona un ejemplo de que los datos deberían verse en caso de un mensaje de error, como - El email no coincide con el formato-<a href="mailto:test@example.com"> prueba@ejemplo.com"</a></li><li>Evita el uso de páginas de error individuales que impliquen una redirección. Esto es una mala experiencia para el usuario y fuerza al usuario a regresar a la página previa a corregir el formulario y perdiendo contexto.</li><li>Siempre marca los campos requeridos.</li></ol><h3></h3> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Dos formas de revisar palíndromos en JavaScript ]]>
                </title>
                <description>
                    <![CDATA[ Artículo original escrito por: Sonya Moisset [https://www.freecodecamp.org/news/author/sonya/] Artículo original: Two Ways to Check for Palindromes in JavaScript [https://www.freecodecamp.org/news/two-ways-to-check-for-palindromes-in-javascript-64fea8191fd7/] Traducido y adaptado por: Sil Zubikarai [/espanol/news/author/sil/]  Este artículo está basado en la Certificación de freeCodeCamp,  Algoritmos de JavaScript y Estructuras de Datos, del desafío "Comprobador de palíndromos" [https://www.fre ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/dos-formas-de-revisar-palindromos-en-javascript/</link>
                <guid isPermaLink="false">6220aca25e4d0b08bcc77c30</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Sil Zubikarai ]]>
                </dc:creator>
                <pubDate>Wed, 16 Mar 2022 03:23:29 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2022/03/1-gaAkSMf6J7cMTJCgQVX2Kg.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>Artículo original escrito por</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong>:</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong> </strong></strong></strong></strong></strong></strong></strong></strong><a href="https://www.freecodecamp.org/news/author/sonya/">Sonya Moisset</a><br><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>Artículo original</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong>:</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong> </strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong><a href="https://www.freecodecamp.org/news/two-ways-to-check-for-palindromes-in-javascript-64fea8191fd7/">Two Ways to Check for Palindromes in JavaScript</a><br><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>Traducido y adaptado por</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong>:</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong> </strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong><a href="https://www.freecodecamp.org/espanol/news/author/sil/">Sil Zubikarai</a></p><p><em> Este artículo está basado en la </em><a href="https://www.freecodecamp.org/espanol/learn/javascript-algorithms-and-data-structures/javascript-algorithms-and-data-structures-projects/palindrome-checker"><em>Certificación de freeCodeCamp, &nbsp;Algoritmos de JavaScript y Estructuras de Datos, del desafío "Comprobador de palíndromos</em>"</a><em>.</em></p><p><strong>Un palíndromo</strong> es una palabra, frase, número, u otra secuencia de caracteres que se lee de la misma forma hacia adelante que hacia atrás. La palabra "palíndromo" fue usada por primera vez por el dramaturgo Inglés <a href="https://en.wikipedia.org/wiki/Ben_Jonson">Ben Jonson</a> en el siglo 17, &nbsp;de las raíces griegas <em>palin</em> ("de nuevo") y <em>dromos </em>(camino, dirección). — fuente. <em>Wikipedia.</em></p><p>En este artículo, voy a explicar dos acercamientos, el primero construido con funciones y el segundo usando un bucle for.</p><h4 id="desaf-o-de-algoritmos"><strong>Desafío de Algoritmos</strong></h4><blockquote>Regresa verdadero si la cadena de texto es un palíndromo. De otra forma, regresa falso.<br><br>Un palíndromo es una palabra o enunciado que es escrito de la misma forma de adelante y al-revés, ignorando la puntuación, &nbsp;las mayúsculas, y el espaciado.<br><br> <strong>Nota</strong>. Vas a necesitar remover<strong> todos los caracteres no alfanuméricos &nbsp;</strong>(puntuación, espacios y símbolos) y convertir todo en minúsculas para comprobar por palíndromos.<br><br> Pasaremos la cadena de texto en varios formatos, como "racecar", "RaceCar", y "race CAR" entre otros.</blockquote><pre><code class="language-js">function palindrome(str) {
  return true;
}
palindrome("eye");</code></pre><p><strong>Casos de prueba proporcionados</strong></p><ul><li> <em><strong>palíndromo ("race car")</strong> </em>debe regresar verdadero.</li><li><em> <strong>palíndromo ("not &nbsp;a palidrome")</strong> </em>debe regresar falso.</li><li><em> <strong>palíndromo("A man, a plan, a canal. Panama") </strong></em>debe regresar verdadero</li><li><em><strong> </strong> <strong>palíndromo("never odd or even")</strong> </em>debe regresar verdadero.</li><li><em> <strong>palíndromo("nope")</strong></em> debe regresar falso<em>.</em></li><li><em><strong> palíndromo("almostomla") </strong></em>debe regresar falso.</li><li> <em><strong>palíndromo("My age is 0, 0 si ega ym.") </strong></em>debe regresar verdadero.</li><li> <strong><em>palíndromo("1 eye for of 1 eye") </em></strong>debe regresar falso.</li><li><strong><em>palíndromo</em><strong><em><em>(“0_0 (: /-\ :) 0–0”)</em></em></strong><em> </em></strong>debe regresar verdadero.</li></ul><h3 id="-qu-expresi-n-regular-necesitaremos-para-pasar-el-ltimo-caso-de-prueba"><strong>¿Qué expresión regular necesitaremos para pasar el último caso de prueba?</strong></h3><p>Las expresiones regulares son patrones usados para hacer coincidir combinaciones de caracteres de cadenas.</p><p>Cuando la búsqueda de una coincidencia requiere algo más que una coincidencia directa, el patrón incluye caracteres especiales.</p><pre><code> Para pasar el ultimo caso de prueda, podemos usar dos Expresiones Regulares:

/[^A-Za-z0–9]/g  or o

/[\W_]/g</code></pre><p><strong><strong>\W</strong> </strong>elimina <strong>todos los caracteres no-alfanuméricos.</strong></p><ul><li> <strong><strong>\W</strong> </strong>coincide con cualquier carácter que no sea palabra.</li><li> <strong><strong>\W</strong></strong> es el equivalente a &nbsp;[^A-Za-z0-9_].</li><li> <strong><strong>\W</strong> &nbsp;</strong>coincide cualquier cosa que no esté entre los corchetes.</li></ul><p>¿Qué significa esto?</p><pre><code>[^A-Z] coincide cualquier cosa que no este encerrada entre A y Z 

[^a-z] coincide cualquier cosa que no este encerrada entre a y z

[^0-9]  coincide cualquier cosa que no este encerrada entre 0 y 9

[^_] coincide cualquier cosa que no este encerrada en _</code></pre><p>Pero en nuestro caso, necesitamos palíndromo (“<strong><strong>0_0 (: /-\ :) 0–0</strong></strong>”) para regresar <strong>true, </strong>que significa &nbsp;“<strong><strong>_(: /-\ :)–</strong></strong>” &nbsp;tiene que coincidir.</p><p>Necesitaremos añadir "_" para pasar este caso de prueba especifico. </p><pre><code>Ahora tenemos “\W_”</code></pre><p>Necesitaremos también añadir la bandera <strong>g </strong>para &nbsp;búsqueda global.</p><pre><code>
Finalmente tenemos “/[\W_]/g”</code></pre><blockquote><em><strong> </strong></em><strong><strong><em><em>/[\W_]/g</em></em></strong><em> </em></strong><em>fue </em>usado por puros propósitos demostrativos para mostrar como RegExp trabaja. <em><em><strong><strong> /[^A-Za-z0</strong></strong></em><strong>-</strong><em><strong><strong>9]/g</strong></strong></em><strong> </strong>es el más sencillo RegExp a escoger.</em></blockquote><h3 id="1-comprobar-por-pal-ndromos-con-funciones-incorporadas"><strong><strong>1. Comprobar</strong></strong> por palíndromos con funciones incorporadas</h3><p>Para esta solución, usaremos varios métodos:</p><ul><li> El método <strong><strong>toLowerCase()</strong> </strong>para regresar el valor de la &nbsp;cadena de llamada &nbsp;convertida en minúsculas.</li><li> El método <strong>replace()</strong> para regresar la nueva cadena con algunas o todas las coincidencias de un patrón con un remplazo. Usaremos &nbsp;un RexExp que hemos creado antes.</li><li> El método <strong>split()</strong> una cadena objeto en un arreglo de cadenas separando la cadena en sub cadenas.</li><li> El método <strong>reverse()</strong> &nbsp;invierte un arreglo en su lugar. El primer elemento del arreglo se convierte en el último y el último en el primero.</li><li>El método<strong> join()</strong> junta todos los elemento de un arreglo en una cadena.</li></ul><pre><code class="language-js">function palindrome(str) {
  // Paso 1. Pon en minuscula la cadena y usa el RexEXP para remover los caracteres no deseados en el.
  var re = /[\W_]/g; // or var re = /[^A-Za-z0-9]/g;
  
  var lowRegStr = str.toLowerCase().replace(re, '');
  // str.toLowerCase() = "A man, a plan, a canal. Panama".toLowerCase() = "a man, a plan, a canal. panama"
  // str.replace(/[\W_]/g, '') = "a man, a plan, a canal. panama".replace(/[\W_]/g, '') = "amanaplanacanalpanama"
  // var lowRegStr = "amanaplanacanalpanama";
     
  // Paso 2. Utiliza los métodos de encadenamiento con funciones integradas.
  var reverseStr = lowRegStr.split('').reverse().join(''); 
  // lowRegStr.split('') = "amanaplanacanalpanama".split('') = ["a", "m", "a", "n", "a", "p", "l", "a", "n", "a", "c", "a", "n", "a", "l", "p", "a", "n", "a", "m", "a"]
  // ["a", "m", "a", "n", "a", "p", "l", "a", "n", "a", "c", "a", "n", "a", "l", "p", "a", "n", "a", "m", "a"].reverse() = ["a", "m", "a", "n", "a", "p", "l", "a", "n", "a", "c", "a", "n", "a", "l", "p", "a", "n", "a", "m", "a"]
  // ["a", "m", "a", "n", "a", "p", "l", "a", "n", "a", "c", "a", "n", "a", "l", "p", "a", "n", "a", "m", "a"].join('') = "amanaplanacanalpanama"
  // So, "amanaplanacanalpanama".split('').reverse().join('') = "amanaplanacanalpanama";
  // And, var reverseStr = "amanaplanacanalpanama";
   
  //  Paso 3. Revisa si reverseStr es estrictamente igual a lorRegStr y regresa un BooLean
  return reverseStr === lowRegStr; // "amanaplanacanalpanama" === "amanaplanacanalpanama"? =&gt; true
}
 
palindrome("A man, a plan, a canal. Panama");</code></pre><p><strong>Sin comentarios:</strong></p><pre><code class="language-js">function palindrome(str) {
  var re = /[\W_]/g;
  var lowRegStr = str.toLowerCase().replace(re, '');
  var reverseStr = lowRegStr.split('').reverse().join(''); 
  return reverseStr === lowRegStr;
}
palindrome("A man, a plan, a canal. Panama");</code></pre><h3 id="2-revisa-por-un-pal-ndromo-con-un-bucle-for">2. Revisa por un palíndromo con un bucle FOR </h3><p>La media indexación (len/2) tiene beneficios cuando procesa grandes cadenas de texto. Revisamos el final de cada parte y dividimos el número de iteraciones dentro del bucle FOR por dos.</p><pre><code class="language-js">function palindrome(str) {
 //  Paso 1.La primera parte es igual que la anterior
 var re = /[^A-Za-z0-9]/g; // or var re = /[\W_]/g;
 str = str.toLowerCase().replace(re, '');

 // Paso 2. Crea el bucle FOR
 var len = str.length; // var len = "A man, a plan, a canal. Panama".length = 30
 
 for (var i = 0; i &lt; len/2; i++) {
   if (str[i] !== str[len - 1 - i]) { // Siempre y cuando los caracteres de cada parte coincidad, el bucle FOR debera seguir.
       return false; // Cuando los caracteres ya no coinciden, false es regresado y salimos del bucle FOR.
   }
   /* Aqui len/2 = 15
      For each iteration: i = ?    i &lt; len/2    i++    if(str[i] !== str[len - 1 - i])?
      1st iteration:        0        yes         1     if(str[0] !== str[15 - 1 - 0])? =&gt; if("a"  !==  "a")? // false
      2nd iteration:        1        yes         2     if(str[1] !== str[15 - 1 - 1])? =&gt; if("m"  !==  "m")? // false      
      3rd iteration:        2        yes         3     if(str[2] !== str[15 - 1 - 2])? =&gt; if("a"  !==  "a")? // false  
      4th iteration:        3        yes         4     if(str[3] !== str[15 - 1 - 3])? =&gt; if("n"  !==  "n")? // false  
      5th iteration:        4        yes         5     if(str[4] !== str[15 - 1 - 4])? =&gt; if("a"  !==  "a")? // false
      6th iteration:        5        yes         6     if(str[5] !== str[15 - 1 - 5])? =&gt; if("p"  !==  "p")? // false
      7th iteration:        6        yes         7     if(str[6] !== str[15 - 1 - 6])? =&gt; if("l"  !==  "l")? // false
      8th iteration:        7        yes         8     if(str[7] !== str[15 - 1 - 7])? =&gt; if("a"  !==  "a")? // false
      9th iteration:        8        yes         9     if(str[8] !== str[15 - 1 - 8])? =&gt; if("n"  !==  "n")? // false
     10th iteration:        9        yes        10     if(str[9] !== str[15 - 1 - 9])? =&gt; if("a"  !==  "a")? // false
     11th iteration:       10        yes        11    if(str[10] !== str[15 - 1 - 10])? =&gt; if("c" !==  "c")? // false
     12th iteration:       11        yes        12    if(str[11] !== str[15 - 1 - 11])? =&gt; if("a" !==  "a")? // false
     13th iteration:       12        yes        13    if(str[12] !== str[15 - 1 - 12])? =&gt; if("n" !==  "n")? // false
     14th iteration:       13        yes        14    if(str[13] !== str[15 - 1 - 13])? =&gt; if("a" !==  "a")? // false
     15th iteration:       14        yes        15    if(str[14] !== str[15 - 1 - 14])? =&gt; if("l" !==  "l")? // false
     16th iteration:       15        no               
    End of the FOR Loop*/
 }
 return true; // Ambas partes son estrictamente iguales, y regresa true =&gt; La cadena de texto es un palindromo.
}

palindrome("A man, a plan, a canal. Panama");</code></pre><h3 id="sin-comentarios-">Sin comentarios:</h3><pre><code class="language-js">function palindrome(str) {
 var re = /[^A-Za-z0-9]/g;
 str = str.toLowerCase().replace(re, '');
 var len = str.length;
 for (var i = 0; i &lt; len/2; i++) {
   if (str[i] !== str[len - 1 - i]) {
       return false;
   }
 }
 return true;
}
palindrome("A man, a plan, a canal. Panama");</code></pre><p>Espero que hayas encontrado esto de utilidad. </p><p>Puedes seguirme en <a href="https://medium.com/@sonya.moisse"><strong>Medium</strong></a><strong>, </strong><a href="https://twitter.com/SonyaMoisset"><strong>Twitter</strong></a><strong>, </strong><a href="https://github.com/SonyaMoisset"><strong>Github</strong></a><strong>, </strong>y<strong> </strong><a href="https://www.linkedin.com/in/sonyamoisset"><strong>LinkedIn</strong></a><br></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Como construir un formulario de registro con etiquetas flotantes y transiciones usando solamente HTML y CSS. ]]>
                </title>
                <description>
                    <![CDATA[ Artículo original escrito por: Kingsley Ubah [https://www.freecodecamp.org/news/author/ubahthebuilder/] Artículo original: How to Build a Sign Up Form with Floating Labels and Transitions Using Plain HTML and CSS [https://www.freecodecamp.org/news/how-to-build-sign-up-form-with-html-and-css/] Traducido y adaptado por: Sil Zubikarai [/espanol/news/author/sil/] En este tutorial vamos a construir un moderno formulario de registro con etiquetas flotantes y transiciones ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/como-construir-una-forma-de-registro-con-etiquetas-flotantes-y-transiciones-usando-solamente/</link>
                <guid isPermaLink="false">61e9a08a17a453092f695d40</guid>
                
                    <category>
                        <![CDATA[ HTML ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Sil Zubikarai ]]>
                </dc:creator>
                <pubDate>Sun, 06 Mar 2022 03:55:15 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2022/01/floating-label.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>Artículo original escrito por</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong>:</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong> </strong></strong></strong></strong></strong></strong></strong></strong><a href="https://www.freecodecamp.org/news/author/ubahthebuilder/">Kingsley Ubah</a><br><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>Artículo original</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong>:</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong> </strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong><a href="https://www.freecodecamp.org/news/how-to-build-sign-up-form-with-html-and-css/">How to Build a Sign Up Form with Floating Labels and Transitions Using Plain HTML and CSS</a><br><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>Traducido y adaptado por</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong>:</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong> </strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong><a href="https://www.freecodecamp.org/espanol/news/author/sil/">Sil Zubikarai</a></p><p>En este tutorial vamos a construir un moderno formulario de registro con etiquetas flotantes y transiciones suaves usando simplemente HTML y CSS.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/09/ezgif.com-gif-maker--9--2.gif" class="kg-image" alt="ezgif.com-gif-maker--9--2" width="600" height="400" loading="lazy"><figcaption>A view</figcaption></figure><p>Como puedes ver en la imagen de arriba, cuando una entrada dentro del formulario gana enfoque, su etiqueta flota en la parte superior y un borde semi-grueso aparece alrededor de la entrada. Si un texto es escrito dentro de la entrada y la entrada pierde enfoque, la etiqueta permanece en la parte superior. De otra manera, la etiqueta regresa hacia abajo a la entrada.</p><p>Muchos formularios modernos tienen cierta forma de transición aplicada a ellos. No solo estas transiciones hacen el formulario más dinámico, pero también ayuda a guiar al usuario en el estado de entrada (así tenga enfoque o no) y que tipo de datos se espera manejar en cada entrada.</p><p>En este tutorial, aprenderás acerca de algunas características interesantes de CSS como transiciones, selectores como <code>:placeholder_focus</code>, y muchas otras propiedades de CSS que deberías saber.</p><p>¡Vamos a ello!</p><h2 id="el-marcado-html">El marcado HTML</h2><p>Vamos a definir el marcado para nuestro formulario de registro. Pero antes de eso, tenemos que configurar nuestro boilerplate HTML y vincular correctamente &nbsp;nuestra hoja de estilo desde la etiqueta <code>head</code>. Puedes hacer esto fácilmente con el <a href="https://emmet.io/">plugin Emmet </a>escribiendo <code>!</code> &nbsp;luego en su editor de IDE/Código.</p><p>Puedes también copiar este boilerplate y pegarlo dentro de tu archivo <code>index.html</code>:</p><pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
  &lt;meta charset="UTF-8"&gt;
  &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
  &lt;meta http-equiv="X-UA-Compatible" content="ie=edge"&gt;
  &lt;title&gt;Document&lt;/title&gt;
  &lt;link rel="stylesheet" href="styles.css"&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;/body&gt;
&lt;/html&gt;
</code></pre><p>Dentro de la etiqueta body, definimos el markup para nuestro formulario:</p><pre><code class="language-html">&lt;div class="signupFrm"&gt;
    &lt;form action="" class="form"&gt;
      &lt;h1 class="title"&gt;Sign up&lt;/h1&gt;

      &lt;div class="inputContainer"&gt;
        &lt;input type="text" class="input" placeholder="a"&gt;
        &lt;label for="" class="label"&gt;Email&lt;/label&gt;
      &lt;/div&gt;

      &lt;div class="inputContainer"&gt;
        &lt;input type="text" class="input" placeholder="a"&gt;
        &lt;label for="" class="label"&gt;Username&lt;/label&gt;
      &lt;/div&gt;

      &lt;div class="inputContainer"&gt;
        &lt;input type="text" class="input" placeholder="a"&gt;
        &lt;label for="" class="label"&gt;Password&lt;/label&gt;
      &lt;/div&gt;

      &lt;div class="inputContainer"&gt;
        &lt;input type="text" class="input" placeholder="a"&gt;
        &lt;label for="" class="label"&gt;Confirm Password&lt;/label&gt;
      &lt;/div&gt;

      &lt;input type="submit" class="submitBtn" value="Sign up"&gt;
    &lt;/form&gt;
  &lt;/div&gt;</code></pre><p>Creamos un contenedor <code>div</code> para contener el elemento formulario. Cada una de las entradas del formulario con las etiquetas de texto, están envueltas dentro del contenedor div. Las etiquetas sirven el propósito de informar al usuario que información debe contener cada entrada.</p><p>Y nuestra página debe verse como esto:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/09/noCSS.png" class="kg-image" alt="noCSS" width="600" height="400" loading="lazy"><figcaption>HTML Form of four inputs and four labels</figcaption></figure><p>Puedes haber notado que el valor del marcador que hemos asignado a todas las entradas es &nbsp;"a". &nbsp;Esto puede ser de ayuda más adelante en el tutorial cuando empezamos a aplicar cierta lógica dinámica.</p><h2 id="como-aplicar-estilo-al-formulario">Como aplicar estilo al formulario</h2><p>Nuestro formulario es muy básica, entonces vamos a añadir algo de estilo para hacerla ver mejor.</p><p>Primero, necesitamos realizar algunos reinicios y establecer el color de fondo:</p><figure class="kg-card kg-code-card"><pre><code class="language-css">@import url('https://fonts.googleapis.com/css2?family=Lato&amp;display=swap');

/* Get rid of all default margins/paddings. Set typeface */
body {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
  background-color: white;
  font-family: "lato", sans-serif;
}</code></pre><figcaption>Setting base styling</figcaption></figure><p>Aquí está como nuestra página se vería:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/09/reset-lato.png" class="kg-image" alt="reset-lato" width="600" height="400" loading="lazy"><figcaption>Without any styling yet</figcaption></figure><p>Después de poner estilo a <code>body</code>, estableceremos el modo visualización del contenido <code>flex</code>. Esto asegura que todos los hijos directos dentro del contenedor elemento <code>div</code> estén desplegados lado-a-lado por defecto.</p><p>En nuestro caso, solo hay un hijo dentro del contenedor <code>signupFrm</code>. La única razón que usamos <code>signupFrm</code> aquí es para usar las propiedades <code>align-items</code> y &nbsp;<code>justify-content</code> para ayudar a centrar todo verticalmente y horizontalmente.</p><figure class="kg-card kg-code-card"><pre><code class="language-css">/* Puts the form in the center both horizontally and vertically. Sets its height to 100% of the viewport's height */

.signupFrm {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100vh;
}</code></pre><figcaption>Styling the form container</figcaption></figure><p>La propiedad <code>vh</code>, &nbsp;que significa la altura de la ventana gráfica, asegura que el formulario tome el 100% de la altura de la ventana del buscador, independientemente del tamaño de la ventana o la orientación. Esto la hará más receptivo.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/09/middle.png" class="kg-image" alt="middle" width="600" height="400" loading="lazy"><figcaption>Our form is now aligned to the center</figcaption></figure><p>Ahora vamos a estilizar el formulario un poco:</p><pre><code class="language-css">.form {
  background-color: white;
  width: 400px;
  border-radius: 8px;
  padding: 20px 40px;
  box-shadow: 0 10px 25px rgba(92, 99, 105, .2);
}

.title {
  font-size: 50px;
  margin-bottom: 50px;
}</code></pre><p>En el primer estilo dirigido en el formulario, estableceremos el fondo blanco, vamos a darle un width de 400px, y vamos a añadir algo de curva alrededor del formulario, y finalmente estableceremos una sombra alrededor de la caja. También estableceremos el tamaño de la fuente en el título y algo de espacio bajo el elemento.</p><p>Y el resultado se verá como esto:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/09/with-card.png" class="kg-image" alt="with-card" width="600" height="400" loading="lazy"><figcaption>The form is now inside a card, with a box shadow</figcaption></figure><p>Siguiente, &nbsp;vamos a estilizar al <code>div</code> que contiene las entradas del formulario y las etiquetas del formulario.</p><pre><code class="language-css">.inputContainer {
  position: relative;
  height: 45px;
  width: 90%;
  margin-bottom: 17px;
}</code></pre><p>Vemos a poner la posición de la propiedad de nuestro contenedor <code>div</code> a <code>relative</code>. Esto nos hará posible posicionar al <code>input</code> hijo y <code>label</code> donde queramos. También estableceremos el width para tomar más de 90% del total del width del contenedor.</p><p>Esto es como el formulario será renderizada en el buscador web.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/09/margin-added.png" class="kg-image" alt="margin-added" width="600" height="400" loading="lazy"><figcaption>Looks better</figcaption></figure><p>Ahora necesitamos poner estilo en nuestras entradas.</p><p>Primero ponemos la <code>position</code> a <code>absolute</code>. Esto nos permitirá mover cada uno de ellos a la parte superior izquierda del contenedor padre relativamente posicionado.</p><p>También necesitamos ocultar nuestro texto de marcador de posición arbitrario (los caracteres "a" mencionados anteriormente), para que no se superpongan con el texto dentro de cada etiqueta. El texto del marcador de posición será necesario cuando implementemos la transición:</p><pre><code class="language-css">/* Style the inputs */

.input {
  position: absolute;
  top: 0px;
  left: 0px;
  height: 100%;
  width: 100%;
  border: 1px solid #DADCE0;
  border-radius: 7px;
  font-size: 16px;
  padding: 0 20px;
  outline: none;
  background: none;
  z-index: 1;
}

/* Hide the placeholder texts (a) */

::placeholder {
  color: transparent;
}
</code></pre><p>Con los estilos aplicados, nuestro formulario debe verse como esto:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/09/absolute.png" class="kg-image" alt="absolute" width="600" height="400" loading="lazy"><figcaption>The placeholder "a" is no longer visible</figcaption></figure><p>Ahora, pondremos estilo a las etiquetas de texto:</p><pre><code class="language-css">/* Styling text labels */

.label {
  position: absolute;
  top: 15px;
  left: 15px;
  padding: 0 4px;
  background-color: white;
  color: #DADCE0;
  font-size: 16px;
  transition: 0.5s;
  z-index: 0;
}</code></pre><p>La etiqueta muestra el texto nos dice la información es esperada dentro de la entrada. Comenzaremos con establecer su posición a absolute. Y al poner las propiedades <code>top</code> y <code>left</code>, podemos mover el texto hacia arriba en relación con su contenedor.</p><p>Ahora estableceremos la transición de 0.5 segundos. Esto es cuanto tomara el texto en subir cuando el cursor pase sobre el.</p><p>Finalmente, estableceremos el z-index de 0. El bajo z-index asegurará que la etiqueta se posicione detrás de &nbsp;otros elementos "colocados más altos" si alguna vez se superponen.</p><p>Esto es lo que se representa en la página:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/09/labels-1.png" class="kg-image" alt="labels-1" width="600" height="400" loading="lazy"><figcaption>The result</figcaption></figure><p>Ahora nos vamos a enfocar en los botones.</p><p>Bueno añadiremos algunas animaciones suaves con la propiedad <code>transform</code> de CSS, que mueve el botón hacia arriba un poco y cambia el color una vez que el ratón pasa cobre de él:</p><pre><code class="language-css">.submitBtn {
  display: block;
  margin-left: auto;
  padding: 15px 30px;
  border: none;
  background-color: purple;
  color: white;
  border-radius: 6px;
  cursor: pointer;
  font-size: 16px;
  margin-top: 30px;
}

.submitBtn:hover {
  background-color: #9867C5;
  transform: translateY(-2px);
}</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/09/ezgif.com-gif-maker--6-.gif" class="kg-image" alt="ezgif.com-gif-maker--6-" width="600" height="400" loading="lazy"><figcaption>The button scales up and changes color when hovered over</figcaption></figure><p>Ahora, necesitaremos realizar algunos cambios de estados.</p><p>Cuando una entrada gana enfoque, queremos colocar la etiqueta más haya de la parte superior del contenedor (-7px), 3 pixels desde la izquierda, reducir el tamaño de fuente a 14 y cambiar el color a púrpura:</p><pre><code class="language-css">.input:focus + .label {
  top: -7px;
  left: 3px;
  z-index: 10;
  font-size: 14px;
  font-weight: 600;
  color: purple;
}</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/09/ezgif.com-gif-maker--5-.gif" class="kg-image" alt="ezgif.com-gif-maker--5-" width="600" height="400" loading="lazy"><figcaption>Labels go up when input gains focus</figcaption></figure><p>También necesitamos añadir el borde púrpura alrededor de la entrada cuando gana enfoque.</p><pre><code class="language-css">.input:focus {
  border: 2px solid purple;
}</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/09/ezgif.com-gif-maker--7--3.gif" class="kg-image" alt="ezgif.com-gif-maker--7--3" width="600" height="400" loading="lazy"><figcaption>Purple border added</figcaption></figure><p>Finalmente, tenemos que hacer algo muy importante.</p><p>Actualmente, cuando tú escribes algo de texto en el formulario y mueves el foco (tú ratón) de él, el texto de la etiqueta de texto y el texto dentro de la entrada chocan:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/09/ezgif.com-gif-maker--8--3.gif" class="kg-image" alt="ezgif.com-gif-maker--8--3" width="600" height="400" loading="lazy"><figcaption>Collision between label and input value</figcaption></figure><p>Con el siguiente CSS, vamos a especificar eso, cuando tú escribes el valor de la entrada y cambias el enfoque, queremos que la etiqueta permanezca flotante. Además, especifique bien que deseamos que la etiqueta de texto pierda su color púrpura:</p><pre><code class="language-css">.input:not(:placeholder-shown)+ .label {
  top: -7px;
  left: 3px;
  z-index: 10;
  font-size: 14px;
  font-weight: 600;
}</code></pre><p>Y con eso, aquí está el aspecto final de nuestra página de registro.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/09/ezgif.com-gif-maker--9--1.gif" class="kg-image" alt="ezgif.com-gif-maker--9--1" width="600" height="400" loading="lazy"><figcaption>Final look</figcaption></figure><h2 id="terminando">Terminando</h2><p>Espero que hayas aprendido algunas nuevas cosas acerca de CSS de este tutorial. Las transiciones CSS dan vida a tu sitio web, y en esta guía hemos hecho que nuestro formulario tome más vida con ellas.</p><p>Puedes obtener todo el código de este tutorial en este <a href="https://github.com/KingsleyUbah/Sign-Up-CSS">repositorio GitHub</a>.</p><p>Recientemente, he creado un newsletter donde proveo de sugerencias prácticas y recursos &nbsp;para aprender desarrollo web. Suscríbete a mi &nbsp;<a href="https://www.getrevue.co/profile/ubahthebuilder">newsletter</a> y obtener sugerencias justo en tu inbox.</p><p>Gracias por seguir.</p><p>P/S Si estás aprendiendo JavaScript, he creado un ebook que te enseña 50 títulos de JavaScript con notas &nbsp;digitales dibujadas a mano. <a href="https://ubahthebuilder.gumroad.com/l/js-50">Checha aqu</a>í.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Manual de arreglos en JavaScript: Métodos de arreglos de JS explicados con ejemplos ]]>
                </title>
                <description>
                    <![CDATA[ Artículo original escrito por: TAPAS ADHIKARY [https://www.freecodecamp.org/news/author/tapas/] Artículo original: The JavaScript Array Handbook – JS Array Methods Explained with Examples [https://www.freecodecamp.org/news/the-javascript-array-handbook/] Traducido y adaptado por: Sil Zubikarai [/espanol/news/author/sil/] En programación, un arreglo es una colección de elementos o cosas. Los arreglos guardan data como elementos y los regresan cuando los ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/el-manual-de-arreglos-en-javascript/</link>
                <guid isPermaLink="false">6119349f3e80820908da4f01</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Sil Zubikarai ]]>
                </dc:creator>
                <pubDate>Wed, 12 Jan 2022 21:29:05 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2022/01/freeCodeCamp-Cover-1.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>Artículo original escrito por</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong>:</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong> </strong></strong></strong></strong></strong></strong></strong></strong><a href="https://www.freecodecamp.org/news/author/tapas/">TAPAS ADHIKARY</a><br><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>Artículo original</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong>:</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong> </strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong><a href="https://www.freecodecamp.org/news/the-javascript-array-handbook/">The JavaScript Array Handbook – JS Array Methods Explained with Examples</a><br><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>Traducido y adaptado por</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong>:</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong> </strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong><a href="https://www.freecodecamp.org/espanol/news/author/sil/"><strong>Sil Zubikarai</strong></a></p><p>En programación, un <code>arreglo</code> es una colección de elementos o cosas. Los arreglos guardan data como elementos y los regresan cuando los necesitas.</p><p>La estructura de datos de arreglo es ampliamente usada en todos los lenguajes de programación que la soportan.</p><p>En este manual, te enseñará todo acerca de los arreglos en JavaScript. Aprenderás acerca de lo complejo del manejo de datos, destructurando, los métodos de arreglo más comúnmente usados, y más.</p><h2 id="-por-qu-escrib-este-art-culo">¿Por qué escribí este artículo?</h2><p>Hay muchos buenos artículos de arreglos de JavaScript ya disponibles alrededor de internet. Entonces ¿por qué escribí otro artículo del mismo título? ¿Cuál es la motivación?</p><p>Bien, a lo largo de los años de interactuar con mi meentes, Me he dado cuenta de que muchos principiantes necesitan un tutorial que cubra los arreglos a fondo de principio a fin con ejemplos.</p><p>Entonces he decidido crear tal artículo lleno de ejemplos significativos. Si tú eres principiante de JavaScript, espero que lo encuentres de mucha ayuda.</p><p>Pero inclusive para un experimentado desarrollador, este manual puede ser útil para ayudar a repasar cosas que tú necesites. Yo también estoy aprendiendo todo esto de nuevo mientras escribo acerca de él. Así que vamos de lleno.</p><h2 id="-qu-es-un-arreglo-en-javascript">¿Qué es un arreglo en JavaScript?</h2><p>Un par de <code>square brackets []</code> representa un arreglo en JavaScript. Todos los elementos en un arreglo están separados por una <code>comma(,)</code>.</p><p>En JavaScript, los arreglos pueden ser una colección de elementos de cualquier tipo. Esto significa que tú puedes crear un arreglo &nbsp;con elementos de tipo Cadena , Boolean, Número, Objetos, e incluso otros Arreglos.</p><p>Aquí hay un ejemplo de un arreglo con otros cuatro elementos: tipo Número, Boolean, Cadena &nbsp;y Objecto.</p><pre><code class="language-js">const mixedTypedArray = [100, true, 'freeCodeCamp', {}];</code></pre><p>La posición de un elemento en el arreglo es conocido como <code>indice</code>. En JavaScript, el indice del arreglo empieza con <code>0</code>, e incrementa uno a uno con cada elemento.</p><p>Entonces, por ejemplo, en el arreglo de arriba, el elemento 100 es en <code>indice 0</code>, cierto si está en <code>indice 1</code>, 'freeCodeCamp' está en <code>indice 2</code>, y así.</p><p>El número de elementos en el arreglo determina su longitud. Por ejemplo, la longitud del arreglo de arriba es cuatro.</p><p>Curiosamente, los arreglos de JavaScript no tienen longitud fija. Tú puedes cambiar la longitud en cualquier momento asignando un valor numérico positivo. Aprenderemos más acerca de esto dentro de poco.</p><h2 id="como-crear-un-arreglo-en-javascript">Como crear un arreglo en JavaScript</h2><p>Tú puedes crear un arreglo de diferentes formas en JavaScript. La forma más sencilla es asignar un valor de arreglo a una variable. </p><pre><code class="language-js">const salad = ['?', '?', '?', '?', '?', '?', '?'];</code></pre><p>También puedes usar el constructor de Arreglo para crear un arreglo.</p><pre><code class="language-js">const salad = new Array('?', '?', '?', '?', '?', '?', '?');</code></pre><blockquote> Tenga en cuenta: <code>new Array(2)</code> creará un arreglo de longitud 2 y ninguno de los elementos son definidos en él. Sin embargo, <code>new Array(1,2)</code> creará un arreglo de longitud dos con elementos 1 y 2 en él.</blockquote><p>Hay otros métodos como &nbsp;<code>Array.of()</code> y <code>Array.from()</code>, y el &nbsp;<code>spread</code> operador(<code>...</code>) &nbsp;que te ayuda a crear arreglos, también. Aprenderemos acerca de ellos después en este artículo.</p><h2 id="como-obtener-elementos-de-un-arreglo-en-js">Como obtener elementos de un arreglo en JS</h2><p>Tu puedes acceder y traer elementos de un arreglo usando su indice. Tú necesitas usar la sintaxis <code>square bracket</code> para acceder a los elementos del arreglo.</p><pre><code class="language-js">const element = array[index];</code></pre><p>Según sus casos de uso, tú debes escoger acceder a los elementos del arreglo uno por uno o en un bucle.</p><p>Cuando accedes &nbsp;a &nbsp;elementos usando un indice como este:</p><pre><code class="language-js">const salad = ['?', '?', '?', '?', '?', '?', '?'];
salad[0]; // '?'
salad[2]; // '?'
salad[5]; // '?'</code></pre><p>Puedes usar la longitud de un arreglo para retroceder y acceder elementos.</p><pre><code class="language-js">const salad = ['?', '?', '?', '?', '?', '?', '?'];
const len = salad.length;
salad[len - 1]; // '?'
salad[len - 3]; // '?'</code></pre><p>También puedes iterar a través del arreglo usando el común bucle <code>for</code> o <code>forEach</code>, o cualquier otro bucle.</p><pre><code class="language-js">const salad = ['?', '?', '?', '?', '?', '?', '?'];

for(let i=0; i&lt;salad.length; i++) {
  console.log(`Element at index ${i} is ${salad[i]}`);
}</code></pre><p>Y aquí esta el resultado:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/05/image-30.png" class="kg-image" alt="image-30" width="600" height="400" loading="lazy"></figure><h2 id="como-a-adir-elementos-al-arreglo-en-js">Como añadir elementos al arreglo en JS</h2><p>Usa el método <code>push()</code> para añadir un elemento en el arreglo. El método <code>push()</code> añade un elemento &nbsp;al final del arreglo. Ve como añadimos algunos cacahuetes a la ensalada, como esto:</p><pre><code class="language-js">const salad = ['?', '?', '?', '?', '?', '?', '?'];
salad.push('?');</code></pre><p>Ahora el arreglo salad es:</p><p>["?", "?", "?", "?", "?", "?", "?", "?"]</p><p>Nota que el método <code>push()</code> añade un elemento al final del arreglo. Si tu quieres añadir un elemento al inicio del arreglo, vas a necesitar &nbsp;usar el método <code>unshift()</code>.</p><pre><code class="language-js">const salad = ['?', '?', '?', '?', '?', '?', '?'];
salad.unshift('?');</code></pre><p>Ahora el arreglo salad es:</p><p>["?", "?", "?", "?", "?", "?", "?", "?"]</p><h2 id="como-eliminar-elementos-de-un-arreglo-en-js">Como eliminar elementos de un arreglo en JS</h2><p>La manera más sencilla de eliminar un solo elemento de un arreglo usando el método <code>pop()</code> . Cada vez que llamas el método <code>pop()</code>, este elimina un elemento del final de un arreglo. Entonces este regresa con el elemento eliminado &nbsp;y cambia el arreglo original.</p><pre><code class="language-js">const salad = ['?', '?', '?', '?', '?', '?', '?'];
salad.pop(); // ?

console.log(salad); // ['?', '?', '?', '?', '?', '?']</code></pre><p>Usa el método <code>shift()</code> para eliminar un elemento desde el principio del arreglo. Como el método <code>pop()</code>, &nbsp;<code>shift()</code> &nbsp;regresa el elemento eliminado y cambia el arreglo original.</p><pre><code class="language-js">const ensalada = ['?', '?', '?', '?', '?', '?', '?'];
salad.shift(); // ?

console.log(ensalada); // ['?', '?', '?', '?', '?', '?'];</code></pre><h2 id="como-copiar-y-clonar-un-arreglo-en-js">Como copiar y clonar un arreglo en JS</h2><p>Tu puedes copiar y clonar un arreglo a un nuevo arreglo usando el metodo <code>slice()</code>. Vea que el método <code>slice()</code> no cambia el arreglo original. En cambio crea una nueva copia superficial del arreglo original.</p><pre><code class="language-js">const ensalada = ['?', '?', '?', '?', '?', '?', '?'];
const ensaladaCopy = ensalada.slice();

console.log(ensaladaCopy); // ['?', '?', '?', '?', '?', '?', '?']

ensalada === ensaladaCopy; // returns false</code></pre><p>Alternativamente, tú puedes usar el operador <code>spread</code> para crear una copia del arreglo. Aprenderemos sobre eso pronto.</p><h2 id="como-determinar-si-el-valor-es-un-arreglo-en-js">Como determinar si el valor es un arreglo en JS</h2><p>Tú puedes determinar si un valor es un arreglo usando el método <code>Array.isArray(value)</code>. El método regresa verdadero si el valor que pasa es un arreglo.</p><pre><code class="language-js">Array.isArray(['?', '?', '?', '?', '?', '?', '?']); // returns true
Array.isArray('?'); // returns false
Array.isArray({ 'tomate': '?'}); // returns false
Array.isArray([]); // returns true</code></pre><h2 id="desestructuraci-n-de-arreglos-en-javascript">Desestructuración de arreglos en JavaScript</h2><p>Con ECMAScript 6 (ES6), tenemos una nueva sintaxis para extraer múltiples propiedades de un arreglo y asignarlas a variables de una sola vez. Es útil para ayudar a mantener tu código limpio y conciso. Esta nueva sintaxis es llamada sintaxis de &nbsp;desestructuración.</p><p>Aquí hay un ejemplo de extraer valores de un arreglo usando la sintaxis de desestructuración:</p><pre><code class="language-js">let [tomate, hongo, zanahoria] = ['?', '?', '?'];</code></pre><p>Ahora tú puedes usar las variables en tu código:</p><pre><code class="language-js">console.log(tomate, hongo, zanahoria); // Output, ? ? ?</code></pre><p>Para hacer lo mismo sin desestructurar, se vería como esto:</p><pre><code class="language-js">let vegetales = ['?', '?', '?'];
let tomate = vegetales[0];
let hongo= vegetales[1];
let zanahoria= vegetales[2];</code></pre><p>Así, la sintaxis desestructurar te salva de escribir un montón de código. Esto le da un gran impulso a la productividad.</p><h2 id="como-asignar-un-valor-por-defecto-a-una-variable">Como asignar un valor por defecto a una variable</h2><p>Tú puedes asignar un valor por defecto usando desestructuración cuando no hay valor o es <code>undefined</code> para el elemento arreglo</p><p>En el ejemplo de abajo, asignamos por defecto el valor de la variable hongos.</p><pre><code class="language-js">let [tomate , hongos = '?'] = ['?'];
console.log(tomate); // '?'
console.log(hongos); // '?'</code></pre><h2 id="como-saltar-el-valor-en-un-arreglo">Como Saltar el Valor en &nbsp;un Arreglo</h2><p>Cuando estás desestructurando, tú puedes saltar un elemento de un arreglo a un variable. Por ejemplo, puedes no estar interesado en todos los elementos de un arreglo. En este caso, saltarse un valor es útil.</p><p>En el ejemplo de abajo, nosotros saltamos el elemento hongo. Note el espacio en la declaración de variable en el lado izquierdo de la expresión.</p><pre><code class="language-js">let [tomate, , zanahoria] = ['?', '?', '?'];

console.log(tomate); // '?'
console.log(zanahoria); // '?'</code></pre><h2 id="desestructurando-un-arreglo-anidado-en-js"><strong>Desestructurando un &nbsp;Arreglo Anidado en JS</strong></h2><p>En JavaScript, los arreglos se pueden &nbsp;anidar. Esto significa que un arreglo puede tener otro arreglo como elemento. Él anidamiento de arreglo &nbsp;puede ir a más profundidad.</p><p>Por ejemplo, vamos a crear un arreglo anidado para frutas. El tiene pocas frutas y un arreglo de vegetales en él.</p><pre><code class="language-js">let frutas = ['?', '?', '?', '?', ['?', '?', '?']];</code></pre><p>Como puedes acceder a '?' &nbsp;desde el arreglo de arriba. De nuevo, tú puedes hacer esto desestructurando, como esto:</p><pre><code class="language-js">const veg = frutas[4]; // returns the array ['?', '?', '?']
const zanahoria = veg[2]; // returns '?'</code></pre><p>Alternativamente, tú puedes usar esta sintaxis corta:</p><pre><code class="language-js">fruits[4][2]; // returns '?'</code></pre><p>Tú también puede acceder usando la sintaxis de desestructurado, como esto:</p><pre><code class="language-js">let [,,,,[,,zanahoria]] = ['?', '?', '?', '?', ['?', '?', '?']];</code></pre><h2 id="como-usar-la-sintaxis-spread-y-el-resto-de-par-metros-en-javascript">Como usar la sintaxis Spread y el resto de parámetros en JavaScript</h2><p>Desde ES6, podemos usar el <code>...</code> (si, tres puntos consecutivos) como sintaxis spread &nbsp;y el resto de los parámetros en la desestructuración de arreglo.</p><ul><li> Por el resto del parámetro, el &nbsp;<code>...</code> aparece en el lado izquierdo de desestructuración.</li><li> Para la sintaxis spread, el <code>...</code> aparece en el lado derecho de la desestructuración.</li></ul><h2 id="como-usar-el-resto-del-par-metro-en-js"><strong>Como usar el resto del parámetro en JS</strong></h2><p>Con el Resto del Parámetro, &nbsp;podemos organizar los elementos de la izquierda de un arreglo en un nuevo arreglo. El resto de los parámetros deben ser la última variable en la sintaxis de desestructuración.</p><p>En el ejemplo de abajo, tenemos organizados los dos primeros elementos de un arreglo a las variables tomate y hongo. El resto de los elementos son organizados a la variable <code>rest</code> &nbsp;usando el <code>...</code>. La variable <code>rest</code> es un nuevo arreglo conteniendo los elementos sobrantes.</p><pre><code class="language-js">const [tomate, hongo, ...rest] = ['?', '?', '?', '?', '?', '?', '?'];

console.log(tomate); // '?'
console.log(hongo); // '?'
console.log(rest); // ["?", "?", "?", "?", "?"]</code></pre><h2 id="como-usar-el-operador-spread-en-js"><strong>Como usar el Operador Spread en JS</strong></h2><p>Con el operador spread, podemos crear un clon/copia del arreglo existente como este:</p><pre><code class="language-js">const ensalada = ['?', '?', '?', '?', '?', '?', '?'];

const ensaladaCloned = [...ensalada];
console.log(ensaladaCloned); // ["?", "?", "?", "?", "?", "?", "?"]

ensalada === ensaladaCloned // false</code></pre><h2 id="desestructuraci-n-de-casos-de-uso-en-javascript">Desestructuración de Casos de uso en JavaScript</h2><p>Vamos a ver algunos emocionantes usos-casos de desestructuración de arreglo, el operador spread, y el resto del parámetro.</p><h2 id="como-cambiar-los-valores-con-desestructuraci-n"><strong>Como cambiar los Valores con Desestructuración</strong></h2><p>Podemos cambiar el valor de dos variables fácilmente usando la sintaxis de desestructuración de arreglo.</p><pre><code class="language-js">let primero = '?';
let segundo = '?';
[primero, segundo] = [segundo, primero];

console.log(primero);  // '?'
console.log(segundo); // '?'</code></pre><h2 id="como-combinar-dos-arreglos"><strong>Como &nbsp;combinar dos arreglos</strong></h2><p>Podemos combinar dos arreglos y crear un nuevo arreglo con todos los elementos de ambos arreglos. Vamos a tomar dos arreglos– uno con un par de caras sonrientes y otro con algunos vegetales.</p><pre><code class="language-js">const emotion = ['?', '?'];
const veggies = ['?', '?', '?', '?'];</code></pre><p>Ahora, podemos combinarlos para crear un nuevo arreglo.</p><pre><code class="language-js">const emotionalVeggies = [...emotion, ...veggies];
console.log(emotionalVeggies); // ["?", "?", "?", "?", "?", "?"]</code></pre><h2 id="m-todos-de-arreglo-javascript">Métodos de arreglo JavaScript</h2><p>Hasta ahora, hemos visto algunas propiedades de arreglos y métodos. Vamos &nbsp;a recapitular rápidamente los que hemos visto.</p><ul><li><code>push()</code> – Inserta un elemento al final del arreglo.</li><li><code>unshift()</code> – Inserta un elemento al inicio del arreglo.</li><li><code>pop()</code> – &nbsp;Remueve un elemento del final del arreglo.</li><li><code>shift()</code> – Remueve un elemento del principio del arreglo.</li><li><code>slice()</code> – Crea una copia sombra del arreglo.</li><li><code>Array.isArray()</code> – Determina si el valor es un arreglo.</li><li><code>length</code> – Determina el tamaño del arreglo.</li></ul><p>Ahora aprenderemos sobre otros importantes métodos de arreglo JS con ejemplos.</p><h2 id="como-crear-remover-actualizar-y-acceder-arreglos-en-javascript-"><strong>Como Crear, Remover, Actualizar, y Acceder Arreglos en JavaScript.</strong></h2><p>En esta sección, aprenderemos acerca de métodos que puedas usar para crear un nuevo arreglo, &nbsp;remover elementos para hacer un arreglo vacío, acceder elementos, &nbsp;y mucho más.</p><h3 id="el-m-todo-de-arreglo-concat-">El método de arreglo concat() </h3><p>El método <strong><strong><code>concat()</code></strong> </strong>combina uno o más arreglos y regresa un arreglo combinado. Es un método inmutable. Esto significa que no cambia(muta) un arreglo existente.</p><p>Vamos a concatenar dos arreglos.</p><pre><code class="language-js">const first = [1, 2, 3];
const second = [4, 5, 6];

const merged = first.concat(second);

console.log(merged); // [1, 2, 3, 4, 5, 6]
console.log(first); // [1, 2, 3]
console.log(second); // [4, 5, 6]</code></pre><p>Usando el método <strong><strong><code>concat()</code></strong> </strong>podemos combinar más de dos arreglos. Podemos combinar cualquier número de arreglos con esta sintaxis:</p><pre><code class="language-js">array.concat(arr1, arr2,..,..,..,arrN);</code></pre><p>Aquí hay un ejemplo:</p><pre><code class="language-js">const first = [1, 2, 3];
const second = [4, 5, 6];
const third = [7, 8, 9];

const merged = first.concat(second, third);

console.log(merged); // [1, 2, 3, 4, 5, 6, 7, 8, 9]</code></pre><h3 id="el-m-todo-de-arreglo-join-">El método de arreglo join() </h3><p>El método <strong><strong><code>join()</code></strong> </strong>junta todos los elementos de un arreglo usando un separador &nbsp;y regresa una cadena. El separador por defecto usado para juntar &nbsp;es <code>comma(,)</code>.</p><pre><code class="language-js">const emotions = ['?', '?', '?', '?'];

const joined = emotions.join();
console.log(joined); // "?,?,?,?"
</code></pre><p>Tú puedes pasar un separador de tu elección para juntar elementos. Aquí es un ejemplo de juntar elementos con un separador personalizado.</p><pre><code class="language-js">const joined = emotions.join('&lt;=&gt;');
console.log(joined); // "?&lt;=&gt;?&lt;=&gt;?&lt;=&gt;?"</code></pre><p>Invocando el método <code>join()</code> en un arreglo vacío regresa una cadena vacía:</p><pre><code class="language-js">[].join() // returns ""</code></pre><h3 id="el-m-todo-de-arreglo-fill-">El método de arreglo fill()</h3><p>El método <code>fill()</code> llena un arreglo con un valor estático. Tú puedes cambiar todos los elementos a valores estáticos o cambiar algunos pocos elementos seleccionados. Nota el método <code>fill()</code> cambia el arreglo original.</p><pre><code class="language-js">const colors = ['red', 'blue', 'green'];

colors.fill('pink');
console.log(colors); // ["pink", "pink", "pink"]</code></pre><p>Aquí hay un ejemplo donde cambiamos solo los dos últimos elementos de un arreglo usando el método <code>fill()</code>:</p><pre><code class="language-js">const colors = ['red', 'blue', 'green'];

colors.fill('pink', 1,3); // ["red", "pink", "pink"]</code></pre><p>En este caso, el primer argumento del método <code>fill()</code> es el valor con el que cambiamos. El segundo argumento es el índice de &nbsp;inicio que se va a cambiar. &nbsp;Este empeiza con <code>0</code>. El último argumento es para determinar donde dejar de llenar. El valor maximo podria ser &nbsp;<code>colors.length</code>.</p><p>Por favor, checa esto en este hilo de Twitter para un uso práctico del método <code>fill()</code>.</p><figure class="kg-card kg-embed-card"><iframe id="twitter-widget-0" scrolling="no" frameborder="0" allowtransparency="true" allowfullscreen="true" class="" title="Twitter Tweet" src="https://platform.twitter.com/embed/Tweet.html?creatorScreenName=tapasadhikary&amp;dnt=false&amp;embedId=twitter-widget-0&amp;features=eyJ0ZndfZXhwZXJpbWVudHNfY29va2llX2V4cGlyYXRpb24iOnsiYnVja2V0IjoxMjA5NjAwLCJ2ZXJzaW9uIjpudWxsfSwidGZ3X2hvcml6b25fdHdlZXRfZW1iZWRfOTU1NSI6eyJidWNrZXQiOiJodGUiLCJ2ZXJzaW9uIjpudWxsfSwidGZ3X3NwYWNlX2NhcmQiOnsiYnVja2V0Ijoib2ZmIiwidmVyc2lvbiI6bnVsbH19&amp;frame=false&amp;hideCard=false&amp;hideThread=false&amp;id=1360185996768251904&amp;lang=en&amp;origin=https%3A%2F%2Fwww.freecodecamp.org%2Fnews%2Fthe-javascript-array-handbook%2F&amp;sessionId=9a4b49d2ce35e9525a09b39db07a8f0e3481f2d4&amp;siteScreenName=freecodecamp&amp;theme=light&amp;widgetsVersion=1890d59c%3A1627936082797&amp;width=550px" data-tweet-id="1360185996768251904" 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: 22px; vertical-align: middle; position: static; visibility: visible; width: 550px; height: 544px; display: block; flex-grow: 1;" loading="lazy"></iframe></figure><p>También, puedes encontrar este demo proyecto de ayuda: <a href="https://github.com/atapas/array-fill-color-cards">https://github.com/atapas/array-fill-color-cards</a>.</p><h3 id="el-m-todo-de-arreglo-includes-">El método de arreglo includes()</h3><p>Tú puedes determinar la presencia de un elemento en un arreglo usando el método <code>includes()</code>. Si un elemento es encontrado, el método regresa <code>true</code>, y de otra forma <code>false</code>.</p><pre><code class="language-js">const names = ['tom', 'alex', 'bob', 'john'];

names.includes('tom'); // returns true
names.includes('july'); // returns false</code></pre><h3 id="el-m-todo-de-arreglo-indexof-">El método de arreglo &nbsp;indexOf()</h3><p>Si tú quieres saber la posición &nbsp;índice de un elemento arreglo. Tú puedes usar el método &nbsp;<code>indexOf()</code> para obtener eso. Devuelve el índice de la primera aparición de un elemento en el arreglo. Si un elemento no se encuentra, el &nbsp;método <code>indexOf()</code> regresa <code>-1</code>.</p><pre><code class="language-js">const nombres = ['tom', 'alex', 'bob', 'john'];

nombres.indexOf('alex'); // returns 1
nombres.indexOf('rob'); // returns -1</code></pre><p>Hay otro método <code>lastIndexOf()</code> esto ayuda a encontrar el índice de la última aparición de un elemento en un arreglo. Como <code>indexOf()</code>, <code>lastIndexOf()</code> también regresa <code>-1</code> cuando el elemento no es encontrado.</p><pre><code class="language-js">const nombres = ['tom', 'alex', 'bob', 'tom'];

nombres.indexOf('tom'); // returns 0
nombres.lastIndexOf('tom'); // returns 3</code></pre><h3 id="el-m-todo-de-arreglo-reverse-">El método de arreglo reverse()</h3><p> Como el nombre sugiere, el método <code>reverse()</code> reserva la posición del elemento en un arreglo entonces el último elemento va en la primera posición y la primera en la última.</p><pre><code class="language-js">const nombres = ['tom', 'alex', 'bob'];

nombres.reverse(); // returns ["bob", "alex", "tom"]
</code></pre><p>El método <code>reverse()</code> modifica el arreglo original.</p><h3 id="el-m-todo-de-arreglo-sort-">El método de arreglo sort()</h3><p>El método <code>sort()</code> es probablemente uno de los métodos más usados de arreglo. El método por predeterminado <code>sort()</code> convierte los tipos de elemento &nbsp;en cadena y luego los arregla. El orden de clasificación predeterminado es ascendente. El método sort () cambia la matriz original.</p><pre><code class="language-js">const nombres = ['tom', 'alex', 'bob'];

nombres.sort(); // returns ["alex", "bob", "tom"]</code></pre><p>El método sort () acepta una función de comparación opcional como argumento. Puedes escribir una función de comparación y pasar al método sort () para anular el comportamiento de clasificación predeterminado.</p><p>Vamos a tomar un arreglo de números y ordenarlos de manera ascendente y descendente con la función sort.</p><pre><code class="language-js">const numeros = [23, 5, 100, 56, 9, 13, 37, 10, 1]
</code></pre><p>Primero, podemos invocar el método por defecto &nbsp;<code>sort()</code> y ver el output:</p><pre><code class="language-js">numeros.sort();</code></pre><p>Ahora el orden del arreglo es , [1,10,100, 13, 23, 37, 5, 56, 9]. Bien eso no es el resultado esperado. &nbsp;Pero esto pasa por que el método default <code>sort()</code> convierte los elementos de la cadena de texto y luego lo compara basado en los valores de la unidad de código <code>UTF-16</code></p><p>Para resolver esto, vamos a escribir la funcion comparadora. Aqui hay una para el orden ascendente:</p><pre><code class="language-js">function ascendingComp(a, b){
  return (a-b);
}</code></pre><p>Ahora pasa esto por el método <code>sort()</code>:</p><pre><code class="language-js">numeros.sort(ascendingComp); // retruns [1, 5, 9, 10, 13, 23, 37, 56, 100]

/* 

También podemos codificarlo como,

numeros.sort(function(a, b) {
  return (a-b);
});

O,  con la funcion arrow,

numeros.sort((a, b) =&gt; (a-b));

*/</code></pre><p>Para el orden descendente, haz esto:</p><pre><code class="language-js">numeros.sort((a, b) =&gt; (b-a));</code></pre><p>Checa esto en el repositorio GitHub para mas ejemplos de clasificación y tips <a href="https://github.com/atapas/js-array-sorting">https://github.com/atapas/js-array-sorting</a>.</p><h3 id="el-m-todo-de-arreglo-splice-">El método de arreglo splice()</h3><p>El método <code>splice()</code> ayuda a añadir, actualizar, y remover elementos de un arreglo. Este método puede ser un poco confuso al principio, pero una vez que &nbsp;conoces como usarlo apropiadamente, lo harás bien.</p><p>El propósito principal del método <code>splice()</code> es eliminar elementos de un arreglo. Regresa un arreglo con los elementos borrados y modifica el arreglo original. Pero puedes añadir y remplazar elementos usándolo.</p><p>Para añadir un elemento usando el método <code>splice()</code>, necesitamos pasar la posición donde queremos añadir, &nbsp;cuantos elementos a borrar empezando con la posición, y con el elemento a añadir.</p><p>En el ejemplo de abajo, estamos añadiendo un elemento <code>zack</code> en el índice &nbsp;<code>1</code> &nbsp;sin borrar ningún elemento.</p><pre><code class="language-js">const nombres = ['tom', 'alex', 'bob'];

nombres.splice(1, 0, 'zack');

console.log(nombres); // ["tom", "zack", "alex", "bob"]</code></pre><p>Hecha un vistazo al siguiente ejemplo. Ahí estamos eliminando un elemento del <code>indice 2</code> (el tercer elemento) y añadiendo un nuevo elemento, <code>zack</code>. El &nbsp;método <code>splice()</code> regresa un arreglo con el elemento eliminado, <code>bob</code>.</p><pre><code class="language-js">const nombres = ['tom', 'alex', 'bob'];

const deleted = nombres.splice(2, 1, 'zack');

console.log(deleted); // ["bob"]
console.log(nombres); // ["tom", "alex", "zack"]</code></pre><p>Checa esto en este hilo de &nbsp;Twitter y aprende como el método <code>splice()</code> te ayuda a hacer un arreglo vacío.</p><figure class="kg-card kg-embed-card"><iframe id="twitter-widget-1" scrolling="no" frameborder="0" allowtransparency="true" allowfullscreen="true" class="" title="Twitter Tweet" src="https://platform.twitter.com/embed/Tweet.html?creatorScreenName=tapasadhikary&amp;dnt=false&amp;embedId=twitter-widget-1&amp;features=eyJ0ZndfZXhwZXJpbWVudHNfY29va2llX2V4cGlyYXRpb24iOnsiYnVja2V0IjoxMjA5NjAwLCJ2ZXJzaW9uIjpudWxsfSwidGZ3X2hvcml6b25fdHdlZXRfZW1iZWRfOTU1NSI6eyJidWNrZXQiOiJodGUiLCJ2ZXJzaW9uIjpudWxsfSwidGZ3X3NwYWNlX2NhcmQiOnsiYnVja2V0Ijoib2ZmIiwidmVyc2lvbiI6bnVsbH19&amp;frame=false&amp;hideCard=false&amp;hideThread=false&amp;id=1313112900085579776&amp;lang=en&amp;origin=https%3A%2F%2Fwww.freecodecamp.org%2Fnews%2Fthe-javascript-array-handbook%2F&amp;sessionId=9a4b49d2ce35e9525a09b39db07a8f0e3481f2d4&amp;siteScreenName=freecodecamp&amp;theme=light&amp;widgetsVersion=1890d59c%3A1627936082797&amp;width=550px" data-tweet-id="1313112900085579776" 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: 22px; vertical-align: middle; position: static; visibility: visible; width: 550px; height: 443px; display: block; flex-grow: 1;" loading="lazy"></iframe></figure><h2></h2><h3 id="m-todos-de-arreglos-est-ticos-en-javascript">Métodos de arreglos estáticos en JavaScript</h3><p>En JavaScript, tenemos tres métodos de arreglos estáticos. Hemos visto ya <code>Array.isArray()</code>. Vamos a ver los otros dos ahora.</p><h3 id="el-m-todo-de-arreglo-array-from-">El método de arreglo Array.from()</h3><p>Vamos a un fragmento simple de código HTML que contiene un div y una lista de pocos elementos:</p><pre><code class="language-html">&lt;div id="main"&gt;
  &lt;ul&gt;
    &lt;ol type="1"&gt;
      &lt;li&gt;...&lt;/li&gt;
      &lt;li&gt;...&lt;/li&gt;
      &lt;li&gt;...&lt;/li&gt;
      &lt;li&gt;...&lt;/li&gt;
      &lt;li&gt;...&lt;/li&gt;
      &lt;li&gt;...&lt;/li&gt;
      &lt;li&gt;...&lt;/li&gt;
      &lt;li&gt;...&lt;/li&gt;
      &lt;li&gt;...&lt;/li&gt;
      &lt;li&gt;...&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/ul&gt; 
&lt;/div&gt;</code></pre><p>Ahora vamos a consultar el DOM usando el método <code>getElementsByTagName()</code>.</p><pre><code class="language-js">document.getElementsByTagName('li');</code></pre><p>Regresa un <code>HTMLCollection</code> que se ve así:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/05/htmlCollec.png" class="kg-image" alt="htmlCollec" width="600" height="400" loading="lazy"><figcaption>HTMLCollection is an Array-Like Object</figcaption></figure><p>Entonces es como un arreglo. Ahora vamos a tratar de iterar sobre ella usando <code>forEach</code>:</p><pre><code class="language-js">document.getElementsByTagName('li').forEach(() =&gt; {
 // Do something here..
})</code></pre><p>Adivina ¿cuál es el output? Es un error como este:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/05/htmlcolc_error.png" class="kg-image" alt="htmlcolc_error" width="600" height="400" loading="lazy"><figcaption>Error while using forEach on the Array-Like object</figcaption></figure><p>¿Pero por qué? Por qué la el <code>HTMLCollection</code> no es un arreglo. Es un objeto <code>Array-Like</code>. Entonces tu no puedes iterar sobre él usando <code>forEach</code>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/05/htmlCollec_object.png" class="kg-image" alt="htmlCollec_object" width="600" height="400" loading="lazy"><figcaption>The proto is Object</figcaption></figure><p>Aquí es donde deberías usar el método <code>Array.from()</code>. Convierte el objeto tipo arreglo a un arreglo para que así puedas realizar todas las operaciones de arreglo en el.</p><pre><code class="language-js">const collection = Array.from(document.getElementsByTagName('li'))</code></pre><p>Aquí esta &nbsp;<code>collection</code> que es un arreglo:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/05/collection.png" class="kg-image" alt="collection" width="600" height="400" loading="lazy"><figcaption>The proto is Array</figcaption></figure><h3 id="el-m-todo-de-arreglo-array-of-">El método de arreglo Array.of() </h3><p>El método <code>Array.of()</code> crea un nuevo arreglo usando cualquier número de elementos de cualquier tipo.</p><pre><code class="language-js">Array.of(2, false, 'test', {'name': 'Alex'})</code></pre><p>El output se ve como esto:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/05/image-49.png" class="kg-image" alt="image-49" width="600" height="400" loading="lazy"><figcaption>Output of the Array.of() method</figcaption></figure><h3 id="el-m-todo-de-iterador-de-arreglo-en-javascript">El método de iterador de arreglo en JavaScript</h3><p>Ahora vamos a aprender acerca de los métodos de iterador de arreglo. &nbsp;Hay mucha métodos muy útiles para iterar a través de un arreglo y realizar cálculos, tomar decisiones, &nbsp;filtrar cosas y más.</p><p>Hasta ahora, no hemos visto algún ejemplo de objetos de arreglo. En esta seccion, usaremos los siguientes arreglos de objetos para explicar y demostrar los métodos a continuación.</p><p>Este arreglo contiene la información de algunos estudiantes suscritos a varios cursos pagados:</p><pre><code class="language-js">let estudiantes = [
   {
      'id': 001,
      'f_nombre': 'Alex',
      'l_nombre': 'B',
      'genero': 'M',
      'casado': false,
      'edad': 22,
      'paga': 250,  
      'cursos': ['JavaScript', 'React']
   },
   {
      'id': 002,
      'f_nombre': 'Ibrahim',
      'l_nombre': 'M',
      'genero': 'M',
      'casado': true,
      'edad': 32,
      'paga': 150,  
      'cursos': ['JavaScript', 'PWA']
   },
   {
      'id': 003,
      'f_nombre': 'Rubi',
      'l_nombre': 'S',
      'genero': 'F',
      'casado': false,
      'edad': 27,
      'pago': 350,  
      'cursos': ['Blogging', 'React', 'UX']
   },
   {
      'id': 004,
      'f_nombre': 'Zack',
      'l_nombre': 'F',
      'genero': 'M',
      'casado': true,
      'edad': 36,
      'pago': 250,  
      'cursos': ['Git', 'React', 'Branding']
   } 
];</code></pre><p>Bien vamos a empezar. Todos los métodos de arreglo iterativo toma funciones como un argumento. Tú necesitas especificar la lógica para iterar y aplicarla en la función.</p><h3 id="el-m-todo-de-arreglo-filter-">El método de arreglo filter()</h3><p>El método filtró crea un nuevo arreglo con todos los elementos que satisfagan la condición mencionada en la función. Vamos a encontrar el estudiante que es femenino. Entonces la condición de filtro debería ser que el genero sea igual a 'F'.</p><pre><code class="language-js">const femaleStudents = students.filter((element, index) =&gt; {
  return element.gender === 'F';
})

console.log(femaleStudents);</code></pre><p>El output es este:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/05/image-50.png" class="kg-image" alt="image-50" width="600" height="400" loading="lazy"></figure><p>Eso está bien. El estudiante con el nombre <code>Rubi</code> es la única estudiante femenina que tenemos hasta ahora.</p><h3 id="el-m-todo-de-array-map-">El método de array map()</h3><p> El método <code>map()</code><strong> &nbsp;</strong>crea un nuevo arreglo iterando a través de los elementos y aplicando la lógica que proveemos en la función como argumento. Vamos a crear un nuevo arreglo de los nombres completos de todos los estudiantes en el arreglo de <code>students</code>.</p><pre><code class="language-js">
const fullNames = students.map((element, index) =&gt; {
  return {'fullName': element['f_name'] + ' ' + element['l_name']}
});

console.log(fullNames);</code></pre><p>El output se veria como esto:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/05/image-51.png" class="kg-image" alt="image-51" width="600" height="400" loading="lazy"></figure><p>Aquí veremos un nuevo arreglo con el <code>fullName</code> &nbsp;propiedades que son calculadas usando las propiedades &nbsp;<code>f_name</code> &nbsp;y &nbsp;<code>l_name</code> &nbsp;de cada objeto de estudiantes.</p><h3 id="el-m-todo-de-arreglo-reduce-">El método de arreglo reduce()</h3><p>El método <code>reduce()</code> aplica la función reducer de cada elemento del arreglo y regresa el valor output. Vamos a aplicar la función reducer en el arreglo <code>students</code> para calcular la cantidad total a pagar por todos los estudiantes.</p><pre><code class="language-js">const total = students.reduce(
   (accumulator, student, currentIndex, array) =&gt; {
      accumulator = accumulator + student.paid;
      return (accumulator);
   }, 
0);

console.log(total); // 1000</code></pre><p>En el código de arriba,</p><ul><li> Iniciamos con el &nbsp;<code>accumulator</code> con &nbsp;<code>0</code>.</li><li> Aplicamos el método <code>reduce</code> en cada uno de los objetos <code>student</code>. &nbsp;Accedemos la propiedad <code>paid</code> y la añadimos al accumulator.</li><li> Finalmente regresaremos el accumulator.</li></ul><h3 id="el-m-todo-de-arreglo-some-">El método de arreglo some().</h3><p>El método <code>some()</code> regresa un valor booleano (verdadero/falso) basado al menos en un elemento en el arreglo pasando la condición en la función. vamos a ver si ahí hay algún estudiante menor de 30 años de edad.</p><pre><code class="language-js">let hasStudentBelow30 = students.some((element, index) =&gt; {
  return element.age &lt; 30;
});

console.log(hasStudentBelow30); // true</code></pre><p>Sí, vamos a ver si hay al &nbsp;menos un estudiante menor de 30.</p><h3 id="el-m-todo-de-arreglo-find-">El método de arreglo find()</h3><p>Usando el metodo <code>some()</code>, tenemos que ver si hay algún estudiante debajo de la edad de 30 años. Vamos a encontrar que estudiante es.</p><p>Para hacer eso, usaremos el método <code>find()</code>. Este regresa el primer elemento encontrado del arreglo que satisface la condición de la función.</p><p>Los arreglos tienen otro metodo relacionado, <code>findIndex()</code>, eso regresa el índice del elemento que encontramos usando el método <code>find()</code>. Si no hay elementos que cumplan la condición el <code>findIndex()</code> regresa <code>-1</code>.</p><p>En el ejemplo de abajo, &nbsp;pasamos la función al método <code>find()</code> que checa la edad de cada estudiante. Y regresa el &nbsp;estudiante emparejado cuando la condición es cumplida.</p><pre><code class="language-js">const estudiante = estudiantes.find((element, index) =&gt; {
  return element.age &lt; 30;
});

console.log(estudiante);</code></pre><p>El resultado es este:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/05/image-52.png" class="kg-image" alt="image-52" width="600" height="400" loading="lazy"></figure><p>Como vimos, &nbsp;Alex es quien tiene 22 años de edad. Lo encontramos.</p><h3 id="el-m-todo-de-arreglo-every-">El método de arreglo every()</h3><p>El método <code>every()</code> detecta si cada &nbsp;elemento del arreglo satisface la condición pasada en la función. Vamos a encontrar si todos los estudiantes que se han suscrito al menos dos cursos.</p><pre><code class="language-js">const atLeastTwoCourses = students.every((elements, index) =&gt; {
  return elements.courses.length &gt;= 2;
});

console.log(atLeastTwoCourses); // true</code></pre><p>Como es esperado, podemos ver que el resultado es <code>true</code>.</p><h2 id="m-todos-de-arreglos-propuestos">Métodos de arreglos propuestos</h2><p>En mayo de 2021, ECMAScript tiene un método en propuesta, el método at ().</p><h3 id="el-m-todo-at-"> El método at()</h3><p>El método propuesto <code>at()</code> debería ayudarte a acceder a los elementos de un arreglo usando un número de índice negativo. A partir de ahora, esto no es posible. tu puede acceder elemento solo desde el inicio del arreglo usando un número de índice positivo.</p><p>Acceder elementos de la parte de atrás del arreglo es posible usando el valor length. Con la inclusión del método <code>at()</code>, tú podrás acceder a los elementos usando ambos índices positivo y negativo con un solo método.</p><pre><code class="language-js">const junkFoodILove = ['?', '?', '?', '?', '?', '?', '?', '?'];

junkFoodILove.at(0); // ?
junkFoodILove.at(3); // ?
junkFoodILove.at(-1); // ?
junkFoodILove.at(-5); // ?
junkFoodILove.at(-8); // ?
junkFoodILove.at(10); // undefined
</code></pre><p>Aquí hay una demostracion rapida de ello:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/06/demo-3.gif" class="kg-image" alt="demo-3" width="600" height="400" loading="lazy"><figcaption>Javascript Array at() method demo</figcaption></figure><p>Puedes usar este polyfill para lograr la funcionalidad del método <code>at()</code> hasta que este método sea añadido al lenguaje JavaScript. Por favor checa este repositorio de GitHub &nbsp;para &nbsp;los ejemplos del método <code>at()</code>: <a href="https://github.com/atapas/js-array-at-method">https://github.com/atapas/js-array-at-method</a>.</p><h2 id="antes-que-terminemos-">Antes que terminemos...</h2><p>Espero que te haya resultado útil este artículo, y te ayude a entender los arreglos de JavaScript más claramente. Por favor practica los ejemplos multiples veces para obtener un buen retenimiento de ellos. Puedes encontrar todos los ejemplos de codigo en mi repositorio de GitHub.</p><p>Conectemonos. Tú puedes encontrarme activo en <a href="https://twitter.com/tapasadhikary">Twitter (@tapasadhikary)</a>. Por favor siente libre de dar follow.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Aprende la propiedad  Box-Shadow de CSS codificando un hermoso botón ✨ ]]>
                </title>
                <description>
                    <![CDATA[ Hoy vamos a aprender como usar la propiedad de  CSS box-shadow para hacer hermosos componentes de un sitio web. A lo largo del camino, crearemos un botón y obtendremos la experiencia usando esta propiedad. Vamos  a empezar ?️. Tabla de contenidos  *  Porque deberías usar la propiedad de ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/aprende-la-propiedad-box-shadow-de-css-codificando-un-hermoso-boton/</link>
                <guid isPermaLink="false">60e46951ce2597091235ebf3</guid>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Sil Zubikarai ]]>
                </dc:creator>
                <pubDate>Wed, 04 Aug 2021 01:58:47 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2021/08/learnCSS.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Hoy vamos a aprender como usar la propiedad de &nbsp;CSS box-shadow para hacer hermosos componentes de un sitio web. A lo largo del camino, crearemos un botón y obtendremos la experiencia usando esta propiedad. Vamos &nbsp;a empezar ?️.</p><h2 id="tabla-de-contenidos">Tabla de contenidos</h2><ul><li> Porque deberías usar la propiedad de CSS box-shadow.</li><li> La sintaxis de la propiedad box-shadow</li><li> Como hacer un botón usando la propiedad <strong>box-shadow</strong></li><li> Recursos Adicionales.</li><li> ¿Qué es un <strong>inset </strong>en la<strong> </strong>propiedad CSS <strong>box-shadow?</strong></li></ul><h2 id="puedes-ver-este-tutorial-en-youtube-si-quieres-">Puedes ver este tutorial en YouTube si quieres:</h2><figure class="kg-card kg-embed-card" data-test-label="fitted">
        <div class="fluid-width-video-container">
          <div style="padding-top: 56.17845730696113%;" class="fluid-width-video-wrapper">
            <iframe src="https://www.youtube.com/embed/4Clc-Bb5sY4?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: 22px; vertical-align: middle; position: absolute; top: 0px; left: 0px; width: 692.244px; height: 388.892px;"></iframe>
          </div>
        </div>
      </figure><h2 id="-por-qu-deber-as-usar-la-propiedad-box-shadow-de-css"><strong>¿Por qué deberías usar la propiedad &nbsp;box-shadow de CSS?</strong></h2><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/06/Frame-1.png" class="kg-image" alt="Frame-1" width="600" height="400" loading="lazy"></figure><p><strong>Atención con los pequeños detalles</strong> separan un buen sitio web de uno con excelente apariencia. Si tú quieres añadir esos pequeños detalles a tu sitio web, tú deberías definitivamente usar esta propiedad como muchas otras propiedades.</p><p>Mira estos ejemplos. ?</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/06/Page-1--1-.png" class="kg-image" alt="Page-1--1-" 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: 17.6px; vertical-align: baseline; color: var(--gray85);">A Website Design</strong></figcaption></figure><p>Presta mucha atención al botón de componentes en la imagen de arriba. Tú verás que tenemos algunas sombras ☝</p><p>Vamos a examinar estos botones más a profundidad: ?</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/06/Frame-27.png" class="kg-image" alt="Frame-27" 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: 17.6px; vertical-align: baseline; color: var(--gray85);">Button with no box-shadow property</strong></figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/06/Frame-28.png" class="kg-image" alt="Frame-28" 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: 17.6px; vertical-align: baseline; color: var(--gray85);">Button using the box-shadow property</strong></figcaption></figure><p>Tú puedes decir que el último se ve más dinámico e interesante, así como tiene más atención al detalle. Esto es llamado <strong>drop shadow effect</strong>. Vamos a ver como implementarlo en nuestro código.</p><h1 id="configuraci-n-del-proyecto">Configuración del proyecto</h1><h3 id="html"><strong><strong>HTML</strong></strong></h3><p>Escribe este código adentro de la etiqueta body:</p><pre><code class="language-html">&lt;div class="box-1"&gt; A Button &lt;/div&gt;</code></pre><h3 id="css"><strong><strong>CSS</strong></strong></h3><p>Limpia la configuración por defecto de tu navegador así:</p><pre><code class="language-css">*{
   margin: 0px;
   padding: 0px;
   box-sizing: border-box;
   font-family: sans-serif;
}</code></pre><p>Ahora, vamos a crear un botón con el siguiente código:</p><pre><code class="language-css">.box-1{
   margin: 100px 0 0 100px;
   height: 80px;
   width: 200px;
   border: 2px solid black;
   border-radius: 8px;
   font-size: 40px;

   display: grid;
   place-content: center;
}
</code></pre><p>Estamos listos, ¡ahora vamos a empezar a codificar!</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/06/Frame-2.png" class="kg-image" alt="Frame-2" width="600" height="400" loading="lazy"></figure><h2 id="la-sintaxis-de-la-propiedad-box-shadow">La sintaxis de la propiedad box-shadow</h2><p></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/06/Frame-3-1.png" class="kg-image" alt="Frame-3-1" 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: 17.6px; vertical-align: baseline; color: var(--gray85);">All the inputs of box-shadow property</strong></figcaption></figure><p>Aquí está la sintaxis para la propiedad box-shadow: ?</p><pre><code class="language-css">box-shadow: offset-x | offset-y | blur-radius | spread-radius | color ;</code></pre><p>Vamos a mirar cada parte con más detalle. </p><h2 id="como-usar-offset-x-en-la-propiedad-box-shadow-">Como usar Offset-x en la propiedad box-shadow.</h2><p>Usarás la propiedad offset-x para mover la sombra izquierda y derecha a lo largo de X-Axis. Aquí hay un demo para mostrar de como se vería: ?</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://media.giphy.com/media/Mzxh8CdUTaxgzzj9ml/giphy.gif" class="kg-image" alt="giphy" 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: 17.6px; vertical-align: baseline; color: var(--gray85);">We can move the shadow left &amp; right</strong></figcaption></figure><p>Para recrear estos resultados, escribe el siguiente código en tu CSS: ?</p><pre><code class="language-css">/* offset-x | offset-y | color */
.box-1{
   box-shadow: -50px 0px rgba(0,0,0,0.5);
}

/*Or, you can write*/

.box-1{
   box-shadow: 50px 0px rgba(0,0,0,0.5);
}</code></pre><h2 id="como-usar-offset-y-en-la-propiedad-box-shadow">Como Usar Offset-y en la Propiedad box-shadow</h2><p>Usarás la propiedad offset-y para mover la sombra arriba y abajo a lo largo de Y-Axis. Aquí hay un demo de como se vería:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://media.giphy.com/media/Ss9Qnrq9PFBpAfVLk8/giphy.gif" class="kg-image" alt="giphy" 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: 17.6px; vertical-align: baseline; color: var(--gray85);">We can move the shadow top &amp; bottom</strong></figcaption></figure><p>Para recrear estos resultados escribe lo siguiente en tu CSS: &nbsp;?</p><pre><code class="language-css">/* offset-x | offset-y | color */
.box-1{
   box-shadow: 0px -50px rgba(0,0,0,0.5);
}

/*Or, you can write*/

.box-1{
   box-shadow: 0px -50px rgba(0,0,0,0.5);
}</code></pre><h3></h3><h2 id="como-combinar-ambos-offset-x-y-offset-y">Como combinar ambos offset-x &nbsp;y &nbsp;offset-y</h2><p>Escribe el siguiente código en tu CSS: ?</p><pre><code class="language-css">.box-1{
   box-shadow: 10px 10px rgba(0,0,0,0.5);
}</code></pre><p>Aquí el resultado con box shadow mostrando en la derecha y en el fondo del botón: ?</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/06/Frame-6-1.png" class="kg-image" alt="Frame-6-1" 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: 17.6px; vertical-align: baseline; color: var(--gray85);">Our button with box shadow</strong></figcaption></figure><h2 id="como-usar-blur-radius-en-la-propiedad-box-shadow">Como usar blur-radius en la propiedad box-shadow</h2><p>La propiedad blur-radius difuminará el color alrededor de nuestro botón, como esto: ?</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://media.giphy.com/media/5fRA7jzOwtmXnT57Ne/giphy.gif" class="kg-image" alt="giphy" 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: 17.6px; vertical-align: baseline; color: var(--gray85);">Experimenting w/ blur radius</strong></figcaption></figure><p>Para duplicar los resultados, escribe lo siguiente en tu CSS: ?</p><pre><code class="language-css">/* offset-x | offset-y | blur-radius | color */

.box-1{
/* play around with ? this */
   box-shadow: 0 0 50px rgba(0,0,0,0.8);
}</code></pre><h2 id="como-usar-spread-radius-en-la-propiedad-box-shadow">Como usar spread-radius en la propiedad box-shadow</h2><p>Este valor extiende nuestra sombra alrededor de nuestro botón, así: ?</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://media.giphy.com/media/FfVw2vxOonQAjkFc7B/giphy.gif" class="kg-image" alt="giphy" 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: 17.6px; vertical-align: baseline; color: var(--gray85);">Experimenting w/ spread radius</strong></figcaption></figure><p>Vamos a recrear los resultados con el siguiente código CSS:</p><pre><code class="language-css">/* offset-x | offset-y | blur-radius | spread-radius | color */

.box-1{
/*  play around with ? this */
   box-shadow: 0 0 0 50px rgba(0,0,0,0.5);
}
</code></pre><h2 id="como-a-adir-una-sombra-paralela-a-un-bot-n">Como añadir &nbsp;una sombra paralela a un botón</h2><p>Vamos a poner junto lo que hemos aprendido hasta el momento y añadir el efecto de una sombra paralela nuestro botón: ?</p><pre><code class="language-css">.box-1{
   box-shadow: 8px 10px 10px 1px rgba(0,0,0,0.5);
}</code></pre><p>El resultado se vería así: ?</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/06/Frame-6--1--1.png" class="kg-image" alt="Frame-6--1--1" 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: 17.6px; vertical-align: baseline; color: var(--gray85);">The result</strong></figcaption></figure><h2 id="recursos-adicionales">Recursos Adicionales</h2><ul><li>[<a href="https://getcssscan.com/css-box-shadow-examples">GetCssScan</a>] - &nbsp;Para obtener box shadows lista para usarse.</li><li>[<a href="https://keyframes.app/animate/">keyframes.app</a>] - &nbsp;para probar y practicar estas propiedades en tiempo real.</li><li><a href="https://flatuicolors.com/">flatuicolors</a> - &nbsp;Hermosas paletas de colores</li></ul><h2 id="-bonus-tip-"><strong><strong>✨ Bonus Tip ✨</strong></strong></h2><h1 id="-qu-es-inset-en-la-propiedad-css-box-shadow">¿Qué es inset en la propiedad CSS box-shadow?</h1><p>Hay una palabra clave llamada <code>inset</code> que tú puedes usar con la propiedad box-shadow. Esto pone la sombra adentro de nuestro botón en lugar de extenderla por el exterior. Escribe este código CSS para experimentar con el: ?</p><pre><code class="language-css">.box-1{
   box-shadow: inset 8px 10px 10px 1px rgba(0,0,0,0.5);
}</code></pre><p>Aquí 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-6--2--4.png" class="kg-image" alt="Frame-6--2--4" 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: 17.6px; vertical-align: baseline; color: var(--gray85);">Effect of the inset keyword</strong></figcaption></figure><h1 id="conclusi-n"><strong><strong>Conclusi</strong>ó<strong>n</strong></strong></h1><p>Ahora puedes usar con confianza la propiedad box-shadow para añadir no solo sombras paralelas pero también poner mayor atención a los detalles de tus proyectos.</p><p>Aquí esta tu medalla por leer hasta el final. ❤️</p><h3 id="sugerencias-y-cr-ticas-son-altamente-apreciadas-"><strong>Sugerencias y críticas son altamente 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="usxsz1lstuwry3jlly4d" width="600" height="400" loading="lazy"></figure><ul><li><strong><strong>YouTube<a href="https://youtube.com/c/joyshaheb"> / Joy Shaheb</a></strong></strong></li><li><strong><strong>LinkedIn<a href="https://www.linkedin.com/in/joyshaheb/"> / JoyShaheb</a></strong></strong></li><li><strong><strong>Twitter<a href="https://twitter.com/JoyShaheb"> / JoyShaheb</a></strong></strong></li><li><strong><strong>Instagram<a href="https://www.instagram.com/joyshaheb/"> / JoyShaheb</a></strong></strong></li></ul><h1 id="credits"><strong><strong>Credits</strong></strong></h1><ul><li><a href="https://www.freepik.com/free-vector/young-girl-thinking-face-wondering-cartoon-illustration_11652601.htm#page=1&amp;query=worried%20illustration&amp;position=31">Young Girl</a></li><li><a href="https://www.freepik.com/free-vector/cute-cat-playing-with-box-cartoon_13747509.htm?query=happy%20illustration">Cute Kat</a>, <a href="https://www.freepik.com/free-vector/kawaii-cat-unicorn-character-collection_5481560.htm">Unicorn cat</a></li></ul><p><br>Traducido del artículo: <strong><a href="https://www.freecodecamp.org/news/css-box-shadow-property-with-examples/">Learn the CSS Box-Shadow Property by Coding a Beautiful Button</a></strong> por <a href="https://www.freecodecamp.org/news/author/joy/">Joy Shaheb</a>.</p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
