guia end columns align html css css3 flexbox

html - end - Flexbox Holy Grail Layout: Encabezado fijo, barra de navegación izquierda fija, área de contenido fluido, barra lateral derecha fija



flexbox guia (1)

Estoy intentando construir el diseño del "Santo Grial" usando Flexbox.

  • Encabezado fijo
  • Izquierda fija, plegable, desplazable
  • Área de contenido flexible
  • Fijo, plegable, desplazamiento a la derecha de la navegación

Vea abajo:

Tengo todo funcionando, excepto la altura del área de "aplicación" debajo del encabezado. En este momento es de 100vh (100% de la altura de la ventana gráfica), pero esto incluye el encabezado de 64px.

Intenté calc (100vh - 64px), pero eso no encaja bien con la flexión.

Aquí está mi estructura básica de HTML:

<main> <header></header> <app> <nav>Left Nav</nav> <article>Content</article> <aside>Right Nav</aside> </app> </main>

Y el soporte CSS:

main { display: flex; flex-direction: column; } header { z-index: 0; flex: 0 0 64px; display: flex; } app { flex: 1 1 100vh; display: flex; } nav { flex: 0 0 256px; order: 0; } article { flex: 1 1 100px; order: 1; } aside { flex: 0 0 256px; order: 2; }

- - - Full jsFiddle Here - - -

- - - JsFiddle simplificado aquí - - -


¡Lo averigué!

Resulta que hubo algunos conflictos de CSS con <main> y <body> , y todo lo que tuve que hacer fue eliminar el contenedor <main> , luego agregar las definiciones de flexión directamente al cuerpo de la página.

- - - Aquí está el jdFiddle en pleno funcionamiento - - -

- - - Aquí está el jdFiddle simplificado - - -

Nueva estructura HTML:

<body> <header></header> <app> <nav>Left Nav</nav> <article></article> <aside>Right Nav</aside> </app> </body>

Nuevo CSS de apoyo:

html, body { margin: 0; height: 100%; min-height: 100%; } body { margin: 0; display: flex; flex-direction: column; } header { z-index: 0; flex: 0 64px; display: flex; } app { flex: 1; display: flex; } nav { flex: 0 0 256px; order: 0; } article { flex: 1; order: 1; overflow: auto; } aside { flex: 0 0 256px; order: 2; }

¡Siéntase libre de usar esto como base para sus aplicaciones! ¡Disfrutar!