Components (registry)Layout
Feature Alternating
Layout template: feature-alternating
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}}{{block1_eyebrow}}{{block1_title}}{{block1_body}}{{block1_ctaLabel}}{{block1_image}}{{block2_eyebrow}}{{block2_title}}{{block2_body}}{{block2_ctaLabel}}{{block2_image}}- Componentes requeridos
chipbuttontypographyimage
Anatomía CSS
<div class="layoutFeatureAlternating"> </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 | fg | #525252 | muted.foreground |
CSS mínimo funcional
Autocontenido: sin imports ni tokens. Para previews y prototipos — en producción se consume el CSS del DS.
/* Layout: feature-alternating — structure only */
.l-feature-alternating {
padding: 48px 32px;
}
.l-feature-alternating__header {
text-align: center;
margin-bottom: 32px;
}
.l-feature-alternating__block {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 32px;
align-items: center;
margin-bottom: 32px;
}
@media (max-width: 768px) {
.l-feature-alternating__block {
grid-template-columns: 1fr;
}
}
.l-feature-alternating__block--reverse {
direction: rtl;
}
.l-feature-alternating__block--reverse > * {
direction: ltr;
}
.l-feature-alternating__content {
display: flex;
flex-direction: column;
gap: 12px;
}
.l-feature-alternating__title {
font-size: var(--text-2xl);
}
.l-feature-alternating__body {
color: #525252;
}
.l-feature-alternating__media img {
width: 100%;
border-radius: 12px;
}
Codigo fuente
layouts/feature-alternating.css
/* Layout: feature-alternating — structure only */ .l-feature-alternating { padding: var(--spacing-12) var(--spacing-8); } .l-feature-alternating__header { text-align: center; margin-bottom: var(--spacing-8); } .l-feature-alternating__block { display: grid; grid-template-columns: 1fr 1fr; gap: var(--spacing-8); align-items: center; margin-bottom: var(--spacing-8); } @media (max-width: 768px) { .l-feature-alternating__block { grid-template-columns: 1fr; } } .l-feature-alternating__block--reverse { direction: rtl; } .l-feature-alternating__block--reverse > * { direction: ltr; } .l-feature-alternating__content { display: flex; flex-direction: column; gap: var(--spacing-3); } .l-feature-alternating__title { font-size: var(--text-2xl); } .l-feature-alternating__body { color: var(--muted-foreground); } .l-feature-alternating__media img { width: 100%; border-radius: var(--radius-lg); }