Tengo un elemento de encabezado y un elemento de contenido:
#header
#content
Quiero que el encabezado sea de altura fija y que el contenido llene toda la altura restante disponible en la pantalla, con overflow-y: scroll;
.
¿Es esto posible sin Javascript?
olvídate de todas las respuestas, esta línea de CSS funcionó para mí en 2 segundos:
1vh
= 1% de la altura de la pantalla del navegadorfuente
Para el escalado de diseño receptivo, es posible que desee utilizar:
[actualización de noviembre de 2018] Como se menciona en los comentarios, el uso de la altura mínima puede evitar problemas con los diseños de respuesta
[actualización de abril de 2018] Como se menciona en los comentarios, en 2011, cuando se hizo la pregunta, no todos los navegadores admitían las unidades de visualización. Las otras respuestas fueron las soluciones en ese entonces:
vmax
todavía no es compatible con IE, por lo que esta podría no ser la mejor solución para todos todavía.fuente
min-height: 100vh
sería mucho mejor. También se escalaría para diseños receptivos.En realidad, el mejor enfoque es este:
Esto me resuelve todo y me ayuda a controlar mi pie de página y puede tener el pie de página fijo sin importar si la página se está desplazando hacia abajo.
Solución técnica - EDITADO
Históricamente, la 'altura' es algo complicado de moldear, en comparación con el 'ancho', el más fácil. Dado que css se centra en
<body>
para que el estilo funcione. El código de arriba - le dimos<html>
y<body>
una altura. Aquí es donde la magia entra en escena: dado que tenemos 'altura mínima' en la mesa de juego, le estamos diciendo al navegador que<body>
es superior<html>
porque<body>
mantiene la altura mínima. Esto a su vez, permite<body>
anular<html>
porque ya<html>
tenía altura antes. En otras palabras, estamos engañando al navegador para que "salte"<html>
de la mesa, de modo que podamos diseñar de forma independiente.fuente
min-height
yheight
?<body>
para que el estilo funcione. Este código: le dimos<html>
y<body>
una altura. Aquí es donde la magia entra en escena: dado que tenemos 'altura mínima' en la mesa de juego, le estamos diciendo al servidor que<body>
es superior<html>
porque<body>
mantiene la altura mínima. Esto a su vez, permite<body>
anular<html>
porque ya<html>
tenía altura antes. En otras palabras, estamos engañando al servidor para que "salte"<html>
de la mesa, para que podamos diseñar de forma independiente.Puede usar vh en la propiedad min-height.
Puede hacer lo siguiente, dependiendo de cómo esté usando los márgenes ...
fuente
La solución aceptada no funcionará realmente. Usted se dará cuenta de que el contenido
div
será igual a la altura de su padre,body
. Por lo tanto, establecer labody
altura en100%
lo establecerá igual a la altura de la ventana del navegador. Digamos que la ventana del navegador estaba768px
en altura, al establecer ladiv
altura del contenido en100%
, ladiv
altura del 'será a su vez768px
. Por lo tanto, terminará con el div del encabezado150px
y el div de contenido768px
. Al final, tendrá contenido150px
debajo de la parte inferior de la página. Para otra solución, consulte este enlace.fuente
Con HTML5 puedes hacer esto:
CSS:
HTML:
fuente
Para mí, el siguiente funcionó bien:
Envolví el encabezado y el contenido en un div
Usé esta referencia para llenar la altura con flexbox. El CSS es así:
Para obtener más información sobre la técnica flexbox, visite la referencia
fuente
También puede configurar el padre en
display: inline
. Ver http://codepen.io/tommymarshall/pen/cECyHAsegúrese también de tener la altura de html y body configurada al 100%.
fuente
La respuesta aceptada no funciona. Y la respuesta más votada no responde a la pregunta real. Con un encabezado de altura de píxel fija y un relleno en la pantalla restante del navegador, y desplácese para ver el flujo. Aquí hay una solución que realmente funciona, usando posicionamiento absoluto. También supongo que se conoce la altura del encabezado, por el sonido de "encabezado fijo" en la pregunta. Yo uso 150px como ejemplo aquí:
HTML:
CSS: (agregando color de fondo solo para efectos visuales)
Para una vista más detallada de cómo funciona esto, con contenido real dentro del
#Content
, eche un vistazo a este jsfiddle , usando filas y columnas de arranque.fuente
bottom
propiedad se aseguró de que las#Content
estancias se atasquen al final de la página. Le agradezco que se haya tomado el tiempo de explicarlo.En este caso, quiero que mi div de contenido principal sea de altura líquida para que toda la página ocupe el 100% de la altura del navegador.
height: 100vh;
fuente
Permítame agregar mis 5 centavos aquí y ofrecer una solución clásica:
Esto funcionará en todos los navegadores, sin script, sin flex. Abra el fragmento en el modo de página completa y cambie el tamaño del navegador: las proporciones deseadas se conservan incluso en el modo de pantalla completa.
Nota:
idHeader.height
yidContent.top
se ajustan para incluir el borde, y deben tener el mismo valor si no se utiliza el borde. De lo contrario, los elementos saldrán de la ventana gráfica, ya que el ancho calculado no incluye borde, margen y / o relleno.left:0; right:0;
puede ser reemplazado porwidth:100%
por la misma razón, si no se usa un borde.padding-top
y / opadding-bottom
atributos al#idOuter
elemento.Para completar mi respuesta, aquí está el diseño del pie de página:
Y aquí está el diseño con encabezado y pie de página:
fuente
A menos que necesite ser compatible con IE 9 y versiones anteriores, usaría flexbox
También necesitas que el cuerpo ocupe toda la página.
fuente
CSS PLaY | Encabezado / pie de página fijo en varios navegadores / diseño de columna única centrado
CSS Frames, versión 2: Ejemplo 2, ancho especificado | 456 Calle Berea
Una cosa importante es que, aunque esto suena fácil, habrá un poco de código desagradable en su archivo CSS para obtener un efecto como este. Desafortunadamente, realmente es la única opción.
fuente
fuente
La mejor solución que encontré hasta ahora es establecer un elemento de pie de página en la parte inferior de la página y luego evaluar la diferencia entre el desplazamiento del pie de página y el elemento que necesitamos expandir. p.ej
El archivo html
El archivo css
El archivo js (usando jquery)
También es posible que desee actualizar la altura del elemento de contenido en cada cambio de tamaño de ventana, así que ...
fuente
Muy simple:
fuente
¿Has intentado algo como ésto?
CSS:
HTML:
fuente