Posiblemente has visto el botón en medio de dos secciones y pensaste: ¡que complicado! Pues no lo es tanto. Se lo conoce como botón flotante porque aparentemente no está en ninguna sección, sino en medio de dos, dando la sensación de estar en el aire. La forma de posicionarlo ahí es mucho más sencilla de lo que parece: modificando su position.
Cómo aplicar astilos al botón
Sigue estos pasos:
Llamamos la clase del botón desde la clase contenedora con .header--title-container .header--button.
Definimos su posición como absolute. Al hacerlo toma como posición relativa a su padre directo (en este caso el header) y nos permite posicionar el contenido en cualquier parte del contenedor. Recuerda que sólo cuando la posición es absoluta es que podemos añadir un top, bottom, left y right, debido a que está fijo. Esto no pasa si su posición fuera relativa.
Con left: calc(50% - 118px) le decimos que queremos mantenerlo en el centro con el 50%, pero como el botón es muy grande, que reste 118px a la izquierda, centrándolo.
Desplazamos hacia abajo el botón del contenedor con un top de 270px.
Añadimos un margen superior de 35px.
Añadimos espacio interno con padding: 15px.
Definimos su ancho en 229px y su altura en 48px.
Le damos el color de fondo correspondiente con la variable --off-white.
Agregamos la sombra que le da el efecto de flotar.
Con border: none quitamos cualquier posible borde que agregue el navegador por defecto.
Redondeamos los bordes con un border-radius: 5px.
Ajustamos el tamaño de la fuente en 1.4rem y la hacemos negrita con font-weight: bold.
Le quitamos el subrayado con text-decoration: none y le damos un color negro con la variable que creamos.
Llamamos la etiqueta span donde crearemos el ícono desde su clase contenedora con .header--button span.
Definimos el display en inline-block para que se mantenga en el mismo espacio que el texto que lo acompaña.
Definimos su ancho en 13px y su alto en 8px.
Añadimos un margin-left: 10px para separarlo un poco horizontalmente del texto.
Llamamos el archivo del ícono con background-image.
¿Cómo llamar un asset desde otra carpeta?
Si el archivo que quieres llamar está contenido en una carpeta distinta a la de tu documento .css, debes hacerlo llamando a la capeta principal.
Colocas ../ en la url para llevarte a la carpeta anterior y desde ahí buscar el asset. En este caso el archivo está en una carpeta dentro de la carpeta en que está el archivo .css, por lo que pondríamos url(""./assets/icons/down-arrow.svg"").
¡Terminamos el header! Aprendimos y repasamos muchas funciones importantes como posicionar el contenido con flex, definir degradados y a usar calc (te puede salvar de muchos problemas simétricos.
Contribución creada por: José Miguel Veintimilla (Platzi Contributor).
Si son unos enfermos de la simetria como yo jeje, se tiene que tomar el 50% del total del width del contenedor en este caso 229px y quedaria asi:
left: calc(50% - 114.5px);
eres de los míos hice lo mismo XD
Pero.. no tiene sentido de colocar .5px... ya que el píxel es la mínima unidad de renderizado de una imagen... si pones 114.5px es lo mismo que 114px para el tamaño del boton ... así que en el tema de píxeles no tiene mucho sentido hacer eso, lo ideal sería poner 115px, viéndolo como queda físicamente se pueden notar mejor las diferencias...como ves en el caso de poner 114.5px o 114px el botón queda un poco para la derecha, es una nada... pero supongo que si te gusta la simetría te interesará 😁
Una forma más fácil de centrar al botón sería así:
left:0;right:0; margin-right: auto; margin-left: auto;}```
Creo que es más sencillo, queda perfectamente alineado sin necesidad de hacer cálculos nosotros mismos.
muchas gracias por el aporte! <3
De nada!
A mí me daba problemas el icono down-arrow porque había descargado de Figma lo que pone #mdi_keyboard_arrow_down.
Descargando en su lugar donde pone Vector me queda como al profe.
me paso lo mismo .. tuve que bajarlo como vector
Tambien me paso lo mismo.
Hola :D
Espero terminar la escuela de desarrollo web creandole una pagina web a mi esposa
Vas por buen camino!, ¿ya hiciste el
Curso definitivo de HTML y CSS?. Con ese créeme que le entregas una página lista.
Éxitos y bendiciones en este camino del desarrollo
Super!👏
Vengo a ahorrarles dolores de cabeza
Tengan cuidado con los espacios en la opcion calc por que de lo contrario no tomara el estilo.
Gracias.
ajjaja gracias!! hubiera leído este comentario antes. La verdad es que no me dolió la cabeza pero si que pasé unos segundos probando hasta que entendí que había que dejar espacios. Saludos!
Saludos comunidad
Leyendo los comentarios de la comunidad me di cuenta que mi proyecto corria peligro de romperse ya que todas mis unidades de medida estaban en rem, por lo que si el usuario hacia ajustes del tamaño de fuente en su navegador, todo el diseño seria distinto. Asi que cambie todas ellas a px de inmediato! pero... jugando con las dimensiones de fuente en el navegador (especificamente chrome) mi diseño se rompia igual, pero entendi el porque.
Cuando el font size del texto crece (al ajustar la configuracion del navegador) lo hace hacia abajo junto a su line height y el contenido puede quedar debajo de algun elemento flotante (como el boton del header en posicion absolute en este proyecto).
Usando esta linea de codigo css en el header:
height: 353px;
con una configuracion de mi browser de:
el proyecto se rompe de esta manera:
pero...
con este codigo en el header:
height:35.3rem;
y la misma configuracion del navegador, el proyecto quedaba asi:
Por lo tanto podriamos concluir que...
De preferencia ajustar propiedades verticales que NO sean font-size usando rem.
Esto lo descubri jugando con el tamaño de fuente del navegador y las propiedades rem y px.
De seguro deben haber buenas practicas sobre el tema ahi fuera u optimizaciones para proyectos web a todo terreno. Si conoces mas informacion sobre el tema suma tu comentario, hagamos debate e intercambio de ideas. Ese conocimiento nos ayudara a todos!
Excelente aporte hermano, logre entender mucho mejor cuando aplicar el rem y px!!
Excelente aporte, pero no solo en el Header, sino en todos los height contenedores (Header, Header_title-container, .header_button, span), esto hara que todo se alargue hacia abajo cuanto el tamano de la fuente aumentey no se sobrelapan
Les comparto info sobre la función CALC.
La función CSS Calc() permite realizar operaciones con los valores de propiedades CSS.
Se puede usar para operar con medidas, frecuencias, ángulos, tiempo, porcentajes, números y enteros.
Se pueden utilizar operaciones de suma (+), resta (-), multiplicación (*) y división (/). En el caso de la suma y resta, es necesario siempre dejar espacios en blanco (whitespaces) entre los valores para que no se generen errores.
Position absolute toma a position relative como padre directo y puede reposicionarse en cualquier parte del header.
Gracias, me sirvio tu aporte.
Gracias, me sirvió el ultimo aporte
Al principio de la clase creo que el profe se equivoco, pues si es posible usar top, right, left y bottom con position: relative y lo hace desde su punto original de su posicion, a diferencia de absolute que modifica el flujo de nuestro layout. Solo position: static no nos deja usar las 4 propiedades offset antes mencionadas (top, left, etc).
Esto les servirá para centrar el elemento sin tener que saber las dimensiones exactas del elemento:
left:50%;transform:translateX(-50%);
El transform lo que hace es mover el elemento respecto a su propio centro. En este caso yo indico que quiero moverlo en su eje X, un 50% de su ancho actual en dirección negativa, es decir, a la izquierda 👍
¡Que maravilla! Gracias por el aporte
Esta forma de hecho es más óptima que la hecha por el profesor a nivel de renderizado. Las ventajas del uso de transform se ven en detalle en el Curso de Optimización Web
Bien!!!! Genial!!
Yo lo hice con el display inline-flex y me ayudo a no tener que hacer cálculos, quedando centrado, solo agregando el tamaño y el margin.
Es mi aporte pero si alguien nota algún error me encantaría que me lo comentara
Si tienen problema con la imagen como la descargó Diego, les sugiero bajarla como Vector.svg
Muchísimas gracias, me salvaste de un problema que no podía resolver.
muchísimas gracias, también me salvaste, sabes a qué se deba ???
¿Es buena o mala practica usar unidades REM en un width, height, top, min width, etc?
Es mala práctica. Es recomendable usar REM solo con fuentes. La razón es que no sabemos que tamaño de fuente tiene configurado por defecto el usuario en su navegador. Si tiene un tamaño de fuente muy grande y usamos REM para dar dimensiones, nuestro diseño se romperá.
REM solo se utiliza para fuentes :) <3 , esto se ve en el curso definitivo de HTML y CSS . <3
Para centrar a la mitad el boton, se mueve desde la izquierda un 50%, pero el boton empieza en ese 50% por lo que tenemos que restar a este 50% la mitad del ancho de nuestro boton, en este caso:
229px/2 =114.5px
Perfecto gracias, justo lo que queria entender
Muchas gracias, no lograba entender de donde se sacaban los pixeles pero ahora ya se como usarlo :)
Recuerden quitar la i que está dentro de la etiqueta span, me demoré 10 minutos en descifrar la razón por la cual mi flecha se veía como una runa vikinga. 🤦♂️
Jajajajajajaja
jajajajaja me paso lo mismo jajajajajajaja
Veníamos _taaan _bien con las explicaciones y tuvo que aparecer un botón flotante con posición absoluta y ahora hay que hacer cálculos para que quede mitad acá y mitad allá. :-(
jaja la verdad que es difícil entender al principio. Aún me cuesta entender la lógica que lleva pero poco a poco amigo :D
centrar elementos abosolutos a la mitad
bottom {left:0;right:0;margin:0 auto;
No me gusta usar tantos valores fijos en px preferiria utilizar rem o % entiendo para los min-width/max-width o algunos otros. Que piensan ustedes sobre el uso de unidades absolutas como px como lo esta haciendo el profesor?
Pfff la verdad ahí he tenido un lío, seguún he entendido solo se utiliza rem cuando son tamaños de letras y así, aunque también lo he hecho reemplazando todos los px con rem, así que no sé
Justo estoy en las mismas que ustedes, ¿quién nos ayudará con este tema?. Yo para todo uso REM.