Behälter automatisch anpassen Höhe, um das absolut positionierte Kind aufzunehmen s
Lesezeit: 6 Minuten
Dmitri Avtonomov
Gibt es eine Möglichkeit, die Container-DIV-Höhe automatisch anzupassen, um absolut positionierte untergeordnete DIVs aufzunehmen? Ich möchte so etwas bekommen
aber das “Container” div bleibt Null Höhe. Ich verstehe, dass dies das erwartete Verhalten sein könnte, da Elemente bei absoluter Positionierung aus dem Fluss “herausgenommen” werden, aber gibt es eine Problemumgehung dafür? (mit Ausnahme der Vorberechnung der resultierenden Höhe und der manuellen Einstellung)
Überlauf: automatisch
Das ist das Neue klarfix Methode, FYI. Der Container wird jedoch nicht immer auf seine Höhe erweitert höchste & absolut positioniert Kind.
Es wurde ein Problem behoben, bei dem ein Hintergrundbild nicht angezeigt wurde (aber nur in Chrome, funktionierte in ff und ie). Fügte dies dem div hinzu und jetzt hat es Höhe und die BG-Anzeigen. Vielen Dank.
– Brady Moritz
21. Juni 2010 um 1:59 Uhr
woher
Wenn Sie position:relative anstelle von position absolute verwenden, bleibt in der Seitenstruktur an der Stelle, an der sich das Element befinden sollte, ein leerer Raum, und dieser Raum entspricht der Höhe des verschobenen Elements.
Sie könnten also chld1 und chld2 schweben lassen, um sie nebeneinander zu bringen, fügen Sie eine obere und untere Polsterung hinzu, um chld 3 nach unten zu drücken, und verwenden Sie die relative Position, um sie auseinander zu teilen und sich auf eine beliebige Höhe zu bewegen. Verwenden Sie dann clear both auf chld3.
Wenn ich untergeordnete Elemente als schwebend setze, bricht der Rand des Containers zusammen (er umgibt die untergeordneten Elemente nicht, das Container-DIV betrachtet sich selbst als leer …). ‘Position: Relativ’ an sich ist nicht sehr nützlich, da diese inneren Divs wird vertikal gestapelt, nicht horizontal :(((
– Dmitri Avtonomov
8. April 2009 um 23:32 Uhr
Aber wenn chld3 clear:both hat, zwingt es das äußere div zu expandieren
– woher
9. April 2009 um 0:00 Uhr
oh, mein problem war, dass ich alle 3 kinder auf ‘float: left’ gesetzt habe, so hat ‘clear: both’ auf child3 nicht geholfen. Dein Beispiel funktioniert einwandfrei! Aber ich meinte eigentlich einen allgemeineren Fall, in dem diese untergeordneten Elemente beliebig in einem Container platziert werden können. Ich muss definitiv mehr über Clearfix lesen …
– Dmitri Avtonomov
9. April 2009 um 7:55 Uhr
Am Ende habe ich Clearfix verwendet, damit kann ich die gewünschte Breite des Containers einstellen, und seine Höhe wird je nach Inhalt automatisch angepasst (dies funktioniert in allen Browsern).
+1 Ausgezeichnet. Ich habe dies leicht hinzugefügt, damit die Boxen übereinander sitzen können. So ähnlich wie ein Kartenspiel. jsfiddle.net/MYvYy/1
– Jordan Arseno
24. Februar 2012 um 2:17 Uhr
buti-oxa
Nein. Die ganze Idee ist, dass ein absolut positioniertes Element sein übergeordnetes Layout nicht beeinflusst.
Versuchen Sie, Ihr Ziel zu erreichen, indem Sie Floats relativ positionieren, anstatt Divs absolut zu positionieren. Es ist nicht so bequem (weil die Startposition Ihrer Schwimmer nicht Arsch 0,0 ist), aber es wird funktionieren.
Nicola
Ich habe mir ziemlich viel Mühe gegeben, dies zu erreichen, und jetzt, da ich eine Lösung habe, sieht es so aus, als wäre es so einfach gewesen, jedenfalls wird etwas jQuery/Javascript benötigt:
jQuery(window).load(function(){
var valueCheck = [];
jQuery('.projectsWrap .hentry').each(function(){
var itemObj = jQuery(this);
var itemValues = itemObj.position();
var top = itemValues.top;
var height = jQuery(this).height();
var sum = top + height;
valueCheck.push(sum);
});
var res = Math.max.apply(Math, valueCheck);
jQuery('.projectsWrap').height(res);
});
Ich habe dieses kleine Skript in einem WordPress-Theme geschrieben und implementiert, daher sehen Sie, dass das “$” aus Kompatibilitätsgründen in “jQuery” konvertiert wird, aber wenn Sie WordPress nicht verwenden, sollten Sie es wieder auf “$” zurücksetzen.
Die Situation, in der ich mich befand, war noch schwieriger als die in der Frage, weil der Benutzer jedes Element autonom absolut im Container positionieren wollte und die Reihenfolge, in der die Elemente im Dom erschienen, nicht mit ihrer Position im Container in Beziehung stand: völlig unerwartet Ergebnisse (das erste Element im Dom kann beispielsweise als letztes unteres Element im Fenster erscheinen).
Auch die Höhen der Elemente waren alle unterschiedlich, alle unterschiedlichen Höhen und alle unterschiedlichen Spitzenwerte (Offset), ein Alptraum.
Das Skript ermittelt die Höhe und den oberen Wert jedes Elements, summiert sie und fügt diese Summe in ein Array ein. Das Array wird dann überprüft, um den größten Wert zu finden. Dieser Wert ist die Höhe, auf die der Container eingestellt wird, magisch!
Ich konnte keine einfache reine JavaScript-Lösung für dieses kleine Problem finden, also kommt es hier (Sie müssen Ihrem HTML-Code ID-Felder hinzufügen):
var containerBox = document.getElementById('container');
var statBoxBottom = document.getElementById('chld3').getBoundingClientRect().bottom + window.scrollY;
var mainDivBottom = containerBox.getBoundingClientRect().bottom + window.scrollY;
var boxHeightDiff = statBoxBottom - mainDivBottom;
if (boxHeightDiff > 0)
containerBox.style.height = Math.ceil( containerBox.offsetHeight + boxHeightDiff ) + 'px';
Es erhöht im Grunde die “Container”-Höhe basierend auf der absoluten unteren Position von “chld3”.
Wenn Sie dem .container div eine Höhe von 100% geben, sollte es in den meisten Browsern aus den untergeordneten Elementen berechnet werden, aber leider nicht in IE6 oder niedriger.
definitiv nicht bei absolut positionierten inneren Elementen
– Dmitri Avtonomov
8. April 2009 um 23:10 Uhr
10630700cookie-checkBehälter automatisch anpassen Höhe, um das absolut positionierte Kind aufzunehmen syes