🟢 => Aquí es donde podemos sacar provecho de las Variables CSS al almacenar el tamaño fijo de las cards en su contenedor padre, utilizarla en cada propiedad donde se requiera y solo cambiar el valor de esta variable en Responsive.

Ahora estilizaremos las cards que forman la página de inicio implementando CSS Grid. La o el usuario verá estilos diferentes según el dispositivo desde el que se conecte y aquí podrás identificar sus diferencias.
Cómo implementar CSS Grid para centrar varias imágenes
Trabajaremos en el contenedor principal, cuya clase es cards-container. Con display:grid creamos las grillas y luego las columnas con grid-template-columns y usamos la función repeat para que repita nuestro fragmento de código.
Con auto-fill nos aseguramos que la grilla ocupe el 100% del espacio disponible. Después generamos un espacio entre los items con gap. Finalmente, alineamos horizontal y verticalmente empleando place-content.
El CSS quedaría así:
.cards-container { display: grid; grid-template-columns: repeat(auto-fill, 240px); gap: 26px; place-content: center; }
Ahora debemos ajustar el tamaño de las imágenes.
.product-card { width: 240px; } .product-card img { width: 240px; height: 240px; border-radius: 20px; object-fit: cover; }
Misma clase, estilos diferentes
Queremos que las tarjetas de la página de inicio muestren el precio del artículo y debajo el nombre de este con un tamaño de fuente y color diferentes.
Al lado de ambos debe estar el ícono del carrito de compras.
Para conseguir este resultado debemos:
.product-info { display: flex; justify-content: space-between; align-items: center; margin-top: 12px; }
.product-info figure { margin: 0; } .product-info figure img { width: 35px; height: 35px; }
.product-info div p:nth-child(1) { font-weight: bold; font-size: var(--md); margin-top: 0; margin-bottom: 4px; } .product-info div p:nth-child(2) { font-size: var(--sm); margin-top: 0; margin-bottom: 0; color: var(--very-light-pink); }
La pseudo-clase nth-child hace posible que le apliquemos estilos diferentes a los párrafos sin necesidad de asignarles una clase a cada uno.
Página de inicio responsive con solo 8 líneas de código
Asignando media queries conseguimos que las cards se vean bien en diferentes pantallas, es decir, desarrollamos una página de incio responsiva.
Como implementamos CSS Grid, lo único que necesitamos es disminuir el tamaño de las imágenes, de la siguiente forma:
@media (max-width: 640px) { .cards-container { grid-template-columns: repeat(auto-fill, 140px); } .product-card { width: 140px; } .product-card img { width: 140px; height: 140px; } }
🎯 ¿Te gustó CSS Grid? Amplía tus conocimientos:
Contribución creada por Guadalupe Monge Barale
Ahora estilizaremos las cards que forman la página de inicio implementando CSS Grid. La o el usuario verá estilos diferentes según el dispositivo desde el que se conecte y aquí podrás identificar sus diferencias.


Trabajaremos en el contenedor principal, cuya clase es cards-container. Con display:grid creamos las grillas y luego las columnas con grid-template-columns y usamos la función repeat para que repita nuestro fragmento de código.
Con auto-fill nos aseguramos que la grilla ocupe el 100% del espacio disponible. Después generamos un espacio entre los items con gap. Finalmente, alineamos horizontal y verticalmente empleando place-content.
El CSS quedaría así:
.cards-container {
display: grid;
grid-template-columns: repeat(auto-fill, 240px);
gap: 26px;
place-content: center;
}
Ahora debemos ajustar el tamaño de las imágenes.
.product-card {
width: 240px;
}
.product-card img {
width: 240px;
height: 240px;
border-radius: 20px;
object-fit: cover;
}
Queremos que las tarjetas de la página de inicio muestren el precio del artículo y debajo el nombre de este con un tamaño de fuente y color diferentes.
Al lado de ambos debe estar el ícono del carrito de compras.
Para conseguir este resultado debemos:
.product-info {
display: flex;
justify-content: space-between;
align-items: center;
margin-top: 12px;
}
.product-info figure {
margin: 0;
}
.product-info figure img {
width: 35px;
height: 35px;
}
.product-info div p:nth-child(1) {
font-weight: bold;
font-size: var(--md);
margin-top: 0;
margin-bottom: 4px;
}
.product-info div p:nth-child(2) {
font-size: var(--sm);
margin-top: 0;
margin-bottom: 0;
color: var(--very-light-pink);
}
La pseudo-clase nth-child hace posible que le apliquemos estilos diferentes a los párrafos sin necesidad de asignarles una clase a cada uno.
Asignando media queries conseguimos que las cards se vean bien en diferentes pantallas, es decir, desarrollamos una página de incio responsiva.
Como implementamos CSS Grid, lo único que necesitamos es disminuir el tamaño de las imágenes, de la siguiente forma:
@media (max-width: 640px) {
.cards-container {
grid-template-columns: repeat(auto-fill, 140px);
}
.product-card {
width: 140px;
}
.product-card img {
width: 140px;
height: 140px;
}
}
🎯 ¿Te gustó CSS Grid? Amplía tus conocimientos:
Contribución creada por Guadalupe Monge Barale
🟢 => Aquí es donde podemos sacar provecho de las Variables CSS al almacenar el tamaño fijo de las cards en su contenedor padre, utilizarla en cada propiedad donde se requiera y solo cambiar el valor de esta variable en Responsive.

