2013-09-30 8 views
8

Voglio avere un elemento genitore che ha un'altezza massima e un elemento figlio che riempie questo elemento genitore. Se il contenuto del bambino sta superando il genitore dovrebbe apparire una barra di scorrimento. Ho cercato di risolvere in questo modo:Il bambino è più grande del genitore con altezza massima. Overflow non ha effetto

HTML:

<div class="parent"> 
    <div class="child"> 
     <div class="some-content"> 
     abcde<br>abcde<br>abcde<br>abcde<br>abcde<br> 
     abcde<br>abcde<br>abcde<br>abcde<br>abcde<br> 
     abcde<br>abcde<br>abcde<br>abcde<br>abcde<br> 
     abcde<br>abcde<br>abcde<br>abcde<br>abcde<br> 
     abcde<br>abcde<br>abcde<br>abcde<br>abcde<br> 
     </div> 
    </div> 
</div> 

CSS:

div.parent { 
    max-height: 50px; 
    width: 100px; 

    border: 1px solid black; 
} 

div.child { 
    height: 100%; 

    overflow-y: auto; 
} 

Purtroppo questo non funziona come previsto. Il bambino cresce sopra il genitore.

Si prega di rispettare, quell'impostazione overflow-y: auto per il PARENT NON è un'opzione, in quanto si sospetta di contenere altri elementi che non dovrebbero essere scrollati. Si sospetta che il bambino riempia lo spazio lasciato nel genitore. Guarda DEMO dal vivo per maggiori informazioni.

Live DEMO

+1

La modifica di "altezza massima" su "altezza" sembra avere effetto. Non so se è quello che vuoi ... – LinkinTED

+0

Devi specificare l'altezza dell'elemento figlio. Altrimenti, l'overflow non funzionerà. – rgin

+0

Questo dovrebbe spiegare perché non funziona: http://stackoverflow.com/questions/5657964/css-why-doesnt-percentage-height-work Come per le soluzioni ... o impostare un'altezza specifica per l'elemento contenitore o usa JavaScript. Modifica: l'impostazione di un'altezza specifica per l'elemento contenitore non risolverà esattamente il problema poiché "100%" imiterà l'altezza esatta del genitore. – SombreErmine

risposta

4

Per quanto io sappia non c'è modo semplice per farlo con i CSS. In sostanza, stai chiedendo al browser di riempire lo spazio rimanente con l'elemento scorrevole. È possibile farlo con JavaScript (questo esempio utilizza jQuery perché sono pigro):

$('.parent').each(function(){ 
    $(this).children('.child').height($(this).height() - $(this).children('.sibling').height()+"px"); 
}); 

http://jsfiddle.net/BUxUe/13/

-2

check this out Fiddle

div.parent { 
    max-height: 50px; 
    width: 100px; 

    border: 1px solid black; 
    overflow:scroll; 
} 

div.child { 
    height: 100%; 
} 
+1

OP ha già specificato che l'impostazione del genitore su 'overflow-y: auto' non è un'opzione. L'OP vuole avere un elemento scorrevole * entro * il genitore che riempie l'altezza * restante * disponibile. – Moob

0

Si può cercare di usare Flexbox.

div.parent { 
    max-height: 300px; 
    width: 200px; 
    border: 1px solid black; 
    display: flex; 
    flex-direction: column; 
} 
div.sibling { 
    border: 1px solid red; 
    flex: 0 0 auto; 
} 
div.child { 
    overflow-y: auto; 
    border: 1px solid blue; 
    flex: 0 1 auto; 
} 

Non sono sicuro, se questo è un tipo di hack. Ma sembra risolvere questo problema.

Problemi correlati