Prevent child div from overflowing parent div

前端 未结 2 397
遥遥无期
遥遥无期 2020-12-17 14:05

I have a parent div containing a header section and a body section. The parent div has a maximum height, but no minimum height.

See this example: https://jsfiddle.ne

相关标签:
2条回答
  • 2020-12-17 15:02

    You could simply set the container to flexbox.

    #cont {
      padding: 5px;
      background-color: red;
      max-height: 150px;
      max-width: 50%;
      display: flex; /*added*/
      flex-direction: column; /*added*/
    }
    

    jsFiddle

    #cont {
      padding: 5px;
      background-color: red;
      max-height: 150px;
      max-width: 50%;
      display: flex; /*added*/
      flex-direction: column; /*added*/
    }
    #body {
      background-color: blue;
      overflow-y: auto;
      overflow-x: hidden;
      flex: 1; /* added */
    }
    #head {
      background-color: green;
    }
    <div id='cont'>
      <div id='head'>
        <div>Head</div>
      </div>
      <div id='body'>
        <div>Body</div>
        <div>Body</div>
        <div>Body</div>
        <div>Body</div>
        <div>Body</div>
        <div>Body</div>
        <div>Body</div>
        <div>Body</div>
        <div>Body</div>
        <div>Body</div>
        <div>Body</div>
        <div>Body</div>
      </div>
    </div>

    Another option would be using CSS table, some extra HTML code is needed. And max-height doesn't work with table layout, so use height instead.

    jsFiddle

    #cont {
      padding: 5px;
      background-color: red;
      height: 150px;
      width: 50%;
      display: table;
    }
    #head,
    #body {
      display: table-row;
    }
    #head > div,
    #body > div {
      display: table-cell;
      position: relative;
    }
    #body > div {
      height: 100%;
    }
    #body > div > div {
      position: absolute;
      left: 0;
      right: 0;
      top: 0;
      bottom: 0;
      overflow-y: auto;
      overflow-x: hidden;
    }
    #body {
      background-color: blue;
      overflow-y: auto;
      overflow-x: hidden;
    }
    #head {
      background-color: green;
    }
    <div id='cont'>
      <div id='head'>
        <div>Head</div>
      </div>
      <div id='body'>
        <div>
          <div>
            <div>Body</div>
            <div>Body</div>
            <div>Body</div>
            <div>Body</div>
            <div>Body</div>
            <div>Body</div>
            <div>Body</div>
            <div>Body</div>
            <div>Body</div>
            <div>Body</div>
            <div>Body</div>
            <div>Body</div>
          </div>
        </div>
      </div>
    </div>

    0 讨论(0)
  • 2020-12-17 15:05

    i updated your jsfiddle check it out

    jsfiddle

    #cont {
      padding: 5px;
      background-color: red;
      max-height: 150px;
      max-width: 50%;
      overflow-y: scroll;
    }
    #body {
      background-color: blue;
    
    }
    #head {
      background-color: green;
    }
    
    0 讨论(0)
提交回复
热议问题