<?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[ Portafolio - 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[ Portafolio - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/espanol/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sun, 24 May 2026 19:37:31 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/espanol/news/tag/portafolio/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ 8 Ideas de proyectos en React.js para ayudarte a aprender haciendo ]]>
                </title>
                <description>
                    <![CDATA[ Una de las mejores formas de aprender es haciendo. Pero a veces a los desarrolladores se les dificulta la pregunta de qué construir. Aquí hay ocho ideas de proyectos, con resumen del proyecto e ideas de bosquejo incluidas, para que puedas empezar a aprender mediante la práctica.  * Negocios ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/8-react-js-project-ideas-to-help-you-start-learning-by-doing/</link>
                <guid isPermaLink="false">64e3642018f86303e731f1d3</guid>
                
                    <category>
                        <![CDATA[ React ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Proyectos ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Portafolio ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Constanza Areal ]]>
                </dc:creator>
                <pubDate>Mon, 16 Oct 2023 06:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2023/10/50-react-projects.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/8-reactjs-project-ideas-to-start-learning-by-doing/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">8 React.js Project Ideas to Help You Start Learning by Doing</a>
      </p><p>Una de las mejores formas de aprender es haciendo. Pero a veces a los desarrolladores se les dificulta la pregunta de qué construir.</p><p>Aquí hay ocho ideas de proyectos, con resumen del proyecto e ideas de bosquejo incluidas, para que puedas empezar a aprender mediante la práctica.</p><ul><li><a href="#mapa-estadistica">Negocios y Mundo Real: Mapa de información estadística</a></li><li><a href="#instrumento-musical">Divertido e interesante: Instrumento musical</a></li><li><a href="#blog">Personal y Portfolio: Blog</a></li><li><a href="#cuaderno-notas">Productividad: Notebook</a></li><li><a href="#space-invaders">Puzzles y Juegos: Space Invaders</a></li><li><a href="#tema-gatsby">Herramientas y Librerías: Tema para la librería Gatsby</a></li><li><a href="#webmentions">Complementos para el proyecto: Webmentions</a></li><li><a href="#product-hunt">Clon: Product Hunt</a></li></ul><p>Esto es un avance del libro electrónico gratuito <a href="https://50reactprojects.com/"><em><em>50 Projects for React &amp; the Static Web</em></em></a><em>. Puedes encontrar las 50 ideas de proyecto (incluidas estas 8) en <em><a href="https://50reactprojects.com/">50reactprojects.com</a>.</em></em></p><!--kg-card-begin: html--><h2 id="mapa-estadistica"><strong>Mapa de información estadística</strong></h2><!--kg-card-end: html--><p><strong>Categoría: Negocios y Mundo real</strong></p><p>Crea un mapa que muestre información estadística y geográfica sobre la enfermedad COVID-19.</p><h3 id="resumen"><strong>Resumen</strong></h3><p>Tratar de abordar una pandemia global significa que los virus como el coronavirus impactan en el mundo de forma distinta, de acuerdo a la ubicación geográfica.</p><p>Tener un mapa detallado con la información estadística de cada país es útil para poder determinar en que países tuvo un mayor impacto.</p><h3 id="nivel-1"><strong>Nivel 1</strong></h3><p>La manera más fácil de ver las estadísticas de cada país es tener un mapa navegable, con las estadísticas de ese país al lado de su nombre. <br><br>Crea una aplicación de mapeo que use la API Coronavirus disease.sh para añadir marcadores para cada país y el número de casos de COVID-19.</p><h3 id="nivel-2"><strong>Nivel 2</strong></h3><p>Si bien es útil tener estadísticas de cada país, sería aún más útil poder comparar esas estadísticas con el número de casos en todo el mundo.<br><br>Añade un tablero estadístico que muestre el número de casos de COVID-19 alrededor del mundo y cualquier otra estadística de la API que sea útil.</p><h3 id="nivel-3"><strong>Nivel 3</strong></h3><p>Obtener estadísticas actualizadas nos sirve para entender la situación mundial actual, pero ¿cómo se comparan históricamente?</p><p>Usa la API de información estadística para mostrar gráficos en el tablero que den contexto al crecimiento y esparcimiento del virus.</p><h3 id="tareas-a-realizar"><strong>Tareas a realizar</strong></h3><ul><li>Crear una nueva aplicación de mapa</li><li>Obtener de la API información de los países</li><li>Añadir marcadores al mapa</li><li>Añadir estadísticas a los marcadores</li><li>Obtener de la API información mundial</li><li>Crea un tablero estadístico</li><li>Añadir estadísticas mundiales</li><li>Obtener de la API información histórica</li><li>Añadir gráficos al mapa</li></ul><h3 id="caja-de-herramientas"><strong>Caja de herramientas</strong></h3><ul><li><a href="https://disease.sh/" rel="nofollow">Open Disease Data API</a> (disease.sh)</li><li><a href="https://react-leaflet.js.org/" rel="nofollow">React Leaflet</a> (react-leaflet.js.org)</li><li><a href="https://github.com/colbyfayock/gatsby-starter-leaflet">Gatsby Leaflet Starter</a> (github.com)</li></ul><h3 id="tutoriales"><strong>Tutoriales</strong></h3><ul><li><a href="https://www.freecodecamp.org/news/how-to-create-a-coronavirus-covid-19-dashboard-map-app-in-react-with-gatsby-and-leaflet/">Cómo crear una aplicación de mapeo del Coronavirus en React con Gatsby y Leaflet</a> (en inglés, freecodecamp.org)</li><li><a href="https://www.freecodecamp.org/news/how-to-add-coronavirus-covid-19-case-statistics-to-your-map-dashboard-in-gatsby-and-react-leaflet/">Cómo agregar estadísticas de casos de Coronavirus (COVID-19) a tu mapa de información con Gatsby</a> (en inglés, freecodecamp.org)</li><li><a href="https://egghead.io/playlists/mapping-with-react-leaflet-e0e0?af=atzgap">Mapear con React Leaflet</a> (en inglés, egghead.io)</li></ul><h3 id="inspiraci-n"><strong>Inspiración</strong></h3><ul><li><a href="https://coronavirus.jhu.edu/map.html">Tablero COVID-19 del Centro para Sistemas, Ciencia e Ingeniería de la Universidad Johns Hopkins (UJH)</a> (coronavirus.jhu.ed)</li><li><a href="https://coronavirus-map-dashboard.netlify.app/">Versión demo del tablero Coronavirus (COVID-19)</a> (coronavirus-map-dashboard.netlify.app) </li></ul><h3 id="idea-de-bosquejo"><strong>Idea de bosquejo</strong><br></h3><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/08/Coronavirus---Layout.jpg" class="kg-image" alt="Bosquejo del mapa de información estadística sobre Coronavirus" width="600" height="400" loading="lazy"><figcaption>Idea de maquetado del mapa estadístico&nbsp;</figcaption></figure><!--kg-card-begin: html--><h2 id="instrumento-musical"><strong>Instrumento musical</strong></h2><!--kg-card-end: html--><p><strong>Categoría: Divertido e Interesante</strong></p><p>Crear un piano interactivo en el cual puedas tocar música usando tu teclado.</p><h3 id="resumen-1"><strong>Resumen</strong></h3><p>No todos tienen el placer de tener un instrumento musical, pero quizás si tienen una computadora, un teléfono o una tablet. Tener un piano es una forma poderosa de que las personas puedan tocar música aún si nunca tuvieron oportunidad de hacerlo.</p><h3 id="nivel-1-1"><strong>Nivel 1 </strong></h3><p>Usando el navegador y APIs de sonidos web, es posible crear sonidos que, al usarlos todos juntos, pueden crear una melodía.<br><br>Crea una serie de botones que al apretarlos suenen las notas en una escala.</p><h3 id="nivel-2-1"><strong>Nivel 2</strong></h3><p>Aunque no todos hayan tocado un instrumento, el concepto y la interfaz de un instrumento como el piano es generalmente más intuitivo que un par de botones.<br><br>Crea un bosquejo de un teclado de piano a través de botones que funcionen haciendo clic o con el teclado de la computadora.</p><h3 id="nivel-3-1"><strong>Nivel 3</strong></h3><p>Si bien tenemos un espacio limitado en el navegador, hay una amplia variedad de notas, escalas y sonidos que un teclado eléctrico podría reproducir con algunos efectos adicionales.<br><br>Crea botones para alternar los sonidos de las notas cuando están activados.</p><h3 id="tareas-a-realizar-1"><strong>Tareas a realizar</strong></h3><ul><li>Crear botones</li><li>Realizar un sonido cuando se hace clic</li><li>Ubicar las notas en una escala</li><li>Crear el bosquejo del piano</li><li>Programar eventos del teclado</li><li>Crear efectos para el bosquejo</li><li>Alternar efectos de audio</li></ul><h3 id="caja-de-herramientas-1"><strong>Caja de herramientas</strong></h3><ul><li><a href="https://github.com/greena13/react-hotkeys">React HotKeys</a> (en inglés, github.com)</li></ul><h3 id="tutoriales-1"><strong>Tutoriales</strong></h3><ul><li><a href="https://dev.to/ganeshmani/building-a-piano-with-react-hooks-3mih">Construyendo un piano con React Hooks</a> (en inglés, dev.to)</li><li><a href="https://www.freecodecamp.org/news/javascript-piano-keyboard/">Cómo construir un teclado de piano con Vanilla JavaScript</a> (en inglés, freecodecamp.org)</li><li> <a href="https://dev.to/shimphillip/building-a-piano-with-tone-js-5c2f">¡Construye un piano con tone.js!</a> (en inglés, dev.to)</li><li> <a href="https://frankforce.com/?p=7617#pianostory">Como creé un piano de solo 1kb de JavaScript</a> (en inglés,frankforce.com)</li></ul><h3 id="inspiraci-n-1"><strong>Inspiración</strong></h3><ul><li><a href="https://react-guitar.com/" rel="nofollow">React Guitar</a> (en inglés, react-guitar.com)</li></ul><h3 id="idea-de-bosquejo-1"><strong>Idea de bosquejo</strong></h3><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/08/Musical-Instrument---Layout.jpg" class="kg-image" alt="Musical-Instrument---Layout" width="600" height="400" loading="lazy"><figcaption>Idea de bosquejo del instrumento musical</figcaption></figure><!--kg-card-begin: html--><h2 id="blog"><strong>Blog</strong></h2><!--kg-card-end: html--><p><strong><strong>Categorí</strong>a<strong>: Personal</strong> y<strong> Portfolio</strong></strong></p><p>Crea un blog que puedas usar para compartir tu experiencia laboral y proyectos.</p><h3 id="resumen-2"><strong>Resumen</strong></h3><p>Para cualquier campo laboral, tener un blog para compartir tus experiencias es una buena forma para que los demás puedan saber en que estás trabajando y que los demás puedan aprender de tus experiencias.<br><br>También es una manera de reforzar lo que ya aprendiste para poder usarlo como referencia a ello en el futuro.</p><h3 id="nivel-1-2"><strong>Nivel 1</strong></h3><p>Para poder compartir tus experiencias, necesitas una estructura de sitio web que te permita tanto crear nuevo contenido como administrar el que ya existe. </p><p>Una forma de hacerlo es crear archivos de lenguaje de marcado para que tu sitio web pueda utilizarlos para crear nuevas páginas y mostrar los distintos posteos. <br><br>Crea un blog usando archivos de lenguaje de marcado como fuente del contenido.</p><h3 id="nivel-2-2"><strong>Nivel 2</strong></h3><p>Tener tu contenido en archivos de lenguaje de marcado es una buena manera de gestionar contenido estático pero quizás no es lo mejor estar editando el código cada vez que escribes o editas un posteo. <br><br>Integrar un sistema de gestión del contenido que te permita añadir nuevo contenido o editar el que ya existe con una interfaz de usuario bonita.</p><h3 id="nivel-3-2"><strong>Nivel 3</strong></h3><p>Si vas a compartir código en tu blog, HTML viene con herramientas nativas integradas que te ayudan a darle formato al código de forma legible. Pero éste no incluye ninguna herramienta que ayuda a resaltar la sintaxis del código y de esta manera mejorar la legibilidad.<br><br>Integra una herramienta que resalte los bloques de códigos para hacerlos más legibles.</p><h3 id="lista-de-tareas"><strong>Lista de tareas</strong></h3><ul><li>Crear un blog</li><li>Añadir primero contenido estático</li><li>Busca contenido estático</li><li>Integra un CMS</li><li>Añadir código al contenido</li><li>Añadir herramienta para resaltar la sintaxis del código</li></ul><h3 id="herramientas"><strong>Herramientas</strong></h3><ul><li><a href="https://www.netlifycms.org/" rel="nofollow">Netlify CMS</a> (en inglés, netlifycms.org)</li><li><a href="https://prismjs.com/" rel="nofollow">Prism.js</a> (en inglés, prismjs.com)</li></ul><h3 id="tutoriales-2"><strong>Tutoriales</strong></h3><ul><li> <a href="https://www.gatsbyjs.org/tutorial/blog-netlify-cms-tutorial/">Creando un Blog con Gatsby y Netifly CMS</a> (en inglés, gatsbyjs.org)</li><li> <a href="https://www.freecodecamp.org/news/build-a-developer-blog-from-scratch-with-gatsby-and-mdx/">Cómo crear desde cero tu blog sobre código usando Gatsby y MDX</a> (en inglés, freecodecamp.org)</li></ul><p><strong>Inspiración</strong></p><ul><li><a href="https://gatsby-netlify-cms.netlify.app/" rel="nofollow">Gatsby Netlify CMS Starter</a> (gatsby-netlify-cms.netlify.app)</li></ul><h3 id="idea-de-bosquejo-2"><strong>Idea de bosquejo</strong></h3><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/08/Blog---Layout.jpg" class="kg-image" alt="Blog---Layout" width="600" height="400" loading="lazy"><figcaption>Idea de bosquejo de Blog</figcaption></figure><!--kg-card-begin: html--><h2 id="cuaderno-notas"><strong>Cuaderno de notas</strong></h2><!--kg-card-end: html--><p><strong><strong>Categorí</strong>a<strong>: Productivi</strong>dad</strong></p><p>Crea una app de notas para agregar, gestionar y organizar notas.</p><h3 id="resumen-3"><strong>Resumen</strong></h3><p>Tomar notas es una gran manera de registrar nuestros pensamientos o aspectos claves de una reunión. Para poder encontrarlos después, &nbsp;es importante poder organizarlos de manera fácil.</p><h3 id="nivel-1-3"><strong>Nivel 1</strong></h3><p>El primer requisito de un cuaderno de notas es que se pueda hacer notas en él. Esto puede ser bastante simple para empezar ya que necesitamos algún campo de entrada que tome lo que escribas ahí y lo guarde en algún lado para poder usarlo más tarde.<br><br>Crea un formulario para añadir nuevas notas y visualizarlas en una lista.</p><h3 id="nivel-2-3"><strong>Nivel 2</strong></h3><p>Para poder encontrar después las notas, vas a querer tener una forma de organizarlas y buscarlas. Eso incluye agregar categorías o algún tipo de sistema de etiquetado y también armar una interfaz de usuario para poder hacer búsquedas. <br><br>Agrega la posibilidad de etiquetar o categorizar notas y &nbsp;un campo de búsqueda para filtrarlas.</p><h3 id="nivel-3-3"><strong>Nivel 3</strong></h3><p>Aunque nos demos cuenta o no, podemos encontrar conexiones entre nuestros pensamientos y nuestras notas. Esa red de pensamientos nos servirá para poder usar en nuestro cuaderno de notas.<br><br>Agrega un sistema de enlazado de notas inspirado en Roam Research para crear una red de pensamientos.</p><h3 id="lista-de-tareas-1"><strong>Lista de tareas</strong></h3><ul><li>Crear un formulario</li><li>Almacenar nuevas notas</li><li>Listar notas</li><li>Agregar etiquetas o categorías</li><li>Agregar búsqueda de notas</li><li>Agregar red de notas</li></ul><h3 id="caja-de-herramientas-2"><strong>Caja de herramientas</strong></h3><ul><li><a href="https://github.com/aengusmcmillin/gatsby-theme-brain">Gatsby Brain Theme</a> (github.com)</li><li><a href="https://fusejs.io/" rel="nofollow">Fuse.js</a> (en inglés, fusejs.io)</li></ul><h3 id="tutoriales-3"><strong>Tutoriales</strong></h3><ul><li><a href="https://www.freecodecamp.org/news/how-to-add-search-to-a-react-app-with-fuse-js/">Cómo agregar una búsqueda a una aplicación React con Fuse.js</a> (en inglés, freecodecamp.org)</li></ul><h3 id="inspiraci-n-2"><strong>Inspiración</strong></h3><ul><li><a href="https://foambubble.github.io/foam/" rel="nofollow">Foam</a> (en inglés, foambubble.github.io)</li><li><a href="https://roamresearch.com/" rel="nofollow">Roam Research</a> (en inglés, roamresearch.com)</li><li><a href="https://github.com/mathieudutour/gatsby-digital-garden">Gatsby Garden Theme</a> (en inglés, github.com)</li></ul><h3 id="idea-de-bosquejo-3"><strong>Idea de bosquejo</strong></h3><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/08/Notebook---Layout.jpg" class="kg-image" alt="Notebook---Layout" width="600" height="400" loading="lazy"><figcaption>Idea de bosquejo para el cuaderno de notas</figcaption></figure><!--kg-card-begin: html--><h2 id="space-invaders"><strong>Space Invaders</strong></h2><!--kg-card-end: html--><p><strong><strong>Categorí</strong>a<strong>: Puzzles </strong>y Juegos</strong></p><p>Crear un juego de disparos de naves espaciales basado en el Space Invaders para disparar a varias olas de naves enemigas.</p><h3 id="resumen-4"><strong>Resumen</strong></h3><p>Space Invaders es un videojuego clásico de arcade en el cual te enfrentas a una invasión alienígena. Mientras tratas de dispararles, ellos devuelven el fuego y solo tienes protección limitada dentro de tu nave espacial hasta que se acaba y quedas al descubierto para que te disparen.</p><h3 id="nivel-1-4"><strong>Nivel 1</strong></h3><p>La parte central el juego es que te estás moviendo dentro de tu nave espacial mientras tratas de dispararles a los aliens. Mientras que tu estás solo, hay un montón de ellos.<br><br>Crea una nave espacial que pueda moverse y dispararle a los aliens que no se mueven.</p><h3 id="nivel-2-4"><strong>Nivel 2</strong></h3><p>Lo que hace al juego difícil es que los aliens se están moviendo constantemente. Cada vez que se pegan contra el borde del área de juego, bajan una línea y aumentan su velocidad, acercándose cada vez más a tu nave.</p><p>Agrega movimiento a los aliens que van de lado a lado del área de juego. Cada vez que los aliens llegan al borde, deberían bajar un nivel y aumentar su velocidad a determinados intervalos. </p><h3 id="nivel-3-4"><strong>Nivel 3</strong></h3><p>Estás a tu suerte, pero por lo menos tienes algo de protección. Tienes escudos tras los que puedes esconderte y que te ayudarán a protegerte mientras duren.<br><br>Delante de la nave de tu jugador, crea varios escudos que puedan aguantar un número limitado de ataques.</p><h3 id="lista-de-tareas-2"><strong>Lista de tareas</strong></h3><ul><li>Crear una partida nueva</li><li>Crear aliens estáticos</li><li>Crear la nave espacial del jugador</li><li>Agregar controles de la nave espacial</li><li>Agregar armas a la nave espacial</li><li>Configurar daño a los aliens</li><li>Hacer que los aliens devuelvan el fuego</li><li>Hacer que los aliens se muevan</li><li>Agregar intervalos de los aliens</li><li>Agregar escudos</li></ul><h3 id="tutoriales-4"><strong>Tutoriales</strong></h3><ul><li> <a href="https://www.freecodecamp.org/news/learn-javascript-by-building-7-games-video-course/">Aprende JavaScript mientras construyes 7 juegos</a> (en inglés, freecodecamp.org)</li></ul><h3 id="inspiraci-n-3"><strong>Inspiración</strong></h3><ul><li><a href="https://codepen.io/adelciotto/pen/BHuGL" rel="nofollow">Space Invaders</a> (codepen.io)</li></ul><h3 id="idea-de-bosquejo-4"><strong>Idea de Bosquejo</strong></h3><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/08/Space-Invaders---Layout.jpg" class="kg-image" alt="Space-Invaders---Layout" width="600" height="400" loading="lazy"><figcaption>Idea de bosquejo para Space Invaders</figcaption></figure><!--kg-card-begin: html--><h2 id="tema-gatsby"><strong>Tema para librería de Gatsby</strong></h2><!--kg-card-end: html--><p><strong>Categoría: Herramientas y Librerías</strong></p><p>Crear un tema para Gatsby que instale un proyecto con la librería Tailwind CSS.</p><h3 id="resumen-5"><strong>Resumen</strong></h3><p>Como desarrolladores, muchas veces tenemos que hacer los mismos pasos cada vez que creamos un proyecto nuevo. Pero herramientas como los temas nos permiten abstraer esos pasos y empaquetarlos de forma fácil para reutilizarlos en cada proyecto nuevo.</p><h3 id="nivel-1-5"><strong>Nivel 1</strong></h3><p>Los temas de Gatsby son como una extensión de sistema con el cual podemos usar la arquitectura en pipeline de Gatsby para compartir funcionalidades como un paquete de NPM.</p><p>Esto nos abre las puertas para poder hacer cualquier cosa que haríamos en un sitio Gatsby pero reusable en cualquier sitio Gatsby.<br><br>Crea un nuevo tema de Gatsby que, cuando se use, cree una nueva guía de estilo en cualquier proyecto al cual se agregue.</p><h3 id="nivel-2-5"><strong>Nivel 2</strong></h3><p>El objetivo de los temas no es solo crear páginas, sino también agregar funcionalidades que nos sirva. Esto incluye librerías y configuraciones de proyecto.<br><br>Agrega un librería CSS al tema Gatsby que permita al proyecto en donde se agrega usar esa librería.</p><h3 id="nivel-3-5"><strong>Nivel 3 </strong></h3><p>A veces nos sirve tener nuestra propia opinión y pensar que los temas sirven mejor como herramientas. Una forma de agregar funcionalidades útiles a una librería CSS es crear un stock de componentes.<br><br>Crea componentes reusables de React que usen la librería que puede ser usada por el proyecto al que el tema esté siendo usado.</p><h3 id="lista-de-tareas-3"><strong>Lista de tareas</strong></h3><ul><li>Crear un nuevo tema</li><li>Añadir proyecto de prueba</li><li>Crear nueva página de estilo</li><li>Añadir librería de CSS</li><li>Usar CSS en el proyecto de prueba</li><li>Crear componentes</li><li>Usar componentes</li></ul><h3 id="caja-de-herramientas-3"><strong>Caja de herramientas</strong></h3><ul><li><a href="https://www.freecodecamp.org/espanol/news/ghost/#/editor/post/64e3642018f86303e731f1d3:~:text=https%3A/www.gatsbyjs.org/docs/themes/">Temas Gatsby</a> (en inglés, gatsbyjs.org)</li><li><a href="https://tailwindcss.com/" rel="nofollow">Tailwind</a> (en inglés, tailwindcss.com)</li></ul><h3 id="tutoriales-5"><strong>Tutoriales</strong></h3><ul><li><a href="https://www.gatsbyjs.com/tutorial/building-a-theme/">Creando un Tema</a>( en inglés, gatsbyjs.org)</li><li><a href="https://www.freecodecamp.org/news/what-is-tailwind-css-and-how-can-i-add-it-to-my-website-or-react-app/">Qué es Tailwind CSS y cómo puedo añadirlo a mi sitio web o aplicación React </a>(en inglés, freecodecamp.org)</li></ul><h3 id="inspiraci-n-4"><strong>Inspiración</strong></h3><ul><li><a href="https://github.com/talensjr/gatsby-theme-tailwindcss"> Tema Gatsby con Tailwind</a> (en inglés, github.com)</li></ul><h3 id="idea-de-bosquejo-5"><strong>Idea de Bosquejo</strong></h3><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/08/Framework-Theme---Layout.jpg" class="kg-image" alt="Framework-Theme---Layout" width="600" height="400" loading="lazy"><figcaption>Idea de bosquejo para Tema de Librería</figcaption></figure><!--kg-card-begin: html--><h2 id="webmentions"><strong>Webmentions</strong></h2><!--kg-card-end: html--><p><strong><strong>Categorí</strong>a<strong>: </strong> Complementos para P<strong>ro</strong>y<strong>ect</strong>os</strong></p><p>Agregar una integración de webmentions al sitio web para que muestre las interacciones de Twitter con el sitio web.</p><h3 id="resumen-6"><strong>Resumen</strong></h3><p>La interacción social es una forma poderosa de atraer más audiencia y discusión sobre los temas que escribimos.</p><p>Tener algo en un sitio web que muestre esa interacción puede ser útil tanto para inspirar a las personas que quieren ayudar o hacer que las personas sientan que pueden ser parte.</p><h3 id="nivel-1-6"><strong>Nivel 1</strong></h3><p>Para poder Webmetions, un sitio web tiene que tener configurado los metas tags para suministrar información.</p><p>Agrega los meta tags correctos a un sitio web y valídalos con webmention.io.</p><h3 id="nivel-2-6"><strong>Nivel 2</strong></h3><p>La API de Webmentions es una forma ordenada de ver conexiones entre las interacciones sociales desde una URL de tu sitio web. Te muestra el tipo de interacción y hasta la foto de perfil de una persona. </p><p>Conecta un sitio web a Webmentions y agrega una lista de interacciones sociales a las páginas de un blog.</p><h3 id="nivel-3-6"><strong>Nivel 3</strong></h3><p>Ahora que el sitio web muestra todas las interacciones, tendría que haber una manera fácil de sumarnos a la discusión.</p><p><strong>Lista de tareas</strong></p><ul><li>Agregar meta tags al sitio web</li><li>Validar meta tags</li><li>Conectarse a Webmention</li><li>Conectar las cuentas de redes sociales a Bridgy &nbsp;</li><li>Lista las interacciones</li><li>Agrega botón para crear un tweet</li></ul><h3 id="caja-de-herramientas-4"><strong>Caja de herramientas</strong></h3><ul><li><a href="https://webmention.io/" rel="nofollow">Webmention.io</a> (en inglés, webmention.io)</li><li><a href="https://brid.gy/" rel="nofollow">Bridgy</a> (en inglés, brid.gy)</li><li><a href="https://github.com/ChristopherBiscardi/gatsby-plugin-webmention">Extensión de Webmention para Gatsby</a> (github.com)</li></ul><h3 id="tutoriales-6"><strong>Tutoriales</strong></h3><ul><li><a href="https://mxb.dev/blog/using-webmentions-on-static-sites/">Indieweb, parte 2: Usando Webmentions en Elventy</a> (en inglés, mxb.dev)</li><li><a href="https://www.swyx.io/writing/clientside-webmentions/">Webmentions del lado de cliente</a> (en inglés, swyx.io)</li><li><a href="https://www.knutmelvaer.no/blog/2019/06/getting-started-with-webmentions-in-gatsby/">Introducción a Webmentions con Gatsby</a> (en inglés, knutmelvaer.no)</li><li> <a href="https://www.christopherbiscardi.com/post/building-gatsby-plugin-webmentions">Creando una extensión de Webmentions para Gatsby</a> (en inglés, christopherbiscardi.com)</li></ul><h3 id="inspiraci-n-5"><strong>Inspiración</strong></h3><ul><li><a href="https://www.knutmelvaer.no/blog/" rel="nofollow">Knut Melvær</a> (knutmelvaer.no)</li><li><a href="https://swyx.io/" rel="nofollow">Swyx</a> (swyx.io)</li></ul><h3 id="idea-de-bosquejo-6"><strong>Idea de Bosquejo</strong></h3><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/08/Webmentions---Layout.jpg" class="kg-image" alt="Webmentions---Layout" width="600" height="400" loading="lazy"><figcaption>Idea de bosquejo para Webmentions</figcaption></figure><!--kg-card-begin: html--><h2 id="product-hunt"><strong>Product Hunt</strong></h2><!--kg-card-end: html--><p><strong><strong>Categorí</strong>a<strong>: Clones</strong></strong></p><p>Crear un clon de Product Hunt que permita a los usuarios publicar un nuevo producto con calificaciones.</p><h3 id="resumen-7"><strong>Resumen</strong></h3><p>Todos usamos productos, ya sea nuestros móviles o las aplicaciones que usamos en nuestras computadoras portátiles.</p><p>Si bien hay toneladas de productos en el mundo, puede ser difícil distinguir lo bueno de lo malo. Herramientas como Product Hunt ofrecen una plataforma para aprender sobre nuevas herramientas y obtener reseñas de otras personas.</p><h3 id="nivel-1-7"><strong>Nivel 1</strong></h3><p>La parte más importante de aprender sobre nuevos productos es el propio producto. </p><p>Vamos a querer saber sobre qué es el producto, su apariencia y cómo funciona.<br><br>Crea una página que te permita añadir un nuevo producto a un sitio con un título, imagen y descripción.</p><h3 id="nivel-2-7"><strong>Nivel 2</strong></h3><p>Cuando estamos aprendiendo sobre nuevos productos, las reseñas son una forma de confiar en el producto antes de comprarlo. Nos ayuda a crear confianza en lo que vamos a comprar o utilizar nuestro tiempo.<br><br>Añade la posibilidad de que las personas agreguen reseñas sobre cada producto.</p><h3 id="nivel-3-7"><strong>Nivel 3</strong></h3><p>Las personas aman los productos, por eso hay toneladas de ellos en el mundo. Debido a que hay demasiados para clasificarlos y ordenarlos manualmente, necesitamos crear un mecanismo para buscar y filtrar.<br><br>Añade la posibilidad de buscar productos y filtrarlos por categoría.</p><h3 id="lista-de-tareas-4"><strong>Lista de tareas</strong></h3><ul><li>Crear sitio web del producto</li><li>Crear la base de datos</li><li>Añadir formulario de productos</li><li>Añadir producto a la base de datos</li><li>Hacer un petición de la página de producto</li><li>Añadir formulario de reseña</li><li>Añadir reseñas a la base de datos</li><li>Añadir reseñas al producto</li><li>Añadir buscador de productos</li><li>Añadir categorías de producto</li></ul><h3 id="caja-de-herramientas-5"><strong>Caja de herramientas</strong></h3><ul><li><a href="https://hasura.io/" rel="nofollow">Hasura</a> (en inglés, hasura.io)</li></ul><h3 id="tutoriales-7"><strong><strong>Tutorial</strong>e<strong>s</strong></strong></h3><ul><li><a href="https://blog.logrocket.com/building-a-product-hunt-clone-app-using-hasura-and-next-js/">Construyendo un clon de Product Hunt con Hasura y Next.js</a> (en inglés, logrocket.com)</li><li><a href="https://www.freecodecamp.org/news/how-to-build-a-basic-version-of-product-hunt-using-react-f87d016fedae/">Cómo construir una versión básica de Product Hunt con React</a> (en inglés, freecodecamp.org)</li></ul><h3 id="idea-de-bosquejo-7"><strong>Idea de bosquejo</strong></h3><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/08/Product-Hunt---Layout.jpg" class="kg-image" alt="Product-Hunt---Layout" width="600" height="400" loading="lazy"><figcaption>Idea de bosquejo de Product Hunt</figcaption></figure><h2 id="m-s-proyectos"><strong>Más Proyectos</strong></h2><p>Si quieres más ideas de proyectos, podés visitar el sitio: &nbsp;50 Proyectos para React y la web estática <a href="https://50reactprojects.com/">50 Projects for React &amp; the Static web</a>!</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2020/08/Twitter-Post---1.jpg" class="kg-image" alt="Stop asking yourself what should I build?" width="600" height="400" loading="lazy"></figure><p><strong>Descárgalo<strong> </strong>gratis<strong> </strong>en<strong> 50reactprojects.com</strong></strong></p><figure class="kg-card kg-image-card"><img src="https://res.cloudinary.com/fay/image/upload/w_2000,h_400,c_fill,q_auto,f_auto/w_1020,c_fit,co_rgb:007079,g_north_west,x_635,y_70,l_text:Source%20Sans%20Pro_64_line_spacing_-10_bold:Colby%20Fayock/w_1020,c_fit,co_rgb:383f43,g_west,x_635,y_6,l_text:Source%20Sans%20Pro_44_line_spacing_0_normal:Follow%20me%20for%20more%20JavaScript%252c%20UX%252c%20and%20other%20interesting%20things!/w_1020,c_fit,co_rgb:007079,g_south_west,x_635,y_70,l_text:Source%20Sans%20Pro_40_line_spacing_-10_semibold:colbyfayock.com/w_300,c_fit,co_rgb:7c848a,g_north_west,x_1725,y_68,l_text:Source%20Sans%20Pro_40_line_spacing_-10_normal:colbyfayock/w_300,c_fit,co_rgb:7c848a,g_north_west,x_1725,y_145,l_text:Source%20Sans%20Pro_40_line_spacing_-10_normal:colbyfayock/w_300,c_fit,co_rgb:7c848a,g_north_west,x_1725,y_222,l_text:Source%20Sans%20Pro_40_line_spacing_-10_normal:colbyfayock/w_300,c_fit,co_rgb:7c848a,g_north_west,x_1725,y_295,l_text:Source%20Sans%20Pro_40_line_spacing_-10_normal:colbyfayock/v1/social-footer-card" class="kg-image" alt="Follow me for more Javascript, UX, and other interesting things!" width="2000" height="400" loading="lazy"></figure><ul><li><a href="https://twitter.com/colbyfayock">? Sígueme en Twitter</a></li><li><a href="https://youtube.com/colbyfayock">?️ Suscríbete a mi canal de Youtube</a></li><li><a href="https://www.colbyfayock.com/newsletter/">✉️ Suscríbet</a><a href="https://www.colbyfayock.com/newsletter/">e a</a> mi boletín de noticias</li></ul> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Como construir tu propio portafolio web de desarrollador con HTML, CSS y JavaScript ]]>
                </title>
                <description>
                    <![CDATA[ En estos días todos necesitan tener un sitio web y aplicaciones web. Así que si trabajas como desarrollador web hay muchas oportunidades para ti . Pero si quieres conseguir trabajo como desarrollador web, necesitarás un buen sitio web como portafolio para poder mostrar tus habilidades y experiencia. En este tutorial, ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/como-construir-tu-propio-portafolio-web-desarrollador/</link>
                <guid isPermaLink="false">61e33df617a453092f695722</guid>
                
                    <category>
                        <![CDATA[ Portafolio ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Jorge Torres Torres ]]>
                </dc:creator>
                <pubDate>Wed, 14 Sep 2022 02:37:32 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2022/01/responsive-web-design.png" 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-build-a-developer-portfolio-website/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Build Your Own Developer Portfolio Website with HTML, CSS, and JavaScript</a>
      </p><p>En estos días todos necesitan tener un sitio web y aplicaciones web. Así que si trabajas como desarrollador web hay muchas oportunidades para ti .</p><p>Pero si quieres conseguir trabajo como desarrollador web, necesitarás un buen sitio web como portafolio para poder mostrar tus habilidades y experiencia.</p><p>En este tutorial, discutiré algunas de las razones por los que debes construir tu propio portafolio web. Luego, te guiaré en el proceso de construcción de tu portafolio web responsivo con HTML, CSS y JavaScript.</p><h2 id="tabla-de-contenidos"><strong>Tabla de contenidos</strong></h2><ul><li>¿<a href="#portafolio-web-desarrollador">Qué es un portafolio sitio web de desarrollador?</a></li><li><a href="#porquetener-portafolio-web-desarrollador">¿Por qué deberías tener un Portafolio website?</a></li><li><a href="#como-construir-portafolio-enlinea-desarrollador">Proyecto de Portafolio – ¿Cómo construir tu propio Portafolio en línea de Desarrollador?</a></li><li><a href="#estructura-carpetas-proyecto">La estructura de carpetas del Proyecto</a></li><li><a href="#elcodigo-basico-html"> El Código Básico de HTML</a></li><li><a href="#seccion-barranavegacion"> La Sección de Barra de Navegación</a></li><li><a href="#estilos-barranavegacion">Como dar Estilos a la Barra de Navegación</a></li><li><a href="##construir-seccionhero">Como construir la sección de Hero</a></li><li><a href="#estilos-seccionhero">Como dar estilo a la Sección de Hero</a></li><li><a href="#construir-seccionSobreMi">Como construir la Sección de Más sobre mí</a></li><li><a href="#construir-seccionHabilidades">Como construir la Sección de Habilidades</a></li><li>C<a href="#estilos-seccionHabilidades">omo dar estilo a la Sección de Habilidades</a></li><li><a href="##construir-seccion-proyectos">Como construir la sección de Proyectos</a></li><li><a href="#estilos-seccion-proyectos">Como dar estilos a la Sección de Proyectos</a></li><li><a href="#construir-seccion-contacto">Como construir la Sección de Contacto</a></li><li><a href="https://www.freecodecamp.org/news/how-to-build-a-developer-portfolio-website/#howtostylethecontactsection">Como dar estilo a la sección de Contacto</a></li><li><a href="#estilos-iconos-redessociales">Como dar estilo a los iconos de Redes Sociales</a></li><li><a href="#boton-desplazar-haciaarriba">Como agregar el botón desplazarse Hacia Arriba</a></li><li><a href="#html-boton-desplazarse-haciaarriba">El HTML para el botón desplazarse Hacia Arriba </a></li><li><a href="#estilos-boton-desplazarse-haciaarriba">Como dar estilos al icono de Desplazarse hacia arriba</a></li><li><a href="#portafolio-webresponsivo">Como hacer que tu &nbsp;Portafolio web sea responsivo</a></li><li><a href="#consultademedios-tabletsymoviles">Como crear la Consulta de Medios para Tablets y teléfonos celulares (max-width 720px)</a></li><li><a href="#construir-menuhamburguesa">Como construir el Menú de Hamburguesa</a></li><li><a href="#javascript-menuhamburguesa">El JavaScript para el Menú de Hamburguesa</a></li><li><a href="#seccionhero-responsiva">Como hacer responsiva la Sección de Hero</a></li><li><a href="#secionsobremi-responsiva">Como hacer responsiva la Sección de Más sobre mí </a></li><li>C<a href="#seccionhabilidades-responsiva">omo hacer responsiva la sección de Habilidades</a></li><li>C<a href="#seccion-proyectosresponsiva">omo hacer responsiva la Sección de Proyectos </a></li><li><a href="#formulariocontacto-responsivo">Como hacer responsivo el formulario de Contacto</a></li><li><a href="#sitiowebresponsivo-telefonosmoviles">Como hacer responsivo el sitio web para teléfonos celulares pequeños</a></li><li><a href="#conclusion">Conclusión</a></li></ul><!--kg-card-begin: html--><h2 id="portafolio-web-desarrollador">¿Qué es un portafolio web de desarrollador? </h2><!--kg-card-end: html--><p>Un &nbsp;portafolio web de un desarrollador provee de información relevante sobre tus habilidades, experiencia y proyectos en los que hayas trabajado para empleadores potenciales.</p><p>Puedes considerar a tu &nbsp;portafolio web como tu currículum en línea.</p><!--kg-card-begin: html--><h2 id="porquetener-portafolio-web-desarrollador">¿Porqué deberías tener un Portafolio web de Desarrollador?</h2><!--kg-card-end: html--><h3 id="1-un-portafolio-web-incrementa-tu-presencia-en-l-nea"><strong>1. Un Portafolio web incrementa tu presencia en línea</strong></h3><p>Como desarrollador, necesitas tener presencia en línea. Puedes hacer crecer tu presencia en línea utilizando plataformas de redes sociales tales como Twitter, Facebook, e Instagram. Pero esas plataformas no son completamente tuyas, ya que los moderadores de esas plataformas tienen casi control total sobre tu cuenta. </p><p>En cambio, tu portafolio web, está montado en tu propio dominio en línea. &nbsp;Y la gente puede fácilmente encontrarte cuando hace una búsqueda de tu nombre en algún buscador como Google, &nbsp;siempre que pongas las cosas correctas y en su lugar haciendo uso &nbsp;de SEO (Search Engine Evaluation). </p><h3 id="2-un-portafolio-web-es-tu-curr-culum-en-l-nea"><strong>2. Un portafolio web es tu currículum en línea </strong></h3><p>Tu portafolio web es como tu currículum en línea. Clientes potenciales y Reclutadores de Recursos Humanos pueden encontrarte fácilmente en línea y revisar tus proyectos pasados y tus habilidades. </p><p>Esto también significa que cuando alguien te quiera dar una oportunidad para trabajar para ellos, y te pregunten por tus proyectos pasados, solamente les das el link a tu sitio web (tu portafolio). Que no solamente tiene tus proyectos, si no también tu conjunto de habilidades e información sobre tu experiencia pasada.</p><h3 id="3-un-portafolio-es-evidencia-de-tu-experiencia-en-tu-rea"><strong>3. Un portafolio es evidencia de tu experiencia en tu área </strong></h3><p>Tener (y mucho menos construir tu propio) portafolio web como envía un claro mensaje como desarrollador de que estás poniendo tus habilidades en práctica y que realmente sabes lo que estás haciendo. </p><p>Un portafolio puede también ayudarte a construir confianza con clientes porque tienen evidencia de la calidad de tu trabajo.</p><!--kg-card-begin: html--><h2 id="como-construir-portafolio-enlinea-desarrollador">Proyecto portafolio - Como construir tu propio portafolio en línea de desarrollador</h2><!--kg-card-end: html--><p>Puedes crear tu propio &nbsp;portafolio web con HTML, CSS y JavaScript, Y eso es lo que haremos aquí.</p><p>Ya hice esto hace algunos meses y lo puse a disposición de todos como un producto gratuito en Gumroad, así que decidí crear un tutorial sobre cómo lo hice. </p><p>Esta es la <a href="https://eager-williams-af0d00.netlify.app/?">demostración </a> de lo que construiremos.</p><p>Para seguir el proceso conmigo, puedes obtener los archivos de inicio de <a href="https://github.com/Ksound22/developer-portfolio/tree/starter">Github</a>.</p><!--kg-card-begin: html--><h2 id="estructura-carpetas-proyecto">La estructura de carpetas del proyecto</h2><!--kg-card-end: html--><p>Para evitar confusión, ordenaré el HTML, CSS, JavaScript, iconos e imágenes del proyecto en sus respectivas carpetas.</p><p>El archivo de HTML va en la carpeta root, y los archivos de imagen, icono, CSS, y JavaScript &nbsp;estarán separados en sus respectivas subcarpetas &nbsp;en una carpeta de assets. Esta es una práctica común.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss1.png" class="kg-image" alt="ss1" width="600" height="400" loading="lazy"></figure><p>También hay un archivo readme que contiene todas las herramientas que utilicé en el proyecto con sus respectivos enlaces. También está disponible en los archivos de inicio. </p><!--kg-card-begin: html--><h2 id="elcodigo-basico-html">El código básico de HTML</h2><!--kg-card-end: html--><p>Todos tienen sus preferencias al escribir código de un proyecto completo con HTML, CSS y JavaScript. A algunos les gusta definir todo el código HTML repetitivo primero y luego el CSS, pero a mí me gusta hacerlo todo sección por sección. </p><p>Entonces empezaré con la sección de la barra de navegación. Pero es bueno mostrar primero cómo se ve el código HTML básico: </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 http-equiv="X-UA-Compatible" content="IE=edge" /&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0" /&gt;

    &lt;!--Estilos CSS --&gt;
    &lt;link rel="stylesheet" href="assets/css/styles.css" /&gt;

    &lt;!-- Favicons --&gt;
    &lt;link
      rel="apple-touch-icon"
      sizes="180x180"
      href="assets/icons/apple-touch-icon.png"
    /&gt;
    &lt;link
      rel="icon"
      type="image/png"
      sizes="32x32"
      href="assets/icons/favicon-32x32.png"
    /&gt;

    &lt;!-- Animaciones CSS CDN --&gt;
    &lt;link
      rel="stylesheet"
      href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css"
    /&gt;
    &lt;title&gt;Jane Doe | Desarrolladora Web&lt;/title&gt;
  &lt;/head&gt;

  &lt;body&gt;
    &lt;!-- Barra de Navegación --&gt;

    &lt;!-- Sección Hero  --&gt;

    &lt;!-- Sobre Mí --&gt;

    &lt;!-- Sección Habilidades --&gt;

    &lt;!-- Sección Proyectos --&gt;

    &lt;!-- Sección Contacto--&gt;

    &lt;!-- Sección de redes sociales - Fijado a la derecha --&gt;

    &lt;!-- Vuelve al comienzo  --&gt;

    &lt;!-- Sección Footer  --&gt;

    &lt;!-- Website scripts --&gt;
    &lt;script src="assets/js/app.js"&gt;&lt;/script&gt;

    &lt;!-- Ion icons scripts --&gt;
    &lt;script
      type="module"
      src="https://unpkg.com/ionicons@5.5.2/dist/ionicons/ionicons.esm.js"
    &gt;&lt;/script&gt;
    &lt;script
      nomodule
      src="https://unpkg.com/ionicons@5.5.2/dist/ionicons/ionicons.js"
    &gt;&lt;/script&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre><p>Tengo todas las secciones comentadas en el HTML para que puedas seguirlas mejor. En la plantilla también hay Content Delivery Network (Red de Distribución de Contenido), también hay CDN para animaciones de CSS (Una Biblioteca de animación CSS), iconos de Ionic, &nbsp;la librería de iconos que elegí para este proyecto.</p><p>Tengo un favicon hecho a través de Favicon IO &nbsp;y lo vinculé en la sección head. Favicon es la pequeña imagen que se muestra en una pestaña del navegador.</p><!--kg-card-begin: html--><h2 id="seccion-barranavegacion">La Sección de la barra de navegación </h2><!--kg-card-end: html--><p>La barra de navegación contiene el logotipo simple del texto h1 y el menú de navegación:</p><pre><code class="language-html"> &lt;nav&gt;
      &lt;h1&gt;JANE DOE&lt;/h1&gt;
      &lt;ul class="navegacion"&gt;
        &lt;li&gt;&lt;a href="#sobremi" class="nav-link"&gt;Acerca de Mí&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="#habilidaes" class="nav-link"&gt;Habilidades&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="#proyectos" class="nav-link"&gt;Proyectos&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="#contacto" class="nav-link"&gt;Contacto&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
      &lt;button class="menu-hamburguesa" id="menu-hamburguesa"&gt;
        &lt;ion-icon class="barras" name="menu-outline"&gt;&lt;/ion-icon&gt;
      &lt;/button&gt;
&lt;/nav&gt;
</code></pre><p>Si te estás preguntando que representa el elemento botón, &nbsp;son las barras para alternar el menú &nbsp;de navegación en dispositivo móvil (menu de hamburguesa). Este estará escondido en nuestra versión de escritorio pero se mostrará en dispositivo móvil.</p><p>También vincularé las secciones individuales del sitio web a estos elementos de navegación, por lo tanto, cuando el usuario hace click en cualquiera de los elementos de navegación, se le lleva a la sección que corresponde al elemento de navegación en el que hace click. </p><p>Es por eso que tengo los atributos de referencia &nbsp;(<code>href</code>) establecidos en <code>#sobremi</code>, <code>#habilidades</code>, <code>#proyectos</code>, and <code>#contacto</code>, respectivamente. La sección individual del sitio web tendrá estos atributos como ids.</p><p>La barra de navegación ahora luce así:<br></p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss2.png" class="kg-image" alt="ss2" width="600" height="400" loading="lazy"></figure><!--kg-card-begin: html--><h2 id="estilos-barranavegacion">Como dar estilos a la barra de navegación </h2><!--kg-card-end: html--><p>La barra de navegación necesita &nbsp;definitivamente &nbsp;algo de estilo para que se vea un poco mejor.</p><p>Antes de darle estilos a la barra de navegación, declararé algunas variables de CSS para facilitar las cosas más adelante. &nbsp;Esto se debe a que, con las variables CSS, es más fácil evitar la redundancia y la repetición en tu archivo de CSS. </p><p>La sintaxis para declarar variables de CSS luce así:</p><pre><code class="language-css">:root {
  --variable-name: value;
}
</code></pre><p>Para usar la variable, debes hacer esto: </p><pre><code class="language-css">selector {
  propiedad: var(--nombre-variable);
}
</code></pre><p>También importaré la fuente Roboto de Google, y declararé algunos resets de CSS para remover algunas funciones predeterminadas, como el margin y padding para elementos, <code>text-decoration</code> para etiquetas anchor y <code>list-style-type</code> para listas.</p><pre><code class="language-css">@import url("https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,400;0,900;1,700&amp;display=swap");

/* Variables */
:root {
  --font-family: "Roboto", sans-serf;
  --normal-font: 400;
  --bold-font: 700;
  --bolder-font: 900;
  --bg-color: #fcfcfc;
  --primary-color: #4756df;
  --secondary-color: #ff7235;
  --primary-shadow: #8b8eaf;
  --secondary-shadow: #a17a69;
  --bottom-margin: 0.5rem;
  --bottom-margin-2: 1rem;
  --line-height: 1.7rem;
  --transition: 0.3s;
}
/* Variables fin */

html {
  scroll-behavior: smooth;
}

/* CSS Resets */
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

ul {
  list-style-type: none;
}

a {
  text-decoration: none;
  color: var(--primary-color);
}

a:hover {
  color: var(--secondary-color);
}

body {
  font-family: var(--font-family);
}
</code></pre><p>Si lo notas, configuré un hover state para todos los enlaces del sitio web desde la línea 39 a la 41. Cuando el usuario se desplaza sobre cualquier enlace, cambia al color secundario que establecí en las variables de CSS.</p><p>Aquí hay una buena regla general para declarar variables CSS: si te encuentras usando la misma propiedad y el mismo valor a menudo en el mismo archivo CSS, puedes declarar una variable de css para evitar repetición.</p><p>También debes hacer que los nombres de tus variables sean lo más descriptivos posible, como hice yo, para ayudar a otros que podrían trabajar con tu código.</p><p>Con los resets, hay algunos cambios en la barra de navegación del navegador: <br></p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss3.png" class="kg-image" alt="ss3" width="600" height="400" loading="lazy"></figure><p>Para dar estilos a la barra de navegación y alinear su contenido, usaremos CSS Flexbox:</p><pre><code class="language-css">nav {
  position: sticky;
  top: 0;
  left: 0;
  z-index: 1;
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 1.5rem 3.5rem;
  background-color: var(--bg-color);
  box-shadow: 0 3px 5px rgba(0, 0, 0, 0.1);
}
</code></pre><p>¿<strong>Qué está haciendo el Código de CSS?</strong></p><p>Le di a la barra de navegación el valor de sticky en la propiedad de position para que permanezca en la parte superior sin importar qué.</p><p>La propiedad de &nbsp;<code>z-index</code> con el valor de 1 &nbsp;se asegura de que la barra de navegación se muestre sobre cualquier otro elemento de la página web. Así es como se hace sticky una barra de navegación.</p><p>Además, también apliqué una sombra en la parte inferior de la barra de navegación con la propiedad &nbsp; <code>box-shadow</code> .</p><p>La barra de navegación tiene un nuevo aspecto: </p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss4.png" class="kg-image" alt="ss4" width="600" height="400" loading="lazy"></figure><p>Pero aún no hemos terminado. Los elementos del menú de navegación debe estar uno al lado del otro, no uno encima del otro. También lo haremos con Flexbox. </p><p>También terminaré el resto del estilo de &nbsp;la barra de navegación haciendo que h1, los elementos de navegación y el botón de menú de hamburguesas se vean mejor. Haremos esto con algunas variables CSS declaradas inicialmente.</p><pre><code class="language-css">nav h1 {
  color: var(--color-primario);
}

nav a {
  color: var(--color-primario);
  transition: var(--transicion);
}
nav a:hover {
  color: var(--valor-secundario);
  border-bottom: 2px solid var(--valor-secundario);
}

nav ul {
  display: flex;
  gap: 1.9rem;
}

nav ul li {
  font-weight: var(--negrita);
}
</code></pre><p>El menú hamburguesa también necesita estar escondido. Tiene una clase de &nbsp;<code>.menu-hamburguesa</code>, podemos aplicarle un atributo de display con valor de none y así haremos que el botón luzca mejor.</p><pre><code class="language-css">.menu-hamburguesa {
  color: var(--primary-color);
  font-size: 2rem;
  border: 0;
  background-color: transparent;
  cursor: pointer;
  display: none;
}
</code></pre><p>Nuestra barra de navegación luce más se ve mucho mejor ahora:<br></p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss5.png" class="kg-image" alt="ss5" width="600" height="400" loading="lazy"></figure><!--kg-card-begin: html--><h2 id="construir-seccionhero">Como construir la sección Hero </h2><!--kg-card-end: html--><p>La siguiente sección en la que trabajaremos. Esto no requerirá tanto trabajo como la barra de navegación.</p><p>La plantilla de HTML para la sección principal se encuentra en el fragmento de código a continuación:</p><pre><code class="language-html">&lt;section class="hero" id="about"&gt;
      &lt;img
        src="assets/images/wfh_1.svg"
        alt="jane-doe"
        loading="lazy"
        class="hero-img"
      /&gt;
      &lt;div class="bio animate__animated animate__shakeX"&gt;
        &lt;h2 class="bio-titulo"&gt;Sobre Mí&lt;/h2&gt;
        &lt;p class="bio-texto"&gt;
          Lorem ipsum dolor sit amet, consectetur adipisicing elit. Mollitia sed
          dolorem fugit sapiente porro veniam pariatur dolore nostrum delectus
          inventore tempore minus nemo, iste ullam illo laboriosam maiores
          repudiandae quos!
        &lt;/p&gt;
      &lt;/div&gt;
&lt;/section&gt;
</code></pre><p>La única cosa que es un poco extraña son las clases de &nbsp;<code>animate__animated animate__shakeX</code> aplicadas al div que contiene el texto de <code>Sobre Mí</code> . &nbsp;Los nombres de clase son de CSS animado y son útiles para dar animación al container de texto Sobre Mí.</p><p>Con esto, el sitio web tiene un nuevo aspecto:<br></p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss6.png" class="kg-image" alt="ss6" width="600" height="400" loading="lazy"></figure><!--kg-card-begin: html--><h2 id="estilos-seccionhero">Como dar Estilo a la Sección Hero</h2><!--kg-card-end: html--><p>Flexbox vendrá al rescate una vez más! Esta sección tiene dos conjuntos principales de contenido – una imagen y un texto en un div. &nbsp;Podemos usar flexbox para mostrarlos uno al lado del otro. A continuación puedes ver como funciona en el fragmento de código de CSS :</p><pre><code class="language-css">.hero {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 2.5rem;
  max-width: 68.75rem;
  margin: auto;
}
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss7.png" class="kg-image" alt="ss7" width="600" height="400" loading="lazy"></figure><p>Nuestra imagen de Jane Doe es muy grande, así que necesitamos reducir su anchura y altura. También necesitamos darle estilo al texto de bio (Sobre Mí texto) para legibilidad. Las variables de CSS que declaramos inicialmente serán muy útiles aquí.<br></p><pre><code class="language-css">.hero img {
  height: 37.5rem;
  width: 37.5rem;
}

