2012-06-11 10 views
19

mam tej struktury HTML:Scrollbar bez stałej wysokości/wysokość dynamicznych z przewijania

<div id="body"> 
    <div id="head"> 
     <p>Dynamic height without scrollbar</p> 
    </div> 
    <div id="content"> 
     <p>Dynamic height with scrollbar</p> 
    </div> 
    <div id="foot"> 
     <p>Fixed height without scrollbar</p> 
    </div> 
</div> 

chcę mieć trzy części wewnątrz głównej części (#body) bez przelewu. Potrzebuję paska przewijania w środkowej części.

Próbowałem to CSS:

#content{ 
    border: red solid 1px; 
    overflow-y: auto; 
} 

a to:

#content{ 
    border: red solid 1px; 
    overflow-y: auto; 
    height: 100%; 
} 

Ale żaden z nich nie działa.

Zrobiłem przykład na JSFiddle.

Czy mogę to zrobić tylko z CSS i HTML? Wolałbym unikać JavaScript.

Odpowiedz

24

schematu flexbox to nowoczesna alternatywa, która pozwala to zrobić bez ustalonych wysokościach lub JavaScript

Ustawianie display: flex; flex-direction: column; na pojemniku i flex-shrink: 0; w nagłówku i stopce. dIV załatwia sprawę:

http://jsfiddle.net/cvmrvfhm/1/

+1

Myślę, że ta odpowiedź powinna być przyjęta jako odpowiedź na CSS3. – hjchin

+0

Myślę, że to nie jest poprawna odpowiedź. Nie będzie działać bez stałej wysokości elementu ciała. – Equanox

+0

@Equanox Ograniczona wysokość kontenera to jednak punkt, w przeciwnym razie wszystkie trzy części po prostu rozszerzą się w pionie i nie będzie potrzeby używania pasków przewijania. Zauważ, że może to być "maksymalna wysokość" zamiast ustalonej "wysokości". – mtyaka

1

Nie wiem, czy dobrze to rozumiem, ale czy this rozwiązuje problem?

Właśnie zmienił overflow-y: scroll;

#content{ 
    border: red solid 1px; 
    overflow-y: scroll; 
    height: 100px; 
} 

Zmieniano

Następnie spróbuj użyć wartości procentowe tak: http://jsfiddle.net/6WAnd/19/

CSS markup:

#body { 
    position: absolute; 
    top; 150px; 
    left: 150px; 
    height: 98%; 
    width: 500px; 
    border: black dashed 2px; 
}  
#head { 
    border: green solid 1px; 
    height: 15%; 
} 
#content{ 
    border: red solid 1px; 
    overflow-y: scroll; 
    height: 70%; 
} 
#foot { 
    border: blue solid 1px; 
    height: 15%; 
} 
+0

Ale nie mogę ustawić rozmiar #head i #content Chciałbym #content i #head wypełnić wszystkie główne div. (#body). Po prostu robię zdjęcie, aby to zilustrować: http://img15.hostingpics.net/pics/986131examplepanel.png – GuillaumeS

+0

Ok, zobaczmy, czy to rozwiąże problem, sprawdź moją edycję – Luis

+0

To rozwiązanie nie pozwala na 2 bloki z dynamiczną wysokością. Jeśli umieściłem dużo tekstu w pierwszej części, to nie działa: http://jsfiddle.net/6WAnd/21/. Myślę, że @ philip-bevan stwierdziła, że ​​nie jest to możliwe bez JS. odpowiedzieć poniżej. – GuillaumeS

0

Użyj tego:

#head { 
    border: green solid 1px; 
    height:auto; 
}  
#content{ 
      border: red solid 1px; 
      overflow-y: scroll; 
      height:150px;  
     } 
+0

To praca o ile w przypadku zmiany części pierwszej. Spróbuj z wielu „

Dynamiczny wielkości bez przewijania

” http://jsfiddle.net/EKvCw/ – GuillaumeS

+0

edytowany powyższy kod, spróbuj, że ty – Uttara

5

Trzeba będzie określić stałą wysokość, nie można użyć 100%, ponieważ nie ma nic do tego, aby być w porównaniu do, jak w height=100% czego?

Edited skrzypce:

http://jsfiddle.net/6WAnd/4/

+0

masz rację, to naprawdę nie jest 100%, ale chcę, żeby 3 div (głowa, zawartość i stopa) zajmowały 100% wysokości części ciała, która ma ustalony rozmiar Tworzę obraz na przykład: http: //img15.hostingpics. net/pics/986131examplepanel.png – GuillaumeS

+0

czy twoje ciało lub głowa mają stałą wysokość? –

+0

, więc Metody takie jak: http://jsfiddle.net/6WAnd/10/ –

2

Szybkie, czyste podejście przy użyciu bardzo małych JS i Wyściółka CSS: http://jsfiddle.net/benjamincharity/ZcTsT/14/

var headerHeight = $('#header').height(), 
    footerHeight = $('#footer').height(); 

$('#content').css({ 
    'padding-top': headerHeight, 
    'padding-bottom': footerHeight 
}); 
0
<div id="scroll"> 
    <p>Try to add more text</p> 
</div> 

oto kod css

#scroll { 
    overflow-y:auto; 
    height:auto; 
    max-height:200px; 
    border:1px solid black; 
    width:300px; 
} 

oto demo JSFIDDLE

2

Użyj tego:

style = "max-height: 300px; overflow: auto;”

tto uniknąć stałą heigh

+0

Przewijanie działa tylko po ustawieniu wysokości w prawo? Nie działa tylko z 'max-height'. – Bazley

Powiązane problemy