Emilio Nicolás Mendoza Patti
Juan Camilo Martinez Cano
❤️❤️❤️
En esta entrada podrás practicar con el componente header para tu aplicación.
Componente ""header""
Anímate a crear una barra de navegación sencilla. Para generar un componente, recuerda utilizar el comando ng g c <componente-name> del CLI de Angular.
Paso 1: Escribe el código HTML de tu template <header>.
<!-- components/nav-bar/nav-bar.component.html --> <header class=""header""> <a href=""#"" class=""logo"">CompanyLogo</a> <div class=""header-right""> <a href=""#"">Home</a> <a class=""active"" href=""#"">Catalogo</a> <a href=""#"">About</a> </div> </header>
Paso 2: Agrega el CSS correspondiente en la hoja de estilos del componente.
/* components/nav-bar/nav-bar.component.scss */ .header { overflow: hidden; background-color: #f1f1f1; padding: 20px 10px; a { float: left; color: black; text-align: center; padding: 12px; text-decoration: none; font-size: 18px; border-radius: 4px; &.logo { font-size: 25px; font-weight: bold; } } a:hover { background-color: #ddd; color: black; } a.active { background-color: dodgerblue; color: white; } .header-right { float: right; } } /* Header Mobile */ @media screen and (max-width: 512px) { .header { a { float: none; display: block; text-align: left; } .header-right { float: none; } } }
Paso 3: Para tener tu header responsive, has uso de Media Queries para lograr que la aplicación se adapte a cualquier tamaño de pantalla.
Siempre tienes que desarrollar tus aplicaciones front-end de manera tal que se vea correctamente en cualquier dispositivo. Apóyate de las herramientas que los navegadores poseen para validar tu aplicación.
Ver código fuente del proyecto
Contribución creada con los aportes de Kevin Fiorentino.
CSS:
.show-mobile { display: block; box-shadow: 0px 2px 5px rgb(black, .2); > div { padding: 1em; display: flex; justify-content: space-between; align-items: center; button { border: 0; background: transparent; } } } .hide-mobile { display: none; box-shadow: 0px 2px 5px rgb(black, .2); > div { padding: 1em; display: flex; justify-content: space-between; align-items: center; } .logo { margin-right: 1em; } nav { display: flex; align-items: center; ul { display: flex; list-style: none; a { margin: 0 .2em; color: inherit; text-decoration: none; } } } .info { display: flex; align-items: center; .account { margin-right: .5em; } } } /* Medium only */ @media screen and (min-width: 40em) and (max-width: 63.9375em) { .show-mobile { display: none; } .hide-mobile { display: block; } } /* Large and up */ @media screen and (min-width: 64em) { .show-mobile { display: none; } .hide-mobile { display: block; } }
HTML:
<div class="show-mobile"> <div> <button> <img src="./assets/svg/icon_menu.svg" alt="menu"> </button> <a href=""> <img src="./assets/svg/logo_yard_sale.svg" alt="logo"> </a> <a href=""> <img src="./assets/svg/icon_shopping_cart.svg" alt="logo"> </a> </div> </div> <div class="hide-mobile"> <div> <nav> <a class="logo" href=""> <img src="./assets/svg/logo_yard_sale.svg" alt="logo"> </a> <ul> <li><a href="">All</a></li> <li><a href="">Clothes</a></li> <li><a href="">Electronics</a></li> </ul> </nav> <div class="info"> <div class="account">nicolas@nicolas.com</div> <div> <a href=""> <img src="./assets/svg/icon_shopping_cart.svg" alt="logo"> </a> </div> </div> </div> </div>
Emilio Nicolás Mendoza Patti
Juan Camilo Martinez Cano
❤️❤️❤️
Jimmy Buriticá Londoño
En el siguiente enlace pueden descargar las imágenes SVG del proyecto.
David De La Cruz S.
muchas gracias Jimmy
Ivan Hilario Pacheco
Jonathan Gonzalez Botero
Gracias, lo que hice fue convertir tu codigo en sass con una convertidor en internet (esto con el fin de no perder tiempo y avanzar en el curso)
CHRISTIAN OLIVER SOLANO NUÑEZ
todo sobre la pagina a realizar
Mateo Arias Correa
Esta clase la verdad fue como " Esto es Facebook, esta es la parte responsiva de Facebook " y ya saben todo, que mal, venía muy ilusionado.
Huilén Solís
?
Kengya Moncada
pero que mal le ves al curso Mateo? si, se salto una parte... pero solo es html o no? no todo lo vamos a tener papita. Tenemos que resolver como buenos programadores.
Gabriel Diaz
Veo muchas quejas en este curso, asi que solo le queda al creador y a Platzi mejorarlo eventualmente. Sin embargo, quiero dejar aquí un comentario de agradecimiento y de aliento a Nicolas y a todo el equipo de Platzi que se esforzó en la realización de este material. Esta claro que ensenar no es nada fácil, y debemos procurar que esta profesión sea respetada y debidamente valorada y remunerada
José Nicolás Aristizabal Ramírez
Me estaban fallando algunos estilos para la parte de mobile, organicé el archivo scss añadiendo algunas caracteristicas. Dejo el aporte.
.show-mobile { display: flex; flex-flow: row wrap; justify-content: space-between; box-shadow: 0px 2px 5px rgb(black, .2); div { padding: 1em; display: flex; justify-content: space-between; align-items: center; button { border: 0; background: transparent; } } a{ margin-top: 15px; margin-right: 15px; } }
Fabrizio Rodrigo Flores Pari
por qué no usa header o los distintos HTML tags en lugar de usar divs?
Daniela Stornelli
es cierto, tenia entendido que usar header en vez de div era de buenas practicas
Israel Elias Manjarrez Quimiz
considero que la etiqueta header sigue siendo la practica correcta pero para fines del curso supongo que simplemente uso divs
Jully Evangelina Flórez Fonseca
😁 Me encanta todo lo que aprendo de programaciónn.
Daniela Stornelli
(esta duda ya la tenia desde que puso las imagenes) en cuanto al ancho me quedan bien, todas iguales, pero en cuanto al largo estan muy desparejas. Eso lo arregló de alguna manera en particular o busco imagenes que justo tengan el mismo largo? (o las corrigió él con algun programa?)
Diego Fernando Caviedes Camaho
porque no me carga las imagenes .svg
fabian Flechas
Lo pudiste resolver?
Diego Fernando Caviedes Camaho
no!
Ciro Edgardo Mora Armesto
por que no me funciona con scss
Nicolas Molina
ProfesorDebe ser que no habilitaste la opción para soportar scss en tu proyecto, puedes cambiarlo con este comando:
ng config defaults.styleExt=scss
Si te genera un error puede probar con este otro:
ng config schematics.@schematics/angular:component.styleext scss
O hacerlo manualmente en el archivo angular.json:
"schematics": { "@schematics/angular:component": { "styleext": "scss" } }
nandi.legorreta
Debería existir un "curso todo incluido". Es cansado, sobre todo para quienes empiezan, el hecho de saltar curso en curso.
Brandon Lee Aguero Fernandez
Es cansado, pero necesario
Juan Fonseca
Si a alguien le interesa generar estilos globales (es util en casos concretos), solo se debe añadir en el angular.json la ruta al archivo con dichos estilos. El archivo quedará mas o menos así:
... "test": { ... "options": { ... "styles": [ "src/styles.css" ], ... } }, ...
Diego Jurado
Como sería si se le pide una maquetación a alguna de las IA?
Brandon Lee Aguero Fernandez
Blue Code
CSS
.show-mobile { display: block; box-shadow: 0px 2px 5px rgba(0, 0, 0, 0.2); } .show-mobile > div { padding: 1em; display: flex; justify-content: space-between; align-items: center; } .show-mobile > div button { border: 0; background: transparent; } .hide-mobile { display: none; box-shadow: 0px 2px 5px rgba(0, 0, 0, 0.2); } .hide-mobile > div { padding: 1em; display: flex; justify-content: space-between; align-items: center; } .hide-mobile .logo { margin-right: 1em; } .hide-mobile nav { display: flex; align-items: center; } .hide-mobile nav ul { display: flex; list-style: none; } .hide-mobile nav ul a { margin: 0 0.2em; color: inherit; text-decoration: none; } .hide-mobile .info { display: flex; align-items: center; } .hide-mobile .info .account { margin-right: 0.5em; } /* Medium only / @media screen and (min-width: 40em) and (max-width: 63.9375em) { .show-mobile { display: none; } .hide-mobile { display: block; } } / Large and up */ @media screen and (min-width: 64em) { .show-mobile { display: none; } .hide-mobile { display: block; } }
luisa maria
Hola Nicolas, Nicolas una pregunta si usamos el ::ng-deep o el : host para el cambio de estilos es buena practica?
Gibran Hernandez Salinas
No encuentro el link de los assets, en qué parte los puso?, profesor :c
Norma Natalia Moreno Espinoza
¡Hola Gibran! :)
El repositorio completo está en github y aquí están los assets
Nunca pares de aprender 💚
Gonzalo Giusiano
hola copie todo tal cual incluso las imagenes svg que tra el archivo pero no me los muestra en el navegador hace horas estoy con el problema y no comprendo que es. Si alguien pudiera ayudarme le agradeceria mucho
Dejo el maquetado del nav
<div class="show-mobile"> <div> <button> <img src="./assets/svg/icon_menu.svg" alt="menu"> </button> <a href=""> <img src="./assets/svg/logo_yard_sale.svg" alt="logo"> </a> <a href=""> <img src="./assets/svg/icon_shopping_cart.svg" alt="logo"> </a> </div> </div> <div class="hide-mobile"> <div> <nav> <a class="logo" href=""> <img src="./assets/svg/logo_yard_sale.svg" alt="logo"> </a> <ul> <li><a href="">All</a></li> <li><a href="">Clothes</a></li> <li><a href="">Electronics</a></li> </ul> </nav> <div class="info"> <div class="account">nicolas@nicolas.com</div> <div> <a href=""> <img src="./assets/svg/icon_shopping_cart.svg" alt="logo"> </a> </div> </div> </div> </div>
Dejo el css puro por si alguien no está utilizando scss como yo
.show-mobile{ display: block; box-shadow: 0px 2px 5px rgb(black, .2); } .show-mobile > div{ padding: 1em; display: flex; justify-content: space-between; align-items: center; } .show-mobile > div img{ border: 0; background: transparent; } .hide-mobile{ display: none; box-shadow: 0px 2px 5px rgb(black, .2); } .hide-mobile > div{ padding: 1em; display: flex; justify-content: space-between; align-items: center; } .hide-mobile .logo{ margin-right: 1em; } .hide-mobile nav{ display: flex; align-items: center; } .hide-mobile nav ul{ display: flex; list-style: none; } .hide-mobile nav ul a{ margin: 0 .2em; color: inherit; text-decoration: none; } .hide-mobile .info{ display: flex; align-items: center; } .hide-mobile .info .account{ margin-right: .5em; } /* Medium only */ @media screen and (min-width: 40em) and (max-width: 63.9375em) { .show-mobile { display: none; } .hide-mobile { display: block; } } /* Large and up */ @media screen and (min-width: 64em) { .show-mobile { display: none; } .hide-mobile { display: block; } }
Comprobémoslo👀 Proporcioname una maquetación avanzada para un lista productos de un ecommerce Ese sería el prompt
<div class="product-list"> <div class="product"> <img src="producto1.jpg" alt="Producto 1"> <h4>Producto 1</h4> <p>Descripción del Producto 1.</p> <span class="price">$100</span> <button class="add-to-cart">Agregar al Carrito</button> </div> <div class="product"> <img src="producto2.jpg" alt="Producto 2"> <h4>Producto 2</h4> <p>Descripción del Producto 2.</p> <span class="price">$120</span> <button class="add-to-cart">Agregar al Carrito</button> </div> </div>
Fui muy injusto con esas instrucciones, lo haré mejor Proporcioname una maquetación avanzada para un lista productos de un ecommerce, usando html semántico, accebilidad web y oocss
<section class="products"> <article class="product"> <img src="producto1.jpg" alt="Producto 1" class="product__image" /> <h2 class="product__title">Producto 1</h3> <p class="product__description">Descripción del Producto 1.</p> <span class="product__price">$100</span> <button class="product__button">Agregar al Carrito</button> </article> <article class="product"> <img src="producto2.jpg" alt="Producto 2" class="product__image" /> <h2 class="product__title">Producto 2</h3> <p class="product__description">Descripción del Producto 2.</p> <span class="product__price">$120</span> <button class="product__button">Agregar al Carrito</button> </article> </section>
Pero esto tiene mucho margen de mejora, uso BEM en lugar de OOCSS, se puede mejorar la semántica y accebilidad. Te inivito a sacar tus propias conclusiones. Por cierto las preguntas deberían de ir en la sección de preguntas de la clase, saludos 👋