Bootstrap 4を使用しています(現在はalpha-6を使用しています)。
この状況があります:
<body>
<!-- HERE I HAVE one div automatically generated with randomly ID and class -->
<div class="bigone">
<div class="container-fluid">
<div class="header">
My header
</div>
</div>
<div class="mybar">
Nav bar
</div>
<div class="main">
<div class="container-fluid">
<div class="row">
<div class="col-6">
<div class="card">
<div class="card-header">
Card Header
</div>
<div class="list-group list-group-flush">
<a href="#" class="list-group-item list-group-item-action"><b>FIRST LINK</b></a>
<a href="#" class="list-group-item list-group-item-action">Dapibus ac facilisis in</a>
<a href="#" class="list-group-item list-group-item-action">Dapibus ac facilisis in</a>
<a href="#" class="list-group-item list-group-item-action">Morbi leo risus</a>
<a href="#" class="list-group-item list-group-item-action disabled"><b>LAST LINK</b></a>
</div>
<div class="card-footer">
Card Footer
</div>
</div>
</div>
<div class="col-6">
<h1>FIRST LINE</h1> So many words, so many words. So many words, so many words. So many words, so many words.
<br> So many words, so many words. So many words, so many words. So many words, so many words.
<br> So many words, so many words. So many words, so many words. So many words, so many words.
<br>
<h1>LAST LINE</h1>
</div>
</div>
</div>
</div>
<div class="footer">
Footer
</div>
</div>
<!-- HERE THAT DIV CLOSED -->
</body>
これはcssです。
.bigone {
display: flex;
min-height: 100vh;
flex-direction: column;
}
.main {
flex: 1;
}
plnkrのデモがあります: https://plnkr.co/edit/Q9PQIj8uDFY80bxJGks
ページコンテンツが空の場合、フッターを下に配置する必要があります。そのため、.bigone { height: 100vh; }
とBootstrap Flexbox alignユーティリティ)など:<div class="bigone d-flex flex-column">
ここで、card
のlist-group
と、スクロール可能な「非常に多くの単語」を含むcol-6
が必要です。
一言で言えば:BODYはスクロールバーを持ってはいけません。
ヘッダーとフッターの高さは固定されていません。変更されます。
How to?私はflexboxエキスパートではありません。
IEは必要ありません。Chromeだけです。
[〜#〜] important [〜#〜]:
このようなものでカードの高さを固定することはできません:
height: calc(100vh - header.height - footer.height - etc...);
ヘッダー、フッターなどの高さが動的に変化するためです。
問題の写真:
spec によると、設定flex: 1
(.main
要素上)はflex: 1 1 0
と同等で、以下の短縮形です。
flex-grow: 1
flex-shrink: 1
flex-basis: 0
ただし、何らかの理由で、flex: 1
がコードで期待どおりに機能していません。 (質問ごとに、Chromeでのみチェックしています)。
ただし、.main
に完全な省略形を指定し、フレックスコンテナにしてoverflow
を追加すると、レイアウトが機能しているように見えます。
.main {
flex: 1 1 0; /* flex: 1, which you had before, is equivalent but doesn't work */
display: flex;
flex-direction: column;
overflow-y: scroll;
}
参照:
[〜#〜] edit [〜#〜](質問への変更に基づいて)
上記の私の答えは、body
からスクロールバーを削除し、.main
セクションに垂直スクロールバーを提供します。
.main
セクションの各列で垂直スクロールバーを使用できるようにするには、次の調整を行います。
.main {
flex: 1 1 0;
display: flex;
}
.container-fluid {
display: flex;
}
.col-6 {
overflow-y: auto;
}
私が持っています
<div class="fixed-top collapse show wrapper">
<ul class="list-group bg-white menu">
</ul>
</div>
私はそれを修正しました
.wrapper {
margin-top: 48px; /* place it under navbar */
height: 100vh;
overflow: scroll;
padding-bottom: 48px; /* compensate margin top */
}