负边距

摘自:

  http://www.cnblogs.com/2050/archive/2012/08/13/2636467.html

  http://www.cssbox.net/css-negative-margin.html

负边距在普通文档流中的作用和效果

那些没有脱离文档流的元素(指不是浮动元素也不是绝对定位、固定定位的元素等),其在页面中的位置是跟随者文档流的变化而变化的。看下面这幅图:

负边距

负边距对这些由文档流控制的元素的作用是,会使它们在文档流中的位置发生偏移,但这种偏移不同于相对定位,通过相对定位偏移后,其仍然会坚守着它原来占据的空间,不会让文档流的其它元素乘虚而入。而通过负边距进行偏移的元素,它会放弃偏移前占据的空间,这样它后面文档流中的其它元素就会“流”过来填充这部分空间。现在我们把上图中的块状元素、行内元素以及inline-block元素都设一个负边距 margin:-10px; 看看会发生什么:

负边距

我们看到,黑灰色的块状元素好像向左和向上都分别嵌入了浏览器窗口的边界里10px,然后块状元素下面的文字也爬到了它身上,行内元素向左移动盖住了它前面的一个字,它后面的文字也有一部分覆盖在了它身上,inline-block的位置变化也很明显。

在文档流中,元素的最终边界是由margin决定的,margin为负的时候就相当于元素的边界向里收,文档流认的只是这个边界,不会管你实际的尺寸是多少。

单列定宽单列自适应布局:

<!DOCTYPE HTML>

<html>

<head>

    <meta charset="UTF-8">

    <title>单列定宽单列自适应布局</title>

    <style type="text/css">

        * {margin:0;padding:0;}

        .cont, .side {float:left;}

        .cont {width:100%;}

        .main {margin-right:200px;background:#DDDDDD;}

        .side {margin-left:-200px;width:200px;background:#F7F7F7;}

    </style>

</head>

<body>

    <div class="cont">

        <div class="main">main</div>

    </div>

    <div class="side">side</div>

</body>

</html>

左右定宽中间自适应布局:

<!DOCTYPE HTML>

<html>

<head>

    <meta charset="UTF-8">

    <title>左右定宽中间自适应布局</title>

    <style type="text/css">

        * {margin:0;padding:0;}

        .cont, .side, .sub-main {float:left;}

        .cont {width:100%;}

        .main {margin-right:200px;margin-left:300px;background:#DDDDDD;}

        .side {margin-left:-200px;width:200px;background:#F7F7F7;}

        .sub-main {margin-left:-100%;width:300px;background:#F7F7F7;}

    </style>

</head>

<body>

    <div class="cont">

        <div class="main">main</div>

    </div>

    <div class="side">side</div>

    <div class="sub-main">sub-main</div>

</body>

</html>

两列等高自适应布局:

<!DOCTYPE HTML>

<html>

<head>

    <meta charset="UTF-8">

    <title>两列等高自适应布局</title>

    <style type="text/css">

        * {margin:0;padding:0;}

        .layout {overflow:hidden;}

        .cont, .side {float:left;padding-bottom:9999px;margin-bottom:-9999px;}

        .cont {width:100%;}

        .main {margin-right:200px;background:#DDDDDD;}

        .side {margin-left:-200px;width:200px;background:#F7F7F7;}

    </style>

</head>

<body>

    <div class="layout">

        <div class="cont">

            <div class="main">

                main

                <br/><br/><br/><br/><br/><br/><br/>

            </div>

        </div>

        <div class="side">side</div>

    </div>

</body>

</html>

 

 

你可能感兴趣的:(负边距)