css:浮动定位(float)以及清除浮动

1.浮动定位的特点:

  • 脱离文档流、不占据位置,不受默认排列方式的控制(左到右、上到下)
  • 不论怎么浮动,依旧在盒子里
  • 元素会停靠在父元素的左边或右边,或者停靠在已经浮动元素的左边或者右边
  • 块级元素浮动之后,宽度自适应不再是100%
  • 行内元素浮动之后,会变为块级元素

2.浮动属性

  • float:none:默认,没有设置浮动定位
  • float:left:左浮动
  • float:right:右浮动

3.简单例子

<body>
    <div class="mydiv">
        <div class="d1">第一个</div></div>
        <div class="d2">第二个</div>
        <div class="d3">第三个</div>
        <div class="d4">第四个</div>
        <div class="d5">第五个</div>
    </div>
</body>

没有设置前的效果:
在这里插入图片描述
分别给四个盒子设置做浮动之后:

   .d1,.d2,.d3,.d4,.d5{
        width: 100px;
        height: 100px;
        float: left;
    }
    .d1{
        background-color:blue;
    }
    .d2{
        background-color:pink;
    }
    .d3{
        background-color:green;
    }
    .d4{
        background-color:purple;
    }
    .d5{
        background-color:red;
    }
    
    
</style>
<body>
    <div id="mydiv">
        <div class="d1">第一个</div></div>
        <div class="d2">第二个</div>
        <div class="d3">第三个</div>
        <div class="d4">第四个</div>
        <div class="d5">第五个</div>
    </div>
</body>

效果图:
在这里插入图片描述

4.父元素塌陷

因为浮动定位是脱离文档流的,不占据位置,如果一个元素的子元素设置了浮动,且该元素没有设置高度,那么该元素也就是父元素的高度就会变成0,这就是父元素高度塌陷。
比如上述例子中的mydiv盒子,我们加上边框之后就能清楚地看到效果:
在这里插入图片描述
在这里插入图片描述
那么在这种情况下,我们就需要清除浮动。

5.清除浮动(解决父元素塌陷)

  1. 给父元素设置高度(会固定高度,一般不建议使用)
	<style>
       #d{
      
      
              /*1.给父元素设置高度 height*/
            height: 300px;
        }
        #d1{
      
      
        width: 80px;
         height: 80px;
         float: left;
         background-color: red;
       }
        #d2{
      
      
            float:left;
            width: 100px;
            height:80px;
            background-color: green;
        }
        #d3{
      
      
            float:left;
            width: 120px;
            height:80px;
            background-color: blue;
        }

        
    </style>
<body>
<div class="clearDiv" id="d">
    <div id="d1">这是div1</div>
    <div id="d2">这是div2</div>
    <div id="d3">这是div3</div>
</div>
</body>
  1. 给父元素设置一个overflow(需要溢出的部分也会被隐藏,不推荐使用)
	<style>
       #d{
      
      
              /*3.给父元素设置一个overflow*/
            overflow: hidden;    /*溢出隐藏*/

        }
        #d1{
      
      
        width: 80px;
         height: 80px;
         float: left;
         background-color: red;
       }
        #d2{
      
      
            float:left;
            width: 100px;
            height:80px;
            background-color: green;
        }
        #d3{
      
      
            float:left;
            width: 120px;
            height:80px;
            background-color: blue;
        }

    </style>
<body>
<div class="clearDiv" id="d">
    <div id="d1">这是div1</div>
    <div id="d2">这是div2</div>
    <div id="d3">这是div3</div>
</div>
</body>
  1. 给父元素添加一个最小的儿子(添加一个空的块级元素) 给这个儿子设置clear:both (添加无意义的语义,不利于后期维护,不推荐)
 	<style>
       /*3.给父元素添加一个最小的儿子,给这个儿子添加clear:both;*/
        .clear{
      
      
          clear: both;
       } 
       #d1{
      
      
        width: 80px;
         height: 80px;
         float: left;
         background-color: red;
       }
        #d2{
      
      
            float:left;
            width: 100px;
            height:80px;
            background-color: green;
        }
        #d3{
      
      
            float:left;
            width: 120px;
            height:80px;
            background-color: blue;
        }

    </style>
<body>
<div class="clearDiv" id="d">
    <div id="d1">这是div1</div>
    <div id="d2">这是div2</div>
    <div id="d3">这是div3</div>
   <div class="clear"></div>
</div>
</body>
  1. 给父元素使用CSS的:after伪元素(推荐使用)
	<style>
        /* 4.给父元素设置after 给after设置clear:both */
       .clearDiv:after{
      
      
            content:'' ;
            display: block;
            clear: both;
            }
            #d1{
      
      
        width: 80px;
         height: 80px;
         float: left;
         background-color: red;
       }
        #d2{
      
      
            float:left;
            width: 100px;
            height:80px;
            background-color: green;
        }
        #d3{
      
      
            float:left;
            width: 120px;
            height:80px;
            background-color: blue;
        }

    </style>
<body>
<div class="clearDiv" id="d">
    <div id="d1">这是div1</div>
    <div id="d2">这是div2</div>
    <div id="d3">这是div3</div>
</div>
</body>

猜你喜欢

转载自blog.csdn.net/qq_50487248/article/details/127229668