css中margin為負數的深入研究


注:以下實驗的元素均為塊級元素,inline-block和inline本身對margin某些方向上都是無效的,所以這里不予討論。

margin-left或者margin-right為負數

當塊元素width:auto時,margin-left和margin-right會增加元素的寬度
當有具體width時,margin-left向左移動,
margin-right 減少css的讀取寬度 如下圖 (也就是后面的元素會擠進來)

margin-top或者margin-bottom為負數時

高度一般都自適應或者精確的值,體現的形式是一樣的
margin-top為負值 是向上移動
margin-bottom為負值 減少css的讀取高度(后面的元素擠上來)

一張圖解釋

總結

除了塊元素未設置寬度會增加寬度外,其他的幾種情況都是反向移動或者減少css讀取的值。

實際應用

雙飛翼布局 (三列布局,兩邊定寬,中間不定)

原理,用float在同一行, 中間元素給100%, left元素 margin-left: -100%移動到最左邊,right元素margin-left: -100px;

html,body{
    height: 100%;
}
body{
    margin: 0;
}
.main{
    width: 100%;
    height: 100%;
    float: left;
}
.main .in{
    margin: 0 110px;
    background-color: pink;
    height: 100%;
}
.left,.right{
    height: 100%;
    width: 100px;
    float: left;
    background-color: lightgreen;
}
.left{
    margin-left: -100%;
}
.right{
    margin-left: -100px;
}
<body>
<div class="main">
    <div class="in"></div>
</div>
<div class="left"></div>
<div class="right"></div>
</body>

三欄等高布局 (文字不定,但是等高)

原理: 父級給overflow:hidden; 里面的元素用padding-bottom: 1000px; margin-bottom:-1000px; 給padding和overflow:hidden是為了讓高度一致,margin-bottom:1000px;去消除這個高度,就是看起來有那么高,其實沒有,因為margin-bottom為負值的原因

body{
    margin: 0;
    overflow: hidden;
}
ul{
    margin: 0;
    padding: 0;
    list-style: none;
}
.list{
    overflow: hidden;
    width: 100%;
    height: 100%;
}
.main{
    margin: 0 110px;
    background-color: lightgreen;
}
.left{
    width: 100px;
    float: left;
    background-color: pink;
}
.right{
    width: 100px;
    float: right;
    background-color: pink;
}
.main,.left,.right{
    margin-bottom: -9999px;
    padding-bottom: 9999px;
}
<body>
<ul class="list">
    <li class="left">左側文字比較少</li>
    <li class="right">右側文字比較多右側文字比較多右側文字比較多右側文字比較多右側文字比較多右側文字比較多右側文字比較多右側文字比較多右側文字比較多右側文字比較多右側文字比較多右側文字比較多右側文字比較多右側文字比較多右側文字比較多右側文字比較多</li>
    <li class="main">中間文字比較少</li>    
</ul>
</body>

去除列表右邊框

原理:外層list元素未設置寬度(width:auto),margin-right:-10px;這會導致外層list元素右邊增加寬度10px,那么每行的最后一個元素margin-right:10px就剛好list原來的邊界,即新增的寬度與一行最后一個元素margin-right:10px相互抵消.

.container{
        margin:0 auto;
        width: 500px;
        border: 1px #ccc solid;
        margin-bottom: 20px;
}
.list{
    overflow: hidden;
    margin-right: -10px;

}
.list li{
    width:92px;
    height: 92px;
    background-color: #ccc;
    margin-bottom: 20px;
    float: left;
    margin-right: 10px;
}
<div class="container">
    <ul class="list">
        <li>我是一個列表</li>
        <li>我是一個列表</li>
        <li>我是一個列表</li>
        <li>我是一個列表</li>
        <li>我是一個列表</li>
        <li>我是一個列表</li>
        <li>我是一個列表</li>
        <li>我是一個列表</li>
        <li>我是一個列表</li>
        <li>我是一個列表</li>
    </ul>
</div>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM