float浮动及高度塌陷问题


-

float浮动

元素同行显示

  1. display:inline-block:盒子和盒子之间有5px间距,存在兼容性问题

  2. 浮动

浮动

  • 定义:通过浮动可以使一个元素向其父元素的左侧或右侧移动

  • 使用float属性来设置元素的浮动

  • 可选值:

    none:默认值,元素不浮动

    left: 元素向左浮动

    right: 元素向右浮动

注:元素设置浮动后,水平布局的等式便不需强制成立

元素设置浮动后,会完全从文档流中脱离,不再占用文档流的位置

浮动的特点:

  1. 可以让盒子同行显示,排列不下时自动换行,不存在兼容问题
  2. 浮动元素会完全脱离文档流,不再占据文档流中的位置,空间
  3. 设置浮动以后,元素会向父元素的左侧或右侧移动
  4. 浮动元素默认不会从父元素中移出
  5. 浮动元素 向左或向右 移动时,不会超过它前面的其他浮动元素
  6. 如果浮动元素的上边是一个没有浮动的块元素,则浮动元素无法上移
  7. 浮动元素不会超过它上边的浮动的兄弟元素,最多就是和它一样高

总结:浮动目前来讲,它的主要作用 就是让页面中的元素可以水平排列通过浮动可以制作一些水平方向的布局

  1. 浮动元素不会盖住文字,文字会自动环绕在浮动元素的周围,所以我们可以利用浮动来设置文字环绕图片的效果
  • 元素设置浮动以后,将会从文档流中脱离,从文档流中脱离后,元素的一些特点也会发生改变

注意:多个元素浮动时,后面的元素找到前面浮动元素的边界,直到碰到边界就停止或者第一个浮动元素找到父元素的边界。

脱离文档流的特点:

块元素:

  1. 块元素不再独占一行

  2. 脱离文档流后,块元素的宽度和高度默认被内容撑开

行内元素:

  1. 脱离文档流之后会变成块元素,特点和块元素一样,支持宽高

  2. 脱离文档流之后不需要再区分块元素和行内元素了

高度塌陷的问题:

问题来源:

  • 在浮动布局中,父元素的高度默认被子元素撑开的

  • 当子元素浮动后,其会完全脱离文档流,子元素从文档流中脱离, 将会无法撑起父元素的高度,导致父元素的高度丢失;

  • 父元素高度丢失后,其下的元素会自动上移,导致页面布局混乱 ,是浮动布局的常见问题

解决方式

以下方式给父元素添加

BFC(Block Formatting Context)取消浮动的影响

  • 定义:块级格式化环境,BFC是一个CSS中的一个隐含的属性,可以为一个元素开启BFC

  • 开启BFC的元素会变成一个独立的布局区域

元素开启BFC的特点
  1. 开启BFC的元素,不会被浮动元素所覆盖

  2. 开启BFC的元素,子元素和父元素外边距不会重叠

  3. 开启BFC的元素可以包含浮动的子元素

可以通过一些特殊方式开启元素的BFC
  1. 设置元素的浮动 float:left;
  2. 将元素设置为行内块元素 display:inline-block;
  3. 将元素的overflow 设置为一个非 visible 的值 overflow:hidden/auto;
  4. position 为 absolute 和 fixed
  5. display 为 inline-block、teble-cell、table-caption、flex(弹性盒子)

以下是清除浮动的方式

clear属性清除浮动

  • 作用:清楚浮动元素对当前元素所产生的影响

  • 可选值:

    left:清除左侧浮动元素对当前元素的影响

    right:清除右侧浮动元素对当前元素的影响

    both: 清除两侧中最大影响的那侧

  • 原理:

    • 设置清除浮动后,浏览器会自动为元素添加一个上外边距,以使其位置不受其他元素的影响

使用br标签来清除浮动,将浮动元素和非浮动元素隔开

 <br clear="all">

额外标签法(隔离法)

  • 在浮动元素的末尾添加一个空标签 此标签必须为块级元素,

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

​ 优点:通俗易懂,书写方便

​ 缺点:添加许多无意义的标签,结构化较差

伪元素设置 最终解决高度塌陷的方式

  • clearfix 在父元素上添加伪元素选择器可以动态添加一个子元素,完成清除浮动的操作(推荐使用)

  • 格式:

    .clearfix::before,
    .clearfix::after{
          content:' ';
          display:table;
           clear:both;
         }
    

此样式可以同时解决高度塌陷和外边距重叠的问题


文章作者: 时光路人
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 时光路人 !
评论
  目录