.bio {
  width: 25rem;
  padding: 0.625rem;
  border-radius: 6px;
  box-shadow: 0px 2px 15px 2px var(--primary-shadow);
}

.bio h1 {
  margin-bottom: var(--bottom-margin);
}

.bio p {
  line-height: var(--line-height);
  padding: 0.3rem 0;
}
</code></pre><p>La sección hero ahora luce genial: <br></p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss8.png" class="kg-image" alt="ss8" width="600" height="400" loading="lazy"></figure><!--kg-card-begin: html--><h2 id="construir-seccionSobreMi">Como construir la sección Más Sobre Mí </h2><!--kg-card-end: html--><p>Incluí esta sección para incluir más información sobre Jane Doe con un texto placeholder.</p><p>Puedes aprovechar esto para incluir información que no tuviste posibilidad de incluir en la sección Sobre Mí.</p><p>La Plantilla HTML para esta sección es sencilla y simple:</p><pre><code class="language-html">    &lt;section class="mas-sobre"&gt;
      &lt;h2&gt;Más sobre mí&lt;/h2&gt;
      &lt;p&gt;
        Lorem ipsum dolor sit amet consectetur adipisicing elit. Reiciendis
        nesciunt excepturi quos obcaecati incidunt voluptatem ipsam sunt ipsum,
        autem deleniti cupiditate molestias quis unde quae totam porro dicta
        iure animi inventore, veniam hic! Omnis nulla, delectus a voluptatibus
      &lt;/p&gt;
      &lt;p&gt;
        Lorem ipsum dolor sit amet consectetur, adipisicing elit. Consequuntur
        nostrum dolor minus, libero delectus praesentium perferendis
      &lt;/p&gt;
      &lt;p&gt;
        Lorem ipsum dolor sit amet consectetur adipisicing elit. Vero,
        consequuntur labore? Ea totam voluptas amet!
      &lt;/p&gt;
    &lt;/section&gt;
