Tengo un div position: fixed
en un diseño, como una barra lateral. Me han pedido que tenga parte de su contenido fijo en la parte superior (internamente), y el resto para desplazarse a si se desborda la parte inferior de la div.Desplazar parte del contenido en contenedor de posición fija
He echado un vistazo a this answer, sin embargo, la solución presentada allí no funciona con los contenedores position: fixed
o position: absolute
, lo cual es un problema.
He hecho una demostración JSFiddle de mi problema here. La gran cantidad de texto idealmente debería desplazarse, en lugar de desbordarse en la parte inferior de la página. La altura del encabezado puede variar con el contenido y puede ser animada.
jsFiddle código de ejemplo:
CSS:
div.sidebar {
padding: 10px;
border: 1px solid #ccc;
background: #fff;
position: fixed;
top: 10px;
left: 10px;
bottom: 10px;
width: 280px;
}
div#fixed {
background: #76a7dc;
padding-bottom: 10px;
color: #fff;
}
div#scrollable {
overlow-y: scroll;
}
HTML:
<div class="sidebar">
<div id="fixed">
Fixed content here, can be of varying height using jQuery $.animate()
</div>
<div id="scrollable">
Potentially long content
</div>
</div>
Sin una cabecera fija, puedo agregar simplemente overflow-y: scroll
a div.sidebar
y puedo desplazarse felizmente todo su contenido si se desborda el fondo del contenedor. Sin embargo, estoy teniendo problemas con tener un encabezado de altura variable y fijo en la parte superior de la barra lateral, y tener cualquier contenido debajo de ese desplazamiento si es demasiado largo para caber en el contenedor.
div.sidebar
obligada estancia position: fixed
, y me gustaría mucho hacer esto sin ningún tipo de hacks, así como que sea lo más navegadores como sea posible. Intenté varias cosas, pero ninguna de ellas funciona, y no estoy seguro de qué probar aquí.
¿Cómo puedo hacer que un div dentro de un contenedor position: fixed
se desplace solo en la dirección Y cuando su contenido sobrepasa el div que contiene, con un encabezado fijo de altura variable e indeterminada? Me gustaría mucho alejarme de JS, pero si tengo que usarlo, lo haré.
No estoy seguro de si existe una solución CSS puro para esto. Básicamente, está tratando de arreglar el div # fijo, sin embargo, cuando lo hace, lo saca del flujo normal del documento para que la altura no empuje a otros elementos hacia abajo en la página. –
Considerando que el div sin desplazamiento se encuentra en la parte superior del contenido de la barra lateral, no tiene que ser 'posición: fijo'; puede simplemente sentarse en un flujo normal. Quiero saber si hay una manera de empujar la parte superior del elemento 'overflow: scroll' hacia abajo por la altura del div sin desplazamiento. En realidad no es 'posición: fijo'. Quise decir "fijo" como en "no se desplaza con desbordamiento". – Bojangles
parece que ha hecho algún progreso en su violín, si elimina la propiedad inferior en div # sidebar, la div se expandirá para ajustarse al contenido –