首頁>技術>

margin屬性

margin是盒子的外邊距,是盒子和其他盒子之間的距離。

margin也有四個方向。

以margin開頭,接著跟一個小短橫,然後跟表示方向的單詞,就是margin的四個方向的小屬性。

margin的塌陷

所謂的margin的塌陷,就是豎直方向的margin,有塌陷現象。

這個現象是:小的margin會塌陷到大的margin中,而margin不疊加,以大值為準。

比如下圖:

上面的盒子,把下面的盒子向下"踹"了30畫素,下面的盒子,把上面的盒子向上"踹"了40畫素。而最終在頁面上顯示的時候,這兩個盒子之間的距離是40畫素,而並不是70畫素。這就是margin的塌陷現象。

而margin在水平方向並不具有塌陷現象,是可以疊加的。

接下來,我建立一個叫"margin屬性詳解.html"的檔案,在vscode和瀏覽器中進行演示。

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>margin屬性詳解</title>    <style>        .span1 {            margin-right: 10px;        }        .span2 {            margin-left: 20px;        }        .box1 {            width: 200px;            height: 200px;            background-color: red;            margin-bottom: 10px;        }        .box2 {            width: 200px;            height: 200px;            background-color:orange;            margin-top: 20px;        }</style></head><body>    <span class="span1">欲為諸佛龍象</span><span class="span2">先做眾生牛馬</span>    <div class="box1"></div>    <div class="box2"></div></body></html>

我建立了兩個span標籤和兩個div標籤。

span標籤是行內元素,可以並排顯示,div標籤是塊級元素,不能並排顯示。

關於行內元素和塊級元素,後面會介紹。這裡先知道就行。

兩個span標籤,我設定了左右方向的margin,兩個div標籤,我設定了豎直方向的margin。

在瀏覽器中,效果如下:

我把滑鼠滑到box2上,就能看到box2和box1之間豎直方向的距離就是20畫素,取的是20這個大值,而不是進行疊加。也就是說,在豎直方向上,是有margin塌陷現象的。

一些元素有預設的margin

一些元素,比如body、ul、p等標籤,在我們什麼樣式都沒有給它們設定的時候,瀏覽器就會給它們設定預設的margin,這些預設的margin,會影響我們開發精準的網頁。

因此,在我們開始編寫一個網頁的時候,就要把這些具有預設margin的元素的預設margin清除掉。

如何清除呢?可以這樣寫:

這裡的*號,是萬用字元選擇器。萬用字元選擇器表示選擇頁面上所有的元素

同樣的,一些元素也具有預設的padding,所以我們一開始,就把所有的元素的margin和padding都設為0。

但是萬用字元選擇器有效率問題(並不是所有的元素都有預設的margin和padding,只是一部分),所以我們使用並集選擇器,把經常要用到的元素設定一下就行了。

關於一些元素具有預設的margin和padding,我在瀏覽器中演示一下。我還是在"margin屬性詳解.html"這個檔案中,寫一個ul,再寫一個p。

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>margin屬性詳解</title>    <style>        .span1 {            margin-right: 10px;        }        .span2 {            margin-left: 20px;        }        .box1 {            width: 200px;            height: 200px;            background-color: red;            margin-bottom: 10px;        }        .box2 {            width: 200px;            height: 200px;            background-color:orange;            margin-top: 20px;        }</style></head><body>    <span class="span1">欲為諸佛龍象</span><span class="span2">先做眾生牛馬</span>    <div class="box1"></div>    <div class="box2"></div>    <ul>        <li>他是平原跑出來的第一輪太陽</li>        <li>閉著眼都能感覺到陽光</li>        <li>我被燃燒過勁氧化發黃</li>        <li>枯燥風化</li>        <li>且時光還長</li>    </ul>    <p>任何瞬間的心動都不容易,不要怠慢了它。</p></body></html>

在瀏覽器中,效果如下:

我們看到,我在程式碼中只是新添加了一個ul,一個p,並沒有給body、ul、p設定margin,span標籤只設置了左右方向的margin,並沒有設定上下方向的margin,但是在瀏覽器中,"欲為諸佛龍象先做眾生牛馬"所在的span和瀏覽器的視窗上邊框之間是有一定的縫隙的。

由此,我們就能看出,body和瀏覽器上邊框有一個向上的margin,我們並沒有給body設定margin,那麼就說明body具有預設的margin。

根據程式碼,第二個div,我們並沒有設定下margin,但是ul和第二個div,以及下面的p之間,都有距離,這就說明ul和p標籤都具有預設的margin。

再看看body的盒子模型圖,就能看到body上下左右四個方向,預設的margin是8畫素,

ul的盒子模型圖如下,

p元素的盒子模型圖上,上下方向margin為16畫素,左右沒有,如下:

一些元素具有預設的margin,也有預設的padding,我們都可以透過盒子模型圖來看到。

現在,我們為了頁面更精準,就要去掉這些元素預設的margin和padding,在css中加上去掉這些元素預設margin和padding的程式碼:

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>margin屬性詳解</title>    <style>        .span1 {            margin-right: 10px;        }        .span2 {            margin-left: 20px;        }        .box1 {            width: 200px;            height: 200px;            background-color: red;            margin-bottom: 10px;        }        .box2 {            width: 200px;            height: 200px;            background-color:orange;            margin-top: 20px;        }        body,ul,p {            margin: 0;            padding: 0;        }</style></head><body>    <span class="span1">欲為諸佛龍象</span><span class="span2">先做眾生牛馬</span>    <div class="box1"></div>    <div class="box2"></div>    <ul>        <li>他是平原跑出來的第一輪太陽</li>        <li>閉著眼都能感覺到陽光</li>        <li>我被燃燒過勁氧化發黃</li>        <li>枯燥風化</li>        <li>且時光還長</li>    </ul>    <p>任何瞬間的心動都不容易,不要怠慢了它。</p></body></html>

現在,瀏覽器中效果就是這樣:

我們看到,body和瀏覽器視窗之間、ul和第二個地之間,ul和最下面的p元素之間,都沒有縫隙了,都是緊貼著的了。這就是去掉他們的預設margin的效果。

實際開發中,去掉元素預設margin和padding的程式碼,我們用交集選擇器去寫,不要用萬用字元去寫,當然自己練習的話,怎麼寫無所謂。

盒子水平居中

一個盒子,預設是位於頁面的最左邊,或者位於父元素的最左邊開會顯示的,怎麼樣才能讓盒子在水平方向上居中呢?

把盒子左右兩邊的margin設定為auto,盒子就在水平方向上居中了。

我們知道,padding寫兩個值的時候,第一個值表示上下方向,第二個值表示左右方向,同樣的,margin也一樣。

margin寫兩個值,第一個值寫為0,就表示上下方向為0,第二個值寫auto,auto就是自動的意思。左右方向自動,它自然就居中了。

因此,想要讓任何一個盒子水平方向居中,就寫margin:0 auto。

注意:文字水平居中是text-align:center,和盒子的水平居中不是一個概念。

盒子的垂直方向居中,需要使用絕對定位技術。絕對定位,後面我們會接觸到。

17
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 藍色兒童用品玩具商店HTML模板