Ergebnis 1 bis 11 von 11

Thema: Flexbox - Abstände

  1. #1
    Contao-Nutzer Avatar von WolfgangW
    Registriert seit
    05.10.2016.
    Ort
    Mönchengladbach
    Beiträge
    35

    Standard Flexbox - Abstände

    Hallo Flexbox-Spezialisten,

    ich benötige auf jeder Seite zwei Spalten (Breite: 1 x ca. 75% + 1 x 25%).
    Bisher habe ich mit Rocksolid-Columns gearbeitet.
    Da ich aber die Spaltenlänge einheitlich lang bekommen möchte, bin ich auf 'Flexbox' umgestiegen.

    Mein Problem dabei ist:
    - Zwischen den beiden Spalten soll ein entsprechender Abstand
    - mit 'Margin' sind mir die Ränder aber auf dem Smartphone zu groß
    - 'space-between' hilft mir dabei auch nicht weiter ...
    - habe das Problem jetzt mit der Trickkiste aus historischen Zeiten (Blindgif) gelöst
    Frage an die Spezialisten: Wie löst man das Problem professionell, bevor ich wieder mit verschachtelte Tabellen beginne?

    Die entsprechende Seite dazu:
    http://www.netzwerk-wickrath.de/cms/fahrradtouren.html

    Sonnige Grüße aus dem Rheinland

  2. #2
    Contao-Fan Avatar von jscholtysik
    Registriert seit
    19.06.2009.
    Ort
    München
    Beiträge
    366

    Standard

    Hallo Wolfgang,

    ich hab das gerade mal ausprobiert. Das kannst Du mal so in Codepen oder im Webmaker unter Chrome testen.

    Damit hast Du:

    - zwischen den beiden Spalten einen entsprechenden Abstand (width der beiden Spalten < 100% und justify-content: space-between, in meinem Beispiel haben die Spalten zusammen 95%, die restlichen 5% sind für den Abstand dazwischen und die Spalten werden an die Ränder links und rechts gedrückt)
    - die Zeile mit den Container und den Flexbox-Elementen wird auf 70% eingestellt und zentriert
    - der Flex-Container bekommt eine feste Höhe, hier z.B. 300px, d.h. die Flexbox-Elemente werden vertikal auf die maximal Höhe des Container durch das align-items: stretch vergrößert
    - den Rand auf den mobilen Geräten kannst Du ja beliebig mit der Breite des Containers anpassen, indem Du z.B. die Breite auf 90% setzt. Bsp.: unter 800px 90%, unter 1000px 80% usw.

    Und das kannst Du ja für jeden horizontalen Flexbox-Container wiederholen.

    HTML:

    Code:
    <div id="container">
        <div class="box1">
            Text 1                                    
        </div>
        <div class="box2">
            Text 2                                    
        </div>
    </div>
    CSS:

    Code:
    #container
    {
        display: flex;
        flex-direction: row;
        justify-content: space-between;
        align-items: stretch;
        height: 300px;
        margin: 0 auto;
        width: 70%; 
    }
    
    .box1
    {
        width: 72.5%;
        background-color: green;
    }
    
    .box2
    {
        width: 22.5%;
        background-color: blue;
    }
    Geändert von jscholtysik (28.03.2017 um 11:51 Uhr)
    Joachim
    *** Kein Backup, kein Mitleid ***

  3. #3
    Contao-Nutzer Avatar von WolfgangW
    Registriert seit
    05.10.2016.
    Ort
    Mönchengladbach
    Beiträge
    35

    Standard

    Hallo jscholtysik,

    mit Deinem Ansatz bin ich schon etwas weitergekommen. DANKE
    Habe den Container auf 100% gesetzt (möchte ja die volle Breite haben), dann ist der Aufbau schon einmal perfekt.
    Was jetzt noch fehlt, dass die Boxen auf den mobilen Geräten untereinander stehen.
    Habe mal schnell ein 'flex-wrap: wrap;' eingesetzt, jedoch ohne Reaktion.
    Werde noch etwas tüfteln ...

  4. #4
    Contao-Fan Avatar von jscholtysik
    Registriert seit
    19.06.2009.
    Ort
    München
    Beiträge
    366

    Standard

    Hi Wolfgang,

    da würde ich dann mit Media Queries arbeiten und dort flex-direction: column; setzen, d.h. bei einer bestimmten Breite ändert sich dann einfach die Anordnung der Flex-Elemente auf vertikal. Und zusätzlich würde ich dann die Breite der Boxen untereinander auf 90% setzen (oder auf einen Wert, der Dir besser passt).
    Joachim
    *** Kein Backup, kein Mitleid ***

  5. #5
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Schau dir das mal bei diesen beiden Flex-Grids ab
    http://jeroenoomsnl.github.io/the-flex-grid/
    http://flexboxgrid.com/

    Das ist eigentlich alles recht simpel. Der Knackpunkt ist, dass jeder "Inhalt" noch einen extra Wrapper (Box) bekommt. So kannst du einheitliche Boxen und Abstände erstellen.
    Code:
    Reihe - display:flex; flex-flow:row wrap; margin:0 -1rem;
        Box - padding:0 1rem; flex-basis:75%;
            Content - Whatever
        Box - padding:0 1rem; flex-basis:25%;
            Content - Whatever
    Zusätzlich zur flex-basis wird der gleiche Wert auch noch mit max-width gesetzt. box-sizing:border-box; ist auch noch erforderlich, weil die Boxen ein Padding haben. Mit Margin würde das nicht gehen, weil es keinen box-sizing Wert gibt, welcher das Margin aus der Gesamtbreite rausrechnet so wie mit Padding und border-box. Das ist auch der Grund, warum ein extra Wrapper benötigt wird.

    Bei den Breakpoints brauchst du dann nur die flex-basis und max-width zu ändern.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  6. #6
    Contao-Nutzer Avatar von WolfgangW
    Registriert seit
    05.10.2016.
    Ort
    Mönchengladbach
    Beiträge
    35

    Standard

    Ich bin jetzt zu folgendem - simplen - Ergebnis gekommen:

    Für den benötigten Zwischenraum habe ich eine extra 'unsichtbare' Box mit zwei Leerstellen definiert.
    Zum Glück nimmt das der Contao-Editor ohne hinzufügen von sonstigen Quelltext an.
    Die Aufteilung nach Prozent war grundsätzlich eine gute Idee, jedoch wurde die 5% Lücke immer schmäler, je mehr man den Browser verkleinert. Die Breite der Boxen habe ich mit 'flex-grow' gewichtet.

    Bei 700 Pixel und weniger habe ich via Media Queries folgendes geändert:
    Die Flexbox wandelt sich dann von der horizontalen Ansicht in die vertikale = flex-direction: column. Die einzelnen Boxen sind dann 100% breit und meine dritte Box als Platzhalter hat sich mit der Einstellung 'display: none' verabschiedet.

    Es funktioniert und war für mich der einfachste Weg.

    Den Helfern und Tippgebern VIELEN DANK.
    Geändert von WolfgangW (28.03.2017 um 19:00 Uhr)

  7. #7
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Weil's so schön ist, hier nochmal ne Lösung für dich ohne extra Container
    PHP-Code:
    .flexbasic {
        
    displayflex;
        
    flex-wrapwrap;
        
    /* justify-content: space-between; */
        
    margin-10px;
        
    /* width: 100%; */
    }
    .
    hellblauflex {
        
    /* min-height: 200px; */
        
    flex-basiscalc(75% - 20px);
        
    /* flex-grow: 4; */
        /* margin: 0px; */
        /* margin-bottom: 5px; */
        
    padding20px;
        
    background-colorrgba(120,248,255,0.2);
        
    border1px solid #0696b0;
        
    border-radius10px;
        
    /* -moz-border-radius: 10px; */
        /* -khtml-border-radius: 10px; */
        /* -webkit-border-radius: 10px; */
        
    box-shadow2px 2px 2px 2px rgba(000.2);
        
    margin10px;
    }
    .
    hellgruenflex {
        
    /* min-height: 200px; */
        
    flex-basiscalc(25% - 20px);
        
    /* flex-grow: 1; */
        
    border1px solid #008e5c;
        
    background-colorrgba(166,210,198,0.2);
        
    padding20px;
        
    /* margin: 0px; */
        /* margin-bottom: 5px; */
        
    border-radius10px;
        
    /* -moz-border-radius: 10px; */
        /* -khtml-border-radius: 10px; */
        /* -webkit-border-radius: 10px; */
        
    box-shadow2px 2px 2px 2px rgba(000.3);
        
    margin10px;
    }

    /* breakpoint */
    .hellblauflex,
    .
    hellgruenflex {
        
    flex-basiscalc(100% - 20px);

    Auf's Wesentliche reduziert sieht das also so aus
    PHP-Code:
    .flexbasic {
        
    displayflex;
        
    flex-wrapwrap;
        
    margin-10px/* gutter 20px */
    }
    .
    hellblauflex {
        
    flex-basiscalc(75% - 20px); /* gutter 20px */
        
    padding20px;
        
    margin10px/* gutter 20px */
    }
    .
    hellgruenflex {
        
    flex-basiscalc(25% - 20px); /* gutter 20px */
        
    padding20px;
        
    margin10px/* gutter 20px */
    }

    /* breakpoint */
    .hellblauflex,
    .
    hellgruenflex {
        
    flex-basiscalc(100% - 20px);

    Ich würde dir auch empfehlen den Flex-Container außerhalb der CEs vom Typ Text zu setzen
    HTML-Code:
    <!-- alt -->
    <div class="ce_text flexbasic block">
      <div class="hellblauflex">
      <div class="hellgruenflex">
    </div>
    
    <!-- neu -->
    
    <!-- CE HTML -->
    <div class="flexbox">
      <!-- CE text -->
      <div class="ce_text col-75 hellblau">
      <!-- CE text -->
      <div class="ce_text col-25 hellgruen">
    <!-- CE HTML -->
    </div>
    Wenn die Flex-Items die einzigen CEs sind, kannst du auch direkt den Artikel als Flex-Container benutzen und diesem die Klasse "flexbox" geben.
    Geändert von Andreas (28.03.2017 um 22:27 Uhr)
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  8. #8
    Contao-Nutzer Avatar von WolfgangW
    Registriert seit
    05.10.2016.
    Ort
    Mönchengladbach
    Beiträge
    35

    Standard

    Sorry Andreas,

    die Idee, die 20 Pixel abzuziehen, kann ich gedanklich nachvollziehen, funktioniert aber aus irgendeinem Grund nicht richtig:
    http://www.welters-online.de/flex

    Trotzdem vielen Dank für die nette 'Nachbarschaftshilfe' !!!

  9. #9
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Das war nicht zum einfachen copy and paste gedacht. Es fehlte das box-sizing, das max-width, der Breakpoint und du hattest noch einen Fehler eingebaut (fehlendes Semikolon). Das hier kannst du jetzt mal abkopieren.
    PHP-Code:
    body {
      
    margin0;
      
    overflowhidden/* nur für Testumgebung, damit keine Scrollbalken erscheinen, wegen der -10px margin */
    }
    .
    flexbasic {
      
    displayflex;
      
    flex-flowrow wrap;
      
    margin-left:  -10px;
      
    margin-right: -10px;
    }
    .
    flexbasic > * { /* direkte Kinder */
      
    padding20px;
      
    border1px solid #0696b0;
      
    border-radius10px;
      
    box-shadow2px 2px 2px 2px rgba(000.2);
      
    margin10px;
      
    box-sizingborder-box;
    }
    .
    hellblauflex {
      
    flex-basiscalc(75% - 20px);
      
    max-width:  calc(75% - 20px);
      
    background-colorrgba(120248255.2);
    }
    .
    hellgruenflex {
      
    flex-basiscalc(25% - 20px);
      
    max-width:  calc(25% - 20px);
      
    background-colorrgba(166210198.2);

    }

    /* Breite kleiner 960px */
    @media (max-width959px) {
      .
    hellblauflex,
      .
    hellgruenflex {
        
    flex-basiscalc(100% - 20px);
        
    max-width:  calc(100% - 20px);
      }

    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  10. #10
    Contao-Nutzer Avatar von WolfgangW
    Registriert seit
    05.10.2016.
    Ort
    Mönchengladbach
    Beiträge
    35

    Standard

    Kompliment Andreas,
    das war eine echte Meisterleistung !!!


    http://welters-online.de/flex/index1.html

    Soweit ist mein Wissensstand leider noch nicht ...
    ... aber ich arbeite daran und habe die Hoffnung noch nicht aufgegeben!

  11. #11
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Danke, gerne. Ich arbeite gerade an einem flex-grid für Contao, welches man mit dma_simple_grid aufsetzen kann.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •