题解 | #盒模型- 外边距折叠#

盒模型- 外边距折叠

https://www.nowcoder.com/practice/9c6f4a2626d34b798f20ed31ba17e441

<!DOCTYPE html>
<html>
    <head>
        <meta charset=utf-8>
        <style type="text/css">
            * {
                margin: 0;
                padding: 0;
            }
            .top,.bottom{
                width: 100px;
                height: 100px;
                margin: 10px;
            }
            .top{
                background-color: green;
            }
            .bottom{
                position: absolute;
                background-color: red;
            }
        </style>
    </head>
    <body>
        <section class="top"></section>
        <section class="bottom"></section>
    </body>
</html>

常规块盒子有一种机制叫外边距折叠,即垂直方向上的两个外边距相遇时,会折叠成一个外边距,且折叠之后的外边距高度为两者之中较大的那一个。现在给类名为"top"、"bottom"两个盒子都设置宽度、高度且都为"100px"、都设置外边距且都为"10px",可以添加任意颜色便于区分两个盒子。此时通过调试工具可以发现两个盒子之间的距离为"10px",并不是"20px",说明已经发生了外边距折叠。外边距折叠好像很奇怪,实际上却很有用。当一个页面包含了多个段落,如果没有外边距折叠,从第二个段落开始,所有段落的间距都是最上方段落的上外边距的两倍,有了外边距折叠,段落间距才会相等。如果想要清除两个盒子之间的外边距折叠,可以给目标盒子设置以下属性:1. display: inline-block2. float属性值不是"none"的元素3. 绝对定位现在给类名为"bottom"的盒子设置"position"属性为"absolute",可以看到下方的盒子向下移动了,此时外边距折叠失效。

开启BFC即可解决外边距合并问题.

BFC(Block Formatting Context)区块格式化上下文

  1. 开启BFC的区域,是一块
  2.  ,内部渲染不会影响到外部
  3. 不同的BFC区域,

开启BFC能解决什么问题

  1. 开启BFC,其 不会再产生margin塌陷问题(不会和他的子元素产生margin合并)
  2. 开启BFC,就算子元素浮动, (计算高度时不再无视浮动元素)
  3. 开启BFC, (不会与浮动元素重叠,会避开浮动元素排布)

如何开启BFC

  1. 根元素(HTML)自身是一个BFC
  2. 设置float 属性不为none
  3. 设置position 属性为设置
  4. 设置 overflow属性值不为visible
  5. 行内块盒(inline-block )
  6. 设置 display为flow-root 的元素
  7. 伸缩项目(flex盒子内的item )
  8. 多列容器(设置column-count )
  9. 表格元素(table thead tbody tfoot tr th td caption)
  10. column-span为all的元素(表格第一行横跨所有列)
全部评论

相关推荐

喜欢走神的孤勇者练习时长两年半:爱华,信华,等华,黑华
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务