負值之美:負margin在頁面布局中的應用

負值之美:負margin在頁面布局中的應用
論壇討論網址:http://bbs.blueidea.com/thread-2956530-1-1.html

本文轉載自:http://www.topcss.org/?p=94,有修改。
  負數給人總是一種消極、否定、拒絕之感,不過有時利用負margin可以達到奇妙的效果,今天就表一表負值在頁面布局中的應用。這里說的負值主要指的是負margin。
  關于負margin的原理建議大家看看這篇文章:http://www.cnblogs.com/2050/archive/2012/08/13/2636467.html#2457812
  本文不講原理,主要展示幾個應用。
一、左右列固定,中間列自適應布局
  此例適用于左右欄寬度固定,中間欄寬度自適應的布局。由于網頁的主體部分一般在中間,很多網頁都需要中間列優(yōu)先加載,而這種布局剛好滿足此需求。
  HTML:

<div class="main"> 
    <div class="main_body">Main</div> 
</div> 
<div class="left">Left</div> 
<div class="right">Right</div>

CSS:

 body{ margin:0; padding:0; min-width:600px; } 
.main{ float:left; width:100%; } 
.main_body{ margin:0 210px; background:#888; height:200px; } 
.left,.right{ float:left; width:200px; height:200px; background:#F60; } 
.left{ margin-left:-100%; } 
.right{ margin-left:-200px; }

效果:



二、去除列表右邊框
  項目中經常會使用浮動列表展示信息,為了美觀通常為每個列表之間設置一定的間距(margin-right),當父元素的寬度固定式,每一行的最右端的li元素的右邊距就多余了,去除的方法通常是為最右端的li添加class,設置*margin-right:0; *這種方法需要動態(tài)判斷為哪些li元素添加class,麻煩!??!利用負margin就可以實現下面這種效果:
  HTML:

<div id="test"> 
<ul> 
    <li>子元素1</li> <li>子元素2</li> <li>子元素3</li> <li>子元素4</li> <li>子元素5</li> <li>子元素6</li> 
</ul> 
</div>

CSS:

body,ul,li{ padding:0; margin:0;} ul,li{ list-style:none;} 
#test{ width:320px; height:210px; background:#CCC; } 
#test ul{ margin-right:-10px; zoom:1; } 
#test ul li{ width:100px; height:100px; background:#F60; margin-right:10px; margin-bottom:10px; float:left; }

效果:



三、負邊距+定位:水平垂直居中
  使用絕對定位將div定位到body的中心,然后使用負margin(content寬高的一半),將div的中心拉回到body的中心,已到達水平垂直居中的效果。
  HTML:

<div id="test"></div>

CSS:

 body{margin:0;padding:0;} 
#test{ width:200px; height:200px; background:#F60; position:absolute; left:50%; top:50%; margin-left:-100px; margin-top:-100px; }

效果:



四、去除列表最后一個li元素的border-bottom
  列表中我們經常會添加border-bottom值,最后一個li的border-bottom往往會與外邊框重合,視覺上不雅觀,往往要移除。
  HTML:

<ul id="test">
   <li>Test</li> <li>Test</li> <li>Test</li> <li>Test</li> <li>Test</li> 
</ul>

CSS:

 body,ul,li{margin:0;padding:0;} ul,li{list-style:none;} 
#test{ margin:20px; width:390px; background:#F4F8FC; border-radius:3px; border:2px solid #D7E2EC; } 
#test li{ height:25px; line-height:25px; padding:5px; border-bottom:1px dotted #D5D5D5; margin-bottom:-1px; }

效果:



五、多列等高
  此例關鍵是給每個框設置大的底部內邊距,然后用數值相似的負外邊距消除這個高度。這會導致每一列溢出容器元素,如果把外包容器的overflow屬性設為hidden,列就在最高點被裁切。
  HTML:

<div id="wrap">
    <div id="left"> 
      <p style="height:50px">style="height:50px"</p> 
    </div> 
    <div id="center"> 
      <p style="height:100px">style="height:100px"</p> 
    </div> 
    <div id="right"> 
      <p style="height:200px">style="height:200px"</p> 
    </div> 
</div>

CSS:

 body,p{ margin:0; padding:0; }
 #wrap{ overflow:hidden; width:580px; margin:0 auto; }
 #left,#center,#right{ margin-bottom:-200px; padding-bottom:200px; }
 #left { float:left; width:140px; background:#777; } 
#center { float:left; width:300px; background:#888; } 
#right { float:right; width:140px; background:#999; } 
p {color:#FFF;text-align:center}

效果:


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 14,166評論 1 92
  • 目錄 背景 margin負值的原理2.1 基于參考線的原理圖2.2 實際demo2.2.1 margin-left...
    流云家的夢溪閱讀 1,068評論 0 1
  • [TOC] 前幾天去了一家公司面試前端,問了我雙飛翼的布局,說實話,之前真沒好好研究過實現原理。面試回來,查了下,...
    琦樂無窮閱讀 38,373評論 13 80
  • 最近在學習flex布局,在贊嘆其便捷性的同時,回想起之前使用css2的時候實現等高或者等寬布局的麻煩。同時也看到[...
    小胖子嘿嘿嘿閱讀 1,302評論 0 3
  • 江西玉山縣有所水南寺,是一處古剎。里邊住著位老僧叫月印,六十多歲了,終日在室內誦經,足不出戶,戒行頗高。老和尚養(yǎng)了...
    夜夢千秋閱讀 510評論 0 1

友情鏈接更多精彩內容