margin的传递, 折叠和margin负值

116 阅读1分钟

1. margin什么时候会传递

  • 一般父子元素会用padding,当使用margin时,会认为使用错误,故而将margin传递给了父元素
  • margin-top传递(一般是父子之间的传递)
    • 如果块级元素的顶部线和父元素的顶部线重叠,那么这个块级元素的margin-top值会传递给父元素

2. 怎么防止传递现象

  • 父元素设置padding-top\padding-bottom
  • 父元素设置border(border:1px solid transparent)(transparent相当于rgba(0,0,0,0 ))
  • 触发外面盒子的BFC(block formating context)

2.1 为什么BFC可以防止传递现象

3. margin什么时候会折叠

  • 设置了top又设置bottom会被认为忘了其中某一项设置,故而出现折叠现象
  • 垂直方向上相邻的2个margin(margin-top、margin-bottom)有可能会合并为1个margin,这种现象叫做collapse
  • 水平方向上的margin(margin-left、margin-right)永远不会collapse
  • 折叠后最终值得计算规则
    • 两个值进行比较,取较大值
  • 如何防止margin collapse
    • 只设置其中一个元素的margin

4. 总结

  • margin之所以会出现传递和折叠的现象, 是因为在错误的位置使用了margin

5. margin负值(在没有出现传递和折叠的情况下)

  • margin-top和margin-left 负值,元素向上、向左移动
  • margin-right 负值,右侧元素左移,自身不受影响
  • margin-bottom 负值,下方元素上移,自身不受影响