2011-02-02 8 views
5

Tengo 4 elementos dentro de un elemento contenedor. El elemento contenedor tendrá su altura configurada al 100% de la ventana del navegador. Los 4 elementos internos aparecerán apilados verticalmente el uno al otro (como es normal). Los dos primeros elementos y el último elemento deben tener una altura "natural" (es decir, lo suficiente para que se ajuste a sus contenidos). El tercer elemento debe expandirse para llenar el espacio disponible en el contenedor, después de que los otros 3 coman todo lo que necesiten."Lo que quede a la izquierda" en un diseño CSS

Por lo tanto, sería algo como esto:

CSS Stacked Elements

No puedo definir alturas explícitas para Element-1, Elemento-2, o Elemento-4, ni sé la altura del contenedor . Tampoco sé la altura natural de Element-3; Planeo usar overflow-scroll si se vuelve más grande que lo que está disponible. He añadido espacio entre los elementos para ilustración, pero también habrá espacios (márgenes/relleno) entre los elementos reales.

¿Cómo se logra esto usando HTML/CSS? Si hay que hacer concesiones para obtener un diseño decente, los consideraré. Puntos de bonificación si la técnica también se aplica horizontalmente (lo cual he necesitado en ocasiones).

+2

Nice visual. Ayuda inmensamente –

+0

¿Qué es element-4? ¿es contenido o solo estilo? – zzzzBov

+0

Todos los elementos, incluido el elemento-4, tendrán contenido en ellos. –

Respuesta

5

En primer lugar, gran visual.

En segundo lugar ... ¿sería una solución de javascript fuera de la cuestión?

actualización

esto era sólo pretende ser una muestra, pero he actualizado el código para apaciguar a algunas de las personas más exigentes que hay.

http://jsfiddle.net/tsZAV/9/

+0

@ Dutchie432 Se ve bien, lo único que recalcula es el cambio de tamaño en ese momento. Y en cada llamada AJAX probablemente o cualquier contenido dinámico que esté allí. – Marnix

+0

@Dutchie 1. El valor de margen es incorrecto. Los márgenes verticales colapsan. 2. Olvidó incluir los bordes en el cálculo. Use outerHeight() en lugar de height(). 3. El OP quiere que el diseño se extienda 100% verticalmente. –

+0

@Dutchie Además, el elemento CENTER? De Verdad? –

2

Hay una serie de cosas que hacen que esto sea imposible en puro CSS.

  1. La ventana del navegador podría ser más corta que la altura dinámica de los primeros 3 elementos.
  2. No hay forma de obligar a un elemento a ocupar el resto de la altura del contenedor.
  3. CSS es un lenguaje de estilo de documento, no un lenguaje de programación. Piense en escribir CSS como un conjunto de pautas que la página debe tratar de seguir, en lugar de una forma de establecer explícitamente los tamaños (aunque puede establecer tamaños explícitamente).

Esto es relativamente simple de hacer con JavaScript redimensionando el cuarto elemento. Tendrás que escuchar un evento resize para que el cuarto elemento tenga el tamaño correspondiente. Además, querrá establecer un valor de min-height para el elemento 4, en caso de que no haya suficiente espacio para el cuarto elemento.

+0

Dudo que sea imposible hacerlo en CSS puro, solo que es imposible hacerlo en CSS puro que admiten muchos navegadores aún relevantes pero increíblemente desactualizados. – reisio

+1

@reisio, he leído todas las especificaciones para CSS2 y 3, no hay una forma estandarizada de hacer 'height: fill' o similar. Puede haber una forma específica de navegador para hacer algo como eso, pero en ese punto es mejor configurar un min-height y dejar que javascript lo maneje. – zzzzBov

+0

Estaba pensando en los valores de la tabla (- *) para la visualización, de forma manual. – reisio

Cuestiones relacionadas