Div ans untere Ende eines Elementes festmachen

  • Hallo,

    ich bin neu hier in diesem Forum. Auf der Suche nach einer Lösung für mein Darstellungsproblem hab ich euch hier gefunden. Und ich hätte auch gleich eine Bitte.

    Ich würde gerne ein div am unteren Ende eines Elements kleben lassen. Ich habe schon sehr viel versucht, bin letztendlich bei Flexbox hängen geblieben, doch auch damit komme ich leider nicht zum Ziel.
    Die Webseite habe ich mit Bootstrap erstellt (ich habe nur die Navigation, Grid, Formulare und Tabellen genommen). Zur Veranschaulichung habe ich den Code nachgebaut und auf JSFiddle hochgeladen. Der Link:
    https://jsfiddle.net/cky9hcx8/25/


    Es geht um die Box mit dem grauen Rand ("Quelle", ...) Ich hätte es gerne, dass der untere Rand dieser Box auf gleicher Höhe wie das Beispielbild links daneben abschließt. Der Inhalt des Textes ist aber immer verschieden lang und ich möchte dass das ganze auch auf Smartphones gut aussieht. Ich nehme an, aus diesem Grund fällt position absolute raus.

    Ich hoffe ich konnte mein Problem verständlich schildern und würde mich freuen wenn mir jemand bei diesem Problem weiterhelfen kann.

    Viele Grüße
    Larissa

  • Hallo und Willkommen,
    so ganz habe ich nicht verstanden, was exakt deine Vorstellungen sind. Aber vielleicht habe ich eine Idee, die dir bei weiteren Experimenten mit deinem Layout helfen könnte.
    Zunächst scheint mir deine <div>-Verschachtelung etwas unglücklich gewählt, denn HTML arbeitet den Code sequentiell ab und wenn dann die beiden Div's, die du positionieren willst, durch andere Elemente getrennt sind, dann sind Probleme vorprogrammiert.
    Habe deinen Code mal etwas modifiziert - zum weiterbasteln.

    Was hier definitiv noch nicht wirklich passt, ist die vertikale Positionierung von .floating2 (top: 195px; ). Das passt nur zufällig, denn wenn mehr Text im Div steht, wird das natürlich größer und verrutscht entsprechend.
    Außerdem wird das Div (.floating2) irgendwann umbrechen, wenn der Bildschirm kleiner wird.
    Also Lösungsidee hab ich ein @media screen... im CSS eingefügt - man könnte allerdings auch alternativ den Div .row mit einer maximalen Breite ausstatten, um ein Umbrechen zu verhindern.
    Viel Spaß beim weiterbasteln.

    if(!sleep)

    {$sheep++;}

  • Hallo, danke für die Hilfe, deine Lösung kommt schon ziemlich nahe an meine Wunschvorstellung. Ich denke damit sollte ich zum Ziel kommen.
    Es tut mir leid das ich mein Problem nicht gut beschrieben habe. Ich hab auch eben gesehen, das mein fiddle das Problem nur anzeigt wenn das Fenster groß genug ist.

  • Hallo

    Das Problem ist die für Bootstrap erforderliche div-Verschachtelung, die in deinem Beispiel um weitere div-Container erweitert, dabei aber nicht konsequent mit System umgesetet wurde.

    Zur Lösung deines Problems müssen die folgenden div berücksichtigt werden:

    Da das erste div nicht greifbar ist habe ich ihm eine zusätzliche Klasse gegeben. In diesem Fall flexbeispiel, wobei auch jeder andere Name gewählt werden kann, der noch nicht als Klasse vergeben ist. Also

    Zunächst muss dafür gesorgt werden, dass die beiden div.col-sm-6 immer gleich hoch sind. Das geschieht mit den folgenden CSS-Anweisungen:

    Code
    .flexbeispiel {
             display: flex;
          }
          .flexbeispiel>div {
             flex-grow: 1;
             flex-shrink: 1;
             flex-basis: 1px;
          }

    Dann muss dafür gesorgt werden, dass das div.row im zweiten div.col-sm-6 die volle Höhe vom div.col-sm-6 einnimmt, dazu sind die folgenden CSS-Anweisungen erforderlich:

    Code
    .flexbeispiel>div:nth-of-type(2) {
             display: flex;
             flex-direction: column;
          }
          .flexbeispiel>div:nth-of-type(2)>div {
             flex-grow: 1;
             flex-shrink: 1;
             flex-basis: 1px;
          }

    Nun muss noch dafür gesorgt werden, das div.col-md-12 source an den unteren Rand des div.row im zweiten div.col-sm-6 gedrückt wird. Dazu sind folgende CSS-Anweisungen erforderlich:

    Code
    .flexbeispiel>div:nth-of-type(2)>div {
             display: flex;
             flex-direction: column;
          }
          .flexbeispiel>div:nth-of-type(2)>div>div:nth-child(1) {
             margin-bottom: auto;
          }

    Deine CSS-Angaben zu Flexbox müssen gelöscht werden, damit sie nicht stören.

    Hier ein praktisches Beispiel mit meinen CSS-Angaben direkt zum Ausprobieren:

    Beispielseite

    Da Flexbox die Bootstrapangaben überschreibt wäre es insgesamt sinnvoller für das Beispiel komplett auf die Bootstrap-Klassen zu verzichten und den HTML-Quelltext übersichtlicher ohne die vielen unnötigen div neu zu erstellen.

    Gruss

    MrMurphy

    3 Mal editiert, zuletzt von MrMurphy (23. Juni 2017 um 09:47)

  • Puh, das ist schwieriger als ich angenommen hatte. Wegen Bootstrap, ja ich hab auch schon befürchtet das es keine gute Entscheidung war, diese Webseite damit zu machen. Und nachdem auch Sailor und jetzt du mir sagen, das der html Aufbau nicht so ideal ist, ist, vielleicht ist es wirklich besser, nochmal von vorne anzufangen :( Aber besser jetzt als später.

    Auf jeden Fall auch dir vielen Dank dafür das du mir extra ein Beispiel mit Erklärungen gemacht hast. Beim Öffnen deiner Beispielseite war mein erster Gedanke: Ja, genau so :)

  • Hi, hier bin ich wieder.

    Ich habe jetzt einiges über Flexbox gelesen und versuche nun, mein Beispiel von oben nochmal neu umzusetzen, so das ich auch verstehe was ich da mache.

    Bootstrap hab ich rausgeworfen, einiges habe ich auch schon so wie ich möchte. Allerdings hänge ich an einer Sache fest.

    Der Container <div class="source-box"> (ich habe ihn grün umrandet) soll sich über die ganze Breite der rechten Box erstrecken.

    Könnt ihr mir bitte nochmal weiterhelfen, damit ich das auch noch richtig hinbekomme?

    Ich hab nochmal ein JSFiddle erstellt, wenns euch lieber ist, kann ich den Code aber auch gerne hier einfügen. Am besten sieht man was ich meine, wenn das Fenster etwas größer ist.
    https://jsfiddle.net/z88obqtt/

    Danke schonmal an alle Helfer und Leser

  • Ich habs geschafft, ist wahrscheinlich nicht die eleganteste Lösung, aber funktioniert und anders bekomm ich es noch nicht hin.
    Sollte das irgendwann mal jemand brauchen, hier der Code: