Fabian David Guevara Pinilla
Kevin Orellana
GENIAL Amigo te ha quedado increible crack
Joel Dominguez Merino
Tu ya te pusiste a dibujar! Te quedo Increíble, Felicidades!
Dominar la ubicación individual de elementos dentro de una grid es lo que separa un diseño genérico de uno que refleja fielmente un mockup. Mientras que desde el contenedor podemos alinear todos los hijos de forma uniforme, las propiedades aplicadas directamente a cada ítem permiten colocar cada pieza exactamente donde el diseño lo requiere.
¿Por qué no basta con alinear desde el contenedor?
Cuando trabajamos únicamente con el contenedor padre, todos los elementos hijos comparten la misma regla de alineación: todos a la izquierda, todos centrados o todos a la derecha. En la práctica, los diseños reales combinan elementos en distintas posiciones dentro de la misma grid. Por eso necesitamos propiedades que se aplican a cada hijo de forma independiente [0:45].
Para ilustrarlo, se parte de un diseño mobile que debe replicarse tal cual. El primer paso, como siempre, es imaginarse la grid sobre el diseño: contar líneas de fila y de columna, asegurándose de que todas las líneas se toquen entre sí, tanto horizontal como verticalmente [1:15].
El código base del contenedor usa display: grid y grid-template-columns: repeat(2, 1fr) con un width de 60 píxeles. Las filas se generan de forma implícita al agregar más elementos. Cada ítem tiene un tamaño de 30 píxeles. Sin embargo, ese resultado no coincide con el diseño solicitado [1:40].
¿Cómo ubicar elementos con grid-column y grid-row?
Las propiedades se organizan en dos grupos principales que funcionan contando las líneas de la grid.
¿Cómo funciona grid-column?
grid-column-start: define en qué línea vertical comienza el elemento.grid-column-end: define en qué línea vertical termina.grid-column: es la abreviación que combina ambos valores separados por un slash (/) con espacios a cada lado [2:30].Por ejemplo, para que un ítem ocupe la primera columna se escribe grid-column: 1 / 2. El espacio antes y después del slash es importante para que la sintaxis sea válida.
¿Cómo funciona grid-row?
De manera análoga, pero contando las líneas horizontales de arriba hacia abajo [3:10]:
grid-row-start: línea donde inicia el elemento en el eje vertical.grid-row-end: línea donde termina.grid-row: abreviación con la misma estructura de slash.Si queremos que una card ocupe dos filas, escribimos grid-row: 1 / 3. Justo aquí se produce la diferencia visual respecto al diseño por defecto: al establecer dónde empieza y dónde termina cada elemento, el layout se ajusta al diseño original [3:30].
¿Cómo usar grid-area para nombrar zonas del layout?
grid-area permite asignar nombres a las celdas de la grid y luego indicar a cada hijo qué área debe ocupar [4:05]. El flujo de trabajo es el siguiente:
card-uno, y las de la derecha card-dos y card-tres.grid-template-areas:css .container { display: grid; grid-template-columns: repeat(2, 1fr); grid-template-areas: "card-uno card-dos" "card-uno card-tres"; }
css .item-one { grid-area: card-uno; }
El resultado es que item-one se extiende a lo largo de las dos filas en la primera columna, mientras card-dos y card-tres ocupan cada una su celda en la segunda columna [4:50]. Este enfoque es muy legible porque el código refleja visualmente la estructura del diseño.
¿Cuál es el proceso para traducir un diseño a código?
grid-column / grid-row) o nombrar áreas (grid-area).Cuando se sigue este orden, ubicar elementos deja de ser complicado y se convierte en un proceso sistemático [5:20].
El reto propuesto consiste en tomar la card que estaba en posición vertical y colocarla de forma horizontal, aplicando las mismas técnicas. El código base ya está disponible en el repositorio; solo hace falta redefinir las áreas y reubicar el elemento. Comparte tu solución en los comentarios para comparar enfoques.
Fabian David Guevara Pinilla
Kevin Orellana
GENIAL Amigo te ha quedado increible crack
Joel Dominguez Merino
Tu ya te pusiste a dibujar! Te quedo Increíble, Felicidades!
Sebastián Buitrago
que cool poder usar el inspector asi
Juan Diego Salamanca Cuello
Genial! no conocia esa opcion, buen aporte 🐱🏍🐱🏍
Sebastián Buitrago
usala es muy buena
Alejandra López
Viendo en el sitio de frontend mentor encontré un desafío similar que pueden realizar. Link del challenge
Link de mi repositorio con el código
Así quedó el mío
Espero les sirva de algo :D
Rodrigo Rodriguez
Gracias!
Diego Vanegas
Mucho tiempo, pero tu ejemplo me ayudo. Tambien lo resolvi, gracias! 🤘🏻
Manuel Jose Parra Malagon
Lo logré gracias compañeros :)
Eduardo Zegers
parece un robot loco
Jorge luis castro marchan
Listo, completado con grid area, me parece lo mejor y mas facil, me senti comodo viendo el ejemplo de la profe y aplicandolo.
#CSS
.container{ display:grid; grid-template-columns: repeat(2, 1fr); grid-template-areas: "card-1 card-2" "card-3 card-3"; width: 500px; height: 400px; } .item1{ background: green; grid-area: card-1; } .item2{ background:red; grid-area: card-2; } .item3{ background: blue; grid-area: card-3 }
#HTML
<div class="container"> <div class="item1"></div> <div class="item2"></div> <div class="item3"></div> </div>
Fernando Quinteros Gutierrez
Kevin Orellana
Grasias por tus apuntes
Sebastian Moreno Olivera
JAIRO SALAZAR CASTAÑO
Excelente!
Carlos Eduardo Gomez García
Arturo Flores
Hola hola, yo traté de hacer un layout de celular desde cero. ; background-repeat: no-repeat; background-image: linear-gradient(to top, green 10%, rgba(0,0,0,0) 10%); } .window { display: grid; grid-template-columns: repeat(2, 40%); grid-auto-rows: 40%; grid-gap: 10px; place-content: center; background: var(--orange-dark); box-shadow: 0vmin 0vmin 3vmin 2vmin rgba(0,0,0, 0.3); height: 50vmin; width: 50vmin; position: relative; } .window::before { content: ''; position: absolute; bottom: -5vmin; justify-self: center; height: 5vmin; width: 60vmin; background: var(--orange-dark); box-shadow: 0vmin 0vmin 2vmin 2vmin rgba(0,0,0, 0.3); } .window::after { content: ''; position: absolute; bottom: 0vmin; right: 6vmin; height: 30vmin; width: 16vmin; background-repeat: no-repeat; background-image: /* maceta */ linear-gradient(75deg, rgba(0,0,0,0) 40%, brown 40%), linear-gradient(105deg, brown 40%, rgba(0,0,0,0) 40%), /* centro*/ radial-gradient(yellow 50%, rgba(0,0,0,0) 40%), /* petalos*/ radial-gradient(red 50%, rgba(0,0,0,0) 40%), radial-gradient(red 50%, rgba(0,0,0,0) 40%), radial-gradient(red 50%, rgba(0,0,0,0) 40%), radial-gradient(red 50%, rgba(0,0,0,0) 40%), radial-gradient(red 50%, rgba(0,0,0,0) 40%), /* tallo*/ linear-gradient(85deg, rgba(0,0,0,0) 40%, green 40%, rgba(0,0,0,0) 50% ); background-position: /* maceta*/ 2vmin 20vmin, 8vmin 20vmin, /* centro*/ 6vmin 5vmin, /* petalos*/ 5vmin 1.5vmin, 2.5vmin 4.5vmin, 4vmin 7.5vmin, 7.5vmin 7vmin, 8vmin 3.5vmin, /* tallo*/ 5vmin 6vmin; background-size: /* maceta*/ 8vmin 10vmin, 16vmin 10vmin, /* centro*/ 5vmin 5vmin, /* petalos*/ 6vmin 6vmin, 6vmin 6vmin, 6vmin 6vmin, 6vmin 6vmin, 6vmin 6vmin, /* tallo*/ 10vmin 20vmin; ; } .glass { box-shadow: inset 0vmin 0vmin 0.5vmin 1vmin rgba(0,0,0, 0.2), 0vmin 0vmin 2vmin 1vmin rgba(0,0,0, 0.2); background: var(--blue); } .glass3{ grid-column: 1 / -1; }
🗾 Ubicación
Apuntes
Grupo 1
grid-column-start & grid-column-end.item{ grid-column-start: 1; grid-column-end: 2; }
grid-column.item{ grid-column: 1 / 2; }
Grupo 2
grid-row-start & grid-row-start.item{ grid-row-start: 1; grid-row-end: 2; }
grid-row.item{ grid-row: 1 / 3; }
Grupo 3
.container{ display: grid; grid-template-columns: 1fr 1fr; grid-template-area: "card1 card-2" "card1 card-3"; } .item{ grid-area: card-1; }
Hola a todos, aquí muestro mi reto ; margin: 0; width: 100%; height: 100vh; } .section { display: flex; justify-content: space-around; margin-top: 20px; } .Container { width: 350px; min-width: 150px; height: 350px; min-height: 150px; margin-bottom: 20px; display: grid; grid-template-columns: repeat(2, 1fr); grid-template-areas: "card-1 card-2" "card-1 card-3"; gap: 5px; } .item-one { grid-area: card-1; display: grid; background-image: url("https://images.pexels.com/photos/1486974/pexels-photo-1486974.jpeg?auto=compress&cs=tinysrgb&h=750&w=1260"); background-position: center; background-size: cover; background-repeat: no-repeat; border-radius: 20px; box-shadow: 3px 5px 8px #211e1e; } .item-two { background-image: url("https://images.pexels.com/photos/3476312/pexels-photo-3476312.jpeg?auto=compress&cs=tinysrgb&h=750&w=1260"); background-position: center; background-size: cover; background-repeat: no-repeat; border-radius: 20px; box-shadow: 3px 5px 8px #211e1e; } .item-three { background-image: url("https://images.pexels.com/photos/4553362/pexels-photo-4553362.jpeg?auto=compress&cs=tinysrgb&h=750&w=1260"); background-position: center; background-size: cover; background-repeat: no-repeat; border-radius: 20px; box-shadow: 3px 5px 8px #211e1e; } .Container__two { width: 350px; min-width: 150px; height: 350px; min-height: 150px; margin-bottom: 20px; display: grid; grid-template-columns: repeat(2, 1fr); grid-template-areas: "card-1 card-2" "card-3 card-3"; gap: 5px; } .item-three-second { grid-area: card-3; background-image: url("https://images.pexels.com/photos/4553362/pexels-photo-4553362.jpeg?auto=compress&cs=tinysrgb&h=750&w=1260"); background-position: center; background-size: cover; background-repeat: no-repeat; border-radius: 20px; box-shadow: 3px 5px 8px #211e1e; }
¡Listo! En mi caso lo hice usando template areas :3 . HTML
<div class="grid"> <div class="card-1"></div> <div class="card-2"></div> <div class="card-3"></div> </div>
CSS
.grid { display: grid; width: 500px; height: 500px; grid-template-columns: repeat(2, 1fr); grid-template-areas: "card1 card2" "card3 card3"; } .card-1 { background: #E6BA65; grid-area: card1; } .card-2 { background:#E9BBAA; grid-area: card2; } .card-3 { background: #E15740; grid-area: card3; }
no es mucho pero es trabajo honesto
HTML
<!DOCTYPE html> <html lang="es"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <link rel="stylesheet" href="./styles.css"> </head> <body> <div class="container"> <div class="item1"></div> <div class="item2"></div> <div class="item3"></div> <div class="item1-1"></div> <div class="item1-2"></div> <div class="item1-3"></div> </div> </body> </html>
* { box-sizing: border-box; margin: 0; padding: 0; font-size: 62.5%; } body { background-image: linear-gradient(to left bottom, #f6680c, #fa503c, #f43f5c, #e43a77, #cc408e, #bc3d95, #a93b9c, #943ca2, #8930a4, #7b23a6, #6b17aa, #560bad); height: 100vh; } .container { display: grid; grid-template: repeat(2, 1fr) / repeat(4, 1fr); height: 100%; gap: 2%; padding: 2%; } .item1 { grid-column: 1 /2; grid-row: 1/3; background-color: #560bad; height: 100%; border-radius: 10px; } .item2 { grid-column: 2/3; grid-row: 1/2; background-color: #e85d04; height: 100%; border-radius: 10px; } .item3 { grid-column: 2/3; grid-row: 2/3; background-color: #f48c06; height: 100%; border-radius: 10px; } .item1-1 { grid-column: 3 / 5; grid-row: 1/2; background-color: #560bad; height: 100%; border-radius: 10px; } .item1-2 { grid-column: 3/4; grid-row: 2/3; background-color: #e85d04; height: 100%; border-radius: 10px; } .item1-3 { grid-column: 4/5; grid-row: 2/3; background-color: #f48c06; height: 100%; border-radius: 10px; }
Reto realizado
CSS:
.container{ background-color: coral; width: 300px; display: grid; grid-template-columns: repeat(2, 1fr); grid-template-areas: "item-1 item-2" "item-3 item-3"; } .item{ width: 100%; height: 200px; } .it-1{ background-color: aqua; grid-area: item-1; } .it-2{ background-color: peachpuff; grid-area: item-2; } .it-3{ background-color: tomato; grid-area: item-3; }
HTML:
<div class="container"> <div class="item it-1"></div> <div class="item it-2"></div> <div class="item it-3"></div> </div>