Realizado!! Lo hice para mi futura venta de bonsai!!

Hay que tener mucho cuidado con el grid-template-columns, yo había puesto "repeat (auto... " con ese espacio entre el repeat y el paréntesis y no me funcionaba. Me costó mucho ver el error pero al final di con él. Así que ya saben... si no lo ponen de esa manera, aunque sea un simple espacio ya no les leerá la propiedad correctamente!
Pueden duplicar texto rápidamente en vscode de la siguiente manera 👉 Seleccionan un texto, mantienen ALT + SHIFT y presionan la flecha de abajo o de arriba dependiendo a dónde quieren que se diriga la copia del texto selecionado 👍 yyy si mantienen presionada esa flecha, se duplicará muchas veces hasta que suelte la flecha 👌
Le agregué lo visual al agregar y quitar el producto con JavaScript
HTML
<div class="card">
<figure class="card__image-container">
<img
src="./images/chopper-figure.png"
alt="Chopper's toy"
class="card__image"
/>
<div class="center-text hidden">Removed from cart</div>
</figure>
<div class="card__additional">
<div class="card__info">
<span class="card__price">$ 120,00</span
><span class="card__name">Chopper's toy</span>
</div>
<img
src="./images/bt_add_to_cart.svg"
alt="Shop icon"
class="card__shopping-icon"
/>
</div>
</div>
CSS
:root {
--very-large: 2rem;
--large: 1.9rem;
--medium: 1.7rem;
--short: 1.6rem;
--very-short: 1.4rem;
}
.center-text {
display: inline-block;
width: calc(var(--card-size) - 30px);
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
padding: 4px 16px;
border-radius: 10px;
background: rgba(255, 237, 237, 0.794);
color: var(--dark);
font-size: var(--short);
font-weight: bold;
text-align: center;
}
.hidden {
display: none;
}
.card__shopping-icon {
width: 32px;
height: 32px;
}
@media screen and (min-width: 600px) {
.card__shopping-icon {
width: 40px;
height: 40px;
}
.center-text {
padding: 4px 36px;
font-size: var(--very-large);
}
}
JS
let data = document.querySelectorAll(".card");
data = Array.from(data);
data.forEach(e => {
e.addEventListener("click", changeShoppingStatus);
});
function changeShoppingStatus() {
console.log(this);
let removedText = this.querySelector(".card__image-container .center-text");
let iconImage = this.querySelector(".card__additional img");
imageSrc = iconImage.getAttribute("src");
console.log(removedText);
console.log(imageSrc);
if (imageSrc !== "./images/bt_added_to_cart.svg") {
iconImage.setAttribute("src", "./images/bt_added_to_cart.svg");
removedText.classList.add("hidden");
} else {
iconImage.setAttribute("src", "./images/bt_add_to_cart.svg");
removedText.classList.remove("hidden");
}
}
Tip de VS Code! Para no tener que borrar todo el código y luego volver a pegar, como hizo la profe en el minuto 7:20, existe otra solución...




++PD: Se reemplaza todo el código que sea igual en TODO EL ARCHIVO.++
me gusto como quedo :3

**Mis apuntes ** A lo mejor te sirven :D Nota: Con Flexbox se realiza la separación y organización de los precios nombres y logos de los productos


Ya voy a empezar a vender mis productos
No dudo que la profesora tenga un buen conocimiento sobre desarrollo frontend, sin embargo, tiene muy malas prácticas.
Quiero pensar que es porque este es un curso muy básico, y como se mencionó, se reutilizará este código en otro curso "avanzado", pero creo que es mejor aplicar buenas prácticas desde niveles básicos para ir acostumbrando a los estudiantes.