</code></pre><p>El CSS también es sencillo. Todo lo que haremos es configurar un &nbsp;<code>background-color</code> con <code>--bg-color</code> &nbsp;como variable de CSS, hacer que la sección sea legible configurando el padding, el margin y la line-height, y alinear el texto h2 al centro:</p><pre><code class="language-css">.mas-sobre {
  background-color: var(--bg-color);
  padding: 1rem 6rem;
}

.mas-sobre h2 {
  margin-bottom: var(--bottom-margin);
  text-align: center;
}

.mas-sobre p {
  line-height: var(--line-height);
  padding: 0.4rem;
}
</code></pre><p>En el navegador, la sección Más Sobre More luce así:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss9.png" class="kg-image" alt="ss9" width="600" height="400" loading="lazy"></figure><!--kg-card-begin: html--><h2 id="construir-seccionHabilidades">Como construir la sección de Habilidades</h2><!--kg-card-end: html--><p>Desde la demostración en vivo, &nbsp;verás que la sección de habilidades contiene habilidades relevantes como &nbsp;HTML, CSS, JavaScript, etc. Pude conseguir los iconos de esos lenguajes en formato SVG en la página de Icons8 I.</p><p>La Plantilla de HTML para esta sección se encuentra en el fragmento de código a continuación:</p><pre><code class="language-html"> &lt;section class="habilidades" id="habilidades"&gt;
      &lt;h2 class="header-habilidadr"&gt;Mis mejores habilidades&lt;/h2&gt;

      &lt;div class="contenedor-habilidades"&gt;
        &lt;div class="first-set animate__animated animate__pulse"&gt;
          &lt;img
            src="assets/icons/icons8-html-5.svg"
            alt=""
            loading="lazy"
            class="icon icon-card"
          /&gt;
          &lt;img
            src="assets/icons/icons8-css3.svg"
            alt=""
            loading="lazy"
            class="icon icon-card"
          /&gt;
          &lt;img
            src="assets/icons/icons8-javascript.svg"
            alt=""
            loading="lazy"
            class="icon icon-card"
          /&gt;
        &lt;/div&gt;

        &lt;div class="second-set animate__animated animate__pulse"&gt;
          &lt;img
            src="assets/icons/icons8-bootstrap.svg"
            alt=""
            loading="lazy"
            class="icon icon-card"
          /&gt;
          &lt;img
            src="assets/icons/icons8-react-native.svg"
            alt=""
            loading="lazy"
            class="icon icon-card"
          /&gt;
          &lt;img
            src="assets/icons/icons8-git.svg"
            alt=""
            loading="lazy"
            class="icon icon-card"
          /&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/section&gt;
