html-Flex grow 1不允许正确滚动

前端之家收集整理的这篇文章主要介绍了html-Flex grow 1不允许正确滚动 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我遇到的是Flex的一个小问题.我正在尝试获得一个简单的布局(如链接的jsfiddle中所示).但是,当右侧的div(红色)溢出其高度时,该元素将在视口中溢出,并且仅当它在视口的高度中溢出时才可滚动.

JSfiddle

我很确定这是因为我使用的高度是:100%;包含很多元素,但我需要它们尽可能大(以完全填充视口高度).

我想要的是将视口完全由以下三个部分填充:导航,左侧栏和右侧内容(请参见下图).正确的内容部分在视口溢出时应在何处滚动.

What I want

因此,得出一个结论.这里的问题是,可滚动内容首先溢出视口,并且当div与视口高度相同时(看起来像),它就开始可滚动.我显然希望div在视口溢出时可滚动.

下图基本上描述了问题所在和我想要的内容.

Left: what's wrong. Right: What I want

我将如何实现?谢谢你的时间.

代码(在JSFiddle中也可用)

的HTML
    
      

  1. <div id="content-container">
  2. <div id="content">
  3. <div id="left">
  4. IM LEFT
  5. </div>
  6. <div id="right">
  7. <div id="inner">
  8. IM RIGHT
  9. </div>
  10. IM RIGHT
  11. </div>
  12. </div>
  13. </div>
  14. </div>

的CSS

  1. html,body {
  2. height: 100%;
  3. width: 100%;
  4. margin: 0;
  5. padding: 0;
  6. overflow: hidden;
  7. }
  8. #main {
  9. height: 100%;
  10. background: black;
  11. display: flex;
  12. flex-direction: column;
  13. justify-content: flex-start;
  14. align-items: flex-start;
  15. width: 100vw;
  16. height: 100vh;
  17. }
  18. #main nav {
  19. background: orange;
  20. width: 100%;
  21. height: 96px;
  22. }
  23. #main #content-container {
  24. background: darkgreen;
  25. color: white;
  26. width: 100%;
  27. flex-grow: 1;
  28. max-height: 100%;
  29. }
  30. #main #content-container #content {
  31. display: flex;
  32. flex-direction: row;
  33. justify-content: flex-start;
  34. align-items: flex-start;
  35. height: 100%;
  36. max-height: 100%;
  37. }
  38. #main #content-container #content #left {
  39. background: darkblue;
  40. width: 30%;
  41. height: 100%;
  42. }
  43. #main #content-container #content #right {
  44. background: darkred;
  45. height: 100%;
  46. flex-grow: 1;
  47. overflow-y: scroll;
  48. }
  49. #main #content-container #content #right #inner {
  50. font-size: 25rem;
  51. }
最佳答案
您可以像下面那样简化代码

  1. body {
  2. margin: 0;
  3. }
  4. #main {
  5. height: 100vh; /*full height*/
  6. background: black;
  7. display: flex;
  8. flex-direction: column;
  9. }
  10. #main nav {
  11. background: orange;
  12. height: 96px; /*fixed height*/
  13. }
  14. #content-container {
  15. background: darkgreen;
  16. color: white;
  17. flex-grow: 1; /*fill the remaining height*/
  18. min-height:0; /*enable the shrink*/
  19. }
  20. #content {
  21. display: flex;
  22. flex-direction: row;
  23. height: 100%;
  24. }
  25. #left {
  26. background: darkblue;
  27. width: 30%;
  28. }
  29. #right {
  30. background: darkred;
  31. overflow:auto;
  32. }
  33. /*Irrelevant*/
  34. #inner {
  35. font-size: 25rem;
  36. }
  1. <div id="main">
  2. <nav>
  3. <ul>
  4. <li>
  5. <a href="/">Home</a>
  6. </li>
  7. <li>
  8. <a href="/games">Games</a>
  9. </li>
  10. <li>
  11. <a href="/create">Create</a>
  12. </li>
  13. </ul>
  14. </nav>
  15. <div id="content-container">
  16. <div id="content">
  17. <div id="left">
  18. IM LEFT
  19. </div>
  20. <div id="right">
  21. <div id="inner">
  22. IM RIGHT
  23. </div>
  24. IM RIGHT
  25. </div>
  26. </div>
  27. </div>
  28. </div>

猜你在找的HTML相关文章