No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Navbar

5/12
Recursos

¿Cómo construir y estilizar un Navbar con CSS Grid y Flexbox?

Construir un navbar estéticamente atractivo y funcional es fundamental para la navegación web. En esta lección, te guiaremos paso a paso en la creación de un navbar utilizando CSS Grid y Flexbox, incorporando también una animación para añadir dinamismo a la interacción del usuario. Comencemos optimizando y ubicando nuestro navbar usando CSS Grid.

¿Cómo ubicar el navbar con CSS Grid?

Para situar correctamente el navbar en tu diseño, utilizamos la propiedad de CSS Grid. Al colocar el navbar en un área específica, aseguramos que permanezca fijo allí, independientemente del contenido adicional. Aquí te mostramos cómo:

.napbar {
  background: lightbeam;
  grid-area: navbar;
}

Este código asegura que el navbar se posicione donde lo desees en tu estructura de grid. Inspecciona en el navegador para verificar que el elemento se ubique correctamente.

¿Cómo alinear elementos dentro de un navbar?

Dentro del navbar, los elementos deben estar bien alineados para crear una experiencia de usuario óptima. Aquí entra en juego Flexbox para ayudar en la disposición correcta:

.navbar-content {
  display: flex;
  align-items: center;
  width: 100%;
  padding: 0 0 0 180px;
}

Con estas propiedades, los elementos se alinean uno al lado del otro de manera ordenada. Es esencial asegurarse de que el espacio y la alineación sean consistentes.

¿Cómo estilizar y animar un navbar?

Un navbar bien estilizado no solo es funcional, sino también atractivo. Usamos Flexbox para organizar los elementos y animaciones CSS para hacer que el navbar cobre vida.

¿Cómo estilizar el contenido del navbar?

El contenido del navbar, como el logo y la lista, requiere de estilos específicos:

  1. Logo:

    .navbar-content .image {
      width: 50px;
      /* Agregar más estilos según sea necesario */
    }
    
  2. Lista de navegación (UL):

    ul {
      display: flex;
      justify-content: space-evenly;
      list-style: none; /* Eliminar viñetas */
      padding: 0;
      width: 450px;
    }
    

Al eliminar las viñetas y ajustar el padding, la lista se ve más limpia y profesional.

¿Cómo implementar la animación del navbar?

Para dar un toque dinámico al diseño, implementamos una sencilla pero efectiva animación para el navbar:

@keyframes navbar {
  from {
    transform: translateY(-200px); /* Fuera de pantalla */
  }
  to {
    transform: translateY(0); /* Visible */
  }
}

.napbar {
  animation: navbar 0.5s ease-in-out 2s;
}

Esta animación hace que el navbar baje suavemente desde la parte superior, mejorando la experiencia visual del usuario al cargar la página.

¿Cómo solucionar problemas comunes al estilizar un navbar?

Durante el desarrollo, puedes enfrentarte a varios problemas, como la falta de coherencia en los estilos o que las propiedades CSS no surtan efecto. Aquí te proponemos algunas soluciones:

  • Asegúrate de utilizar correctamente los selectores de CSS. Verifica que cada estilo esté aplicado al elemento correcto.
  • Comprueba que los enlaces de fuentes y otros recursos externos estén correctamente vinculados y escritos.
  • Usa el inspector del navegador para diagnosticar problemas con selectores y propiedades CSS.

Si bien puede parecer complicado al inicio, estilizar un navbar con CSS Grid y Flexbox se vuelve intuitivo con práctica y atención al detalle. Este enfoque te ayudará a crear interfaces dinámicas que mejoren significativamente la experiencia del usuario. ¡Sigue practicando y no dudes en experimentar!

Aportes 12

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Haz pequeños cambios desde Dev Tools 😃

Hola chicas y chicos les quiero mostrar como uno puede guardar los cambios desde dev tools, esto es muy practico pero es recomendable solo hacer en los elementos que tenemos problemas, lo ideal es siempre trabajar desde nuestro entorno.
.

  • Estando en el navegador irán a devtools y allí se posicionaran en source.
  • Luego van a darle click a la opcion que esta abajo que dice “Add folder to workspace” o añadir carpeta a tu espacio de trabajo y seguido se posicionan en la carpeta que están trabajando y le dan seleccionar carpeta.
  • Finalmente saldra un aviso en la parte superior de la pantalla donde lo único que deben hacer es dar click en “Allow”


.
Les deberá salir algo como esto. 😮

¡Y eso es todo! 😃 Ahora pueden realizar cambios que se reflejaran en tiempo real con su entorno de desarrollo.

NavBar