</code></pre><p>Hay seis iconos en total. Y en lugar de tener que alinearlos con Flexbox, los agruparemos en dos lugares (3 cada uno), &nbsp;con las clases de primer y segundo conjunto, para que se mantengan uno encima del otro. Esto significa que los estilos que aplicaremos serán más legibles. ¡Fácil!</p><p>Tengamos en cuenta que hemos adjuntado el atributo de carga a los íconos e imágenes individuales y configurándolo en lazy. Esto asegurará que las imágenes se carguen solo cuando el usuario se desplace a las secciones que las contienen. </p><!--kg-card-begin: html--><h2 id="estilos-seccionHabilidades">Como aplicar estilos a la sección de Habilidades</h2><!--kg-card-end: html--><p>Sin aplicar estilos, la sección de estilos luce así:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss10edited.jpg" class="kg-image" alt="ss10edited" width="600" height="400" loading="lazy"></figure><p>Debemos dar un poco de estilos a la sección por que aun no se ve lo suficientemente bien::</p><pre><code class="language-css">.habilidades {
  max-width: 68.75rem;
  margin: auto;
  text-align: center;
  margin-top: 2.5rem;
}

.encabezado-habilidad {
  margin-bottom: 1rem;
}

.contenedor-habilidad img {
  padding: 1.25rem;
}

