フレックスアイテムでスクロールバーを有効にするにはどうすればよいですか?

ダニエル・ヤヌス

ビューポートの1/3と2/3をそれぞれ占める2つのパネル(上部と下部)を備えたフレックスボックスベースのレイアウトがあります。(実際にはもっと多くのパネルがありますが、私はそれを最小限の例に蒸留しました)。

上部パネルもフレックスコンテナです。これは、子が上から下に流れ、余裕があるときに垂直方向の中央に配置されるようにするためです。トップパネルに収まるよりも多くのものがある場合は、スクロール可能にしたいので、overflow: auto

問題:コンテンツは、をtop使用してもそのサイズ縮小されflex-shrink: 0、スクロールバーがポップアップしません。

content次のデモでは、高さが明示的に指定されている場合でもどのように縮小されるかを確認してください。

html, body {
    height: 100%;
    width: 100%;
    margin: 0;
    padding: 0;
    overflow: hidden;
}

.main {
    display: flex;
    height: 100%;
    flex-direction: column;
}

.top {
    display: flex;
    flex-direction: column;
    flex-basis: 33%;
    border-bottom: 1px solid #ccc;
    overflow: auto;
    justify-content: center;
    padding: 20px;
}

.bottom {
    overflow: auto;
    flex-basis: 67%;
}

.content {
    height: 500px;
    background-color: #eee;
}
<div class="main">
  <div class="top">
    <div class="content">Content</div>
  </div>
  <div class="bottom"></div>
</div>

質問:

  1. レイアウト要件を維持しながらこれを修正するにはどうすればよいですか?display: flexトップパネルを無効にすると、デモで目的の効果が得られます。私は可能性の内容を配置topflexboxlessの方法で、私はフレックスレイアウトと自動垂直センタリングの利点を失います。

  2. なぜこれが起こるのですか?CSS仕様への参照は大歓迎です。

マイケルベンジャミン

あなたが書いた:

問題:コンテンツは、をtop使用してもそのサイズ縮小されflex-shrink: 0、スクロールバーがポップアップしません。

実際、解決策はflex-shrink: 0です。では、問題は、どこに適用したのかということです。

これを適用した場合は機能しませんtop–プライマリコンテナ内のフレックスアイテムflex-basis: 33%(つまり、height: 33%この場合)–の長さtopはパーセンテージあるため、そのため、パーセンテージの長さが親コンテナを基準にしているため、自然に縮小/拡大します。

あなたは適用する必要があるflex-shrink: 0.content固定の高さ(とネストされたコンテナ内にフレックス項目- height: 500px/ flex-basis: 500px)。

したがって、これは機能します:

.content {
    height: 500px;
    flex-shrink: 0;
}

またはこれ:

.content {
    flex-basis: 500px;
    flex-shrink: 0;
}

または、さらに良いことに、これ:

.content {
    flex: 0 0 500px;  /* don't grow, don't shrink, stay fixed at 500px */
}

仕様から:

7.2。柔軟性のコンポーネント

flexショートハンドは一般的な用途に対応するために不特定のコンポーネントを正しくリセットするため、作成者は、ロングハンドプロパティを直接使用するのではなくショートハンドを使用して柔軟性を制御することをお勧めします

body {
  margin: 0;
}

.main {
  display: flex;
  flex-direction: column;
  height: 100vh;  
}

.top {
  display: flex;
  flex-direction: column;
  flex-basis: 33%;
  border-bottom: 1px solid #ccc;
  overflow: auto;
  justify-content: center;
  padding: 20px;
}

.bottom {
  overflow: auto;
  flex-basis: 67%;
}

.content {
  flex: 0 0 500px;
  background-color: #eee;
}
<div class="main">
  <div class="top">
    <div class="content">Content</div>
  </div>
  <div class="bottom"></div>
</div>


次に、2つ目の問題があります。これは、top要素の上部が切り取られ、スクロールでアクセスできないことです。これはjustify-content: center、コンテナが原因です。

