a.適用於沒有設定width/height的普通block水平元素
float元素、absolute/fixed元素、inline元素、table-cell元素都不能夠
b.只適用於水平方向尺寸,能夠改變可視尺寸css
a.一側定寬的自適應佈局。
HTML:segmentfault
<div class="left"></div> <div class="right">一側定寬的自適應佈局一側定寬的自適應佈局一側定寬的自適應佈局一側定寬的自適應佈局一側定寬的自適應佈局一側定寬的自適應佈局一側定寬的自適應佈局一側定寬的自適應佈局一側定寬的自適應佈局一側定寬的自適應佈局一側定寬的自適應佈局一側定寬的自適應佈局一側定寬的自適應佈局一側定寬的自適應佈局一側定寬的自適應佈局一側定寬的自適應佈局一側定寬的自適應佈局一側定寬的自適應佈局一側定寬的自適應佈局一側定寬的自適應佈局 </div>
CSS:ide
.left{height:200px;width:200px;background:blue;float:left;} .right{margin-left:300px;}
b.兩端對齊佈局
見下文負margin部分。佈局
block/inline-block水平元素均適用ui
與有沒有設定width/height值無關spa
適用於水平方向和垂直方向.net
a.滾動容器內上下留白
demo: codepen傳送門
b.等高佈局
見下文負margin部分。firefox
普通元素的百分比margin都是相對於容器的寬度
計算。code
絕對定位元素的百分比margin,絕對定位元素的百分比margin是相對於第一個定位祖先元素(relative/absolute/fixed)的寬度計算對象
寬高2:1自適應矩形
demo: codepen傳送門
之因此會是2:1,是由於垂直方向上margin發生重疊。
block水平元素(不包括float和absolute元素)
不考慮writing-mode,只發生在垂直方向(margin-top/margin-bottom)
子元素的margin-top至關於父元素的margin-top
a.margin-top重疊
父元素非塊狀格式化上下文元素
父元素沒有border-top設置
父元素沒有padding-top值
父元素和第一個子元素之間沒有inline元素分隔
b.margin-bottom重疊
父元素非塊狀格式化上下文設置
父元素沒有border-bottom設置
父元素沒有padding-bottom值
父元素和第一個子元素之間沒有inline元素分隔
父元素沒有height,min-height,max-height
元素沒有border設置
元素沒有padding值
裏面沒有inline元素
沒有height或者min-height
正正取大值
正負值相加
負負最負值
1.一側定值,一側auto,auto爲剩餘空間大小
2.兩側均是auto,則平分剩餘空間(使用margin:0 auto;可以實現塊狀元素居中的緣由)
3.writing-model
與垂直居中writing-model
能夠設置或檢索對象的內容塊固有的書寫方向,具體的能夠查看一下CSS參考手冊,vertical-lr
指的是垂直方向自左而右的書寫方式,即top-bottom-left-right
,再結合margin:auto; 就能夠實現垂直居中。
demo: codepen傳送門
4.對於絕對定位的元素,經過設置top:0;right:0;left:0;bottom:0;
鋪滿整個頁面,再經過margin:auto
完成水平垂直居中定位
demo: codepen傳送門
當元素margin的top和left是負值時會引發元素的向上或向左位置移動。而當元素margin的bottom和right是負值時會影響右邊和下邊相鄰元素的參考線
1.三欄佈局,能夠對父元素是使用margin-right:負值;
完成左右對齊
demo: codepen傳送門
2.margin負值下的等高佈局
關鍵代碼:
.child{margin-bottom:-600px;padding-bottom:600px;}
demo: codepen傳送門
3.兩欄佈局
能夠看看float佈局那篇文章:不改變DOM樹前後順序的方法
inline元素
非替換元素,不是img元素 正常書寫模式
margin重疊
display:table-cell/display:table-row等聲明的margin無效
替換元素除外,firefox:table-cell類型inline-block的渲染行爲
絕對定位元素非定位方位的margin值‘無效’,一直有效,可是脫離文檔流。
因爲float致使須要增長的邊距增長
內聯特性致使的margin無效
正常的流向,margin-start等同於margin-left,二者重疊不累加
若是水平流從右往左,margin-start等同於margin-right
若是垂直流,margin-start等同於margin-top
margin-before:默認margin-top;
margin-collapse:能夠取消重疊等等
張鑫旭《CSS深刻理解之margin》