.icono {
  width: 11.875rem;
  height: 11.25rem;
}
</code></pre><p>En el CSS de arriba, establecimos un ancho máximo para toda la sección para posicionar los elementos al centro del navegador para una mejor experiencia de usuario.</p><p>Otros estilos que aplicamos están relacionados a claridad y la legibilidad. Por ejemplo, Incrementamos el tamaño de los iconos para hacerlos más visibles con sus propiedades de alto y ancho. También aplicamos un padding de 1rem (16pixeles) a todos los iconos para dar un poco de espacio entre ellos . </p><p>La sección de habilidades ahora luce mejor:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss11.png" class="kg-image" alt="ss11" width="600" height="400" loading="lazy"></figure><p>Y aún así, creo que la sección puede lucir mejor, así que he decidido hacer algunos ajustes más con la propiedad box-shadow: </p><p>Recordemos que en el HTML hay un atributo de clase llamado &nbsp;<code>.tarjeta-icono</code> adjunto a todos los iconos. I will be using the class name to put all the icons in a card:</p><pre><code class="language-css">.tarjeta-icono {
  background-color: #fff;
  border-radius: 11px;
  box-shadow: 0 3px 10px var(--secondary-shadow);
  padding: 20px;
  margin: 10px;
}
</code></pre><p>La sección de habilidades ahora debe lucir mejor:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss12.png" class="kg-image" alt="ss12" width="600" height="400" loading="lazy"></figure><p>¡Mira eso!</p><!--kg-card-begin: html--><h2 id="construir-seccion-proyectos">Como construir la sección de Proyectos</h2><!--kg-card-end: html--><p>Uno de los propósitos principales de un sitio web portafolio es mostrar tus proyectos. Por lo tanto, tendremos que crear una sección para mostrar los proyectos en los que has trabajado en el pasado. </p><p>Esta sección es probablemente la más tediosa en aplicar estilos, pero Flexbox (Modelo de Caja) no dejará de ser nuestro amigo.</p><p>La estructura de HTML para esta sección se encuentra en el fragmento de código más abajo:</p><pre><code class="language-html">&lt;section class="proyectos" id="proyectos"&gt;
      &lt;h2 class="titulo-de-proyectos"&gt;Algunos de mis proyectos recientes&lt;/h2&gt;
      &lt;div class="contenedor-de-proyectos"&gt;
        &lt;div class="contenedor-de-proyectos tarjeta-de-proyectos"&gt;
          &lt;img
            src="assets/images/expenseTracker.png"
            alt="rastreador-de-gastos"
            loading="lazy"
            class="project-pic"
          /&gt;
          &lt;h3 class="titulo-de-proyectos"&gt;Rastreador de Gastos&lt;/h3&gt;
          &lt;p class="detalle-de-proyectos"&gt;
            Lorem, ipsum dolor sit amet consectetur adipisicing elit. Quas
            ratione vel inventore labore commodi modi quos culpa aut saepe!
            Alias!
          &lt;/p&gt;
          &lt;a href="#" target="_blank" class="enlace-de-proyecto"&gt;Check it Out&lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="contenedor-de-proyectos tarjeta-de-proyectos "&gt;
          &lt;img
            src="assets/images/netflixClone.png"
            alt="netflic-clone"
            loading="lazy"
            class="project-pic"
          /&gt;
          &lt;h3 class="titulo-proyecto"&gt;Netflix Clone&lt;/h3&gt;
          &lt;p class="detalles-proyecto"&gt;
            Lorem, ipsum dolor sit amet consectetur adipisicing elit. Quas
            ratione vel inventore labore commodi modi quos culpa aut saepe!
            Alias!
          &lt;/p&gt;
          &lt;a href="#" target="_blank" class="project-link"&gt;Check it Out&lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="contenedor-de-proyecto tarjeta-de-proyecto"&gt;
          &lt;img
            src="assets/images/greenyEarth.png"
            alt="greeny-earth"
            loading="lazy"
            class="project-pic"
          /&gt;
          &lt;h3 class="titulo-de-proyecto"&gt;Greeny Earth&lt;/h3&gt;
          &lt;p class="detalles-de-proyecto"&gt;
            Lorem, ipsum dolor sit amet consectetur adipisicing elit. Quas
            ratione vel inventore labore commodi modi quos culpa aut saepe!
            Alias!
          &lt;/p&gt;
          &lt;a href="#" target="_blank" class="enlace-de-proyecto"&gt;Echale un vistazo!&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/section&gt;
