En la estructura base de la sección de beneficios maquetamos las etiquetas necesarias y sus clases respectivas para empezar a aplicar estilos. ¡Pues ahora es el momento! Vamos a nuestro archivo .css y empezemos con la sección del título.
Aplicar estilos en el contenedor principal
Llamamos la clase del contenedor de la sección con .main-product-detail.
Le asignamos un position: relative. Esto es porque el contenedor del logo flotante se creará con position: absolute. Para que un position: absolute pueda posicionarse, busca al primer contenedor padre que tenga un position: relative. Por esto lo colocamos aquí y se mantenga en este contenedor.
Ajustamos su ancho en un 100% y lo limitamos en un mínimo de 320px.
Colocamos la altura en auto para que se ajuste a lo que necesite el contenedor.
Añadimos un padding 20px arriba y abajo y 10px a los lados.
.product-detail--title {position: relative;width:100%; min-width: 320px;height: auto;padding: 20px 10px; background-color:var(--warm-black);}
Pasos para aplicar estilos al logo
Llamamos la clase directa de la etiqueta span del logo con .product-detail--batata-logo.
Le asignamos un position: absolute para que esté por encima de los demás elementos.
Ajustamos un ancho en 40px y un alto en 25px.
Para centrarlo entre las dos secciones:
Elevamos la mitad del logo hacia fuera del contenedor con top: -10px.
Lo centramos con left: calc(50% - 20px), donde 50% lo coloca en la mitad, pero no lo centra. Esto se debe a que el logo tiene dimensiones (40px para ser precisos), y como queremos que esté justo en la mitad, le quitamos la mitad de su ancho (20px), posicionándolo justo en el centro.
Llamamos la imagen con background-image: url("""").
Llamamos la clase del contenedor de nuestro título con .product-detail--title.
Ajustamos su ancho para que ocupe el 90% de su contenedor principal.
Establecemos el ancho mínimo en 288px.
Colocamos el alto en auto para que ocupe lo que necesite el texto. Esto es una buena práctica para que el texto reaccione bien sin importar que tanto se vea comprimido por el ancho.
Lo centramos con un margin: 0 auto.
Separamos el texto del extremo superior con un margin-top: 50px.
Llamamos la etiqueta p desde su contenedor directo con .product-detail--title p.
Aplicamos un margin-bottom: 20px para separarlo de las secciones de abajo.
Ajustamos el tamaño de la fuente a 1.4rem y aplicamos un grosor de 500.
Ajustamos el interlineado en 1.8rem.
Cambiamos el color a #808080 como nos indica el diseño en Figma.
.product-detail--title p { margin-bottom: 20px; font-size:1.4rem; font-weight:500; line-height:1.8rem;color: #808080;}
En el navegador, podríamos observar este resultado:
¡Y bien! Recordamos algo importante sobre el position: absolute y su relación directa con su padre con position: relative. Ahora hay que trabajar en las secciones de información de nuestra sección de beneficios.
Contribución creada por: José Miguel Veintimilla (Platzi Contributor).
.product-detail__batata-logo{position: absolute;top:0%;left:50%;transform:translate(-50%,-50%);/* Que sería lo mismo a poner translate(-20px, -12.5px); */}
en top no utilizas un valor que cambie de acuerdo al tamaño de la pantalla, como si lo haces en el left, por lo que utilizar recursos en un calc es innecesario y no aconsejable
gracias
like si tu también presionas ctrl + S cuando cambias un estilo en el inspector de elementos y se abre una ventana para guardar la pagina. xD
jejejjee me pasa mucho
jasjasa, pasa mucho eveda
left:calc(50%- 20px);
left(atributo): Alinea un elemento con referencia al lado izquierdo de nuestro contenedor.
calc()(función): Nos permite realizar cálculos para determinar valores de propiedades CSS.
50%(parámetro): Representa la mitad del ancho del contenedor(para 320px, el 50% serían = 160px), lo cual alineará nuestro elemento 160px de izquierda(left) a derecha.
20px: Representan la mitad del ancho(width) de nuestro elemento, esto se hace con la finalidad de poder posicionarlo en el centro de nuestro contenedor.
gracias
Muchas gracias!!!
El segundo argumento de la función calc() es la mitad del width del elemento.
Siempre se me había hecho muy difícil jugar con las Positions.
Pero no cabe duda que la practica ayuda mucho.
Ahí vamos poco a poco creando la Pagina <3
Ten cuidado con el contraste, puede ocasionar problemas grandes de accesibilidad:
Una herramienta que utilizo para ver si dos colores tienen contraste suficiente como para usar uno de background-color y el otro como color es contrast ratio.
Según la W3C todos los textos e imágenes con texto deben tener un contraste de al menos 4.5, cosa que podemos saber con la herramienta que ya he mencionado arriba, sin embargo. Aquí hay algunas excepciones. Espero les sea de mucha utilidad:)
muchas gracias por este aporte, es realmente util...
Excelente acotación.
Pensé que bottom: 10px era lo mismo que top: -10px pero ahora sé que me hace falta mucho por aprender de las positions en CSS 😄.
por que no son lo mismo?
Bottom 10 toma de referencia la parte inferior de la caja. Y la posoción del logo sería 10px arriba de esa línea.
.
Top toma como referencia la línea superior de la caja. Si le das top:10px, el logo estará 10px abajo de esa línea. Pero si le das -10px, el logo estará por encima de la línea superior.
Colocando en el contenedor un padding nos ahorramos el margin-top del título, y nos sirve también para separar la última tarjeta de la siguiente sección.
Por cierto, el valor de heigth: auto es el que trae por defecto el navegador, por lo que no es necesario colocarlo.
.product-detail {padding: 50px 16px;}
Muchas gracias :)
Para mala suerte de nosotros los desarrolladores, el año pasado salió el Samsung Galaxy fold, tiene varios tamaños de pantalla y el tamaño mínimo es de 280px 😢😢😢
Efectivamente. Así que hay que tenerlo en cuenta a la hora del diseño. Una herramienta interesante para eso es Responsively, podés asegurarte de cómo queda tu diseño en una gran cantidad de dispositivos:
Exacto... Pero no creo que salga un dispositivo con un tamaño de pantalla de menos de 280px ya que pierde el sentido ya que es muy pequeño.
• Siempre que utilicemos un “position: absolute”, tenemos que verificar que el padre de ese elemento (el contenedor) tenga un “position: relative”. Esto nos ayudará a acomodar los elementos de la forma deseada.
Un Recordatorio al usar calc() respetar los espacios entre el signo y los números estuve 20 minutos buscando que clase era la que me sobre escribía mi estilo incluso usaba el tag !important o estilos inline y no me funcionaba por no respetar los espacios.
excelente apunte
Muchas gracias!!
20 minutos viendo por qué no me salía el h2 como al profe y tratando de solucionarlo, y resulta que tenía un typo. Escribió "compartación" en vez de "conparación".
Para posicionar la papa, también pueden usar margin, sin tener una posición en absolute, se hace de la siguiente forma
Durante el transcurso del proyecto hemos usado width y height con porcentajes, que hay de el viewport width y viewport height? no sería mejor usar esta medida teniendo en cuenta que estamos trabajando en un proyecto responsive?
Sí, es posible usar las vw y vh también, en el tema de las medidas hay muchas posibilidades, y hay que considerar aún que faltan los media queries para que escale a tamaño smartphone 640px, 720px y desktop.
Para centrar un elemento que tiene una posición absoluta también podríamos usar lo siguiente:
Excelente amigo, lo probé y funciona correctamente... pero puedes explicar un poco lo que hiciste? Sería genial entender el por qué de las cosas, y así seguir aplicándolo en un futuro...
Otra forma de posicionar el logo de la batata
.main-product-detail span {display: inline-block;width:4.1rem;height:2.4rem;background:url(./assets/Icons/icon-minilogo.svg) no-repeat center/cover;position: relative;//lo puedo mover desde su propia posicionleft:calc(50%-20.5px);bottom: 12px;//simplemente empujarlo desde abajo la mitad de su altura}
¿Por qué le da position: obsolute a la sección .main-product-detail?
se la dio fue al icono al product main se le da es relative
Hola, ya qué marcó al padre como relativo, el hijo será absoluto sobre él, cuando quieras sobreponer elementos, se usa eso.
Otra opcion que utilice para centrar el logo fue la siguiente (me sirvio tambien para el boton del header)
left:0;right:0; margin-inline: auto;
Pueden leer mas sobre la propiedad margin-inline aqui, tambien les recomiendo revisar en caniuse que navegadores soportan esta propiedad.
Hola! Una pregunta: no es redundante colocar width: 100% a los elementos con display block, por ejemplo al section? Creía que por defecto ocupaban el 100% del ancho
Si solo tuviéramos un tamaño de pantalla serviría. Pero debemos tener en cuenta en cuenta distintos dispositivos y para mantener la estética debemos usar min-with y max-with que necesita un with inicial para que funcione. Otro motivo sería implementar luego media querys para hacerlo responsive.
/* observe que pusimos un position relative un contenedor antes de nuestro logo, esto porque el logo busca el primer position relative para posicionarse con referencia a este, si no lo ponemos se ira a buscar el siguiente contenedor con position relative, como el main o algun otro */