【问题标题】:Child elements expanding outside parent element with flex使用 flex 在父元素之外扩展的子元素
【发布时间】:2021-08-25 08:00:58
【问题描述】:

我使用 CSS flex 并排显示两个 div,它们包含在一个包装器中,我一直在尝试让 #myClippetWrapper 内部是我设置高度的地方,所以在 #myClippetWrapper 的子元素中我可以只需设置height: 100%;

但是你可以通过运行sn-p 看到#myClippetWrapper 内的所有元素都超出了主要部分,它们都挂在主要内容div 之外?

我不想使用overflow: auto,因为我不想要滚动条,我只需要#myClippetWrapper 的子元素不在主部分/ div 之外。

main {
  margin: 0 auto;
  margin-top: 10px;
  margin-bottom: 10px;
  padding: 8px;
  background-color: red;
  width: 100%;
  max-width: 50%;
  height: auto;
}

#myClippetWrapper {
  display: flex;
  height: 700px;
}

#clippetNav {
  padding: 10px;
  width: 250px;
  height: 100%;
  background-color: #222222;
  margin-right: 10px;
}

#codeAndNotesWrapper {
  display: flex;
  width: 100%;
}

#codeAndNotesWrapper>div {
  flex-basis: 100%;
  height: 100%;
}

#codeView {
  padding: 10px;
  /*flex: 0 0 40%;*/
  height: 100%;
  background-color: #222222;
  margin-right: 10px;
}

#noteView {
  padding: 10px;
  /*flex: 1;*/
  height: 100%;
  background-color: #222222;
}

#codeNotesEditor {
  height: 100%;
  background-color: #EAEAEA;
}
<main>
  <div id="myClippetWrapper">

    <div id="clippetNav">

    </div>

    <div id="codeAndNotesWrapper">

      <div id="codeView">

      </div>

      <div id="noteView">

        <div id="codeNotesEditor">

        </div>

      </div>

    </div>

  </div>
</main>

【问题讨论】:

    标签: html css flexbox


    【解决方案1】:

    在许多情况下,flexbox 消除了使用百分比高度的需要。

    弹性容器的初始设置是align-items: stretch。这意味着在flex-direction: row 中(就像在您的代码中一样)弹性项目将自动扩展容器的整个高度。

    或者,您可以使用flex-direction: column,然后将flex: 1 应用于子级,这也可以使弹性项目扩展父级的整个高度。

    main {
      max-width: 50%;
      margin: 10px auto;
      padding: 8px;
      background-color: red;
    }
    
    #myClippetWrapper {
      display: flex;
      height: 700px;
    }
    
    #clippetNav {
      display: flex;
      padding: 10px;
      width: 250px;
      margin-right: 10px;
      background-color: #222222;
    }
    
    #codeAndNotesWrapper {
      display: flex;
      width: 100%;
    }
    
    #codeAndNotesWrapper>div {
      display: flex;
      flex-basis: 100%;
    }
    
    #codeView {
      display: flex;
      padding: 10px;
      margin-right: 10px;
      background-color: #222222;
    }
    
    #noteView {
      display: flex;
      flex-direction: column;
      padding: 10px;
      background-color: #222222;
    }
    
    #codeNotesEditor {
      flex: 1;
      background-color: #EAEAEA;
    }
    <main>
      <div id="myClippetWrapper">
        <div id="clippetNav"></div>
        <div id="codeAndNotesWrapper">
          <div id="codeView"></div>
          <div id="noteView">
            <div id="codeNotesEditor"></div>
          </div>
        </div>
      </div>
    </main>

    jsFiddle

    【讨论】:

      【解决方案2】:

      添加

       box-sizing: border-box;
      

      到您的子元素。这将使填充显示在盒子的内部而不是外部,并且不会增加整体尺寸。

      【讨论】:

        【解决方案3】:

        添加box-sizing 属性..

        * {
          box-sizing: border-box;
        }
        
        main {
          margin: 0 auto;
          margin-top: 10px;
          margin-bottom: 10px;
          padding: 8px;
          background-color: red;
          width: 100%;
          max-width: 50%;
          height: auto;
        }
        
        #myClippetWrapper {
          display: flex;
          height: 700px;
        }
        
        #clippetNav {
          padding: 10px;
          float: left;
          width: 250px;
          height: 100%;
          background-color: #222222;
          margin-right: 10px;
        }
        
        #codeAndNotesWrapper {
          display: flex;
          width: 100%;
        }
        
        #codeAndNotesWrapper>div {
          flex-basis: 100%;
          height: 100%;
        }
        
        #codeView {
          padding: 10px;
          /*flex: 0 0 40%;*/
          height: 100%;
          background-color: #222222;
          margin-right: 10px;
        }
        
        #noteView {
          padding: 10px;
          /*flex: 1;*/
          height: 100%;
          background-color: #222222;
        }
        
        #codeNotesEditor {
          height: 100%;
          background-color: #EAEAEA;
        }
        <main>
          <div id="myClippetWrapper">
        
            <div id="clippetNav">
        
        
        
            </div>
        
            <div id="codeAndNotesWrapper">
        
              <div id="codeView">
        
        
        
              </div>
        
              <div id="noteView">
        
                <div id="codeNotesEditor">
        
                </div>
        
              </div>
        
            </div>
        
          </div>
        </main>

        【讨论】:

        • 是否建议在所有元素上设置 box-sizing ?
        • 我已经做了一段时间没有问题——这里有一些信息:paulirish.com/2012/box-sizing-border-box-ftw
        • 如果您使用外部 html,您很可能会遇到问题,因为这样做不是标准的。
        • @StevenJohnston 外部 HTML 是什么意思?
        • 来自一个框架,或者可能是您在 stackoverflow 上找到的问题的解决方案。但是,如果您了解它的工作原理(您应该了解它),这绝对不是一个难解决的问题。
        【解决方案4】:

        设置你的一个重要因素 display: flex; 是填充和高度可以使一个讨厌的一对; 考虑这个例子:

        display: flex;
        height: 100%;
        padding-top: 1vh;
        

        这实际上会使您的元素成为页面高度,再加上 1% 的视图高度,当然还会为您提供一个比其父元素高的子元素。

        这不是对您的问题的直接回答,而是对寻找这里的人们为什么他们的子元素可能会出现问题的回答。

        【讨论】:

        • 评论比答案更适合
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-06-28
        • 2018-11-06
        • 1970-01-01
        • 1970-01-01
        • 2020-05-27
        • 1970-01-01
        • 2013-04-06
        相关资源
        最近更新 更多