</code></pre><p>Revisando el HTML, hay tres proyectos en total, en sus elementos divs individuales con el nombre de clase contenedor-de-proyecto y tarjeta-de-proyecto. Estas clases serán muy relevantes en aplicar estilos consistentemente al proyecto. </p><p>El elemento de sección contenedor en sí mismo tiene una clse de proyectos y un atributo de identificación de proyectos también. El nombre de la clase es para diseñar los estilos y la identificación es para vincularla al enlace Proyectos en la barra de navegación. </p><p>Los proyectos tienen sus imágenes individuales con el nombre de clase &nbsp;of <code>foto-proyecto</code>, &nbsp;sus títulos con una clase &nbsp;<code>titulo-de-proyecto</code>, detalles con el nombre de clase <code>detalles-de-proyecto</code>, y en laces con la clase de &nbsp;<code>enlaces-de-proyecto</code>.</p><p>El único propósito de darle a todos los elementos clases únicas es para aplicarles estilos.</p><p>Estos son algunos de los proyectos en los que trabajé cuando empecé como desarrollador.</p><p>La sección de proyectos luce así en el navegador:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/projects-unstyled.gif" class="kg-image" alt="projects-unstyled" width="600" height="400" loading="lazy"></figure><p>Sin embargo, la sección no se ve tan bien, incluso hay una molesta barra de desplazamiento horizontal causada por las imágenes. Así que tenemos mucho trabajo por hacer en CSS. </p><!--kg-card-begin: html--><h2 id="estilos-seccion-proyectos">Como dar estilos a la sección de Proyectos</h2><!--kg-card-end: html--><p>En primer lugar, daré a toda la sección un color de fondo configurando el color grisáceo (--bg-color) que declaramos en las variables CSS como valor.</p><p>También reduciré el ancho y el alto de las imágenes del proyecto usando la clase &nbsp;<code>foto-de-proyecto</code> . &nbsp;Luego usaré Flexbox para poner los proyectos uno al lado del otro.</p><pre><code class="language-css">.proyectos {
  background-color: var(--bg-color);
  padding: 32px 0;
  margin-top: 2rem;
}

.foto-de-proyecto {
  width: 65%;
  height: 60%;
}

.contenedor-de-proyectos {
  display: flex;
  align-items: center;
  justify-content: center;
}
</code></pre><p>La sección ahora luce mejor:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss13Edited.jpg" class="kg-image" alt="ss13Edited" width="600" height="400" loading="lazy"></figure><p>Las imágenes ahora lucen mejor, pero el título del proyecto, detalles de proyecto, y enlaces de proyectos necesitan alinearse muy bien dentro de sus contenedores individuales. &nbsp;</p><p>Toda la sección del proyecto también debe ser empujada hacia el centro. Sin embargo, no necesita Flexbox para hacer esto &nbsp;se puede hacer configurando la propiedad de text-align con el valor de center:</p><pre><code class="language-css">.titulo-de-proyectos {
  text-align: center;
  margin-bottom: 1rem;
}

.contenedor-de-proyectos {
  text-align: center;
  width: 21.875rem;
  padding: 1rem;
}
</code></pre><p>Debemos tener en cuenta que también estable un ancho de <code>21.875rem (350 pixeles)</code> &nbsp;para los contenedores de proyectos individuales. Esto los separará de los lados para una mejor experiencia de usuario. En este caso, el usuario no necesitaría mirar completamente para ver todo.</p><p>La sección ahora luce mejor:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss14.png" class="kg-image" alt="ss14" width="600" height="400" loading="lazy"></figure><p>Aún podemos hacer que esta sección se vea mejor. Los títulos de proyectos, detalles de proyectos y los enlaces de proyectos &nbsp;se ven agrupados, por lo que debemos agregar algo de padding y margin.</p><p>Los contenedores de proyectos individuales también deben verse más distintos. La propiedad &nbsp;<code>box-shadow</code> va ser fundamental aquí, así que las pondremos en sus tarjetas individuales.</p><pre><code class="language-css">.contenedor-de-proyecto p {
  padding: 0.4rem;
}

.titulo-de-proyecto {
  margin-bottom: var(--bottom-margin);
}

.detalles-de-proyecto {
  margin-bottom: var(--bottom-margin);
}

.tarjeta-de-proyecto {
  background-color: #fff;
  border-radius: 11px;
  box-shadow: 0 3px 10px var(--primary-shadow);
  padding: 20px;
  margin: 10px;
}
</code></pre><p>La sección de proyectos ahora luce mejor:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss15.png" class="kg-image" alt="ss15" width="600" height="400" loading="lazy"></figure><!--kg-card-begin: html--><h2 id="construir-seccion-contacto">Como construir la sección Contacto
</h2><!--kg-card-end: html--><p>Si un potencial empleador o cliente encuentra tu portafolio website atractivo, podrían querer contactarte. Así que te recomendamos tener un formulario de contacto en esta sección, junto con enlaces para tus cuentas de redes sociales.</p><p>El HTML para esta sección se vería así:</p><pre><code class="language-html">&lt;section class="contacto" id="contacto"&gt;
      &lt;h2&gt;Contactame&lt;/h2&gt;
      &lt;div class="formulario-contacto-contenedor"&gt;
        &lt;div class="formulario-contacto"&gt;
          &lt;form action="https://formspree.io/f/xyylngw" method="POST"&gt;
            &lt;div class="control-formulario"&gt;
              &lt;label for="name"&gt;Nombre&lt;/label&gt;
              &lt;input
                type="text"
                id="name"
                name="sender-name"
                placeholder="Escribe tu nombre"
                class="input-field"
                required
              /&gt;
            &lt;/div&gt;
            &lt;div class="control-formulario"&gt;
              &lt;label for="email"&gt;Correo Electrónico&lt;/label&gt;
              &lt;input
                type="email"
                id="email"
                name="sender-email"
                placeholder="Ingreso tu correo electrónico"
                class="input-field"
                required
              /&gt;
            &lt;/div&gt;
            &lt;div class="control-formulario"&gt;
              &lt;label for="mensaje"&gt;Mensaje&lt;/label&gt;
              &lt;textarea
                id="mensaje"
                cols="60"
                rows="10"
                placeholder="Escribe tu mensaje"
                name="mensaje"
                class="input-field"
                required
              &gt;&lt;/textarea&gt;
            &lt;/div&gt;
            &lt;input
              type="submit"
              value="Enviar"
              id="submit-btn"
              class="submit-btn"
            /&gt;
          &lt;/form&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/section&gt;
</code></pre><p>Aquí construimos el formulario de contacto con campos de entrada para nombre y correo electrónico, una etiqueta <code>textarea</code> para que la gente escriba el mensaje que quieran enviar, y el botón enviar para enviar el mensaje para que puedas verlo.</p><p>Si echas un vistazo al elemento form, verás que tenemos un atributo de acción establecido en una URL de &nbsp;Formspree. Este es el que hemos elegido para el envío de formulario. Con Formspree, puedes recibir el mensaje directamente a la bandeja de entrada de tu correo electrónico sin necesidad de configurar un servidor con PHP o JavaScript complejos.</p><p>Ten en cuenta que no podrás usar mi URL -no funcionará para ti. Puedes fácilmente configurar el tuyo en el sitio web de Formspreee de forma gratuita. &nbsp;También adjunté un recurso sobre cómo configurar Formspree en el archvio de readme del proyecto.</p><p>Establecí algunos atributos &nbsp;<code>id</code> y <code>class</code> &nbsp;para los inputs individuales para darle estilos. También hay un atributo &nbsp;<code>name</code> para todos los campos de input. Esto es requerido por el servicio de envió de formularios de Formspree. </p><p>Para obtener una validación básica, adjunté un atributo &nbsp;<code>required</code> , de esa forma, &nbsp;el formulario se niega a enviar la información si el usuario deja algún campo vacío.</p><!--kg-card-begin: html--><h2 id="estilo-seccion-contacto">Como dar estilo a la sección Contacto</h2><!--kg-card-end: html--><p>Sin estilo, la sección de contacto no se ve nada bien:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss16Edited.jpg" class="kg-image" alt="ss16Edited" width="600" height="400" loading="lazy"></figure><p>Todo lo que haremos en CSS &nbsp;es alinear todo el contenido al centro y hacer que los campos de input se vean mejor.</p><p>Con las propiedades de text align y margin, puedes alinear la etiqueta h2 y el contenedor para el formulario del contacto al centro .</p><p>También pondremos todo el formulario en una tarjeta con la propiedad de <code>box-shadow</code> .</p><pre><code class="language-css">.contacto {
  margin-top: 2rem;
}

.contacto h2 {
  text-align: center;
  margin-bottom: var(--bottom-margin-2);
}

.contenedor-formulario-contacto {
  max-width: 40.75rem;
  margin: 0 auto;
  padding: 0.938rem;
  border-radius: 5px;
  box-shadow: 0 3px 10px var(--secondary-shadow);
}
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss17.png" class="kg-image" alt="ss17" width="600" height="400" loading="lazy"></figure><p>Los inputs, textarea, labels y los placeholders necesitan definitivamente también algo de estilo para ayudar con la alineación y la claridad:</p><pre><code class="language-css">.contenedor-formulario-contacto label {
  line-height: 2.7em;
  font-weight: var(--bold-font);
  color: var(--primary-color);
}

.contenedor-formulario-contacto textarea {
  min-height: 6.25rem;
  font-size: 14px;
}

