Components (registry)Layout
Gallery Grid
Layout template: gallery-grid
Contrato del layout
Un layout transporta anatomia, no pintura: se rellena por slots y depende del CSS de los componentes que lista. Instalarlo sin ellos lo deja sin estilos.
- Slots
{{headline}}{{image1}}{{caption1}}{{image2}}{{caption2}}{{image3}}{{caption3}}{{image4}}{{caption4}}{{image5}}{{caption5}}{{image6}}{{caption6}}- Componentes requeridos
imagetypography
Anatomía CSS
<div class="layoutGalleryGrid"> </div>
Tokens resueltos
Valores finales tras seguir la cadena de tokens. Derivados del source: si un token cambia, esta tabla cambia sola.
| Variante | Prop | Valor | Token |
|---|---|---|---|
| all | bg | rgba(0,0,0,0.6) | (literal) |
| all | fg | white | (unparsed) |
CSS mínimo funcional
Autocontenido: sin imports ni tokens. Para previews y prototipos — en producción se consume el CSS del DS.
/* Layout: gallery-grid — structure only */
.l-gallery-grid {
padding: 48px 32px;
}
.l-gallery-grid__header {
text-align: center;
margin-bottom: 32px;
}
.l-gallery-grid__grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 16px;
}
@media (max-width: 768px) {
.l-gallery-grid__grid {
grid-template-columns: repeat(2, 1fr);
}
}
@media (max-width: 480px) {
.l-gallery-grid__grid {
grid-template-columns: 1fr;
}
}
.l-gallery-grid__item {
position: relative;
}
.l-gallery-grid__item img {
width: 100%;
aspect-ratio: 4 / 3;
object-fit: cover;
border-radius: 12px;
}
.l-gallery-grid__caption {
position: absolute;
bottom: 8px;
left: 8px;
background: rgba(0,0,0,0.6);
color: white;
padding: 2px 6px;
border-radius: 4px;
font-size: var(--text-xs);
}
Codigo fuente
layouts/gallery-grid.css
/* Layout: gallery-grid — structure only */ .l-gallery-grid { padding: var(--spacing-12) var(--spacing-8); } .l-gallery-grid__header { text-align: center; margin-bottom: var(--spacing-8); } .l-gallery-grid__grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--spacing-4); } @media (max-width: 768px) { .l-gallery-grid__grid { grid-template-columns: repeat(2, 1fr); } } @media (max-width: 480px) { .l-gallery-grid__grid { grid-template-columns: 1fr; } } .l-gallery-grid__item { position: relative; } .l-gallery-grid__item img { width: 100%; aspect-ratio: 4 / 3; object-fit: cover; border-radius: var(--radius-lg); } .l-gallery-grid__caption { position: absolute; bottom: var(--spacing-2); left: var(--spacing-2); background: rgba(0,0,0,0.6); color: white; padding: 2px 6px; border-radius: var(--radius-sm); font-size: var(--text-xs); }