Es el momento de modificar los estilos de nuestro menú. El desafío es poderlo alinear con el carrito de compras.
Estilos básicos de CSS para menú
Darle estilos a un menú es muy sencillo con CSS3. Debemos alinear los elementos en una barra horizontal para que ocupen el total de la pantalla.
¿Cómo lograr estilizar este menú? Sigue los siguientes pasos.
Oculta de la vista el ícono de menú, ya que solo debe ser visto cuando el usuario navega con un dispositivo móvil.
.menu{display: none;}
Remueve la decoración de los enlaces y listas
text-decoration: none;list-style: none;
Centra los elementos con Flexbox, eliminar el padding y margin por defecto de las etiquetas y define los colores y tamaño de las fuentes
body {margin:0; font-family:'Quicksand', sans-serif;} nav {display: flex; justify-content: space-between;padding:0 24px; border-bottom: 1px solid var(--very-light-pink);}.logo{width: 100px;}.navbar-left ul,.navbar-right ul { list-style: none;padding:0;margin:0;display: flex; align-items: center;height: 60px;}.navbar-left {display: flex;}.navbar-left ul { margin-left: 12px;}.navbar-left ul li a,.navbar-right ul li a { text-decoration: none;color:var(--very-light-pink);border: 1px solid var(--white);padding: 8px; border-radius: 8px;}.navbar-left ul li a:hover,.navbar-right ul li a:hover {border: 1px solid var(--hospital-green);color:var(--hospital-green);}.navbar-email {color:var(--very-light-pink); font-size:var(--sm); margin-right: 12px;}
Aplica los cambios para móvil.
@media(max-width: 640px){.menu{display: block;}.navbar-left ul {display: none;}.navbar-email {display: none;}}
Cómo centrar el carrito de compras en la barra de navegación
El mayor desafío es posicionar el carrito de compras junto al número. Este el contador que le mostrará al usuario cuantos artículos lleva agregados a su orden.
Para lograrlo emplearemos positionrelative y absolute.
Diseño recomendó que al lado de la dirección de email aparezca una flecha que permitirá al usuario desplegar el menú con las opciones: ""my orders"", ""my account"" y ""sing-out"".
Fav si te diste cuenta que el error en la navbar-right era no haber puesto "ul"
Pero por supuesto que claro que yes jaja
Me di cuenta desde la clase anterior jajja
Soy una pequeña fan de los errores u "olvidos" de la profe Estefany. No sé si son a propósito o si son precisos para ponernos en la práctica. De cualquier forma, son útiles para entender el porqué de algo que no funciona, hacernos pensar un poco más allá de solo seguir lineales en la clase. Lo disfruto mucho cuando encuentro una respuesta o darme cuenta de que debió ser de otra forma y luego ver la corección. En fin. Este curso está muy bueno. :100:
Debo confesar que pienso lo mismo, entre a este curso luego de ver varios cursos previos donde decían que "inspeccionar desde el navegador es muy productivo" pero jamás lo había entendido. Ni manejado. Ahora no siento que me hablan en chino cuando voy a inspeccionar y encuentro esos errores y ya se que debo hacer gracias a Estefany!
Totalmente de acuerdo, yo no tenía ni idea de como usaban el inspector del navegador y mucho menos lo de los media queries y las vistas para móviles y eso, pero cuando veo que la profe encuentra los errores desde el inspector, he aprendido demasiado, creo que tal vez lo hacen a propósito para mostrarnos un camino a seguir en caso de encontrar errores, lo he visto en otros cursos y me parece excelente.
Yo quise unirlo al Index para verlo en contexto y así me quedó:
MOBILE
DESKTOP
Excelente
Congrats for your job! 👏🏻
Mi resultado, note que hacia falta la flechita y opté por agregarla
Genial! Había notado lo mismo pero no sabía como rotarla! Muchas gracias!
Para que no causen problemas los marges por defecto se usar...
*{ box-sizing: border-box;margin:0;padding:0;}
así reiniciamos los estilos del navegador.
También ahí mismo se pueden colocar:
text-decoration: none;list-style: none;
También pueden evitar el scroll horizontal con esto:
nav {width: auto;}
Woow!! Me encanto hacer este Navbar, quedo muy muy bien, ella es buena, pero siento que en ocasiones se enreda un poco para explicar. Pero sin duda alguna estamos aprendiendo mucho en este curso, Muchas gracias Estefany.
No es que se enrede para explicar, es que explica en tiempo real, sin editar el video en absoluto... Y es genial porque no te frustas al darte cuenta que no todo sale bien a la primera y que durante el desarrollo puedes encontrar situaciones en la que es necesario replantear ciertas partes.
De hecho, cuando la voy siguiendo y me confundo, la busqueda de la solución es lo que más enseña a mi entender... :P
Yo agregué otros logos e íconos para experimentar, estoy disfrutando el curso c:
Desktop:
Mobile:
Pretty Good!
Que genial se ve!
Después de esta clase (y en general de este curso), de experimentar y probar, me siento poderoso y listo para ir por retos más desafiantes en FrontEnd
Así se pueden ahorrar una linea o 2 :)
.navbar-left ul,.navbar-email{display: none;}
Como bien he leído en muchos cursos y comentarios, lo mas importante NO es ahorrar líneas como en este caso, sino que sea mas fácil de leer (ya que nos pasamos el 80% del tiempo leyendo código). En este caso no creo que se justifique querer ahorrar una linea de código.
Saludo compañero.
Estilos CSS
nav {display: flex; justify-content: space-between;padding:0 24px; border-bottom: 1px solid var(--very-light-pink);}.menu{display: none;}.nav-logo {width: 100px;}.navbar-left ul,.navbar-right ul { list-style: none;padding:0;margin:0;display: flex; align-items: center;height: 60px;}.navbar-left {display: flex; margin-left: 12px;}.navbar-left ul{display: flex; margin-left: 12px;}.navbar-left ul li a,.navbar-right ul li a { text-decoration: none;color:var(--very-light-pink);border: 1px solid var(--white);padding: 8px; border-radius: 8px;}.navbar-left ul li a:hover,.navbar-right ul li a:hover { text-decoration: none;color:var(--hospital-green);border: 1px solid var(--hospital-green);}.navbar-email {color:var(--very-light-pink); font-size: 12px; margin-right: 12px;}.navbar-shopping-cart {position: relative;}.navbar-shopping-cart div {width: 16px;height: 16px; background-color:var(--hospital-green); border-radius:50%; font-weight: bold; font-size: 12px;position: absolute;top:-6px;right:-3px; justify-content: center; align-items: center;display: flex;}
Ver como se crea desde cero me resulto asombroso
Yes, step by step. 😀👍🏻
Si tambien te aparecio un scrollbar horizontal, el padding de los lados que tiene el nav hace que se desborde, así que para arreglarlo hice lo siguiente:
nav {/* Todo lo demas */ box-sizing: border-box;overflow: hidden;}
También lo que pudo haber pasado es que le pusieron al navbar un width de 100% ese fue mi caso xD
Tenía ese problema pero el error fue el tamaño de los textos 😅
Le añadí al circulo que encierra el numero "2" un :
opacity:.8;
para que el carrito de compras no perdiera la imagen.
¿Por qué razón solo al .navbar-left lo coloca en display: flex;?
¿Por qué no el derecho?
¿Por qué no ambos?
¡Hola! Porque navbar-left posee elementos hijos que desea posicionarlos solamente con respecto a navbar-left. 🙌
En navbar-left hay 2 elementos (una imagen y una lista) y por default se posicionan una debajo de otra. Aplicar display: flex; hace que la imagen se posicione en una misma fila junto a la lista ya que por defecto se tiene el valor flex-direction: row;
.
Si te das cuenta navbar-right ++solamente tiene un elemento++ ul, por ende no es necesario aplicar display: flex;, de hecho puedes hacerlo y no hay diferencia a no ser que tengas otra lista u otro elemento.
.
Sin embargo, dentro de navbar-left y navbar-right hay una lista ul y esa lista tiene +1 item. Por eso que se declara:
Haciendo que todos los items de ambas listas también se posicionen en una misma fila. Sería necesario al principio aplicarlo en ambos como tú dices, si el correo y el carrito de compras no estuviesen dentro de un ul.
Que tal mi nav con tema oscuro. 😲
Espero que les sirva de inspiración. ¡¡saludos!!
Hola amigo está genial, cómo hiciste para cambiar el color del menú y de los iconos, me gustaría saber y disculpa la molestia
exelente diseño!!
Algo que note en la parte de responsive es que al llegar a menos de 800px se generaba un scroll horizontal.
{// Estilos}
A esto:
@media(max-width: 800px){// Estilos}
![](
Solo es un pequeño detalle pero no queria ese scroll horizontal:3
Se puede arreglar fácilmente declarando el contenedor nav con un 100vw, así css solo toma el tamaño que es visto por el usuario. 😁
Ajustar con 100vw no siempre es recomendable, porque ese valor no toma en cuenta el espacio que ocupa la barra para hacer scroll, es mejor utilizar 100%, y si no se aplica correctamente seria necesario leer el código y identificar las propiedades y estilos aplicados a los elementos padres de HTML.
Es una super mala práctica colocar los tamaños de los pixeles al ojo, lo mejor es revisar el diseño en figma y buscar los tamaños de cada componente, fuente, logos!
Hola a todos! Esta clase en particular me gustó porque se vio el uso del position relative y el absolute muy claro. Además, se usaron varias propiedades de CSS que en la práctica uno va entendiendo poco a poco. Así quedaron mis pantallas para desktop y mobile. Le añadí la flechita por lo cual adjunto el código que usé para esto.
tienes mucha razon, es cierto que lo de position absolute y relative se vio un poco mas claro en esta clase. Ahora entendi un poco mejor eso que menciona la profe en el curso anterior
Excelente el aporte de la flechita, no tenia idea de esa propiedad para girarla, muchas gracias!👌😎
Todo bien hasta que hice aparecer el icono del menu ¿saben por qué me sale así?
Hola Crisjcdj,
Asumo te refieres a las barritas horizontales del menú tipo hamburguesa, por favor, sube tu proyecto a GitHub y compartes el repositorio o comparte con nosotros el código CSS y HTML por este medio.
Saludos
Puedes modificar su widht y height o tambien te recomiendo que le agregues padding
Si no me equivoco, había una flechita al lado del correo que estaba en el diseño principal. Se la agregué en el mío, es interesante porque tuve que usar una función de CSS para rotarla 90°.
como lo hiciste?
Agregas la imagen de la flechita en el HTML, agregas la clase a la imagen de la flechita, y en el CSS le agregas: