Mam 3 poziomy div
:
- (Na zielono poniżej) Najwyższy poziom
div
zoverflow: hidden
. Dzieje się tak, ponieważ chcę, aby część zawartości (nie pokazana tutaj) wewnątrz tego pudełka została przycięta, jeśli przekracza rozmiar pudełka. - (Na czerwono poniżej) Wewnątrz mam
div
zposition: relative
. Jedynym zastosowaniem do tego jest następny poziom. - (Na niebiesko poniżej) W końcu
div
wyciągam z przepływu,position: absolute
ale chcę, aby był ustawiony względem czerwonegodiv
(nie do strony).
Chciałbym, aby niebieskie pole zostało wyjęte z przepływu i rozszerzyło się poza zielone pole, ale zostało ustawione względem czerwonego pola, jak w:
Jednak z poniższym kodem otrzymuję:
Po usunięciu position: relative
czerwonego pola, teraz niebieskie pudełko może wydostać się z zielonego pudełka, ale nie jest już ustawione względem czerwonego pudełka:
Czy jest sposób, aby:
- Zachowaj
overflow: hidden
na zielonym pudełku. - Czy niebieskie pole rozszerza się poza zielone pole i jest ustawione względem czerwonego pola?
Pełne źródło:
#d1 {
overflow: hidden;
background: #efe;
padding: 5px;
width: 125px;
}
#d2 {
position: relative;
background: #fee;
padding: 2px;
width: 100px;
height: 100px;
}
#d3 {
position: absolute;
top: 10px;
background: #eef;
padding: 2px;
width: 75px;
height: 150px;
}
<br/><br/><br/>
<div id="d1" >
<div id="d2" >
<div id="d3"></div>
</div>
</div>
css
overflow
css-position
avernet
źródło
źródło
position: fixed
zignorujeoverflow:hidden
każdy zawierający element.Odpowiedzi:
Sztuczka, która działa, polega na umieszczeniu pola nr 2 za pomocą
position: absolute
zamiastposition: relative
. Zazwyczaj umieszczamyposition: relative
literę na pudełku zewnętrznym (tutaj ramka # 2), gdy chcemy, aby pudełko wewnętrzne (tutaj pudełko # 3)position: absolute
było ustawione względem pudełka zewnętrznego. Ale pamiętaj: aby pudełko # 3 było ustawione względem pudełka # 2, pudełko # 2 musi być ustawione. Dzięki tej zmianie otrzymujemy:A oto pełny kod z tą zmianą:
źródło
position: static
i to działało lepiej dla mnieposition: static
w pudełku nr 2 zamiastposition: absolute
.absolute
się nie przycina, alerelative
robi?Nie ma magicznego rozwiązania polegającego na wyświetlaniu czegoś poza ukrytym pojemnikiem z przepełnieniem.
Podobny efekt można osiągnąć, ustawiając element div w pozycji bezwzględnej, który pasuje do rozmiaru jego elementu nadrzędnego, umieszczając go w bieżącym kontenerze względnym (element div, którego nie chcesz przycinać, powinien znajdować się poza tym elementem div):
Pamiętaj, że jeśli musisz przyciąć zawartość tylko na osi x (co wydaje się być Twoim przypadkiem, ponieważ ustawiłeś tylko szerokość elementu div), możesz użyć
overflow-x: hidden
.źródło
Naprawdę nie widzę sposobu, aby zrobić to tak, jak jest. Myślę, że może być konieczne usunięcie elementu
overflow:hidden
div # 1 i dodanie kolejnego elementu div w ramach div # 1 (tj. Jako siostrzanego elementu div # 2), aby przechowywać nieokreśloną „zawartość” ioverflow:hidden
zamiast tego dodać do niego. Nie sądzę, aby przepełnienie można było (lub powinno być) przezwyciężone.źródło
Jeśli inna zawartość nie jest wyświetlana wewnątrz zewnętrznego elementu div (zielone pole), dlaczego nie umieścić tej zawartości wewnątrz innego elementu div, nazwijmy to
"content"
. Ukryj przepełnienie w tym nowym wewnętrznym elemencie div, ale pozostawiaj przepełnienie widoczne na zielonym polu.Jedyny haczyk polega na tym, że będziesz musiał wtedy bałaganić, aby upewnić się, że div zawartości nie koliduje z pozycjonowaniem czerwonego pola, ale wygląda na to, że powinieneś być w stanie to naprawić z niewielkim bólem głowy.
źródło