html - template - Haz que la div desplazable ocupe la altura restante
html structure template (1)
Intento hacer una página con un diseño muy simple: un encabezado que se mantiene en un lugar y contenido que se desplaza por debajo. El encabezado div tendrá una altura desconocida que muestra todo su contenido. Quiero que el contenido div ocupe todo el espacio entre la parte inferior del encabezado y la parte inferior de la página Y que pueda desplazarse.
Tengo un par de restricciones sobre esto:
- No quiero usar un posicionamiento fijo o absoluto para mantener el encabezado en su lugar, sino tener un div de la altura perfecta para mostrar el contenido, y solo tener ese div ser desplazable
- No quiero establecer
max-height
, o cualquier otra propiedad que requiera el conocimiento de la altura del encabezado div
Los dos métodos que he explorado para lograr esto son usar un diseño de tabla y usar un cuadro flexible. No he logrado desplazarme trabajando con ninguno de estos dos métodos. A continuación se muestra el código para ambos intentos. Estoy usando React. Cualquier puntero sería muy apreciado. ¡¡Gracias!!
EDITAR : Hice esto exitosamente usando estilos en línea y midiendo la altura del encabezado después de que se generó. Esto funcionó en Chrome en escritorio, Android Chrome y navegador Android, pero se rompió en ios safari. No sé por qué se rompió, y estoy trabajando en la depuración, pero preferiría una solución más limpia que no requiera estilos en línea. ¡Gracias!
el elemento de reacción:
var SimpleScrolly = React.createClass({
render: function(){
var lorem = "Lorem ipsum dolor sit amet... ";
var sampleText = lorem + lorem + lorem + lorem;
var sampleHeader = "this is a header!"
return(
<div className={"simple_scrolly"}>
<div className={"header"}>
{sampleHeader}
</div>
<div className={"content"}>
{sampleText}
</div>
</div>
);
}
});
estilo para el diseño de la mesa:
.simple_scrolly{
display: table;
height: 100%;
.header{
display: table-row;
}
.content{
overflow: auto;
overflow-x: hidden;
-webkit-overflow-scrolling: touch;
display: table-row;
}
}
estilo para el diseño flexible:
.simple_scrolly{
display:flex;
flex-direction: column;
align-items: flex-start;
.header{
flex-grow:0;
}
.content{
overflow: auto;
overflow-x: hidden;
-webkit-overflow-scrolling: touch;
flex-grow:1;
}
}
En realidad es bastante factible sin JS. Puedes hacer esto fácilmente con flex-box usando un pequeño "hack".
Trabajé en la parte superior de tu ejemplo de cuadro flexible, puedes verlo tú mismo en este pequeño bolígrafo que hice http://codepen.io/elleestcrimi/pen/LENQvr
La idea es esto:
- El encabezado tiene
flex-grow: 0 //This only fills up space as much as the content
- El contenido tiene
flex-grow: 1 //This way this fills up the space even if there is no content
- Coloque a todos los hijos de contenido en una nueva div llamada
#inner-content
-
#content
absolutamente el#inner-content
para rellenar#inner-content
, y permite que se desplace. - Tada!
Aquí está el código a continuación:
#header
flex-grow: 0
#content
overflow: hidden
flex-grow: 1
position: relative
#inner-content
position: absolute
top: 0
left: 0
right: 0
bottom: 0
overflow: auto
body
display: flex
flex-direction: column