2012-04-24 16 views
6

od jakiegoś czasu mam bzika z konkretną sprawą układu, że oczywiście podchodzę w niewłaściwy sposób.Przepełnienie z układem absolutnego/względnego pozycjonowania

Oto podejście w podziale na jego podstawowe składniki:

<!DOCTYPE html> 
<html> 
<head> 
</head> 
<body> 
<div class="stretched"> 
    <div class="header">SOME HEADER</div> 
    <div class="someControls"> 
     <input type="button" value="click me"/> 
     <input type="button" value="no me"/> 
    </div> 
    <div class="inner"> 
     some text... 
    </div> 
</div> 
</body> 
</html> 

z następującym css:

.stretched { 
    position:absolute; 
    height:auto; 
    bottom: 0; 
    top: 0; 
    left: 0; 
    right: 0; 
    width: 250px; 
    margin: 30px auto 20px; 
    background-color: green; 
} 

.inner { 
    margin:10px; 
    background-color: red; 
    overflow: auto;   
} 

Co usiłuję zrobić jest posiadanie stretched div wykorzystując wszystkie dostępne pionowa przestrzeń rzutni (minus kilka pikseli powyżej i poniżej dla nagłówka i stopki) i są wyśrodkowane w poziomie za pomocą ustalonego z.

Wydaje się, że działa całkiem dobrze. Problem polega na tym, że właściwość overflow: auto; nie jest stosowana do zawartości inner, tak jak tego chcę. Gdy some text... wydłuża się, podziałka inner nakłada się na mój kontener i nie wyświetla pasków przewijania.

Oto Fiddle: fiddle #1

Chcę uniknąć konieczności przewijania strony na ciele i zamiast o przepełnienie zarządzany przez przewijania wewnątrz inner div, dzięki czemu stretched zawsze całkowicie widoczne.

mogę zastosować tę samą sztuczkę z position: absolute; top: 0; ... do inner div jak dobrze, ale potem muszę określić wysokość header + someControls wyraźnie, co chcę uniknąć, bo jest inny od wszystkich moich stron.

Jak to działa jak chcę go (z wyjątkiem części top: 40px;): fiddle #2

Co robię źle tutaj? Z góry dziękuję!

+0

+1 za dobrze zorganizowany pytania i stara się. – MarioDS

+0

Czy wymagana jest obsługa IE7? – thirtydot

+0

Niekoniecznie. Byłoby miło. – FlxMgdnz

Odpowiedz

0

Hey dlaczego określenie stanowiska bezwzględną w swoim arkuszu stylów

zastąpić ten jeden

.stretched { 

    width: 250px; 
    margin: 30px auto 20px; 
    background-color: green; 
} 

żywo demo http://jsfiddle.net/rohitazad/Rpdr9/366/

Updated js skrzypce http://jsfiddle.net/rohitazad/Rpdr9/368/

+0

Dzięki! Gdybym chciał, aby moje pytanie było bardziej precyzyjne, byłoby wspaniale, gdybyś sprawdził drugie skrzypce, które dodałem do mojego pytania. – FlxMgdnz

0

Usuń

position: absolute; 

i dodać

border: 10px solid green; 

http://jsfiddle.net/Rpdr9/367/

EDIT: Jeśli nie lubisz ogromny granicy, można zmienić graniczny rozmiarze do 1px.

border: 1px solid green; 

Nawet to działa.

+0

Dzięki! Ale chcę pominąć paski przewijania na stronie, wydaje mi się, że muszę uszczegółowić moje pytanie. "Div rozciągnięty" powinien być zawsze widoczny, a nadmiar powinien być obsługiwany przez paski przewijania w "wewnętrznym" divie. – FlxMgdnz

+0

Masz na myśli coś takiego - http://jsfiddle.net/Rpdr9/369/? – Ankit

+0

Tak, ale bez ustalonej wysokości. Sprawdź inne skrzypce, które dodałem do mojego pytania. – FlxMgdnz

1

Nie sądzę, że jest to możliwe w przypadku czystego CSS (.. działa we wszystkich popularnych przeglądarkach).

Oto podejście pomocą old Flexbox specyfikację: http://jsfiddle.net/thirtydot/xRr7e/

Niestety, to tylko works in przeglądarki WebKit/Firefox.

Nadszedł czas, aby skorzystać z kilku linii kodu JavaScript dla tego układu ..