2015-10-23 31 views
5

Ich versuche ein div vertikal zu zentrieren, mit flexbox. Ich habe li's mit einer Höhe von height:100px. Ich habe dann versucht, es vertikal so zu zentrieren: align-items: center, und der obere Teil wird abgeschnitten.Vertikal ein div mit Flexbox zentrieren

Wie kann ich unter Verwendung von Flexbox etwas vertikal zentrieren, ohne dass der obere Teil abgeschnitten wird?

Hier ist die JSFiddle, und hier ist der Code-Schnipsel:

body, 
 
html { 
 
    height: 100%; 
 
    margin: 0; 
 
    padding: 0; 
 
} 
 
#flexWrapper { 
 
    display: flex; 
 
    justify-content: center; 
 
    background-color: aqua; 
 
    height: 100%; 
 
    align-items: center; 
 
    /* This statement makes the problem */ 
 
    overflow: auto; 
 
} 
 
#flexContainer { 
 
    width: 70%; 
 
    list-style-type: none; 
 
    padding: 0; 
 
    margin: 0; 
 
    display: flex; 
 
    flex-direction: row; 
 
    flex-wrap: wrap; 
 
    justify-content: flex-start; 
 
    align-items: center; 
 
    align-content: flex-start; 
 
} 
 
li { 
 
    background-color: tomato; 
 
    border: 1px solid black; 
 
    box-sizing: border-box; 
 
    flex-basis: calc(100%/3); 
 
    height: 100px; 
 
}
<div id="flexWrapper"> 
 
    <ul id="flexContainer"> 
 
    <li class="flex-item">1</li> 
 
    <li class="flex-item">2</li> 
 
    <li class="flex-item">3</li> 
 
    <li class="flex-item">4</li> 
 
    <li class="flex-item">5</li> 
 
    <li class="flex-item">6</li> 
 
    <li class="flex-item">7</li> 
 
    <li class="flex-item">8</li> 
 
    <li class="flex-item">9</li> 
 
    <li class="flex-item">10</li> 
 
    <li class="flex-item">11</li> 
 
    <li class="flex-item">12</li> 
 
    <li class="flex-item">13</li> 
 
    <li class="flex-item">14</li> 
 
    <li class="flex-item">15</li> 
 
    <li class="flex-item">16</li> 
 
    <li class="flex-item">17</li> 
 
    <li class="flex-item">18</li> 
 
    <li class="flex-item">19</li> 
 
    <li class="flex-item">20</li> 
 
    <li class="flex-item">21</li> 
 
    <li class="flex-item">22</li> 
 
    <li class="flex-item">23</li> 
 
    <li class="flex-item">24</li> 
 
    </ul> 
 
</div>

+0

Ich glaube, ich fand eine einfache Lösung meine Antwort zu sehen. – zer00ne

+0

Zusätzlich zu "align-items" und "justify-content" zum Zentrieren von Flex-Objekten gibt es eine zweite Flex-Methode: 'auto' margins. In Fällen, in denen der vertikal zu zentrierende Biegeartikel den Biegebehälter überläuft, kann die zweite Methode nützlicher sein. Siehe [@ Oriols Antwort] (http://stackoverflow.com/a/32672661/3597276) in der Duplikatsreferenz für weitere Details. –

Antwort

0

Nichts ist falsch mit Ihrem Flex-Fu, es ist das, was außerhalb Ihrer Flexboxen Ihnen unerwünschte Ergebnisse liefert. Werfen Sie einen Blick auf die Fiddle und/oder Code-Schnipsel unten:

Fiddle

html { 
 
    box-sizing: border-box; 
 
    font: 400 16px/1.5 'Source Code Pro'; 
 
    height: 100vh; 
 
    width: 100vw; 
 
} 
 
*, 
 
*:before, 
 
*:after { 
 
    box-sizing: inherit; 
 
    margin: 0; 
 
    padding: 0; 
 
    border: 0 solid transparent; 
 
} 
 
#flexWrapper { 
 
    display: flex; 
 
    justify-content: center; 
 
    background-color: aqua; 
 
    height: 100%; 
 
    align-items: center; 
 
    /* This statement makes the problem */ 
 
    overflow: auto; 
 
} 
 
