Divs vertikal einpassen

Guten Morgen,

ich habe eine Reihe an Divs gleicher Breite, die ich per Float nebeneinander setzen lasse, so wie sie gerade passen.

Angenommen, der Viewport lässt nun drei dieses Divs nebeneinander zu, wird das vierte automatisch unter die ersten drei platziert.

Jetzt entstehen von einer Reihe zur nächsten immer Lücken, weil die Inhalte der Divs unterschiedliche Höhen produzieren.

Aussehen tut’s etwa so:

11111 22222 33333
11111 22222 33333
11111 22222 33333
 22222 33333
 33333
 33333

44444 55555 66666
44444 55555 66666
 55555

Ich hätt’s aber gerne so:

11111 22222 33333
11111 22222 33333
11111 22222 33333
 22222 33333
44444 33333
44444 55555 33333
 55555
 55555 66666
 66666

Kann man also dafür sorgen, dass alle Divs direkt unter den darüber liegenden landen und nicht immer die Gesamthöhe der darüber liegenden Reihe verwendet wird?

Mein schlichtes CSS bisher:

.meinebox {
 width: 20em;
 max-width: 20em;
 float: left;
 background-color: #eee;
 margin: 0 .5em .5em 0;
 padding: 0 .5em;
}

Danke für Tipps!
A.

Moin,

meines Wissens geht das nicht, solange Du keine feste Breite und damit keine feste Position der Elemente hast.
Passt ein Element nicht mehr in die aktuelle Zeile wird der Zeilenumbruch ausgelöst, wo sich der Textfluss dann unterhalb des längsten Elements platziert.

Alles, was versucht, die Position selbst zu berechnen, müsste doch clientseitig, also in JavaScript erfolgen, was - wenn es denn überhaupt funktioniert - eigentlich keine Lösung ist.

Liebe Grüße,
-Efchen

Müsste es nicht eigentlich so aussehen?

11111 22222 33333
11111 22222 33333
11111 22222 33333
222222222222 33333
3333333333333333333
3333333333333333333

44444 55555 66666
44444 55555 66666
555555555555

Ist ja kein margin-left in den Elementen.

Wobei das margin-left ja auch nicht verhindert, dass der Zeilenumbruch den Textfluss unter dem längsten Element platziert…

Eine Beschreibung dieses Verhaltens findet sich auf dieser Seite:
http://www.andreas-kalt.de/webdesign/tutorials/float…

Leider gibts da keine Sprungmarke zum richtigen Abschnitt, der sich ungefähr in der Mitte befindet, direkt vor der Überschrift „Gegenüberliegende Floats“.
Dazu das Beispiel hier: http://www.andreas-kalt.de/tutorials/float-theorie/t…

Müsste es nicht eigentlich so aussehen?
(…)

Nein. Die Divs liegen in meinem XHTML (v1.1) hintereinander und werden automatisch als Blöcke nebeneinander gesetzt. So will ich es auch haben.

Vielleicht, wenn man sie verschachteln würde? Aber das ist eh nicht das, was ich will.

Gruß
A.

Müsste es nicht eigentlich so aussehen?
(…)

Nein. Die Divs liegen in meinem XHTML (v1.1) hintereinander
und werden automatisch als Blöcke nebeneinander gesetzt.

Aber ich hab kein margin-left gesehen, also schiebt sich doch der Inline-Content unter die niedrigeren, gefloateten Blöcke.

Zugegeben, wir weichen ab. :smile:

Müsste es nicht eigentlich so aussehen?
(…)

Nein. Die Divs liegen in meinem XHTML (v1.1) hintereinander
und werden automatisch als Blöcke nebeneinander gesetzt.

Aber ich hab kein margin-left gesehen, also schiebt sich doch
der Inline-Content unter die niedrigeren, gefloateten Blöcke.

Nur wenn a Kind von b wäre (usw).

Hallo,

Jetzt entstehen von einer Reihe zur nächsten immer Lücken,
weil die Inhalte der Divs unterschiedliche Höhen produzieren.

das hat seinen guten Grund. Stell DIr vor, die Konstellation wäre folgend:

11111 22222 33333
 22222 33333
 33333
 33333
 33333
 33333

und nachfolgend kämen:

44444 55555 und 66666
 66666
 66666
 66666
 66666
 66666
 66666

Wie sollten sich die Elemente verteilen? 4 + 5 unter 1 und 6 nach - tja, wohin? Oder 4 unter 1, 5 unter 2 und 6 unter 3? Noch drei Zeilen und die rechte Spalte ginge bis zum Mond (oder wäre alternativ fünf Mal so groß wie das Saarland) und links dümpelten ein paar armselige Zeilen vor sich hin. CSS hat halt keine Programmierlogik

Kann man also dafür sorgen, dass alle Divs direkt unter den
darüber liegenden landen und nicht immer die Gesamthöhe der
darüber liegenden Reihe verwendet wird?

Erlaube mir die Frage, was Du damit bezweckst? Wenn Du lediglich flexibel auf die Viewportbreite reagieren willst, dann würde ich die Breite der Elemente in einem gewissen Rahmen variieren lassen. Daten, die ich Mal rechts oben, dann aber (bei schmalerem Viewport) plötzlich links unten finde, verwirren im günstigsten Fall. Im ungünstigsten sind sie für den User schlicht „weg“. In jedem Fall überlässt Du die Darstellung dem Zufall, hier in Form des Viewports. Bei einem Viewport von 2540px bekomme ich dann sogar alle Objekte in eine Reihe. :wink:

Gruß

osmodius

Aber ich hab kein margin-left gesehen, also schiebt sich doch
der Inline-Content unter die niedrigeren, gefloateten Blöcke.

Zugegeben, wir weichen ab. :smile:

Sobald das zweite Div auf float:left gesetzt wird, liegt es komplett neben dem Vorgänger-Div und sein Inhalt kann nicht mehr unter dem ersten Div weiterfließen.

Hallo.

Noch drei Zeilen und die rechte Spalte ginge bis zum Mond
(oder wäre alternativ fünf Mal so groß wie das Saarland) und
links dümpelten ein paar armselige Zeilen vor sich hin.

Das tut sie aber auch in der derzeitigen Darstellung. Meiner Meinung nach(!) sogar jetzt schlechter als wenn es nach meinen Wünschen ginge… aber das ist ja Ansichtssache. Jetzt jedenfalls werden kurze Blöcke links mit Lücken auseinandergerissen. Es wäre meines Erachtens viel leichter, dem Inhalt zu folgen, wenn die Lücken nicht entstehen würden.

Das liegt aber auch daran, dass die dargestellte Reihenfolge der Div-Blöcke in dieser Seite keine Rolle spielt, weil ihre Inhalte gänzlich voneinander unabhängig sind. Es wäre also nicht nötig, dass Block 4 als Nachfolger von Block 3 erkannt wird.

Würde sich alles, was sich links befindet, zusammengeschoben präsentieren, wäre es überschaubarer als etwas, das große Lücken aufweist. Ist bei mir zwar nicht der Fall, aber im Extremfall könnte eine Lücke ja auch über zig Viewporthöhen gehen. Da, wo die großen Textblöcke stehen, kommt man als Leserin gut zurecht, aber an den Stellen, wo Lücken sind, hat man keine Ahnung, wo der nächste Textschnipsel erscheinen wird. Das wäre besser, wenn alles zusammengeschoben wäre, eben so wie ich es mir mit meiner hier gestellten Frage wünsche.

Erlaube mir die Frage, was Du damit bezweckst?

Wenn’s denn nützt: Das ist derzeit lediglich eine Hyperlink-Übersichtsseite für mich selbst. Ich benutze lieber diese Seite mit thematischen Gruppen aus Hyperlink-Listen als Browser-Lesezeichen/Favoriten.

Da ich die Listen aber immer mal erweitere, würde ich gern den Platz der Seite automatisiert optimieren und nicht per (wiederkehrender) Handarbeit die Lücken schließen.

Daten, die ich Mal rechts oben, dann
aber (bei schmalerem Viewport) plötzlich links unten finde,
verwirren im günstigsten Fall. Im ungünstigsten sind sie für
den User schlicht „weg“.

Diese Meinung teile ich nicht. Das Umarrangieren der Inhalte je nach Viewport halte ich für einen der Grundpfeiler in dynamischen Webseiten, die ja auch nur dann auf möglichst vielen (idealerweise allen) User-Agents mit beliebigen Viewport-Größen ohne Scrollen lesbar/nutzbar sind.

In jedem Fall überlässt Du die
Darstellung dem Zufall, hier in Form des Viewports.

Na so was… ist das nicht der explizite Wunsch, wenn man „float“ benutzt? Dass man es der Größe des Viewports überlässt, wie die Inhalte angeordnet werden und dass es jede besucherin mit Ändern der Fenstergröße selbst in der Hand hat, wie breit sie ihren Viewport macht und wie die Inhalte angeordnet werden?

Gruß
A.

Wie wärs, wenn Du allen Elementen die gleiche, fixe Höhe gibst und ggfs. Scrollbalken anbietest? Oder, was sich z.B. bei Newsboxen anbietet, Du schreibst den Text bis zu einer bestimmten Länge und bietest dann einen Link „mehr >“, wie das oft üblich ist.

Kann natürlich sein, dass das für Deine Inhalt absolut unpassend ist.

Sobald das zweite Div auf float:left gesetzt wird, liegt es
komplett neben dem Vorgänger-Div und sein Inhalt kann nicht
mehr unter dem ersten Div weiterfließen.

Stimmt.
Betriebsblindheit und das Alter… :wink:

Hallo,

ich habe eine Reihe an Divs gleicher Breite, die ich per Float
nebeneinander setzen lasse, so wie sie gerade passen.

Angenommen, der Viewport lässt nun drei dieses Divs
nebeneinander zu, wird das vierte automatisch unter die ersten
drei platziert.

Jetzt entstehen von einer Reihe zur nächsten immer Lücken,
weil die Inhalte der Divs unterschiedliche Höhen produzieren.

Ich bin nicht vom Fach, aber für tumblr gibt es ein Theme, das posts so anordnet, wie du das willst:

http://photo-schmoto-theme.tumblr.com/

Du kannst es ja mal ansehen - vielleicht hilft das.

Cheers, Felix

Hallo,

Das tut sie aber auch in der derzeitigen Darstellung. Meiner
Meinung nach(!) sogar jetzt schlechter als wenn es nach
meinen Wünschen ginge… aber das ist ja Ansichtssache. Jetzt
jedenfalls werden kurze Blöcke links mit Lücken
auseinandergerissen. Es wäre meines Erachtens viel leichter,
dem Inhalt zu folgen, wenn die Lücken nicht entstehen würden.

zusammenhängenden Inhalt floate ich doch aber in einem Element, da er semantisch eins ist.

Das liegt aber auch daran, dass die dargestellte Reihenfolge
der Div-Blöcke in dieser Seite keine Rolle spielt, weil ihre
Inhalte gänzlich voneinander unabhängig sind. Es wäre also
nicht nötig, dass Block 4 als Nachfolger von Block 3 erkannt
wird.

Dann ist float:left die falsche Wahl, da auf der rechten Seite umflossen wird.

Würde sich alles, was sich links befindet, zusammengeschoben
präsentieren, wäre es überschaubarer als etwas, das große
Lücken aufweist. Ist bei mir zwar nicht der Fall, aber im
Extremfall könnte eine Lücke ja auch über zig Viewporthöhen
gehen. Da, wo die großen Textblöcke stehen, kommt man als
Leserin gut zurecht, aber an den Stellen, wo Lücken sind, hat
man keine Ahnung, wo der nächste Textschnipsel erscheinen
wird. Das wäre besser, wenn alles zusammengeschoben wäre, eben
so wie ich es mir mit meiner hier gestellten Frage wünsche.

Wenn dich die Lücken nicht auf anderem Wege vermeiden lassen, dann könntest Du Hilfe durch beispielsweise senkrechte Hilfslinien geben.

Erlaube mir die Frage, was Du damit bezweckst?

