浅谈BFC


theme: scrolls-light

highlight: a11y-dark

「这是我参与2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战」。

前言

  • 大家好,我是vike。今天和大家一起来聊聊BFC,希望对你有帮助!

2.jpg

防止高度坍塌的四种方案

高度坍塌.jpg + 给父元素设置overflow 这样就能包裹住浮动子元素 - 缺点 有些超出的父元素的要显示 显示不出来 ```html

body { margin: 0; padding: 0; } .parent { background-color: aquamarine; overflow: hidden; } .children1 { width: 50px; height: 100px; background-color: blanchedalmond; float: left; } .children2 { width: 50px; height: 150px; background-color: black; float: right; }

```

1642497177(1).png + 给父元素最后增加一个子元素设置样式为clear:both - 缺点 无故增加空元素 影响查找

  • 给父元素也设置浮动 浮动包裹住子元素

    • 和overflow元素一样 子元素不能超出父元素
    • 父元素设置浮动后 后续元素设置clear:both
  • 给父元素末尾伪元素设置clear:both

    • 最优解法 既不会增加元素 也不会产生浮动问题 after设置 防止高度影响加height:0
  • 解决效果

高度坍塌2.png

BFC

BFC.jpg + 块级格式化上下文 + 独立渲染区域 :内部不影响外部 外部也不能侵入内部 + 块级元素渲染区域:所有display属性为block,list-item,table的元素会生成块级元素渲染区域 + 块级元素渲染区域以BFC方式渲染

BFC布局规则

  • 默认 内部的块元素会在垂直方向,一个接一个放置,每个元素独占一行。
  • 块元素垂直方向的总距离由边框内大小以及margin决定
  • 属于同一个BFC的相邻块元素在垂直方向上会发生重叠,水平方向的不会
  • 计算父元素BFC渲染区域高度时 内部浮动元素的高度必须算在内

怎样形成BFC渲染区域

  • float的值不是none
  • position的值不是static和relative
  • display的值是inline-block,table-cell,flex,table-caption或者inline-flex
  • overflow的值不是visible

为什么要形成BFC区域

  • 解决高度坍塌问题
  • 父元素设置overflow:hidden 就形成了BFC区域 所以浮动子元素被包裹在父元素里

解决外边距重叠问题

外边距重叠.jpg + 在底下元素外包裹一个元素设置overflow:hidden 形成BFC区域 隔开两个元素 + 将底下元素的:before伪元素 设置display:table 形成BFC区域

垂直方向margin溢出

margin溢出.jpg

  • 设置父元素overflow:hidden
    • 原理: 设置父元素为BFC区域
  • 为父元素设置边框 颜色设置为transparent(透明)
    • 原理: 边框本身可以阻止margin溢出
    • 缺点: 边框会增大父元素的实际大小
  • 用父元素的padding-top代替子元素的margin-top
    • 原理: padding本身可以阻止margin溢出
    • 缺点: 使用padding会影响父元素的大小,可以使用box-sizing:border-box
  • 在父元素内第一个子元素前添加一个空的table
    • 原理: table相当于display:table 形成了BFC区域
    • 优点: 空table没有大小,不占用父元素内容
    • 缺点: 增加了一个无关的元素
  • 在父元素伪类before上加 display:table
    • 优点: 不增加新元素 不影响高度

margin解决方案.jpg

BFC实战

  • 上面一起看了这么多BFC的特性,一起来做一道题练习一下吧
  • 实现一个左边定宽 右边自适应的页面
  • 效果

1642496859(1).png

``` html

```

IFC

IFC.jpg + 行级元素渲染区域: 所有display属性为inline,inline-block,inline-table的元素会生成行级元素渲染区域 + 行级元素渲染区域以IFC方式渲染

3.jpg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值