2010-08-05 27 views
34

Me pregunto si esto es posible con CSS simple o si tengo que usar Javascript para esto?CSS: altura: completa el resto de div?

tengo una barra lateral en mi sitio web. un div # sidbar simple normalmente tiene 1024 px de alto, pero la altura cambia dinámicamente debido a su contenido.

así que vamos a imaginge el siguiente caso:

<div id="sidebar"> 
    <div class="widget"></div> //has a height of 100px 
    <div class="widget"></div> //has a height of 100px 
    <div id="rest"></div> //this div should have the rest height till to the bottom of the sidebar 
</div> 

Quiero que el div # descanso para llenar el resto de la barra lateral hasta que llega a la parte inferior de la barra lateral div #.

¿Esto es posible con pure css?

Respuesta

8

Lo que queremos es algo así como 100% - 200px pero CSS no admite expresiones como éstas. IE tiene una función de "expresiones" no estándar, pero si quieres que tu página funcione en todos los navegadores, no veo una manera de hacerlo sin JavaScript. Alternativamente, podría hacer todas las alturas porcentuales de uso de div, por lo que podría tener algo así como 10% -10% -80%.

Actualización: Aquí hay una solución simple usando JavaScript. Siempre que el contenido en los cambios de la barra lateral, justo llamar a esta función:

function resize() { 
    // 200 is the total height of the other 2 divs 
    var height = document.getElementById('sidebar').offsetHeight - 200; 
    document.getElementById('rest').style.height = height + 'px'; 
}; 
+0

¿conoces la forma de Javascript? – matt

+0

Actualizado con el código. – casablanca

+0

Cuidado con el parpadeo. Esto no funcionó para nada para crear una sombra insertada. – Ricky

-5

Trate

height: 100%; 

o

height: auto; 
+5

'100%' sobrepasará la altura de la barra lateral porque ya hay otras 2 divs. – casablanca

+0

ya probado! no funciona si configuro "100%", el div # rest obtiene el 100% de toda la página. eso significa que es mucho más larga que la barra lateral propiamente dicha. con "auto" no pasa nada. – matt

+0

No estoy 100% seguro, pero cuando configura "auto" puede necesitar cambiar el atributo "posición". De ninguna manera soy un experto en CSS, pero he visto recordar que "auto" se comportó de manera diferente para cada tipo de posición. –

36

Si conoce la altura exacta de #widget (100px en su caso), se puede evitar el uso de JavaScript utilizando posicionamiento absoluto:

#sidebar 
{ 
height: 100%; 
width: ...; 
position: relative; 
} 

.widget 
{ 
height: 100px; 
} 

#rest 
{ 
position: absolute; 
left: 0; 
width: 100%; 
top: 200px; 
bottom: 0; 
} 
+6

Una buena demostración de esto es disponible en http://blog.stevensanderson.com/2011/10/05/full-height-app-layouts-a-css-trick-to-make-it-easier/. Esta técnica incluso funciona en IE7. – saluce

+0

Aquí está el ejemplo http://jsfiddle.net/44M7j/1/ –

+0

@ChristianNilsson violín no funciona como se esperaba en FF 49.0.2 – mlt

-3

puede hacer esto con etiquetas div anidadas. usted tiene uno que especifica el ancho a la izquierda, y luego otro deja en blanco. Para llenar el resto del otro lado anida un div relativo del 100% dentro del div del lado derecho. de este modo:

<div style="width:100%"> 
    <div style="width:300px;background-color:#FFFF00;float:left"> 
    </div> 
    <div style="margin-left:300px"> 
    <div style="position:relative;left:0px;width:100%;background-color:#00FFFF"> 
    </div> 
    </div> 
</div> 
+3

Esto funciona para ancho, no para altura. – deerchao

4

me encontré con esta pregunta en la búsqueda de una respuesta a una pregunta similar y pensé que ilustro calc. A partir de esta publicación, calc aún no es compatible con navegador cruzado; sin embargo, puede marcar this link here para ver si sus exploradores de destino son compatibles. Modifiqué el caso hipotético de matt para usar calc en an example on jsFiddle. Esencialmente es una solución pura de CSS que hace lo que Casablanca propone en su respuesta. Por ejemplo, si un navegador es compatible con calc, entonces height: calc(100% - 200px); sería válido y también para propiedades similares.

4

propongo el elemento de la tabla como alternativa:

  • +: CSS limpio
  • +: evitar javascript
  • -: mesa semánticamente mal uso
  • -: No los Div-elementos solicitados
+0

¿Puedes mostrar un ejemplo? – krzychu

+0

no funciona en Firefox – Oleg

Cuestiones relacionadas