画面の一部のみ縦スクロールを発生させる際に、「高さを固定しない方法で、画面の縦幅いっぱいにスクロールでお願いします!」という要望があり、実装する時少し時間がかかったので解決方法をまとめました。
画面の一部のみスクロールさせる方法で、調べると良くあるCSSが出てきます。
.scroll{
height: 80px;
overflow: auto;
}
高さをpxなどで固定するやつですね。
デザインなどで高さが指定されているものでしたら、このCSSで良いと思いますが、今回の要望に当てはまりません。
解決方法のコード
See the Pen スクロール by さえ (@sae1212) on CodePen.
flexboxを使って実現しました。
コードの解説としては以下です。
解説
- html,bodyにheight: 100%;をかけて縦幅いっぱいの高さにする。
- 親要素にflexをかける→横並びになるので、flex-direction: column;で縦並びにする。
- 親要素にはheight: 100%;をかけて縦幅いっぱいの高さにする。
- 子要素にflex: 1;をかけて横幅いっぱいにする。
- 子要素にoverflow: auto;をかけて、はみ出る部分をスクロールさせる。
コードを一つ一つ見てみるとなるほど、と思うのですが、なかなか思いつかないのですよね…!
入れ子にする場合
入れ子にする場合は以下です。
See the Pen スクロール(入れ子ver) by さえ (@sae1212) on CodePen.
入れ子にする要素は、「親要素でもあり、子要素でもある」ということから、親要素と子要素両方のCSSをかけてあげます。
参考サイト
以下のサイトを参考にさせていただきました!