CSS margin全面了解

一、margin可以為負(fù)值
在盒模型中,內(nèi)容區(qū)的width/height、padding、border都不能為負(fù)值,但是margin例外,它可以為負(fù)值。
關(guān)于margin負(fù)值的使用技巧,了解不多,日后有機(jī)會(huì)再補(bǔ)充,此處先貼一個(gè)經(jīng)典應(yīng)用,margin-left負(fù)值結(jié)合浮動(dòng)實(shí)現(xiàn)不改變DOM結(jié)構(gòu)的流體布局。
此demo與CSS float淺析篇中的是同一個(gè)。
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title>不改變DOM結(jié)構(gòu)的流體布局</title>
- <style>
- .container {
- width:600px;
- margin-left: auto;
- margin-right: auto;
- background-color: orange;
- font-size: 16px;
- line-height: 1.5;
- }
- .box1 {
- width:100%;
- float:left;
- }
- .box2 {
- margin-right: 220px;
- padding-left: 20px;
- }
- img {
- width:200px;
- float:left;
- margin-left:-200px;
- }
- .clearfix:after {
- content: "";
- display: table;
- clear: both;
- }
- .clearfix {
- *zoom: 1;
- }
- </style>
- </head>
- <body>
- <div class="container clearfix">
- <div class="box1">
- <div class="box2">
- <h3>不改變DOM位置的流體布局</h3>
- <p>假如有一段文本和一幅圖像,在DOM節(jié)點(diǎn)中,文本在前,圖像在后,怎么能把圖像定位到右邊呢?</p>
- <p>通常的做法是,調(diào)換DOM節(jié)點(diǎn)中圖像與文本的位置,讓圖像在前,文本在后,然后將圖像浮動(dòng)到右邊即可。</p>
- <p>但這樣改變DOM節(jié)點(diǎn)順序始終不妥,還有什么更好的方法呢?</p>
- <p>下面就介紹一種新的思路來完成布局。</p>
- <ul>
- <li>將文本用div包起來,定義為box1;現(xiàn)在的結(jié)構(gòu)是一個(gè)box1和一個(gè)img。</li>
- <li>將box1寬度設(shè)為100%,左浮動(dòng);將img設(shè)置一個(gè)寬度,也左浮動(dòng),然后margin-left設(shè)為負(fù)的寬度值;此時(shí)圖像就定位到文本的右邊啦。</li>
- <li>但是有一個(gè)問題,圖像蓋住了文本內(nèi)容,這可怎么辦?</li>
- <li>重點(diǎn)來了,在box1中增加一個(gè)box2,box2把文本全部包起來,然后margin-right設(shè)為圖像的寬度(+額外的間距),這樣就解決問題啦!</li>
- </ul>
- </div><!--關(guān)閉box2-->
- </div><!--關(guān)閉box1-->
- <img src="http://imgsrc.baidu.com/forum/w%3D580/sign=0c101fe665380cd7e61ea2e59145ad14/f9a3492762d0f7032de1758a08fa513d2797c542.jpg" alt="a picture" style="width:200px;height:300px" />
- </div><!--關(guān)閉container-->
- </body>
- </html>
二、margin的百分比數(shù)值
當(dāng)margin屬性的值為百分?jǐn)?shù)時(shí),其總是以父元素的width為基數(shù)進(jìn)行計(jì)算。
請(qǐng)看下面這個(gè)demo,當(dāng)初折磨了我N久的。。。只怪我知道得太晚了,說多了都是淚啊。。。
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title>margin的百分?jǐn)?shù)值</title>
- <style>
- .container {
- width: 500px;
- height: 300px;
- margin: 50px auto;
- background-color: orange;
- border: 1px solid black;
- }
- .box {
- width: 250px;
- height: 150px;
- margin-left: auto;
- margin-right: auto;
- background-color: cyan;
- }
- .box1 {
- margin-top: 75px;
- margin-bottom: 75px;
- padding: 5px;
- }
- .box2 {
- margin-top: 25%;
- margin-bottom: 25%;
- padding: 5px;
- }
- </style>
- </head>
- <body>
- <div class="container">
- <div class="box box1">
- <p>父元素的高度為300px,子元素的高度為150px,只要margin-top和margin-bottom都為75px,這個(gè)盒子就能垂直居中。</p>
- <p>OK,居中啦?。?!</p>
- </div>
- </div>
- <div class="container">
- <div class="box box2">
- <p>既然子元素的高度是父元素高度的50%,那么只要margin-top和margin-bottom都為25%,應(yīng)該也能垂直居中。</p>
- <p>額,這什么鬼?說好的居中呢?</p>
- </div>
- </div>
- </body>
- </html>
三、垂直方向上margin的合并
這個(gè)問題經(jīng)常造成一些困惑,不過只需要記住一句話即可,垂直方向上的margin只要親密接觸就會(huì)合并,也只有親密接觸才會(huì)合并。
垂直方向上margin的合并,如果發(fā)生在相鄰元素,其實(shí)是很好理解的;但是如果發(fā)生在父元素與子元素之間,就有些怪異了。
來看例子:
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title>垂直方向上的margin合并</title>
- <style>
- .container {
- width: 500px;
- height: 300px;
- margin: 50px auto;
- background-color: orange;
- }
- .box {
- width: 300px;
- height: 200px;
- margin-left: auto;
- margin-right: auto;
- background-color: cyan;
- margin-top: 25px;
- padding: 5px;
- }
- .border {
- border: 1px solid black;
- /*padding: 1px;*/
- }
- </style>
- </head>
- <body>
- <div class="container">
- <div class="box">
- <p>父元素的margin-top為50px,子元素的margin-top為25px;</p>
- <p>咦,子元素的margin-top呢?為什么都頂?shù)礁冈厣线吔缌耍?/span></p>
- <p>額,因?yàn)楦冈嘏c子元素的margin-top親密接觸了呀,所以它們合并在一起了啊。</p>
- </div>
- </div>
- <div class="container border">
- <div class="box">
- <p>可是我就是想讓子元素距離父元素的上邊界25px啊,我不想讓它們合并呀。</p>
- <p>很簡單,給父元素加個(gè)邊框,它們就無法親密接觸了,就不會(huì)合并了啊。</p>
- <p>或者給父元素設(shè)置padding也是可以的喔。</p>
- </div>
- </div>
- </body>
- </html>
消除垂直方向上margin合并的方法:給父元素加border或者加padding,打破父元素與子元素margin之間的親密接觸即可。
margin合并的規(guī)則:
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title>margin合并規(guī)則</title>
- <style>
- .container {
- width: 300px;
- height: 500px;
- margin: 50px;
- background-color: orange;
- float: left;
- border: 1px solid black;
- }
- .box1,.box2,.box3,
- .box4,.box5,.box6 {
- width: 200px;
- height: 150px;
- margin: 30px auto;
- background-color: cyan;
- text-align: center;
- line-height: 150px;
- }
- .box1 {
- margin-bottom: 30px;
- }
- .box2 {
- margin-top: 20px;
- }
- .box3 {
- margin-bottom: 30px;
- }
- .box4 {
- margin-top: -30px;
- }
- .box5 {
- margin-bottom: -30px;
- }
- .box6 {
- margin-top: -50px;
- background-color: green;
- }
- p {
- width: 220px;
- margin:10px auto;
- font-size: 16px;
- line-height: 1.5;
- }
- </style>
- </head>
- <body>
- <div class="container">
- <div class="box1">box1</div>
- <div class="box2">box2</div>
- <p>box1的margin-bottom為30px,box2的margin-top為20px,兩個(gè)margin都是正數(shù),取絕對(duì)值大的。</p>
- </div>
- <div class="container">
- <div class="box3">box3</div>
- <div class="box4">box4</div>
- <p>box3的margin-bottom為30px,box4的margin-top為-30px,兩個(gè)margin一正一負(fù),相加。</p>
- </div>
- <div class="container">
- <div class="box5">box5</div>
- <div class="box6">box6</div>
- <p>box5的margin-bottom為-30px,box6的margin-top為-50px,兩個(gè)margin都是負(fù)數(shù),取絕對(duì)值大的。</p>
- </div>
- </body>
- </html>
1. 兩個(gè)margin都是正數(shù),取絕對(duì)值大的;
2. 一個(gè)margin是正數(shù),另一個(gè)margin是負(fù)數(shù),相加;
3. 兩個(gè)margin都是負(fù)數(shù),取絕對(duì)值大的。
以上這篇CSS margin全面了解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
原文地址:http://www.cnblogs.com/cc156676/archive/2016/07/21/5690270.html
相關(guān)文章
CSS深入學(xué)習(xí)之讓你認(rèn)識(shí)不一樣的margin
這篇文章主要給大家介紹了CSS中margin的用法和常見問題的分析,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。2017-06-28- 本文主要介紹了CSS中margin邊界疊加問題及解決方案。具有很好的參考價(jià)值。下面跟著小編一起來看下吧2017-03-27
- 下面小編就為大家?guī)硪黄獪\談css margin重疊。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-07-19
- 下面小編就為大家?guī)硪黄狢SS 之margin知識(shí)點(diǎn)(必看)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-07-10
css布局之負(fù)margin妙用及其他實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了css布局之負(fù)margin妙用及其他實(shí)現(xiàn)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-07-07- 這篇文章和大家詳細(xì)說一說CSS中margin屬性的使用,重點(diǎn)描述了關(guān)于margin,我們?nèi)粘2惶菀装l(fā)現(xiàn)的“坑,感興趣的小伙伴們可以參考一下2016-02-25
- 這篇文章主要介紹了CSS中的margin屬性的使用,margin是元素盒模型(box model)的基礎(chǔ)屬性,常被用來設(shè)置外邊距,實(shí)際用途非常廣泛,需要的朋友可以參考下2016-02-02
CSS中使用負(fù)margin值來調(diào)整居中位置
這篇文章主要介紹了CSS中使用負(fù)margin值來調(diào)整居中位置的方法,文中同時(shí)提到了這種常用方法的一些值得注意的地方,需要的朋友可以參考下2015-07-15- margin 簡寫屬性在一個(gè)聲明中設(shè)置所有外邊距屬性。該屬性可以有 1 到 4 個(gè)值。這個(gè)簡寫屬性設(shè)置一個(gè)元素所有外邊距的寬度,或者設(shè)置各邊上外邊距的寬度。塊級(jí)元素的垂直相2014-10-22
通過css屬性margin:auto讓Div中的Table居中
在div標(biāo)簽中加入text-align:center里面的Table是不會(huì)居中的,在Table中加上 margin:auto就可以實(shí)現(xiàn)居中效果,下面有個(gè)示例,大家可以參考下2014-03-19