Diseño Holy Grail
Parte de la sección Practical Frontend del Journey de HTML de Coddy — lección 26 de 35.
El Diseño del Santo Grial (Holy Grail Layout) es un patrón de diseño web clásico con un encabezado en la parte superior, un pie de página en la parte inferior y tres columnas en el medio:
- Barra lateral izquierda (navegación o enlaces)
- Contenido principal (centro)
- Barra lateral derecha (información adicional, anuncios o widgets)
Se llama el “Santo Grial” porque mantiene el contenido principal en el centro y es muy común en blogs, sitios de noticias y paneles de control.
Cómo funciona:
- Construido con CSS Flexbox o Grid.
- El contenido principal crece para llenar el espacio, mientras que las barras laterales tienen anchos fijos o más pequeños.
- En pantallas pequeñas, las barras laterales se apilan arriba o abajo del contenido principal para una mejor legibilidad.
Ejemplo usando CSS Grid (simplificado)
HTML:
<div class="container">
<header>Header</header>
<nav>Navigation</nav>
<main>Main Content</main>
<aside>Sidebar</aside>
<footer>Footer</footer>
</div>CSS:
.container {
display: grid;
grid-template-areas:
"header header header"
"nav main aside"
"footer footer footer";
grid-template-columns: 200px 1fr 200px;
}
header { grid-area: header; }
nav { grid-area: nav; }
main { grid-area: main; }
aside { grid-area: aside; }
footer { grid-area: footer; }Desafío
FácilCrea un Holy Grail Layout con los siguientes requisitos:
- Usa una variable CSS llamada
--main-colorpara el color de fondo del encabezado y el pie de página. - Define los valores de grid-area para
header,footer,nav,mainyaside. - Centra el texto dentro del encabezado y el pie de página.
Hoja de referencia
El Holy Grail Layout (Diseño del Santo Grial) es un patrón de diseño web clásico con un encabezado, un pie de página y tres columnas: barra lateral izquierda (navegación), contenido principal (centro) y barra lateral derecha.
Estructura:
<div class="container">
<header>Header</header>
<nav>Navigation</nav>
<main>Main Content</main>
<aside>Sidebar</aside>
<footer>Footer</footer>
</div>Implementación con CSS Grid:
.container {
display: grid;
grid-template-areas:
"header header header"
"nav main aside"
"footer footer footer";
grid-template-columns: 200px 1fr 200px;
}
header { grid-area: header; }
nav { grid-area: nav; }
main { grid-area: main; }
aside { grid-area: aside; }
footer { grid-area: footer; }El contenido principal crece para llenar el espacio disponible (1fr) mientras que las barras laterales tienen anchos fijos. En pantallas pequeñas, las barras laterales suelen apilarse para una mejor legibilidad.
Pruébalo tú mismo
<!DOCTYPE html>
<html>
<head>
<title>Holy Grail Layout</title>
<style>
:root {
--main-color: rgb(76, 175, 239); /* header/footer */
--accent-color: #ff9800; /* highlights */
--text-color: #333;
--heading-color: #222;
}
body {
margin: 0;
font-family: "Segoe UI", Arial, sans-serif;
background: #a9eef3;
color: var(--text-color);
}
.container {
display: grid;
grid-template-areas:
"header header header"
"nav main aside"
"footer footer footer";
grid-template-columns: 160px 1fr 180px;
min-height: 100vh;
gap: 1rem;
}
header {
color: white;
padding: 1.5rem;
}
footer {
color: white;
padding: 1rem;
}
nav {
background: #f4f4f4;
padding: 1rem;
border-radius: 8px;
box-shadow: 0 2px 6px rgba(0,0,0,0.1);
}
nav h3 {
margin-top: 0;
color: var(--heading-color);
}
nav ul {
list-style: none;
padding: 0;
}
nav li {
margin: 0.5rem 0;
}
nav a {
text-decoration: none;
color: var(--text-color);
padding: 0.3rem 0.5rem;
border-radius: 4px;
transition: background 0.2s;
}
nav a:hover {
background: var(--accent-color);
color: white;
}
main {
padding: 1.5rem;
background: #fff;
border-radius: 10px;
box-shadow: 0 2px 10px rgba(0,0,0,0.08);
}
main h2 {
margin-top: 0;
color: var(--heading-color);
}
aside {
background: #fff7e6;
padding: 1rem;
border-radius: 8px;
box-shadow: 0 2px 6px rgba(0,0,0,0.08);
}
aside h3 {
margin-top: 0;
color: var(--accent-color);
}
</style>
</head>
<body>
<div class="container">
<header>
<h1>Travel Adventures</h1>
<p>Explore the world, one journey at a time</p>
</header>
<nav>
<h3>Navigation</h3>
<ul>
<li><a href="#">Destinations</a></li>
<li><a href="#">Travel Tips</a></li>
<li><a href="#">Photo Gallery</a></li>
</ul>
</nav>
<main>
<h2>Featured Destination: Japan</h2>
<p>
Japan is a country where ancient traditions meet modern innovation.
From the serene temples of Kyoto to the bustling streets of Tokyo,
there’s something for every traveler.
</p>
<p>
Don’t forget to try sushi, explore cherry blossoms in spring,
and relax in an onsen hot spring bath.
</p>
</main>
<aside>
<h3>Quick Facts</h3>
<ul>
<li>Capital: Tokyo</li>
<li>Language: Japanese</li>
<li>Currency: Yen</li>
</ul>
</aside>
<footer>
<p>© 2025 Travel Adventures Blog</p>
</footer>
</div>
</body>
</html>
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Practical Frontend
3Tematización y estilos visuales
Tematización en CSSConceptos básicos del modo oscuro/claroColores de acento y resaltadoTematización de la tipografíaDesafío de repaso6Patrones responsivos
Diseño Holy GrailDiseño de cuadrícula de tarjetasDiseño de barra lateral + contenidoDiseño de pantalla divididaHeader y Footer stickyDesafío de repaso