web-dev-qa-db-ja.com

コンテンツがビューポートよりも小さい場合でも、min-height 100vhは垂直スクロールバーを作成します

min-height: 100vh;をflexboxコンテナに適用しています。justify-content: space-around;を使用すると、垂直スクロールバーが表示されます。

高さを強制したくはありませんが、コンテンツのサイズがビューポートよりも小さいため、スクロールバーがある理由がわかりません。

* {
  padding: 0;
  margin: 0;
  box-sizing: border-box;
}
body {
  margin: 0;
  padding: 0;
}
.wrapper {
  min-height: 100vh;
  display: flex;
  flex-direction: column;
  justify-content: space-around;
}
<link href="https://necolas.github.io/normalize.css/5.0.0/normalize.css" rel="stylesheet"/>
<div class="wrapper">
  <div>
    <h1>min-height: 100vh;</h1>
    <h2>why is there a scrollbar here?</h2>
  </div>
  <div>
    Be sure to expand window. 
    <a href="#">skill one</a>
    <a href="#">skill one</a>
    <a href="#">skill one</a>
    <a href="#">skill one</a>
  </div>
</div>
12
George Katsanos

Flex-growを追加することでうまくいくようです:

body {
  min-height: 100vh;
  display: flex;
  flex-direction: column;
}

.wrapper {
  display: flex;
  flex-direction: column;
  flex-grow: 1;
  justify-content: space-around;
}

https://jsfiddle.net/uxgaaccr/2/

理由はわかりませんが、height: 100% on .wrapperでは十分ではないようです。代わりにflex-growが必要です。 justify-content: space-aroundからの余分な空白が高さを増していたと思います。私の推論には自信がありませんが、うまくいくようです...

6
Jazcash

上記の@Jazcashの回答に基づいて、さらに簡略化できます。

基本的に、min-height: 100vhを親要素に適用し、display: flexそれに。 flex-growは必須ではありません。

https://jsfiddle.net/gkatsanos/uxgaaccr/3/

* {
  box-sizing: border-box;
}

body {
  min-height: 100vh;
  display: flex;
}

.wrapper {
  display: flex;
  flex-direction: column;
  justify-content: space-around;
}
<link href="https://necolas.github.io/normalize.css/5.0.0/normalize.css" rel="stylesheet"/>
<div class="wrapper">
  <div>
    <h1>min-height: 100vh;</h1>
    <h2>why is there a scrollbar here?</h2>
  </div>
  <div>
    Be sure to expand window. 
    <a href="#">skill one</a>
    <a href="#">skill one</a>
    <a href="#">skill one</a>
    <a href="#">skill one</a>
  </div>
</div>
2
George Katsanos