认识浮动布局

浮动布局

一、认识浮动

  • float 属性可以指定一个元素应沿其容器的左侧或右侧放置,允许文本和内联元素环绕它。
    • float 属性最初只用于在一段文本内浮动图像, 实现文字环绕的效果;
    • 但是早期的CSS标准中并没有提供好的左右布局方案, 因此在一段时间里面它成为网页多列布局的最常用工具;
  • 绝对定位、浮动都会让元素脱离标准流,以达到灵活布局的效果
  • 可以通过float属性让元素产生浮动效果,float的常用取值
    • none:不浮动,默认值
    • left:向左浮动
    • right:向右浮动

二、浮动规则

  • 浮动规则一

    • 元素一旦浮动后, 脱离标准流
      • 朝着向左或向右方向移动,直到自己的边界紧贴着包含块(一般是父元素)或者其他浮动元素的边界为止

      • 在这里插入图片描述

      • 定位元素会层叠在浮动元素上面

      • 在这里插入图片描述

      • 在这里插入图片描述

  • 浮动规则二

    • 如果元素是向左(右)浮动,浮动元素的左(右)边界不能超出包含块的左(右)边界
    • 在这里插入图片描述
  • <!DOCTYPE html>
    <html lang="en">
    
    <head>
      <meta charset="UTF-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Document</title>
    
      <style>
        body {
          margin: 0;
          padding: 0;
        }
    
        .box {
          width: 300px;
          height: 300px;
    
          margin: 0 auto;
    
          background-color: yellow;
          position: relative;
        }
    
        .box1 {
          float: left;
          background-color: #f00;
        }
    
        .box2 {
          float: right;
          background-color: #0f0;
        }
    
        .box span {
          position: absolute;
          left: 0;
          top: 0;
          background-color: bisque;
        }
      </style>
    
    </head>
    
    <body>
      <div class="box">
        <div class="box1">1</div>
        <div class="box2">2</div>
        <span>133</span>
      </div>
    </body>
    
    </html>
    
  • 浮动规则三

    • 浮动元素之间不能层叠

      • 如果一个元素浮动,另一个浮动元素已经在那个位置了,后浮动的元素将紧贴着前一个浮动元素(左浮找左浮,右浮找右浮)

      • 如果水平方向剩余的空间不够显示浮动元素,浮动元素将向下移动,直到有充足的空间为止

      • 在这里插入图片描述

      • 在这里插入图片描述

      • <!DOCTYPE html>
        <html lang="en">
        
        <head>
          <meta charset="UTF-8">
          <meta http-equiv="X-UA-Compatible" content="IE=edge">
          <meta name="viewport" content="width=device-width, initial-scale=1.0">
          <title>Document</title>
        
          <style>
            body {
              margin: 0;
              padding: 0;
            }
        
            .box {
              width: 300px;
              height: 300px;
              background-color: aqua;
            }
        
            .item {
              width: 100px;
              height: 100px;
              background-color: #f00;
            }
        
            .box1 {
              float: left;
              background-color: #0f0;
              margin-left: 20px;
            }
        
            .box2 {
              float: left;
            }
        
            .box3 {
              float: left;
              width: 200px;
              background-color: #00f;
            }
          </style>
        
        </head>
        
        <body>
        
          <div class="box">
            <div class="box1 item">1</div>
            <div class="box2 item">2</div>
            <div class="box3 item">3</div>
          </div>
        
        </body>
        
        </html>
        
      • 浮动规则四

        • 浮动元素不能与行内级内容层叠,行内级内容将会被浮动元素推出

          • 比如行内级元素、inline-block元素、块级元素的文字内容
        • 在这里插入图片描述

        • 在这里插入图片描述

        • <!DOCTYPE html>
          <html lang="en">
          
          <head>
            <meta charset="UTF-8">
            <meta http-equiv="X-UA-Compatible" content="IE=edge">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <title>Document</title>
            <style>
              .box {
                width: 300px;
                height: 300px;
                background-color: #f00;
              }
          
              .box strong {
                float: left;
              }
            </style>
          
          </head>
          
          <body>
          
            <div class="box">
              <span>我是span元素</span>
              <strong>我是strong元素</strong>
              <div>我是块级元素</div>
            </div>
          
          </body>
          
          </html>
          
  • 浮动规则五

    • 行内级元素、inline-block元素浮动后,其顶部将与所在行的顶部对齐
    • 在这里插入图片描述

