我们经常使用flex:1来动态分配父容器剩余空间,这时候如果要在容器上增加滚动条,使用overflow: auto可能会失效。

原因:

一般原因:因为容器所在的父容器采用了默认样式overflow: visible,即允许内容溢出到父容器外,那么就会对使用flex: 1的容器没有给到一个固定的高度,所以我们针对这种情况,只需要在父容器添加overflow: auto来让父容器创建BFC,让内容不会溢出。

实例代码

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  7. <title>Document</title>
  8. </head>
  9. <style>
  10. body {
  11. margin: 0;
  12. }
  13. .container {
  14. display: flex;
  15. flex-direction: column;
  16. height: 100vh;
  17. overflow: hidden;
  18. }
  19. .parent1 {
  20. height: 80px;
  21. background: red;
  22. }
  23. .parent2 {
  24. flex: 1;
  25. display: flex;
  26. flex-direction: column;
  27. /* 父容器创建BFC,一般使用overflow:auto */
  28. overflow: auto;
  29. }
  30. .child1 {
  31. height: 80px;
  32. background: green;
  33. }
  34. .child2 {
  35. flex: 1;
  36. overflow: auto;
  37. background: greenyellow;
  38. }
  39. .child2-sub {
  40. height: 1000px;
  41. width: 100px;
  42. background: orange;
  43. }
  44. </style>
  45. <body>
  46. <div class="container">
  47. <div class="parent1"></div>
  48. <div class="parent2">
  49. <div class="child1"></div>
  50. <div class="child2">
  51. <div class="child2-sub"></div>
  52. </div>
  53. </div>
  54. </div>
  55. </body>
  56. </html>