CSS: Wie Lage hat: absolute div in einer position: relative div nicht durch einen Überlauf abgeschnitten werden: auf einem Container versteckt
-
19-09-2019 - |
Frage
Ich habe 3 Ebenen div
:
- (grün unten) Ein Top-Level-
div
mitoverflow: hidden
. Das ist, weil ich einige Inhalte (hier nicht dargestellten) will innerhalb dieses Feldes abgeschnitten, wenn sie die Größe der Box überschreiten. - (rot unten) Innerhalb dieses, ich habe
div
mitposition: relative
. Die einzige Verwendung dafür ist für die nächste Ebene. - (in blau unten) Endlich ein
div
I der Strömung mitposition: absolute
nehmen aber, dass ich will relativ positioniert den rotendiv
(nicht auf der Seite).
Ich mag die blaue Box habe die Strömung herausgenommen wird und über die grüne Box zu erweitern, aber seine relativ zu dem roten Feld wie in:
Doch mit dem Code unten, erhalte ich:
Und das Entfernen der position: relative
auf dem roten Kasten, jetzt die blaue Box darf der grünen Box raus, ist aber nicht mehr relativ positioniert roten Feld:
Gibt es eine Möglichkeit an:
- Halten Sie die
overflow: hidden
auf dem grünen Feld. - Haben Sie das blaue Feld über die grüne Box erweitern und sein relativ zu roten Kasten?
Die vollständige Quelle:
#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>
Lösung
Ein Trick, dass die Arbeiten an Position box # 2 mit position: absolute
statt position: relative
. Wir haben in der Regel eine position: relative
auf einer äußeren Box (hier box # 2), wenn wir eine innere Box wollen (hier box # 3) mit position: absolute
mit dem äußeren Feld relativ zu positionieren. Aber denken Sie daran: für Feld # 3 relativ zu werden # 2 Box, Box # 2 gerade Bedarf positioniert werden. Mit dieser Änderung erhalten wir:
Und hier ist der vollständige Code mit dieser Änderung:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<style type="text/css">
/* Positioning */
#box1 { overflow: hidden }
#box2 { position: absolute }
#box3 { position: absolute; top: 10px }
/* Styling */
#box1 { background: #efe; padding: 5px; width: 125px }
#box2 { background: #fee; padding: 2px; width: 100px; height: 100px }
#box3 { background: #eef; padding: 2px; width: 75px; height: 150px }
</style>
</head>
<body>
<br/><br/><br/>
<div id="box1">
<div id="box2">
<div id="box3"/>
</div>
</div>
</body>
</html>
Ich habe weitere Informationen dazu auf Absolut positionierte Box in einer Box mit Überlauf. auto oder versteckt
Andere Tipps
Es gibt keine magische Lösung, etwas außerhalb eines Überlauf versteckt Behälter darstellen kann.
Ein ähnlicher Effekt kann durch, die ein absolutes positioniert div erreicht wird, dass die Größe der Mutter entspricht, indem sie es in Ihrem aktuellen relativen Behälter zu positionieren (das div Sie Clip nicht wünschen, sollte außerhalb dieser div sein):
#1 .mask {
width: 100%;
height: 100%;
position: absolute;
z-index: 1;
overflow: hidden;
}
im Kopf Nehmen Sie, dass nur Inhalte auf der x-Achse zu befestigen haben (die Ihr Fall zu sein scheinen, da Sie nur die Breite des div eingestellt haben), können Sie overflow-x: hidden
verwenden.
Ich sehe nicht wirklich einen Weg, dies zu tun, wie sie ist. Ich glaube, Sie müssen möglicherweise die overflow:hidden
von div # 1 und fügen Sie ein weiteres div innerhalb div # 1 (dh als Geschwister zu div # 2) entfernen Ihre unspecified ‚Inhalt‘ zu halten und die overflow:hidden
zu dieser Stelle hinzufügen. Ich glaube nicht, dass Überlauf sein kann (oder sollte sein können) über ein geschüttelten.
Wenn es andere Inhalte innerhalb des Außen-div (die grüne Box) nicht dargestellt ist, warum nicht, dass der Inhalt in einem anderen div gewickelt haben, nennen wir es "content"
. Habe Überlauf versteckt auf diesem neuen Innen div, aber halten Überlauf sichtbar auf dem grünen Feld.
Der einzige Haken ist, dass Sie dann zu verwirren haben um sicher zu stellen, dass der Inhalt div nicht mit der Positionierung des roten Feldes nicht stört, aber es klingt wie soll es möglich sein, dass mit wenig Kopfschmerzen zu beheben.
<div id="1" background: #efe; padding: 5px; width: 125px">
<div id="content" style="overflow: hidden;">
</div>
<div id="2" style="position: relative; background: #fee; padding: 2px; width: 100px; height: 100px">
<div id="3" style="position: absolute; top: 10px; background: #eef; padding: 2px; width: 75px; height: 150px"/>
</div>
</div>