.contenedor-formulario-contacto .input-field {
  width: 100%;
  padding-top: 10px;
  padding-bottom: 10px;
  border-radius: 5px;
  border: none;
  border: 2px outset var(--primary-color);
  font-size: 0.875rem;
  outline: none;
}
</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss18.png" class="kg-image" alt="ss18" width="600" height="400" loading="lazy"><figcaption>El formulario luce mejor</figcaption></figure><p>Pero los placeholders no son consistentes con las etiquetas. Así que necesitamos darle algo de color y padding. Le daremos el conjunto de color primario que asignamos en la lista de Variables de CSS. </p><p>Para seleccionar los placeholders y darle estilos, podemos usar la pseudo-class placeholder :</p><pre><code class="language-css">.input-field::placeholder {
  padding: 0.5rem;
  color: var(--primary-color);
}
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss19.png" class="kg-image" alt="ss19" width="600" height="400" loading="lazy"></figure><p>En el formulario de contacto, lo único que falta es dar estilo al elemento button. Los botones son bastante fáciles de estilizar:</p><pre><code class="language-css">.submit-btn {
  width: 100%;
  padding: 10px;
  margin: 10px 0;
  background-color: #fff;
  border: 2px solid var(--primary-color);
  border-radius: 5px;
  font-size: 1rem;
  font-weight: var(--bold-font);
  transition: var(--transition);
}
</code></pre><p>En el fragmento de código de CSS anterior, hice que el botón pasara por todo el contenedor del formulario dándole un ancho del 100%. También lo hice más visible dando padding, margin, un borde &nbsp;y más &nbsp;font-weight.</p><p>La propiedad de <code>border-radius</code> con un valor de 5px &nbsp;remueve las bordes afilados y la transición sirven para &nbsp;ralentizar un poco las cosas cuando el botón está en estado de desplazamiento.</p><p>El estado de hover &nbsp;se define en el fragmento de código CSS a continuación:</p><pre><code class="language-css">.submit-btn:hover {
  background-color: var(--primary-color);
  border: 2px solid var(--primary-color);
  cursor: pointer;
}
</code></pre><p>El formulario luce mucho mejor ahora:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/contact-form-hover-effect.gif" class="kg-image" alt="contact-form-hover-effect" width="600" height="400" loading="lazy"></figure><p>Recuerda &nbsp;que tener tus enlaces de redes sociales en tu sitio web portafolio es de gran ventaja para que cualquier persona interesada en contactarte lo haga. &nbsp;Este es el siguiente paso que realizaremos, y lo haremos de una forma única.</p><p>El &nbsp;código de HTML para los botones de redes sociales está en el fragmento &nbsp;abajo: </p><pre><code class="language-html">    &lt;div class="sociales"&gt;
      &lt;a href="#" target="_blank"
        &gt;&lt;img
          src="assets/icons/icons8-twitter-circled.gif"
          alt="Twitter"
          loading="lazy"
          class="socicon"
      /&gt;&lt;/a&gt;
      &lt;a href="#" target="_blank"
        &gt;&lt;img
          src="assets/icons/icons8-instagram.gif"
          alt="Instagram"
          loading="lazy"
          class="socicon"
      /&gt;&lt;/a&gt;
      &lt;a href="#" target="_blank"
        &gt;&lt;img
          src="assets/icons/icons8-linkedin-circled.gif"
          alt="Linkedin"
          loading="lazy"
          class="socicon"
      /&gt;&lt;/a&gt;
      &lt;a href="#" target="_blank"
        &gt;&lt;img src="assets/icons/icons8-github.gif" alt="Github" class="socicon"
      /&gt;&lt;/a&gt;
</code></pre><p>Los iconos de redes sociales que elegiremos son gifs animados de la plataforma icons8. Colocaremos a todos en el mismo contenedor con la clase de <code>sociales</code>, y les daremos una clase individual de <code>socicon</code> para dar estilos más fácilmente.</p><p>Debajo puedes ver unos iconos &nbsp;de redes sociales animados que parpadearan en nuestro sitio web:<br></p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/animated-social-icons.gif" class="kg-image" alt="animated-social-icons" width="600" height="400" loading="lazy"></figure><!--kg-card-begin: html--><h2 id="estilos-iconos-redessociales">Como dar estilos a los iconos de redes sociales</h2><!--kg-card-end: html--><pre><code class="language-css">.sociales {
  display: flex;
  flex-direction: column;
  position: fixed;
  right: 1%;
  bottom: 50%;
}

.socicon {
  width: 2rem;
  height: 2rem;
}
</code></pre><p>Con el CSS de arriba, los iconos de redes sociales estarán fijos al lado derecho del sitio web, así que todos los que visiten el sitio web podrán visualizar siempre los iconos aún cuando el usuario se desplace hacia abajo por la página. </p><p>También reduciremos el tamaño de los iconos asignándoles a todos sus valores de &nbsp;propiedad de &nbsp;<code>width</code> y <code>height</code> .</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/good-icons.gif" class="kg-image" alt="good-icons" width="600" height="400" loading="lazy"></figure><p>Mira el resultado!</p><p>Lo único que nos falta es el footer. &nbsp;No hay nada complejo en el HTML y CSS de footer, aparte de la entidad de caracteres reservados para el símbolo de derechos de autor y el corazón:</p><pre><code class="language-html">&lt;footer&gt;
      &lt;p class="copy"&gt;&amp;copy; Copyright 2021&lt;/p&gt;
      &lt;p class="copy"&gt;
        Built with &amp;#x2661; by
        &lt;a href="https://twitter.com/koladechris" target="_blank"
          &gt;Kolade Chris (Ksound)&lt;/a
        &gt;
      &lt;/p&gt;
&lt;/footer&gt;
</code></pre><pre><code class="language-css">footer {
  background-color: var(--bg-color);
  padding: 1.25rem;
  text-align: center;
  margin: 2rem 0 0;
}
</code></pre><p>Ahora tenemos un sitio web portafolio completo!</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/full-fledged-portfolio.gif" class="kg-image" alt="full-fledged-portfolio" width="600" height="400" loading="lazy"></figure><p>Pero necesitamos hacerlo responsivo, porque en su estado actual no se vería bien en dispositivo más chicos:<br></p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/unresponsive-portfolio.gif" class="kg-image" alt="unresponsive-portfolio" width="600" height="400" loading="lazy"></figure><p>Necesitamos hacer que todo el contenido de las secciones individuales se muestre en una sección encima de la otra ( en un diseño de columna) . Podemos hacer esto muy fácilmente con media queries y Flexbox.</p><p>Antes de agregar las media queries para la responsividad de nuestra página, vamos a implementar un botón de desplazarse-hacia-arriba con HTML, CSS, y JavaScript.</p><!--kg-card-begin: html--><h2 id="boton-desplazar-haciaarriba">Como Agregar un Botón de Desplazarse hacia Arriba </h2><!--kg-card-end: html--><!--kg-card-begin: html--><h2 id="html-boton-desplazarse-haciaarriba">El HTML para el botón Desplazarse hacia Arriba </h2><!--kg-card-end: html--><p>Para el HTML, tenemos un icono animado de Icons8 y al que asignaremos en una etiqueta de i.</p><p>La etiqueta de i tiene una clase de <code>desplazarse-hacia-arriba</code> &nbsp;para dar estilos y un id de <code>desplazarse-hacia-arriba</code> &nbsp; para seleccionarlo con &nbsp;JavaScript. Esto se debe a que para nuestros proyectos, recomiendo usar clases &nbsp;para dar estilos y ids para las funcionalidades que agregaremos con JavaScript.</p><pre><code class="language-html">  &lt;i class="desplazarse-hacia-arriba" id="desplazarse-hacia-arriba"
      &gt;&lt;img
        src="assets/icons/icons8-upward-arrow.gif"
        class="socicon up-arrow"
        alt="desplazarse-hacia-arriba"
    /&gt;&lt;/i&gt;
</code></pre><!--kg-card-begin: html--><h2 id="estilos-boton-desplazarse-haciaarriba">Como dar estilos al icono de Desplazarse-hacia-Arriba</h2><!--kg-card-end: html--><p>Haremos que el icono de desplazarse-hacia-arriba tenga una propiedad de fixed para que se quedé estático como los iconos de redes sociales. También le daremos una propiedad de pointer al cursor, para que este cambie cuando posicionamos el cursor encima del icono.</p><p>Con la clase de flecha-arriba al icono de desplazarse-hacia-arriba, incrementaremos el tamaño del icono para visibilidad: </p><pre><code class="language-css">.desplazarse-hacia-arriba {
  position: fixed;
  right: 0.5%;
  bottom: 3%;
  cursor: pointer;
}

.flecha-arriba {
  width: 3rem;
  height: 3rem;
}
</code></pre><p>El icono se ve muy bien:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/scroll-up-first.gif" class="kg-image" alt="scroll-up-first" width="600" height="400" loading="lazy"></figure><p>Pero aún no hace nada. Así que necesitamos hacerlo funcional con algunas lineas de JavaScript:</p><pre><code class="language-js">// funcionalidad de desplazar hacia arriba
const desplazarArriba = document.querySelector("#desplazarse-hacia-arriba");

desplazarArriba.addEventListener("click", () =&gt; {
  window.scrollTo({
    top: 0,
    left: 0,
    behavior: "smooth",
  });
});
</code></pre><p></p><p><strong>¿Qué está haciendo el código de arriba?</strong></p><p>La primera línea selecciona el botón de desplazar-hacia-arriba con el atributo id adjunto a el en el HTML. Usamos el método <code>querySelector()</code> aquí. También podríamos utilizar el método <code>getElementById()</code> .</p><p>En las líneas restantes, usamos el &nbsp;<code>eventListener</code> del click para obtener la acción click del usuario &nbsp;y hacer que reaccione la parte &nbsp;de <code>scrollTo</code> del objeto de Windows para que el botón funcione. </p><p>Con esta funcionalidad, cuando el usuario hace click en el botón desplazar-hacia-arriba, la página se desplaza hacia arriba y al lado izquierdo del sitio web suavemente. &nbsp;Hicimos esto configurando las propiedades top a <code>0</code>, left a <code>0</code>, y &nbsp; behavior a <code>smooth</code>.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/scroll-up.gif" class="kg-image" alt="scroll-up" width="600" height="400" loading="lazy"></figure><p>Puedes aprender más sobre el objeto windows abriendo la consola de herramientas de desarrollo del navegador. Escribe en la ventana y da enter, luego verás todo lo disponible en el objeto de Windows, como lo hacemos a continuación: </p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/window-object.gif" class="kg-image" alt="window-object" width="600" height="400" loading="lazy"></figure><!--kg-card-begin: html--><h2 id="portafolio-webresponsivo">Como hacer Responsivo tu Portafolio web</h2><!--kg-card-end: html--><p>Para hacer responsivo tu sitio web, usaremos media queries de CSS y Flexbox.</p><p>Primero, necesitaremos hacer que las imágenes y el texto se vean más pequeños, y luego haremos que el contenido de cada sección se muestre en un diseño vertical configurando la propiedad <code>flex-direction</code> a column.</p><p>En la consulta de medios, estaremos usando 2 breakpoints &nbsp;– <code>720px</code> y <code>420px</code>.</p><p>El breakpoint de 720px &nbsp;es para tabletas y teléfonos móviles, y el de 420px es para teléfonos pequeños como un &nbsp;iPhone 6, &nbsp;y teléfonos Android pequeños.</p><p>Los breakpoints de la consulta de medios son los puntos en el que queremos que el contenido del sitio web responda de acuerdo al ancho del dispositivo. Así que, cualquier código que pongamos debajo del breakpoint de 720px se refleje en dispositivos con una pantalla menor o mayor de 720px, dependiendo de como especifiques el ancho máximo o ancho mínimo.</p><p>En el caso de &nbsp;utilizar un max-width of <code>720px</code>, &nbsp;la sintaxis de la consulta de medios luce así:</p><pre><code class="language-css">@media screen and (max-width: 720px) {
  /* los cambios se reflejan en una pantalla con un ancho de 720px ye inferior */
}
</code></pre><!--kg-card-begin: html--><h2 id="consultademedios-tabletsymoviles">Como crear la Consulta de Medios para Tabletas y Teléfonos móviles (max-width 720px)</h2><!--kg-card-end: html--><p>Empezaremos por hacer el sitio responsiv0 &nbsp;desde la barra de navegación, porque &nbsp;comúnmente la barra de navegación no se ve bien en dispositivos más pequeños.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss21.png" class="kg-image" alt="ss21" width="600" height="400" loading="lazy"></figure><p>Primero, vamos a reducir el padding de la barra de navegación para que el logo de &nbsp; <code>h1</code> l y los elementos del menú de navegación encajen bien:</p><pre><code class="language-css">nav {
    padding: 1.5rem 1rem;
  }
</code></pre><p>Las cosas ahora se ven un poco mejor:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss22.png" class="kg-image" alt="ss22" width="600" height="400" loading="lazy"></figure><p>En dispositivos más pequeños, los elementos del menú de navegación deben estar uno encima del otro y deben estar ocultos. Entonces, es hora de actualizar el código para que el menú de hamburguesas esté inicialmente oculto.</p><!--kg-card-begin: html--><h2 id="construir-menuhamburguesa">Como construir el menú de hamburguesas</h2><!--kg-card-end: html--><p>Para hacer el menú de hamburguesas, debemos sacar los elementos del menú de navegación del viewport. &nbsp;Luego, debemos establecer una clase de <code>presentacion</code> &nbsp;en los elementos de la lista de navegación que se alternarán con unas pocas líneas de JavaScrip (recordemos que los elementos de navegación están en una lista desordenada).</p><pre><code class="language-css"> nav ul {
    position: fixed;
    background-color: var(--bg-color);
    flex-direction: column;
    top: 86px;
    left: 10%;
    width: 80%;
    text-align: center;
    transform: translateX(120%);
    transition: transform 0.5s ease-in;
  }

   nav ul li {
    margin: 8px;
  }
