Layouts
Secciones inteligentes, content-flex de 9 puntos y grids proporcionales. Componentes de layout que se adaptan automáticamente al viewport.
Secciones
Cada <section> es automáticamente un contenedor con padding y max-width. El primer hijo directo recibe mx-auto, max-w-container y flex-col. No necesitas pensar en el espaciado entre secciones — el sistema lo maneja por ti.
Estructura base
El patrón fundamental es section > div > div. La sección establece el padding horizontal y vertical, el primer div centra el contenido y limita el ancho, y los divs internos ocupan el 100% del ancho disponible.
.has-background) o si están adyacentes a otra sección con fondo, y ajustan su padding en consecuencia. No necesitas clases de spacing manuales en la mayoría de los casos.Modificadores de spacing
Cuando necesitas control adicional sobre el padding vertical, estas clases modifican el comportamiento por defecto:
.has-background— Aplica padding vertical completo (--ft-padding-content-y) arriba y abajo. Usalo cuando la sección tiene color de fondo o imagen..half-top— Reduce el padding superior al 50%. Ideal para acercar la sección al contenido anterior..half-bottom— Reduce el padding inferior al 50%. Ideal para acercar la sección al contenido siguiente.
Block Bleed
La clase .block-bleed rompe el contenedor y se extiende al ancho completo del viewport. Útil para imágenes o fondos que deben ser full-width dentro de una sección contenida.
.block-bleed usa width: 100vw con un truco de left: 50%; transform: translateX(-50%). Funciona correctamente dentro de la estructura section > div.Referencia de clases de sección
| Clase | Efecto |
|---|---|
| .has-background | Padding vertical completo (arriba y abajo) |
| .half-top | Padding superior reducido al 50% |
| .half-bottom | Padding inferior reducido al 50% |
| .block-bleed | Rompe contenedor, ocupa 100% viewport width |
Content Flex — 9 Puntos
Posiciona contenido en cualquiera de los 9 puntos de una caja usando .content-flex. Por defecto se centra vertical y horizontalmente. Además de posicionar, ajusta automáticamente text-align y margin del contenido.
Demo visual
Cada caja muestra una posición diferente del contenido:
Clases de posición
Como funciona internamente
.content-flex usa display: flex con flex-direction: column. Cada posición combina justify-content (eje vertical) con align-items (eje horizontal), y ajusta text-align y margin para que el texto y los elementos internos se alineen coherentemente.
| Clase | justify-content | align-items | text-align |
|---|---|---|---|
| .top-left | flex-start | flex-start | left |
| .top | flex-start | center | center |
| .top-right | flex-start | flex-end | right |
| .left | center | flex-start | left |
| .center | center | center | center |
| .right | center | flex-end | right |
| .bottom-left | flex-end | flex-start | left |
| .bottom | flex-end | center | center |
| .bottom-right | flex-end | flex-end | right |
Grids Proporcionales
Clases @utility para grids con proporciones predefinidas. Usan spacing semántico por defecto vía gap-columns. Cada celda usa minmax(0, Xfr) para evitar overflow.
2 Columns
Grids de dos columnas con proporciones asimétricas:
grid-cols-1-2 (1fr + 2fr)
grid-cols-2-1 (2fr + 1fr)
3 Columns
Grids de tres columnas con distintas distribuciones de peso:
grid-cols-1-2-1 (1fr + 2fr + 1fr)
grid-cols-2-1-1 (2fr + 1fr + 1fr)
grid-cols-1-1-2 (1fr + 1fr + 2fr)
grid-cols-1-3 (1fr + 3fr) & grid-cols-3-1 (3fr + 1fr)
Referencia completa de grids
| Clase | Columnas | Proporciones |
|---|---|---|
| grid-cols-1-2 | 2 | 1fr 2fr |
| grid-cols-2-1 | 2 | 2fr 1fr |
| grid-cols-1-3 | 2 | 1fr 3fr |
| grid-cols-3-1 | 2 | 3fr 1fr |
| grid-cols-1-4 | 2 | 1fr 4fr |
| grid-cols-4-1 | 2 | 4fr 1fr |
| grid-cols-2-3 | 2 | 2fr 3fr |
| grid-cols-3-2 | 2 | 3fr 2fr |
| grid-cols-1-2-1 | 3 | 1fr 2fr 1fr |
| grid-cols-2-1-1 | 3 | 2fr 1fr 1fr |
| grid-cols-1-1-2 | 3 | 1fr 1fr 2fr |
| grid-cols-1-3-1 | 3 | 1fr 3fr 1fr |
| grid-cols-3-1-1 | 3 | 3fr 1fr 1fr |
| grid-cols-1-1-3 | 3 | 1fr 1fr 3fr |
| grid-cols-2-1-2 | 3 | 2fr 1fr 2fr |
| grid-cols-1-2-2 | 3 | 1fr 2fr 2fr |
| grid-cols-2-2-1 | 3 | 2fr 2fr 1fr |
| grid-cols-1-4-1 | 3 | 1fr 4fr 1fr |
| grid-cols-4-1-1 | 3 | 4fr 1fr 1fr |
| grid-cols-1-1-4 | 3 | 1fr 1fr 4fr |
| grid-cols-1-3-2 | 3 | 1fr 3fr 2fr |
| grid-cols-2-3-1 | 3 | 2fr 3fr 1fr |
| grid-cols-1-2-3 | 3 | 1fr 2fr 3fr |
| grid-cols-2-1-3 | 3 | 2fr 1fr 3fr |
| grid-cols-3-2-1 | 3 | 3fr 2fr 1fr |
| grid-cols-3-1-2 | 3 | 3fr 1fr 2fr |
Auto-fill / Auto-fit
Grids que se adaptan automáticamente al ancho disponible. Definen un ancho mínimo por celda y dejan que CSS Grid calcule cuántas columnas caben. No necesitas media queries ni breakpoints.
Demo: auto-fill
auto-fill vs auto-fit
La diferencia se nota cuando hay pocas celdas y mucho espacio disponible:
auto-fill— Mantiene columnas vacías invisibles. Las celdas respetan su ancho máximo y no se estiran más allá de1fr. Ideal para grids de cards donde quieres consistencia de ancho.auto-fit— Colapsa las columnas vacías y expande las celdas existentes para llenar todo el espacio. Ideal cuando tienes pocas celdas y quieres que ocupen todo el ancho.
Referencia de tamaños
| Sufijo | Variable | Min width | Pixeles |
|---|---|---|---|
| xs | --ft-card-xs | 12rem | 192px |
| sm | --ft-card-sm | 14rem | 224px |
| md | --ft-card-md | 18rem | 288px |
| lg | --ft-card-lg | 24rem | 384px |
| xl | --ft-card-xl | 36rem | 576px |
min(var(--ft-card-*), 100%) para que en viewports pequeños las celdas colapsen a una sola columna automáticamente sin necesidad de media queries.