#flexContainer { 
 
    width: 70%; 
 
    list-style-type: none; 
 
    padding: 0; 
 
    margin: 0; 
 
    display: flex; 
 
    flex-direction: row; 
 
    flex-wrap: wrap; 
 
    justify-content: flex-start; 
 
    align-items: center; 
 
    align-content: flex-start; 
 
} 
 
li { 
 
    background-color: tomato; 
 
    border: 1px solid black; 
 
    box-sizing: border-box; 
 
    flex-basis: calc(100%/3); 
 
    height: 100px; 
 
}
<div id="flexWrapper"> 
 
    <ul id="flexContainer"> 
 
    <li class="flex-item">1</li> 
 
    <li class="flex-item">2</li> 
 
    <li class="flex-item">3</li> 
 
    <li class="flex-item">4</li> 
 
    <li class="flex-item">5</li> 
 
    <li class="flex-item">6</li> 
 
    <li class="flex-item">7</li> 
 
    <li class="flex-item">8</li> 
 
    <li class="flex-item">9</li> 
 
    <li class="flex-item">10</li> 
 
    <li class="flex-item">11</li> 
 
    <li class="flex-item">12</li> 
 
    <li class="flex-item">13</li> 
 
    <li class="flex-item">14</li> 
 
    <li class="flex-item">15</li> 
 
    <li class="flex-item">16</li> 
 
    <li class="flex-item">17</li> 
 
    <li class="flex-item">18</li> 
 
    <li class="flex-item">19</li> 
 
    <li class="flex-item">20</li> 
 
    <li class="flex-item">21</li> 
 
    <li class="flex-item">22</li> 
 
    <li class="flex-item">23</li> 
 
    <li class="flex-item">24</li> 
 
    </ul> 
 
</div>

Relevante-Code

html { 
    box-sizing: border-box; 
    font: 400 16px/1.5 'Source Code Pro'; 
    height: 100vh; 
    width: 100vw; 
} 
*, *:before, *:after { 
    box-sizing: inherit; 
    margin: 0; 
    padding: 0; 
    border: 0 solid transparent; 
} 

ich die CSS-Reset dann angewendet height: 100vh und width: 100vw zu <html>, so dass jeder Zoll Ihres Layouts sichtbar ist - keine unschöne Abschaltung. Weitere Details zu vh und vw können here gefunden werden.

All CSS-Reset rulsets ist optional, die einzigen Eigenschaften erforderlich sind, um zu folgen vh und vw.

+0

Das Zurücksetzen jedes Elements Rand und Padding auf Null fühlt sich ein wenig über den Rand. – Hoshts

+0

Ich benutze nur zurückgesetzt in Demos, weil es Standardeinstellungen und UA-Regelsätze beseitigt, die normalerweise Zeit Debugging dauern würde. Ich ziehe es vor, mich mit einer minimalen Umgebung zu beschäftigen und eine Lösung zu finden, anstatt mit Browser-Schwächen und lächerlichen Ausfällen herumzufummeln. Die CSS-Rücksetzungen sind optional und nicht entscheidend für die Funktion der Lösung. Ich werde meine Antwort aktualisieren, um die wichtigsten Eigenschaften zu klären. – zer00ne

-1

Ist das ein akzeptabel?

#flexWrapper { 

justify-content: center; 
background-color: aqua; 
height: 100%; 
width:70%; 
margin:0 auto; 
} 

http://codepen.io/damianocel/pen/gavEzv

Um es ansprechbar Sie% Werte müssen statt px verwenden.

Kommt es wirklich darauf an, wie das Layout aussehen soll, immer 3 Zeilen und 8 Spalten?

+0

In dem von Ihnen geposteten Link wird er in Spalten und nicht in Zeilen angezeigt. Können Sie das JSFiddle auch bearbeiten, nicht coppen? Ich persönlich mag JSFiddle besser. :) Vielen Dank! – Jessica

+0

Ok, ich mache es als Zeilen und in JSFiddle :-) Also, das Layout ist in Ordnung, solange seine Reihen? –

+0

Ich möchte 3 Zeilen, (Ich werde es später ändern, so brauche ich immer noch die Flexibilität) – Jessica

Verwandte Themen