三、浮动的常用场景

  • 解决行内级元素、inline-block元素的水平间隙问题

  • 在这里插入图片描述

  • <!DOCTYPE html>
    <html lang="en">
    
    <head>
      <meta charset="UTF-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Document</title>
    
      <style>
        .box {
          color: #000;
          /* font-size: 0; */
          /* display: flex; */
        }
    
        .box span {
          background-color: #0f0;
          float: left;
          /* font-size: 16px; */
    
          /* 空隙的产生原因:是元素换行之间的空格被浏览器识别解析为空格导致
            1、删掉元素之间换行(不推荐)
            2、父元素设置font-size为0,子元素重新设置font-size大小
            3、使用浮动,统一方向浮动
            4、使用flex布局
          */
        }
      </style>
    
    </head>
    
    <body>
    
      <div class="box">
        <span>aaa</span>
        <span>bbb</span>
        <span>ccc</span>
      </div>
    
    </body>
    
    </html>
    

四、浮动的问题 –高度塌陷

  • 由于浮动元素脱离了标准流,变成了脱标元素,所以不再向父元素汇报高度
    • 父元素计算总高度时,就不会计算浮动子元素的高度,导致了高度坍塌的问题
  • 解决父元素高度坍塌问题的过程,一般叫做清浮动(清理浮动、清除浮动)
  • 清浮动的目的是
    • 让父元素计算总高度的时候,把浮动子元素的高度算进去
  • 如何清除浮动呢? 使用clear属性
    • clear属性是做什么的呢?
      • clear 属性可以指定一个元素是否必须移动(清除浮动后)到在它之前的浮动元素下面;
      • clear的常用取值
        • left:要求元素的顶部低于之前生成的所有左浮动元素的底部
        • right:要求元素的顶部低于之前生成的所有右浮动元素的底部
        • both:要求元素的顶部低于之前生成的所有浮动元素的底部
        • none:默认值

1.清除浮动的方法

  • 事实上我们有很多方法可以清除浮动

  • 方法一: 给父元素设置固定高度

    • 扩展性不好(不推荐)
  • 方法二: 在父元素最后增加一个空的块级子元素,并且让它设置clear: both

    • 会增加很多无意义的空标签,维护麻烦
    • 违反了结构与样式分离的原则(不推荐)
  • 方法三: 给父元素添加一个伪元素

    • 推荐;

    • 编写好后可以轻松实现清除浮动;

    • 给父元素增加::after伪元素

    • 纯CSS样式解决,结构与样式分离(推荐)

    • 在这里插入图片描述

    • <!DOCTYPE html>
      <html lang="en">
      
      <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
      
        <style>
          /*
            解决高度塌陷的问题
            
           */
          .wrap {
            background-color: #f00;
            /* 方式一:给父元素固定高度(不推荐)  */
            /* height: 300px; */
      
          }
      
          /* 方式三:给父元素添加一个伪元素(推荐) 
            写好后可以轻松实现清除浮动;
            */
          .clear-fix::after {
            content: "";
            display: block;
            clear: both;
      
            visibility: hidden;
            /* 浏览器兼容 */
            height: 0;
            /* 浏览器兼容 */
          }
      
          .clear-fix {
            *zoom: 1;
            /* 兼容6、7 */
          }
      
          .box {
            width: 100px;
            height: 200px;
            background-color: #0f0;
            /* 浮动 */
            float: left;
          }
      
          /* 方式二:给父元素最后增加一个空的块级子元素,并且让它设置clear: both(不推荐)  
              增加很多无意义的标签
             违反了结构与样式分离的原则
           */
          /* .clear {
            clear: both;
          } */
        </style>
      
      </head>
      
      <body>
      
        <div class="wrap clear-fix">
          <div class="box">哈哈哈哈哈哈哈哈哈哈哈哈哈哈</div>
          <!-- <div class="clear"></div> -->
        </div>
      
      </body>
      
      </html>
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值