關於負外邊距的作用效果

今天無意中看到了雙飛燕,聖盃佈局,發現裏面主要是有用到一個負外邊距,感覺挺神奇的這玩意
( ⊙ o ⊙ )!看就了一些關於負外邊距的資料,這裏自己總簡單結一下。
參考網址:
http://www.smashingmagazine.com/2009/07/the-definitive-guide-to-using-negative-margins/
http://www.cnblogs.com/2050/archive/2012/08/13/2636467.html
http://www.daqianduan.com/6239.html

負外邊距主要分爲在普通文檔流的作用效果和 對浮動元素的作用效果

對普通文檔流

  • marin-left或者margin-top是負值:它會將元素在相應的方向進行移動。left就是左右方向移動,top就是上下方向移動。也就是會使元素在文檔流裏的位置發生變化。
  • margin-right或者margin-bottom是負值:它不會移動該元素(該元素不變化),但會使該元素後面的元素往前移動。也就是說,如果margin-bottom爲負值,那麼該元素下面的元素會網上移動;如果margin-right爲負值,那麼該元素右邊的元素會往左移動,從而覆蓋該元素。
    例:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <title>Document</title>
    <style type="text/css">
        *{
            margin:0px;
            padding: 0px
        }
        #div1{
            background-color: red;
            width:100px;
            height: 100px;
            margin-bottom:-50px;
        }
        #div2{
            height: 100px;
            width:100px;
            background-color: yellow;
        }
    </style>
</head>
<body>
    <div id="div1">
    </div>
    <div id="div2"></div>
</body>
</html>

效果如圖:

這裏寫圖片描述

  • 如果元素沒有設置寬度,那麼margin-left和margin-right取負值 ,會將元素左右拉長,我們可以看見寬度邊長了。
    例:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <title>Document</title>
    <style type="text/css">
        *{
            margin:0px;
            padding: 0px
        }
        #div1{

            width:400px;
            height: 100px;
            border:10px solid black;
        }
        #div3{
            height: 100px;
            margin-right: -100px;
            background-color: red;
        }
    </style>
</head>
<body>
    <div id="div1">
        <div id="div3"></div>
    </div>
</body>
</html>

效果見下圖:

這裏寫圖片描述

顯然,div3的長度被拉長了100px。

對浮動元素

對於浮動元素來說,負外邊距的效果和普通文檔流類似,不過也有一些特殊的地方。】

  • 和之前一樣,如果是設置left,top那麼該元素會移動,如果是bottom和right也會使後面的元素往前移動,遮蓋前面的元素。

  • 如果有幾個相鄰的浮動元素,設置左右的負的外邊距,那麼右邊的浮動元素會向左覆蓋前面的浮動元素。並且,如果某個浮動元素是因爲窗口大小或者它前面的浮動元素的寬度,從而掉到下一行的話,那麼給他設置一個margin-left負值或者給她前面的元素設置一個margin-right負值,就會使得這個元素往上一行移動。(╮(╯_╰)╭就是從下面一行的左邊消失,從上一行的右邊出現,感覺挺神奇的)

例:
這是沒有設置負外邊距的時候

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <title>Document</title>
    <style type="text/css">
        *{
            margin:0px;
            padding: 0px
        }
        #div1{

            width:2000px;
            height: 100px;
            background-color: yellow;
            float: left;

        }
        #div2{
            height: 100px;
            width:100px;
            background-color: red;
            float:left;
            /*margin-left: px;*/
        }
    </style>
</head>
<body>
    <div id="div1"></div>
    <div id="div2"></div>
</body>
</html>

這裏寫圖片描述

現在給div2設置一個負的margin-left

    #div2{
            height: 100px;
            width:100px;
            background-color: red;
            float:left;
            margin-left: -100px;
        }

這裏寫圖片描述

從圖中可以發現div2消失了,也就是它向左移動了本身的寬度值後,在頁面上沒有顯示了,然後把margin-left設置爲-200px
效果如下:
這裏寫圖片描述

可以發現div2跑到上面一行去了,以此類推…

注意:在這裏,給div1設置負的margin-right和給div2設置負的margin-left效果是一樣的。

負的外邊距的作用其實很強大,許多佈局定位都可以使用負的外邊距,具體的實現以後有時間在補充吧~~

待續…

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章