2015-10-23 5 views
5

flexboxを使用してdivを垂直方向にセンタリングしようとしています。私はli's、高さはheight:100pxです。私は次に、このように垂直方向にセンタリングしようとしました:align-items: center、上部が途切れてしまいます。Flexboxを使用してdivを垂直にセンタリング

Flexboxを使用して、上部を切り取らずに垂直にセンタリングするにはどうすればよいですか?

はここJSFiddleだし、ここでのコードスニペットです:

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

私は私の答えを見て簡単な解決策を見つけたと思う。 – zer00ne

+0

フレックスアイテムをセンタリングするための 'align-items'と' justify-content'に加えて、第2のフレックスメソッド、 'auto'マージンがあります。垂直にセンタリングされるフレキシブルアイテムがフレックスコンテナをオーバーフローする場合、第2の方法がより有用であり得る。詳細については、参考文献の[@ Oriol's answer](http://stackoverflow.com/a/32672661/3597276)を参照してください。 –

答えて

0

Flex-Fuには何も問題はありません。これは、フレックスボックスの外側にあり、望ましくない結果をもたらします。フィドルを見て、/または下のスニペット:私はCSSをリセット

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; 
} 

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>

関連するコードheight: 100vhwidth: 100vw<html>に適用され、レイアウトのすべてのサイズが見えるようになりました。見苦しいカットオフはありません。 vhおよびvwの詳細については、hereがあります。

すべてのCSSリセットrulsetsはオプションですが、成功するために必要な唯一のプロパティは、vhvwです。

+0

すべての要素のマージンとパディングをゼロにリセットすると、エッジが少し上になります。 – Hoshts

+0

私は通常、デモでリセットを使用しています。これは、通常はデバッグに時間がかかるデフォルトおよびUAルールセットを排除するためです。私は、ブラウザの弱点やばかげたデフォルトで、最小限の環境を扱い、解決策を見つけるのではなく、むしろうまくやっていくことを好む。 CSSのリセットはオプションであり、ソリューションの機能にとって重要ではありません。私は主要な特性を明らかにするために私の答えを更新します.. – zer00ne

-1

は許容この1か?

#flexWrapper { 

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

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

あなたの代わりにPXの%値を使用する必要があります、それは応答しています。

本当にレイアウトをどのように見たいか、常に3行8列に依存しますか?

+0

投稿したリンクでは、行ではなく列に表示されます。また、codepenではなく、JSFiddleを編集できますか?私は個人的にJSFiddleの方が好きです。 :)ありがとう! – Jessica

+0

私は行とJSFiddleでそれをやってみましょう:-) そのレイアウトはいいですが、その行は長いですか? –

+0

私は3行が必要です(私は後でそれを変更するので、私はまだ柔軟性が必要です) – Jessica

関連する問題