margin 负值的原理

2020-03-12  本文已影响0人  看到这朵小fa了么

margin-

首先贴一些看的文章
图解:https://zhuanlan.zhihu.com/p/25892372
流动性解析:https://www.cnblogs.com/LiveWithIt/p/6024864.html#commentform

image.png

那么首先要理解一个块的流动受内部的横向流和外部的横向流的影响,这里以左右为例,上下同理。

圣杯布局的实现和分析

<!DOCTYPE html>

<html>

<head>
    <style>
         body {
            min-width: 500px;
        }
        div {
            height: 300px;
        }

        .contain {
            padding-left: 200px;
            padding-right: 100px;
        }

        .float {
            float: left;
        }

        .left {
            width: 200px;
            margin-left: -100%;
            position: relative;
            left: -200px;
            background-color: blueviolet;
        }

        .center {
            width: 100%;
            background-color: aquamarine;
        }

        .right {
            width: 100px;
            margin-right: -100px;
            background-color: chocolate;
        }
    </style>

    <body>

        <div class="contain">
            <div class="center float">center</div>
            <div class="left float">left</div>
            <div class="right float">right</div>
        </div>
    </body>

</html>

这里的块left right都有宽度,当设置好宽度,和float左移的视觉是这样的


image.png

接着设置left块的margin-left负值,会发现根据设置的值而逐渐向左移动(图1),可以想象到,把块左边的阻隔线左移,块跟随阻隔线移动的过程,所以当设置margin-left: -100%的时候; 当前的元素向左侧流动(-100%是父级contain的宽度),当左侧的空间大于元素自身的宽度,则向上流动,再继续向左,直到移动100%的宽度,造成了视觉上上移的效果(图2):


1 2

这里再通过一个相对定位自身左移-200px; 实现左边块的布局;对于右边的块,当设置margin-right负值的时候;会发现,设置0-99px之间的负值,右边的块是不动的(图3),当设置等于-100px或者更大的负值,右边的块向左上移动到第一排的最右边,当数值再增加也是不会再向左移动了(图4)。所以我推测,margin-right负值流动的时候,因为right属性对应的是自身参考线,而自身的宽度已经确定,所以,在当前区域有空间的时候,并不因为设置了margin-right负值自身左移,但是当当前的空间不足自身宽度,则会顺应外部流向上移动,但是当设置更大的值的时候,又会因为自身的宽度而不会继续左移。不过要注意,虽然块本身没有左移,但是实际渲染的时候,逻辑上的左移是存在的,会影响到后面的元素跟着移动后的阻隔线左移(图5)


3 4 5

感觉理解的还是不太到位。😔

上一篇 下一篇

猜你喜欢

热点阅读