bfc是什么_关于margin的两个经典bug,以及bfc简述

margin两个经典bug:

处理bug漏洞,只能弥补,不能完全解决。

一、margin 塌陷问题:

没加 margin 时,

ee3754c117f6cdb63210dceaf027b6b6.png

6965014b534b597a58935831e5e17812.png

7144821012b0f443806add57b953675d.png

给wrapper的子元素加上margin-top之后,发现父元素也跟着子元素走,

5422860e0c7c41b912c298ed56163b43.png

643208abfa6fdce8186b07c2f29c59a2.png

给wrapper加上margin-top之后,发现子元素的margin-top变成100px了,这就是margin塌陷问题,

48223d0025d9f2d21576be424f0b912c.png

9b8685b4f5bd3476c991c7e9aa2d0954.png

注意:垂直方向的margin-top,父子元素是结合到一起的,它俩会取最大的值。

怎么弥补这个bug呢?有两个方法。

1、给它的父元素加条线,加个顶。(这种做法不专业)

fe86dee73870861f9d6b59970da803ad.png

c4578936a1ebdd64414edbecb3614122.png

2、触发bfc。(这种方法比较专业)

那么bfc是什么呢?我们先来了解一下。

bfc:“block format context” ,简称,块级格式化上下文。

设置bfc后,特定的盒子会遵循另一套语法规则。简单的说,就是bfc能改变盒子的语法规则。

/* 如何触发一个盒子的bfc */

方法一,position:absolute; (设置为绝对定位)

bbce7dac728cc3ed9a9f4b5b67149e07.png

04dda072941bd9284b70706470d98f1e.png

方法二,display:inline-block; (设置为行级块元素)

21309a5f357a75b23e38900efc6489bb.png

04dda072941bd9284b70706470d98f1e.png

方法三,float:left/right; (设置为浮动元素)

99c5d7cedd03fe36763aab373cb1cadd.png

954717b620c7c429c85be8412283e7a9.png

28d45e4e247ed7a4c89fcc02e4853b1c.png

aea1c278f277dea8b7a216126a8b3cab.png

方法四,overflow:hidden; (设置为溢出部分隐藏)

517344139c8676d4061206ee2e1e5dcc.png

954717b620c7c429c85be8412283e7a9.png

二、margin 合并问题:

没设置margin之前,

4fb1d024871914f5c63f19578304ef7a.png

4f4e3e8906fe5ad3a531900a76f0d74a.png

2181c7017991dca0ee08eedf717111ac.png

给demo1元素加上margin-bottom,看起来好像没问题,

397b1e71ec56f8c6fa72ee38e46424c0.png

53f5a6a5b1b7ead2be4763b5df989675.png

给demo2元素再加上margin-top,发现两个元素之间的间隔没变化,这就是margin 合并的问题了,

5f27262f3a64e4d3a01813bb09dd1beb.png

53f5a6a5b1b7ead2be4763b5df989675.png

那这个问题又怎么弥补呢?是不是和margin一样也能用bfc弥补呢?

对的,弥补margin合并问题,采用bfc弥补。

bfc前面说过了,这里直接演示了,

1、在demo2父级加上bfc:

9b69beb209cf165276d80475396faea7.png

加上 position:absolute; (设置为绝对定位)

aae49bad432d6c2cc35cf5a5da54a542.png

c72d7dde9b2f6598c0a108c2707f2743.png

加上 display:inline-block; (设置为行级块元素)

3bfab1f961bc9e174be75073516a3afe.png

05f9a4870daf4fbbd8ad84d03e5f89bd.png

加上 float:left/right; (设置为浮动元素)

a8ca7ee0476bafb9b2d638ccdb4a7b27.png

c23af57367d457b7c6050586f70c7424.png

bf699ffbb87a07de3837d8b11d7de4a9.png

4e186c5fcf6491223ffc961b939f463b.png

加上 overflow:hidden; (设置为溢出部分隐藏)

1a3bf31435335dc9e845c5fce2b89455.png

ca73cf7458c85b62099fbede14173a73.png

2、在demo1父级加上bfc:

56de627493f7f504a5db3467317e5165.png

加上 position:absolute; (设置为绝对定位)

62434cbcf9822d3730d9caaa07ead3f0.png

033776619bcdf220adcc727233388f6d.png

加上 display:inline-block; (设置为行级块元素)

54dc62a54541d4048d41689b22999007.png

bdb155680ef65b53c4ed014db0ec4963.png

加上 float:left/right; (设置为浮动元素)

a4144748d858f0a8c716c8c272bc0236.png

a625f4e24498fa4d9cbcacc13ffb0249.png

65279de4733f9107ecf17bf736083b2f.png

9aa0e3d5df9b7a4bc55734ef14c7a98f.png

加上 overflow:hidden; (设置为溢出部分隐藏)

564f72a4757b9968622edf333b14358a.png

af51c41204c743b97fcee92f4e121ec0.png

演示完,发现在demo1父级加上bfc,好像并不是所有能触发bfc的都能弥补margin合并问题。

总的来说,触发bfc是可以弥补margin合并问题,但虽然弥补了margin合并问题,触发bfc之后却会引发更多问题。

因此,margin合并问题,一般不需要去弥补解决。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值