(7)关于margin的一些想法2.0

这篇主要讨论的就是margin负值与float的关系。

  • 首先,例子。
    <!doctype html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>无标题文档</title>
    <style type='text/css'>
    html,body{
        padding:0;
        margin:0;}
    div{width:100px;
        height:100px;
        float:left;
        margin:0;
        
    }
    div.box{
            width:300px;
            float:left;
            margin-left:60%;
            background:blue;
            }
    .a{background:red;
    margin-left:0px;}
    
    .b{background:green;
    margin-left:0;}
    
    .c{background:black;
    margin-left:0px;}
    </style>
    </head>
    
    <body>
    <div class="box">
    <div class="a"></div>
    <div class="b"></div>
    <div class="c"></div></div>
    
    </body>
    </html>

    在这里面,三个被包含的div元素的margin-left都为零,此时,视图可见:

    

    三个div整齐的排列在一起。好,我们修改下a的margin-left看看结果会如何。

      

.a{background:red;
margin-left:-100px;}

       看图,

    很明显,a因为margin-left为负边距,移动到了父容器的外面。而b,c则各向左移动了100px.

    我们在修改下a的margin-left大小。

.a{background:red;
margin-left:-110px;}

 

    结果如图,

        b元素因为触碰到了父元素的左边界所以被固定在内部,注意,并没有继续向左移动。而,a却又向左移动了10px.

        接下来,我们把a的margin-left改回成-100px,再修改其他的。

.b{background:green;
margin-left:50px;}

结果,

        

可以看出,b本来是紧贴着父元素的左边界,现在,是离左边界50px了。(在这里,我们就应该可观察出,a的右边界移动出了父元素的左边界之后,a与b,c已经不再一个浮动文档流上了。b,c仍在一起。而b的参考线也不是a了,直接就是父元素。)

 

 

    我们再来看另外一个例子:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
    <style type="text/css">
        div{
            width:50px;
            height:50px;
            float:left;
            }
            
            .box{float:none;
                background:blue;
                width:300px;
                height:100px;
                margin-left:300px;
                }
            .a{background:red;
            margin-left:0px;
                }
            .b{background:black;
                margin-left:-150px;
            }
            .c{background:pink;
            margin-left:50px;
            }
            .d{background:yellow;
            }
    </style>
</head>


<body>    <div class="box">
        <div class="a"></div>
        <div class="b"></div>
        <div class="c"></div>
        <div class="d"></div>
</div>
</body>
</html>

 

结果如图:

    可以看见,排第三的c在b出去之后,c的参考线是以a为基准的。

也就是,我们可以得出一个结论来解决双飞翼布局中的left元素为-100%的疑惑。

 

即: 同一方向浮动的元素本是按顺序排列在视图中的,若因为margin导致位置发生变化,那么浮动元素的margin(注意:margin方向必须与float方向相同,否则无效。)移动参考线是以离自己最近的元素(不管该元素是否浮动。)(也可以是父元素的边界)。

 

posted @ 2017-04-18 10:44  我爱米稀饭  阅读(117)  评论(0编辑  收藏  举报