Les dejo mi resultado:

  • Para resolver el problema de la posición final de la animación del Logo le agregue 30px de padding-top, quedando:
.navbar__content {
	    ....
	    padding: 30px 0 0 80px;
	    .....
}

Me gusto mucho esta clase, sin duda la aplicación del display grid con flexbox es una combinación muy buena.
Les dejo el código de esta clase: https://github.com/paolojoaquin/lego-superheroes/tree/Clase/5-navbar

Aporte:
Para utilizar el shorthand de la propiedades de animación (animation), existe un estándar que determina el orden en que ponemos las propiedades dentro del valor de animation, el cual es:

animation:  [ <'animation-name'> || <'animation-duration'> || <'animation-timing-function'> || <'animation-delay'> ||<'animation-iteration-count'> || <'animation-direction'> || <'animation-fill-mode'> ] 

Un ejemplo seria:

animation: test 2s ease-in 0.2s infinity alternate forwards;

Si no te sigue tomando las FONTS, aca te dejo el link:

@import url('https://fonts.googleapis.com/css2?family=Lato:wght@700;100;300&display=swap');

A mi no me lo tomaba, lo modifique y con este me tomo

Recuerden

  • linear: sin variaciones de velocidad.
  • ease: lento al principio, rápido en el medio y no tan rápido al final. (parecido a ease-in-out)
  • ease-in: lento al principio, rápido al final.
  • ease-out: rápido al principio, lento al final.
  • ease-in-out: lento al principio, rápido en el medio y de nuevo lento al final

Literalmente una chimba esto de Sass (La animación sigue igual).

.navbar {
  grid-area: nav;

  div {
    display: flex;
    align-items: center;
    width: 100%;
    padding: 30px 0 0 60px;
    animation: 2s navTo 0.1s ease-in-out;
    img {
      width: 50px;
    }

    ul {
      display: flex;
      justify-content: space-evenly;
      list-style: none;
      padding: 0;
      width: 450px;
      a {
        color: $color-secundary;
        text-decoration: none;
        font-weight: 700;

        &:hover {
          text-decoration: underline;
        }
      }
    }
  }
}

El texto no lo toma, ya que la profesora tomó letras Italic.
Hay que tomarlas sin el Italic para no tener ese problema de que no ponga el tipo de letra.
Este seria el link
@import url(‘https://fonts.googleapis.com/css2?family=Lato:wght@100;300;700&display=swap’);


 
intente hacerlo antes de ver la clases pero no pude T^T.
 
Mi idea era hacer el contendor del header relative y su contenedor hijo Absolute para poder controlar la posición con top en la animacion.
Pero eso me hizo desacomodar todo por completo me pelee un rato con las posiciones, en fin me rendi y decidí ver la implementación de la profe… en fin aprendí que lo mas obvio puede ser la solución XD
 
el código esta en mi github por si alguien quiere darle una checada

realmente se aprende mucho nos toca es practicar cada dia mas para entender como funciona greed y flex para poder controlar cada etiqueta .container {  position: absolute;  z-index: 1;  display: grid;  grid-template-columns: 55% 45%;  grid-template-rows: 20% 50% 30%;   grid-template-areas:    "nav      aside"    "section  aside"    "footer   aside";   height: 100vh;  width: 100%;}

ya esta habilitada la funcion de agregar el ampersan “&” en css entonces tambien lo puedes hacer asi

.navbar__content {
    display: flex;
    align-items: center;
    width: 100%;
    padding: 0 0 0 80px;

    & img {
        width: 50px;
    }
}

Yo me anime hacerlo un poco diferente: lo que hice fue que el nav iniciara con un transform: translateY(-100px); y la animación simplemente se encargaba de ```
@keyframes navbar {
100% {
transform: translateY(0);
}
}

Cada elemento debe ir dentro de su bloque

.navbar {
    background-color: pink;
    grid-area: nav;
}

.navbar .navbar__content {
    display: flex;
    align-items: center;
    width: 100%;
    padding-left: 80px;
    animation: navbar 2s 0.5s ease-in-out;
}

@keyframes navbar {
    0% {
        transform: translateY(-200px);
    }
    100% {
        transform: translateY(0);
    }
}

.navbar .navbar__content img {
    width: 50px;
    background-position: center;
    background-repeat: no-repeat;
    background-size: cover;
}

.navbar .navbar__content ul {
    display: flex;
    justify-content: space-evenly;
    list-style: none;
    padding: 0;
    width: 450px;
}

.navbar .navbar__content ul li a {
    text-decoration: none;
    color: var(--secundary-color);
    font-weight: 400;
}