Wenn’s denn nützt: Das ist derzeit lediglich eine
Hyperlink-Übersichtsseite für mich selbst. Ich benutze lieber
diese Seite mit thematischen Gruppen aus Hyperlink-Listen als
Browser-Lesezeichen/Favoriten.

Kenn ich. :wink:
Sollten Deine Linklisten sich deutlich in der Größe unterscheiden (so scheint es ja), dann wäre zumindest ein wenig Übersichtlichkeit gewonnen, wenn Du sie der Größe nach sortiertest. Der Raum des größten Elements wird bei einem float:left ja immer nur nach links geblockt.

Da ich die Listen aber immer mal erweitere, würde ich gern den
Platz der Seite automatisiert optimieren und nicht per
(wiederkehrender) Handarbeit die Lücken schließen.

Das hinge bei obigem Tip davon ab, ob die einzelnen Listen in etwa gleich schnell wachsen.

Daten, die ich Mal rechts oben, dann
aber (bei schmalerem Viewport) plötzlich links unten finde,
verwirren im günstigsten Fall. Im ungünstigsten sind sie für
den User schlicht „weg“.

Diese Meinung teile ich nicht.

Musst Du nicht, allerdings bestätigt die Praxis das.

Das Umarrangieren der Inhalte
je nach Viewport halte ich für einen der Grundpfeiler in
dynamischen Webseiten, die ja auch nur dann auf möglichst
vielen (idealerweise allen) User-Agents mit beliebigen
Viewport-Größen ohne Scrollen lesbar/nutzbar sind.

Der Grundpfeiler im Responsive Design ist die an das Ausgabegerät angepasste Darstellung. Damit das eben nicht dem Zufall überlassen ist, arbeitet man unterschiedlichen Bereichen in CSS die auf die verschiedenen Viewporteigenheiten abgestellt sind. So kann ich bestimmen, daß aus einem 5-Spalter bei einer bestimmten Breite ein 3-Spalter wird, wobei Spalte 3 unter Spalte 2 wandert und Spalte 5 (die mit der Werbung) ausgeblendet wird. Passendes HTML vorausgesetzt.

Im Responsive Design geht man im übrigen nicht über den User-Agent, da dieser ziemlich ungeeignet ist, die Parameter des betreffenden Geräts abzubilden.

In jedem Fall überlässt Du die
Darstellung dem Zufall, hier in Form des Viewports.

Na so was… ist das nicht der explizite Wunsch, wenn man
„float“ benutzt?

Nein. Ein Float platziert das betreffende Element an die genannte Seite und löst es aus dem Elementfluss. Nachfolgende Elemente fließen auf der dem Float-Wert entgegengesetzten Seite vorbei.

Dass man es der Größe des Viewports
überlässt, wie die Inhalte angeordnet werden und dass es jede
besucherin mit Ändern der Fenstergröße selbst in der Hand hat,
wie breit sie ihren Viewport macht und wie die Inhalte
angeordnet werden?

Wenn Du möchtest, daß Deine DIVs nebeneinander stehen, dann reicht display:inline-block aus, und was nicht passt, rutscht in die nächste Zeile.

Gruß

osmodius

Hallo,

Ich bin nicht vom Fach, aber für tumblr gibt es ein Theme, das
posts so anordnet, wie du das willst:

http://photo-schmoto-theme.tumblr.com/

das ist ein 3-Spalter mit fixer Breite.

Du kannst es ja mal ansehen - vielleicht hilft das.

Nicht wirklich. Davon abgesehen wird da einiges von der dahinter stehenden Programmlogik erledigt.

Gruß

osmodius

Hallo.

Sollten Deine Linklisten sich deutlich in der Größe
unterscheiden (so scheint es ja), dann wäre zumindest ein
wenig Übersichtlichkeit gewonnen, wenn Du sie der Größe nach
sortiertest. Der Raum des größten Elements wird bei einem
float:left ja immer nur nach links geblockt.

Genau so habe ich es mittlerweile eingerichtet. Jetzt muss ich zwar immer von Hand schieben, falls sich die Größenverhältnisse der Inhalte ändern, aber naja - das ist ja halb so wild.

LG
Anja