これは既知の問題です。これは、フレックスautoマージンを使用して解決されます。

したがって、これの代わりに:

.top {
    display: flex;
    flex-direction: column;
    flex-basis: 33%;
    border-bottom: 1px solid #ccc;
    overflow: auto;
    /* justify-content: center;  <--- REMOVE */
    padding: 20px;
}

これを行う:

.content {
  flex: 0 0 500px;
  margin: auto 0; /*  top & bottom auto margins */
  background-color: #eee;
}

body {
  margin: 0;
}

.main {
  display: flex;
  flex-direction: column;
  height: 100vh;
}

.top {
  display: flex;
  flex-direction: column;
  flex-basis: 33%;
  border-bottom: 1px solid #ccc;
  overflow: auto; 
  /* justify-content: center;  USE AUTO MARGINS ON FLEX ITEM INSTEAD */
  padding: 20px;
}

.bottom {
  overflow: auto;
  flex-basis: 67%;
}

.content {
  flex: 0 0 500px;
  margin: auto 0;
  background-color: #eee;
}
<div class="main">
  <div class="top">
    <div class="content">Content</div>
  </div>
  <div class="bottom"></div>
</div>

完全な説明は次のとおりです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

フレックスボックスアイテムの子孫要素をスクロール可能にするにはどうすればよいですか?

分類Dev

フレックスアイテムの子にスクロールを追加するにはどうすればよいですか?

分類Dev

最小限のレスキューシステムだけでファイルをバックアップするにはどうすればよいですか?

分類Dev

フレックスアイテムをフレックスグローで画像に塗りつぶすにはどうすればよいですか?

分類Dev

Firefoxでオーバーレイスクロールバーを有効にするにはどうすればよいですか?

分類Dev

エスプレッソ:HorizontalScrollViewのアイテムにインデックスでスクロールするにはどうすればよいですか?

分類Dev

PyCharmで、スタートアップファイルではないファイルでアクティブになるブレークポイントを有効にするにはどうすればよいですか?

分類Dev

モバイルiOSでスムーズなスクロールを有効にするにはどうすればよいですか?

分類Dev

カスタムクリックアンドドラッグを角度で行うときに、デフォルトのカーソルスタイル(テキストセレクター)を無効にするにはどうすればよいですか?

分類Dev

テーブル内でフレックスアイテムをIE11でラップするにはどうすればよいですか?

分類Dev

divをクリックしてローカルストレージからアイテムを削除するにはどうすればよいですか?

分類Dev

Ubuntu 16.04 LTSでオーバーレイスクロールを有効にするにはどうすればよいですか?

分類Dev

メールボックスがいっぱいです。サーバーからアイテムを削除するにはどうすればよいですか?

分類Dev

フレックスアイテムがモバイルビューでオーバーフローしないようにするにはどうすればよいですか(最小幅:0が機能しません!)?

分類Dev

フレックスボックスアイテム間の最小スペースを設定するにはどうすればよいですか?

分類Dev

外部jqueryファイルをフェニックスフレームワークにロードするにはどうすればよいですか?

分類Dev

フクロウのカルーセルにdisplay:noneアイテムをスキップするにはどうすればよいですか?

分類Dev

R関数内のデータフレームをグローバルにアクセス可能にするにはどうすればよいですか?

分類Dev

ロボットフレームワークを使用して、デバイスにすでにインストールされているiOSアプリを自動化するにはどうすればよいですか?

分類Dev

フレックスボックス内のテキストを非表示にして、フレックスボックスアイテムにカーソルを合わせたときに表示するにはどうすればよいですか?

分類Dev

ボットフレームワークMessagesControllerで現在のダイアログスタックを解決するにはどうすればよいですか?

分類Dev

アクションバーの右側にあるバックプレスボタンを有効にするにはどうすればよいですか?

分類Dev

Yiiフレームワークでアップロードフォルダにアクセスするにはどうすればよいですか?

分類Dev

スタックせずにスクロールしてListViewの上部にアイテムを追加するにはどうすればよいですか?

分類Dev

