How to fit a div's height to wrap around its floated children

前端 未结 5 1992
刺人心
刺人心 2020-12-25 13:06

I have a div wrapped around two children, one floated left and the other right. I want to put a border and background around the children, but the div has 0 height since it

相关标签:
5条回答
  • 2020-12-25 13:26

    This is a common issue when working with floats. There are several common solutions, which I have ordered by personal preference (best approach first):

    1. Use the ::after CSS pseudo element. This is know as the 'clearfix', and works IE8 and up. If you need compatibility with earlier versions of IE, this answer should help. Example.

      .parentelement::after {
          content: "";
          display: table;
          clear: both;
      }
      
    2. Add the two floats into a container with the CSS attribute overflow: auto or overflow: hidden. However, this approach can cause issues (e.g. when a tooltip overlaps the edges of the parent element a scrollbar will appear). Example.

      <div style="overflow: auto">
          <div style="float: left"></div>
          <div style="float: left"></div>
      </div>
      
    3. Add a set height to the parent element. Example.

      <div style="height: 200px">
          <div style="float: left"></div>
          <div style="float: left"></div>
      </div>
      
    4. Make the parent element a float. Example.

      <div style="float: left">
          <div style="float: left"></div>
          <div style="float: left"></div>
      </div>
      
    5. Add a div after the floats with clear: both. Example.

      <div style="float: left"></div>
      <div style="float: left"></div>
      <div style="clear: both"></div>
      
    0 讨论(0)
  • 2020-12-25 13:40

    Try adding overflow: hidden to your #wrap div.

    0 讨论(0)
  • 2020-12-25 13:40

    Just add one more div with style clear:both before closing a outer div i.e. here "wrap"

    --Sample code--

    <div id="wrap">
        <div id="left">
            <p>some content at left</p>
        </div>
        <div id="right">
            <p>some content at right</p>
        </div>
        <div style="clear:both"></div>
    </div>
    
    0 讨论(0)
  • 2020-12-25 13:44

    Add overflow: hidden; to #wrap. This is a clear fix. Here's some documentation about it: http://positioniseverything.net/easyclearing.html

    LE: There are also multiple ways you can achieve this, depending of the browser compatibilty:

    1. Add overflow: hidden to the parent container.

    #wrap { overflow: hidden; }

    1. Use a pseudo-element to add clear: both .

    #wrap:after { clear: both; content: ""; display: table;}

    1. The most commonly used tehnique is to add an extra as the last element of the parent container.

    <div style="clear:both"></div>

    I preffer not to use the 3rd one as you get extra HTML markup.

    0 讨论(0)
  • 2020-12-25 13:51

    I've come to start using this "micro-clearfix" solution from Nicolas Gallagher.

    http://nicolasgallagher.com/micro-clearfix-hack/

    /* For modern browsers */
    .cf:before,
    .cf:after {
        content:"";
        display:table;
    }
    
    .cf:after {
        clear:both;
    }
    
    /* For IE 6/7 (trigger hasLayout) */
    .cf {
        *zoom:1;
    }
    

    Just add that to your CSS and any floated element, add the "cf" class to the wrapper of any any element that has floated children.

    0 讨论(0)
提交回复
热议问题