zoukankan      html  css  js  c++  java
  • 06.盒模型.外边距折叠问题

    讲到了盒模型,就不得不讲一下外边距折叠(也叫叠加)问题了 (Collapsing margins ), 这个情况在盒模型的应用中,需要特别注意

    那么先来了解下, 什么是外边距折叠: (W3C中的定义: https://www.w3.org/TR/CSS2/box.html#collapsing-margins)

        W3C对外边距折叠的定义是: 在CSS中,两个或多个毗邻的普通流中的盒子(可能是父子元素,也可能是兄弟元素)在垂直方向上的外边距会发生叠加,这种形成的外边距称之为外边距叠加。

       要发生外边距合并折叠,需要具备如下几个情况:

        --> 毗邻: 说明元素之间的相对位置关系; 双方之间没有被 非空的元素, border, padding 或 clear 分隔开;

                   **  需要注意一下,在没有被分开的情况下,一个元素的margin-top会和它普通流中的第一个子元素的margin-top相邻,

                       只有在一个元素的height为auto的情况下,它的magin-bottom才会和它普通流中的最后一个子元素margin-bottom相邻;

                       (详细的例子演示可查看: http://w3help.org/zh-cn/kb/006/)

        --> 二个或多个: 指元素之间相互的关系,单独一个元素是不会出现所谓的外边距重叠的情况的;

        --> 普通流:  非浮动元素,非定位元素等;

        --> 垂直方向: 元素在水平方向上不会有外边距重叠的情况,本情况只出现在垂直方向上;

     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    在了解外边距重叠的规则后,我们来了解一下,不同情况下,外边距重叠的距离算法

       -->   参与折叠的margin都是正值,折叠后距离为margin值较大者;   

              

       -->    参与折叠的margin都是负值,折叠后距离为margin值较小者;

              

       -->   参与折叠的margin中有正值,也有负值, 先取出负值中最小的, 然后取出正值中最大的,将这二个值相加,就是最终的间距了;

              

       --> 相邻的margin, 要一起参与计算,不得分步计算 (重点理解)

            

            **  对于A元素与浏览器的margin计算: 

                 错误的计算方式: 先算出A与其父元素的margin: 150px+(-120px)=30px, 再计算A与其父元素的父元素的叠加: Max(30px,50px)=50px;

                 正确的计算方式: 取出所有margin中最大的正值(150px)和最小的负值(-120px),有正有负,二者相加: 150px+(-120px)=30px;

            ** 对于A,B元素之间的margin计算:

                错误的计算方式: 按上面方法分别计算出A的margin(30px),B的margin(200px+(-100px)=100px)后,二个正数,取大值 Max(30px,100px)=100px;

                正确的计算方式: A,B之间的margin,相关的div(6 个div)都要参与margin  的计算

                正值: Max(50px,150px,200px)=200px

                负值: Min(-120px,-100px,-20px)=-120px;

                有正有负,取二者相加: 200px+(-120px)=80px;

      ==>  浮动元素、inline-block元素、绝对定位元素的margin不会和垂直方向上其它元素的margin折叠

      ==>  创建了块级格式化的元素,不和它的子元素发生margin 折叠

      ==>  元素自身的margin-top, margin-bottom在自身内容为空且无border和padding时,也会重叠,取Max(margin-top, margin-bottom)

  • 相关阅读:
    python之map,filter
    python函数的闭包
    Hibernate查询对象的方法浅析
    底部浮动
    DataGrid-自定义排序
    DataGrid-1
    Alert
    2014-01-04 SQL练习
    proguard-gui 混淆代码简要笔记
    vim利用coc补全的配置过程
  • 原文地址:https://www.cnblogs.com/jieling/p/10848231.html
Copyright © 2011-2022 走看看