</code></pre><p>En el fragmento &nbsp;anterior de código CSS, establecimos una posición de fixed en la lista desordenada (<code>ul</code>) para que flote en la pantalla. También lo empuje 86px hacia abajo desde la parte superior con <code>top: 86px</code> y 10% a la izquierda.</p><p>Le dimos un ancho de 80% en relación a su elemento padre (el elemento de navegación del HTML), lo empujó hacia el centro con<code>text-align: center</code>, &nbsp;y finalmente lo oculto con la propiedad de transformación establecida en <code>translateX(120%)</code>. Esto lo empujará hacia la derecha y lo sacará del viewport.</p><p>Y ahora, cuando el usuario de click para mostrar los elementos de la barra de navegación, todos se deslizan desde la derecha. Impresionante.</p><p>Si quieres que los elementos de la barra de navegación se deslicen desde la izquierda, cambia el valor de la propiedad &nbsp;<code>transform</code> a <code>transform: translateX(-120%)</code> (esto es el opuesto directo de <code>transform: translateX(120%)</code>). Es tan fácil como eso, dependiendo de tu preferencia.</p><p>También asigné un margen de 8px a los elementos de navegación para darles más espacio.</p><p>La barra de navegación ahora luce así: <br></p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss22-1.png" class="kg-image" alt="ss22-1" width="600" height="400" loading="lazy"></figure><p>El menú de hamburguesas permanece oculto. &nbsp;Por lo tanto, necesitamos mostrarlo dandole un display: block, asignándole una clase de show para en la propiedad transform dar el valor de 0 en el eje-X translateX(0) para mostrarlo, y después interactuar con el usando &nbsp;JavaScript .</p><pre><code class="language-css"> .menu-hamburguesa {
    display: block;
  }

  nav ul.show {
    transform: translateX(0);
  }
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss24.png" class="kg-image" alt="ss24" width="600" height="400" loading="lazy"></figure><p>Nuestro menú de hamburguesa puede mostrarse, pero los elementos de la barra de navegación están ocultos. Para mostrarlos, necesitamos activar y desactivar la clase show con JavaScript.</p><!--kg-card-begin: html--><h2 id="javascript-menuhamburguesa">Escribiendo JavaScript para hacer el Menú de Hamburguesa </h2><!--kg-card-end: html--><p>Para activar y desactivar con JavaScript los elementos del menú de la barra de navegación, necesitamos primero seleccionar todos los elementos relevantes de la barra de navegación y guardarlos en algunas variables: </p><pre><code class="language-js">// Selecciones para Barra de navegación hamburguesa

const burger = document.querySelector("#burger-menu");
const ul = document.querySelector("nav ul");
const nav = document.querySelector("nav");
</code></pre><ul><li>La variable &nbsp;<code>burger</code> seleccionan la barra de menú de hamburguesa.</li><li>La variable <code>ul</code> &nbsp;selecciona los elementos de la lista (los enlaces de navegación en conjunto ).</li><li>La variable <code>nav</code> selecciona el propio contenedor (el elemento de navegación).</li></ul><p>Lo siguiente que necesitamos hacer es activar la clase de &nbsp;<code>nav ul.show</code> &nbsp;cuando el &nbsp;usuario hace click en el menú &nbsp;de hamburguesa de la barra de navegación. Haremos esto agregando un &nbsp;<code>eventListener</code> &nbsp;click al menú de hamburguesa del barra de menú, y después usar el método para activar &nbsp;to the hamburger menu bar, y luego usando el método de alternar para eliminar y agregar la clase de show. <code>show</code>.</p><p>Recordemos que lo seleccionamos y lo guardamos en una variable llamada &nbsp;<code>burger</code>.</p><pre><code class="language-js">burger.addEventListener("click", () =&gt; {
  ul.classList.toggle("show");
});
</code></pre><p>Nuestros elementos de navegación ahora se pueden activar y desactivar:<br></p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/nav-toggling-quirk.gif" class="kg-image" alt="nav-toggling-quirk" width="600" height="400" loading="lazy"></figure><p>Pero hay un problema – la barra de navegación en móvil no se oculta cada vez que se hace click en cualquiera de los enlaces de los elementos de navegación. Por lo tanto, debemos eliminar la clase de <code>nav ul.show</code> cuando se hace click en cualquiera de los enlaces del elemento de navegación.</p><p>Podemos hacer esto con solo algunas líneas de JavaScript también:</p><pre><code class="language-js">// Cerrar el menú de hambuguesa cuando se hace click en un enlace  

// Seleccionar enlaces de navegación
const navLink = document.querySelectorAll(".nav-link");

navLink.forEach((link) =&gt;
  link.addEventListener("click", () =&gt; {
    ul.classList.remove("show");
  })
);
</code></pre><p>Recuerda que los enlaces de navegación tienen una clase de enlace de navegación del HTML. Así que los seleccioné todos con esa clase y los puse en una variable llamada &nbsp;<code>nav-link</code>. &nbsp;Hicimos esto con el método &nbsp;<code>querySelectorAll(</code>) .</p><p>Luego recorrí todos los enlaces con el método <code>forEach</code> de arreglos y puse un event listener &nbsp;de click en todos ellos. Después usé el método <code>remove()</code> proporcionado por el DOM para eliminar la clase de <code>show</code> cada vez que se hace click en cualquiera de los elementos del menú de navegación. Esto sacará &nbsp;del viewport todos los elementos de la lista.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/nav-toggling-quirk-fixed.gif" class="kg-image" alt="nav-toggling-quirk-fixed" width="600" height="400" loading="lazy"></figure><p>Mira eso !</p><p>Esto es un gran avance. Con lo que hemos cubierto ya puedes hacer un menú de hamburguesa para cualquier sitio web.</p><!--kg-card-begin: html--><h2 id="seccionhero-responsiva">Como hacer responsiva la sección Hero</h2><!--kg-card-end: html--><p>La sección Hero no se ve muy bien actualmente: </p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss25.png" class="kg-image" alt="ss25" width="600" height="400" loading="lazy"></figure><p>Todo lo que tenemos que hacer es usar la propiedad flex-direction con un atributo de column en la consulta de medios, reducir el ancho y altura de la imagen de Jane Doe, y hacer que el texto de Sobre Mí (bio texto) &nbsp;sea legible.</p><pre><code class="language-css">.hero {
    margin-top: -4rem;
    flex-direction: column;
    gap: 0;
  }

  .hero img {
        height: 37.5rem;
        width: 30rem;
    }

  .bio {
    margin-top: -7rem;
    width: 20.5rem;
  }
</code></pre><p>La sección hero luce mejor ahora :</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss26.png" class="kg-image" alt="ss26" width="600" height="400" loading="lazy"></figure><!--kg-card-begin: html--><h2 id="secionsobremi-responsiva">Como hacer responsiva la sección de Más Sobre mí </h2><!--kg-card-end: html--><p>La sección de Más sobre mí no se ve tan mal, pero claramente podemos hacer algo por mejorarla: </p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss27.png" class="kg-image" alt="ss27" width="600" height="400" loading="lazy"></figure><p>Tenemos el siguiente código de CSS para hacerlo más legible y presentable:</p><pre><code class="language-css"> .mas-sobre {
    margin-top: 2rem;
    padding: 1rem 3.5rem;
  }

  .mas-sobre h2 {
    text-align: center;
  }

  .mas-sobre p {
    text-align: justify;
  }
</code></pre><p>Movimos toda la sección un poco hacia abajo y le incrementamos el padding en todos sus lados, alineamos el &nbsp;<code>h2</code> al centro, y justificamos el texto.<br></p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss28.png" class="kg-image" alt="ss28" width="600" height="400" loading="lazy"></figure><!--kg-card-begin: html--><h2 id="seccionhabilidades-responsiva">Como hacer responsiva la sección de Habilidades</h2><!--kg-card-end: html--><p>Los iconos de habilidades lucen muy grandes:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss29.png" class="kg-image" alt="ss29" width="600" height="400" loading="lazy"></figure><p>Todo lo que tenemos que hacer en la consulta de medios es reducir el tamaño de todos los iconos con las propiedades de width y height: :</p><pre><code class="language-css">.icono {
    width: 5.875rem;
    height: 5.25rem;
  }
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss30.png" class="kg-image" alt="ss30" width="600" height="400" loading="lazy"></figure><!--kg-card-begin: html--><h2 id="seccion-proyectosresponsiva">Como hacer responsiva la sección de Proyectos</h2><!--kg-card-end: html--><p>En esta sección de proyectos, necesitamos hacer que los tres proyectos se apilen uno encima del otro configurando la propiedad de flex-direction a column. También reduciremos un poco &nbsp;el ancho de los contenedores individuales. </p><pre><code class="language-css"> .contenedor-proyectos {
    flex-direction: column;
  }

  .contenedor-proyecto {
    width: 20.875rem;
  }
</code></pre><!--kg-card-begin: html--><h2 id="formulariocontacto-responsivo">Como hacer responsivo el formulario de Contacto </h2><!--kg-card-end: html--><p>Necesitamos reducir el ancho del formulario de contacto para alejarlo de los lados y asegurarse de que los iconos fijos de las redes sociales no estén encima. </p><p>Todo lo que necesitamos es establecer un ancho máximo:</p><pre><code class="language-css"> .contenedor-formulario-de-contacto {
    max-width: 23.75rem;
  }
</code></pre><p>El formulario de contacto ahora se ve mejor:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss32.png" class="kg-image" alt="ss32" width="600" height="400" loading="lazy"></figure><h3></h3><!--kg-card-begin: html--><h2 id="sitiowebresponsivo-telefonosmoviles">Como hacer responsivo el sitio web para teléfonos pequeños</h2><!--kg-card-end: html--><p>En teléfonos pequeños como el iPhone 6, 7, y 8 plus, los iconos de redes sociales y el icono de desplazamiento-hacia-arriba no se muestran. También hay una barra de desplazamiento horizontal. <br></p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/smaller-phones-responive-quirks.gif" class="kg-image" alt="smaller-phones-responive-quirks" width="600" height="400" loading="lazy"></figure><p>Para corregir estas peculiaridades, agregaremos consulta de medios en un breakpoint de 420px:</p><pre><code class="language-css">@media screen and (max-width: 420px) {
  .hero img {
    height: 37.5rem;
    width: 23rem;
  }

  .bio {
    width: 18.3rem;
  }

  .contenedor-proyecto {
    width: 17.875rem;
  }

  .contenedor-formulario-de-contacto{
    max-width: 17.75rem;
  }
} 
</code></pre><p>Reduje el tamaño de nuestra imagen de Jane Doe y también reduje el ancho del texto de la biografía (Texto Acerca de Mí), el contenedor del proyecto, y el formulario de contacto. </p><p>Todos estos cambios harán que se muestren los iconos fijos en el lado derecho del sitio web: las redes sociales y los iconos de desplazamiento-hacia-arriba.<br></p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/smaller-phones-responsiveness-quirk-fixed.gif" class="kg-image" alt="smaller-phones-responsiveness-quirk-fixed" width="600" height="400" loading="lazy"></figure><p>Ahora todo se ve bien:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/fully-responsive.gif" class="kg-image" alt="fully-responsive" width="600" height="400" loading="lazy"></figure><p>Ese es el final de todo. Tenemos un portafolio de nuestro sitio web totalmente responsivo. </p><p>Puedes descargar la versión final en el archivo formato zip desde este repositorio de <a href="https://github.com/Ksound22/developer-portfolio">GitHub repo</a>.</p><p>También puedes consultar la &nbsp;<a href="https://eager-williams-af0d00.netlify.app/?">live demo</a> &nbsp;del sitio web del portafolio. Tiene un archivo readme que contiene información sobre las herramientas que utilicé y como puedes personalizar el sitio web. </p><!--kg-card-begin: html--><h2 id="conclusion">Conclusión</h2><!--kg-card-end: html--><p>En este tutorial, aprendiste que es un portafolio de un desarrollador web y las razones por las que deberías tener uno. </p><p>También aprendiste como hacer un sitio web portafolio completamente responsivo usando HTML, CSS, y &nbsp;JavaScript.</p><p>Las partes diferentes de este tutorial son cada uno de de los proyectos, que combinados, se convierten en un sitio web más grande. Por ejemplo, puedes hacer el diseño de una tarjeta, una barra de menú responsiva, un formulario de contacto funcional, y un botón de desplazamiento-hacia-arriba, ya que el tutorial los cubre todos.</p><p>Siéntete libre de personalizar el sitio web a tu gusto .</p><p>Si encuentras útil este tutorial, puedes compartirlo con tus amigos y familiares. Realmente lo apreciaría.</p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