フレックスアイテムに100%の幅を与えるにはどうすればよいですか?

分類Dev

Firebaseストレージにファイルをアップロードするときに「パブリックに共有」を有効にするにはどうすればよいですか?

分類Dev

クロスプラットフォームのモバイルアプリを作成するにはどうすればよいですか?

分類Dev

グリッドボタンの束を含むフレームにスクロールバーを追加するにはどうすればよいですか?

分類Dev

パーセンテージなしでフレックスアイテムのサイズを設定するにはどうすればよいですか?

Related 関連記事

  1. 1

    フレックスボックスアイテムの子孫要素をスクロール可能にするにはどうすればよいですか?

  2. 2

    フレックスアイテムの子にスクロールを追加するにはどうすればよいですか?

  3. 3

    最小限のレスキューシステムだけでファイルをバックアップするにはどうすればよいですか?

  4. 4

    フレックスアイテムをフレックスグローで画像に塗りつぶすにはどうすればよいですか?

  5. 5

    Firefoxでオーバーレイスクロールバーを有効にするにはどうすればよいですか?

  6. 6

    エスプレッソ:HorizontalScrollViewのアイテムにインデックスでスクロールするにはどうすればよいですか?

  7. 7

    PyCharmで、スタートアップファイルではないファイルでアクティブになるブレークポイントを有効にするにはどうすればよいですか?

  8. 8

    モバイルiOSでスムーズなスクロールを有効にするにはどうすればよいですか?

  9. 9

    カスタムクリックアンドドラッグを角度で行うときに、デフォルトのカーソルスタイル(テキストセレクター)を無効にするにはどうすればよいですか?

  10. 10

    テーブル内でフレックスアイテムをIE11でラップするにはどうすればよいですか?

  11. 11

    divをクリックしてローカルストレージからアイテムを削除するにはどうすればよいですか?

  12. 12

    Ubuntu 16.04 LTSでオーバーレイスクロールを有効にするにはどうすればよいですか?

  13. 13

    メールボックスがいっぱいです。サーバーからアイテムを削除するにはどうすればよいですか?

  14. 14

    フレックスアイテムがモバイルビューでオーバーフローしないようにするにはどうすればよいですか(最小幅:0が機能しません!)?

  15. 15

    フレックスボックスアイテム間の最小スペースを設定するにはどうすればよいですか?

  16. 16

    外部jqueryファイルをフェニックスフレームワークにロードするにはどうすればよいですか?

  17. 17

    フクロウのカルーセルにdisplay:noneアイテムをスキップするにはどうすればよいですか?

  18. 18

    R関数内のデータフレームをグローバルにアクセス可能にするにはどうすればよいですか?

  19. 19

    ロボットフレームワークを使用して、デバイスにすでにインストールされているiOSアプリを自動化するにはどうすればよいですか?

  20. 20

    フレックスボックス内のテキストを非表示にして、フレックスボックスアイテムにカーソルを合わせたときに表示するにはどうすればよいですか?

  21. 21

    ボットフレームワークMessagesControllerで現在のダイアログスタックを解決するにはどうすればよいですか?

  22. 22

    アクションバーの右側にあるバックプレスボタンを有効にするにはどうすればよいですか?

  23. 23

    Yiiフレームワークでアップロードフォルダにアクセスするにはどうすればよいですか?

  24. 24

    スタックせずにスクロールしてListViewの上部にアイテムを追加するにはどうすればよいですか?

  25. 25

    フレックスアイテムに100%の幅を与えるにはどうすればよいですか?

  26. 26

    Firebaseストレージにファイルをアップロードするときに「パブリックに共有」を有効にするにはどうすればよいですか?

  27. 27

    クロスプラットフォームのモバイルアプリを作成するにはどうすればよいですか?

  28. 28

    グリッドボタンの束を含むフレームにスクロールバーを追加するにはどうすればよいですか?

  29. 29

    パーセンテージなしでフレックスアイテムのサイズを設定するにはどうすればよいですか?

ホットタグ

アーカイブ