2013-04-26 13 views
8

Chcę mieć div z ustaloną pozycją wewnątrz div z przepełnieniem -y: przewiń, co oznacza, że ​​chcę, aby div pozostał na miejscu, podczas gdy reszta treści przewija normalnie. I nie mogę zrozumieć, co jest nie tak, czy ktoś może pomóc? z góry dzięki ...Naprawiono div pozycji wewnątrz pos: względne i przepełnienie-y: przewiń

.foo { 
    position:relative; 
    display:block; 
    width:100%; 
    height:300px; 
    overflow-y:scroll; 
} 
.bar { 
    position:fixed; 
    top:0; 
    right:0; 
} 

A oto HTML

<div class="foo"> 
    <div class="bar"><div><!-- end of div that should be fixed --> 
    <div class="someOther">...</div> 
    <div class="someOther">...</div> 
    <div class="someOther">...</div> 
    <div class="someOther">...</div> 
</div><!-- end of container --> 
+1

Położenie elementu nieruchomego odnosi się do CAŁKOWITEJ STRONY, a nie do elementu nadrzędnego. –

Odpowiedz

2

stałej pozycji elementów jest w stosunku do całego dokumentu oglądanej, co nie jest elementem dominującym. Jeśli chcesz, aby do pracy, że trzeba coś takiego:

CSS

.foo { 
    height : 300px; 
    position : relative; 
    width : 100%; 
} 
.bar { 
    border-bottom : 1px solid #000; 
    height : 50px; 
} 
.scollable_content { 
    height : 250px; 
    overflow-y : auto; 
} 

HTML

<div class="foo"> 
    <div class="bar"></div> 
    <div class="scrollable_content"> 
     <div class="someOther">...</div> 
     <div class="someOther">...</div> 
     <div class="someOther">...</div> 
     <div class="someOther">...</div> 
    </div> 
</div> 

Tutaj stworzyłem fiddle dla Ciebie.

+0

dzięki za odpowiedź, ale chodzi o to, że muszę mieć ".bar" i scrollable_content na tym samym poziomie/głębokości (z powodu kilku manipulacji z-indexem). – user2324537

+1

Będziesz musiał użyć Javascript, aby go kontrolować. W przeciwnym razie możesz manipulować HTML i CSS, aby zrobić to, czego potrzebujesz, co prawdopodobnie jest łatwiejsze. –

18

Po zastosowaniu position:fixed do elementu, umieszczasz go w stosunku do samego okna, a nie jego elementu nadrzędnego. Będziesz chciał użyć position:absolute, aby umieścić dziecko w stosunku do jego rodzica, o ile jego pozycja domyślna jest inna niż position:static.

Jak poprawnie zrobiłeś w twoim przykładzie, zastosuj position:relative do rodzica .foo, a następnie zastosuj position:absolute do dziecka .bar. Zwykle osiągnęłoby to pożądany efekt przyciągnięcia obiektu .bar do wierzchu elementu nadrzędnego, ale ponieważ występuje przepełnienie zawartości podrzędnej w div jednostki nadrzędnej, a także zawartość podrzędna musi być również przewinięta,,. Zobacz najlepszy przykład w my Fiddle here.

Aby to naprawić, owinąć zawartość chcesz, aby przewinąć w innym pojemniku z overflow-y:scroll i zdejmowanie overflow-y:scroll na .foo aby zapobiec .bar z przewijania.

Aby zobaczyć przykład pracy, który można dostosować, zobacz dolny przykład w my Fiddle here.

+1

To powinno być oznaczone jako właściwa odpowiedź. – calbertts

Powiązane problemy