CSS屬性探秘系列(六):margin

一、屬性介紹
margin 屬性接受任何長度單位,可以是像素、英寸、毫米或 em。
可取值:
auto 瀏覽器計算外邊距。
length 規(guī)定以具體單位計的外邊距值,比如像素、厘米等。默認值是 0px。
% 規(guī)定基于父元素的寬度的百分比計算的外邊距。
inherit 規(guī)定應(yīng)該從父元素繼承外邊距。
二、常見問題
1.IE6下浮動元素雙倍邊距問題
解決方法:
IE6中設(shè)置block元素display:inline;
.l{margin-left:20px;float:left;display:inline;}
原因:首先,inline元素和inline-block元素是沒有雙倍邊距的。對inline元素設(shè)置float后,會有個haslayout,使inline元素具有inline-block元素的特性,進而可以設(shè)置垂直margin、padding、width、height。
2.margin外邊距合并問題
外邊距的合并發(fā)生在以下三種情形:
情形一:空塊元素
a)如果一個塊級元素沒有border、padding、inline content、height、min-height來分隔,設(shè)置margin-top和margin-bottom屬性后會合并,
b)實例:
<style type="text/css">
body{margin:0;}
.out{width:400px;border:1px solid #f00;margin:0 auto;background-color:#ccc;}
.inner{margin-top:40px;margin-bottom:40px;}
</style>
<div class="out">
<div class="inner"></div>
</div>
從上例可以看出,最后.out computed height為40px;
>=IE8、Firefox、Chrome測試效果相同。但是有個疑問,去掉out的邊框后,其高度計算為0,不知道什么原因?
情形二:父元素與第一個或最后一個子元素
如果塊元素的 margin-top 與它的第一個子元素之間沒有border, padding, inline content, 或 clearance 分隔,或者塊元素的 margin-bottom 與它的最后一個子元素之間沒有padding, inline content, height, min-height, or max-height 分隔,那么外邊距會合并。
<style type="text/css">
body{margin:0;}
.parent{border:1px dotted #ccc;width:400px;}
.outer{height:50px;background-color:#f00;margin-top:40px;margin-bottom:40px;}
.inner01{margin-top:20px;background:#00f;}
.inner02{margin-bottom:60px;background:#f0f;}
</style>
<div class="parent">
<div class="outer">
<div class="inner01">inner01</div>
<div class="inner02">inner02</div>
</div>
</div>
>=IE6,FF,Chrome效果效果相同,此時inner01的margin-top:并沒有起作用,這就是為什么很多人在網(wǎng)上問,我設(shè)置margin-top,margin-bottom不起作用的原因了!如下圖:
情形三:毗鄰的元素
<style type="text/css">
.ulist{margin:0;padding-left:0;list-style:none;width:200px;margin:0 auto;border:1px solid #f00;}
.ulist li{padding-left:0;margin:10px;border:1px dotted #f00;}
</style>
<ul class="ulist">
<li>列表一</li>
<li>列表二</li>
<li>列表三</li>
</ul>
>=IE6,FF,Chrome效果效果相同,重疊部分的取值為margin-top,margin-bottom中的最大值。如下圖:
此時我們看到重疊也有重疊的好處
注:只有普通文檔流中塊框的垂直外邊距才會發(fā)生外邊距合并。行內(nèi)框、浮動框或絕對定位之間的外邊距不會合并。
3.margin不起作用的情況?
行內(nèi)(inline)元素設(shè)置垂直margin不起作用,塊級元素的margin不好用時,建議使用padding來代替。
三、常見margin負值應(yīng)用
1.IE6背景半透明效果按鈕的制作
其就是使用margin負值定位實現(xiàn)按鈕下半部分的顏色
2.新聞列表(帶日期的)
這個是從新浪博客首頁看到的實現(xiàn)新聞列表
<ul>
<li>new01<span class="date">2014-03-02</span></li>
<li>new02<span class="date">2014-03-02</span></li>
<li>new03<span class="date">2014-03-02</span></li>
<li>new04<span class="date">2014-03-02</span></li>
</ul>
ul li{height:24px;line-height:24px;}
設(shè)置.date{text-align:right;display:block;margin-top:-24px;},這時就不需要使用浮動來布局了
3.在選項卡等邊框線的處理
當(dāng)前選中的選項卡下邊框顏色要設(shè)置選中色同時,內(nèi)容的div上邊框要設(shè)置margin-top:-1px;
4.圖片與文字對齊問題
方法一:
vertical-align:text-bottom
方法二:
.img{margin:0 5px -2px 0;}
測試代碼:
<style type="text/css">
body{margin:0;font-size:12px;font-family:arial;}
.out{width:400px;border:2px dotted #f00;margin:20px auto;
}
.img{margin:0 5px -2px 0;}
</style>
<div class="out">
<img src="20.png" width="20" height="20" class="img">Benjamin=前端開發(fā)
</div>
四、新聞列表邊框
當(dāng)我們使用ul>li寫新聞列表需要給li設(shè)置下邊框時,是不是經(jīng)常困惑于最后一條會多出一個邊框。如果給最后一條單獨加個類.last{border-bottom:none;}
也能實現(xiàn)效果。但是這中寫法會有兩個弊端,弊端一:單獨定義一個css類;弊端二,當(dāng)我們使用服務(wù)器端語言輸出數(shù)據(jù)時,還需要單獨判斷最后一項,添加calss類。有沒有好的解決方法呢?當(dāng)然有,那就是margin負值!
看看下面實現(xiàn)實例:
<style type="text/css">
.con{width:200px;border:1px solid #f00;}
.con ul{overflow:hidden;margin:0;padding-left:0;margin-bottom:-1px;}
.con ul li{line-height:24px;border-bottom:1px solid #f00;padding-left:10px;}
</style>
</head>
<body>
<div class="con">
<ul>
<li>fdasfd</li>
<li>fdasfd</li>
<li>fdasfd</li>
<li>fdasfd</li>
<li>fdasfd</li>
</ul>
</div>
如圖:
五、參考鏈接
http://www.w3school.com.cn/css/css_margin_collapsing.asp
相關(guān)文章
- 下面小編就為大家?guī)硪黄獪\談css margin重疊。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-07-19
- 下面小編就為大家?guī)硪黄狢SS 之margin知識點(必看)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-07-10
- 這篇文章主要為大家詳細介紹了css布局之負margin妙用及其他實現(xiàn)的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-07-07
- margin屬性可以決定很多HTML元素的寬高度,因而在布局方面也能夠有很重要的作用,接下來我們就來看一下CSS的margin屬性在頁面布局中的使用攻略2016-05-26
- 這篇文章和大家詳細說一說CSS中margin屬性的使用,重點描述了關(guān)于margin,我們?nèi)粘2惶菀装l(fā)現(xiàn)的“坑,感興趣的小伙伴們可以參考一下2016-02-25
- 這篇文章主要介紹了CSS中的margin屬性的使用,margin是元素盒模型(box model)的基礎(chǔ)屬性,常被用來設(shè)置外邊距,實際用途非常廣泛,需要的朋友可以參考下2016-02-02
- 這篇文章主要介紹了CSS中使用負margin值來調(diào)整居中位置的方法,文中同時提到了這種常用方法的一些值得注意的地方,需要的朋友可以參考下2015-07-15
- 這篇文章主要介紹了解決margin 外邊距合并問題 ,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-07-03