美文网首页
margin 负值的原理

margin 负值的原理

作者: 看到这朵小fa了么 | 来源:发表于2020-03-12 19:05 被阅读0次

margin-

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

image.png

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

  • 当一个块没有宽度的时候,受内部横向流的作用(方向是双向的,向左流也向右流),它会流淌满整个空间,这说明内部的流动是双向的,这时候设置margin-left 负值,相当于在左侧开辟了一块空间,那么河水就会充满左侧多余出来的空间,但是你会看不到,它被左侧吞掉(也许就像进了源头);当设置margin-right负值的时候,会向右侧延伸,也就是增加了宽度。
  • 当一个块设置了宽度,那么内部的流就失去作用了,这时候起作用的是外部的横向流(流动是从左向右的,也就是文档流的方向),所以当设置margin-left负值的时候,将当前的流的阻隔线向左推进,所以块会向左移动,而设置margin-right负值的时候,也是向左移动,不过left的参考线是包含块的左侧,或者是连接块的右侧(有一种,向左使劲的感觉),而right的参考线是元素块自身的右border。

圣杯布局的实现和分析

<!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

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

相关文章

  • margin 负值的原理

    margin- 首先贴一些看的文章图解:https://zhuanlan.zhihu.com/p/25892372...

  • 浅析margin负值之美

    目录 背景 margin负值的原理2.1 基于参考线的原理图2.2 实际demo2.2.1 margin-left...

  • css 负边距

    可以通过负值的margin来抵消掉padding的影响 1.margin:负值 当给一个元素设置margin 负值...

  • css杂项

    bo一、margin负值 margin-left / margin-top为负值,当前元素会向左 / 上拖动 ...

  • margin负值

    margin-left和margin-right负值会增加元素的宽度(当元素不存在width属性或者width属性...

  • margin负值的应用

    边框重叠 两个盒子的边框叠加,使得边框变粗,使用margin负值可解决 hover缺失 使用上面的margin负值...

  • margin 负边距应用???

    margin-right:负值,在没有设置DOM元素宽度的前提下,DOM元素宽度变宽。 具体原理请看代码注释。注:...

  • 新建margin负值

    1.margin先接触,然后是border,然后是padding,然后是content2.值为负值,将不再占据空间...

  • 4.CSS布局篇之margin负值问题

    margin-top和margin-left负值,元素向上、向左移动 margin-right和margin-bo...

  • 前端记录20171208

    margin 设置为负值,元素将会变大

网友评论

      本文标题:margin 负值的原理

      本文链接:https://www.haomeiwen.com/subject/rfrkjhtx.html