CSS中的margin、border和padding的區別

 

W3C組織建議把全部網頁上的對像都放在一個盒(box)中,設計師能夠經過建立定義來控制這個盒的屬性,這些對像包括段落、列表、標題、圖片以及層。盒模型主要定義四個區域:內容(content)、內邊距(padding)、邊框(border)和外邊距(margin)。對於初學者,常常會搞不清楚margin,background-color,background-image,padding,content,border之間的層次、關係和相互影響。這裏提供一張盒模型的3D示意圖,但願便於你的理解和記憶。css

margin:層的邊框之外留的空白
background-color:背景顏色
background-image:背景圖片
padding:層的邊框到層的內容之間的空白 
border:邊框 
content:內容

接下來將講述HTML和CSS的關鍵——盒子模型(Box model)。理解Box model的關鍵即是margin和padding屬性,而正確理解這兩個屬性也是學習用css佈局的關鍵。html

注: 爲何不翻譯margin和padding? 
緣由一: 在漢語中並無與之相對應的詞語; 
緣由二: 即便有這樣的詞語, 因爲在編寫css代碼時, 必須使用margin和padding, 若是咱們總用漢語詞語代替其來解釋的話, 到了實際應用時容易混淆margin和padding的概念。瀏覽器

若是有一點Html基礎的話,就應該瞭解一些基本元素(Element),如p、h1~h六、br、div、li、ul、img等。若是將這些元素細分,又能夠分別爲頂級(top-level)元素、塊級(block-level)元素和內聯(inline)元素。less

塊級元素是構成一個html的主要和關鍵元素,而任意一個塊級元素都可以用Box model來解釋說明。
Box Model: 任意一個塊級元素均由content(內容)、padding、background(包括背景顏色和圖片)、border(邊框)、margin五個部分組成。
立體圖以下: 佈局

平面圖以下:學習

根據以上兩圖,相信你們對於Box model會有個直觀的認識。字體

如下說明margin和padding屬性:
一、margin: 包括margin-top、margin-right、margin-bottom、margin-left,控制塊級元素之間的距離,它們是透明不可見的。根據上、 右、下、左的順時針規則,能夠寫爲 margin: 40px 40px 40px 40px;
爲便於記憶,請參考下圖:搜索引擎

當上下、左右margin值分別一致, 可簡寫爲:spa

margin: 40px 40px; 

前一個40px表明上下margin值,後一個40px表明左右margin值。
當上下左右margin值均一致,可簡寫爲:翻譯

margin: 40px;

二、Padding: 包括padding-top、padding-right、padding-bottom、padding-left,控制塊級元素內部,content與border之間的距離,其代碼,簡寫請參考margin屬性的寫法。

至此,咱們已經基本瞭解margin和padding屬性的基本用法。可是,在實際應用中,卻老是發生一些讓你琢磨不透的事,而它們又或多或少的與margin有關。

注: 當你想讓兩個元素的content在垂直方向(vertically)分隔時,既能夠選擇padding-top/bottom,也能夠選擇margin-top/bottom,再此Ruthless建議你儘可能使用padding-top/bottom來達到你的目的,這是由於css中存在Collapsing margins(摺疊的margins)的現象。

Collapsing margins: margins摺疊現象只存在於臨近或有從屬關係的元素,垂直方向的margin中。

詳細說明以下: 
若是隻提供一個,將用於所有的四條邊;
若是提供兩個,第一個用於上-下,第二個用於左-右; 
若是提供三個,第一個用於上,第二個用於左-右,第三個用於下; 
若是提供所有四個參數值,將按上-右-下-左的順序做用於四邊。

body { padding: 36px;} //對象四邊的補丁邊距均爲36px 
body { padding: 36px 24px; } //上下兩邊的補丁邊距爲36px,左右兩邊的補丁邊距爲24px 
body { padding: 36px 24px 18px; } //上、下兩邊的補丁邊距分別爲36px、18px,左右兩邊的補丁邊距爲24px 
body { padding: 36px 24px 18px 12px; } //上、右、下、左補丁邊距分別爲36px、24px、18px、12px

 

下面說一下塊級元素和內聯元素

塊級元素 內聯元素
address - 地址

block - 塊引用

center - 居中對齊塊(不推薦)

dir - 目錄列表(HTML5踢出)

div - 經常使用的不能再經常使用了

dl - 列表

fieldset - 一個包含着form組的框

form - 表了個單

  h1 ~ h6 各類尺寸標題

hr - 水平分隔線(不推薦)

menu - 菜單列表

noframes - 瀏覽器不支持frames顯示的塊

noscript - 瀏覽器不支持script顯示的塊

ol - 有序列表

ul - 無序列表

p - 段落

pre - 格式化文本

table - 表了個格
a - 錨點

abbr - 縮寫(語義、利於搜索引擎)

acronym - 首字(HTML5踢出)

b - 粗體(不推薦)

big - 大字體(不推薦)

cite - 引用(語義、利於搜索引擎)

code - 引用源碼(語義)

em - 強調(若是僅爲了斜體請用<i>)

font - 字體設定(不推薦)

i - 斜體

img - 圖片

input - 輸入框

label - 表單標籤(事件關聯對應表單項)

q - 短引用(標準添加引號,IE不添加引號)

s - 中劃線(不推薦)

samp - 用於提取內容

select - 項目選擇

small - 小字體(不推薦)

strong - 粗體(不推薦)

sub - 下標

sup - 上標

textarea - 多行文本輸入框

u - 下劃線

var - 定義變量
 
學習html後, 你會了解一些基本的html元素(Element), 如p, h1~h6, br, div, li, ul, img等.
若是將這些元素細分, 又能夠分別歸爲頂級(top-level)元素,塊級(block-level)元素和內聯(inline)元素.   

1. Top-level element 【頂級元素】:    { html, body, frameset }
包括html, body, frameset, 表現如Block-level element, 屬於高級塊級元素.  

2. Block-level element 【塊級元素】:   { p, h1~h6, div, ul }
顧名思義就是以塊顯示的元素,高度寬度都是能夠設置的。好比咱們經常使用的 p, h1~h6, div, ul 默認狀態下都是屬於塊級元素。塊級元素比較霸道,默認狀態下每次都佔據一整個行,後面的內容也必須再新起一行顯示。固然非塊級元素也能夠經過css的display:block;將其更改爲塊級元素。此外還有個特殊的,float也具備此功能。
塊級元素可以獨立存在, 通常的塊級元素之間以換行(如一個段落結束後另起一行)分隔。塊級元素是構成一個html的主要和關鍵元素, 而任意一個塊級元素都可以用Box model來解釋說明.

3. Inline element 【內聯元素】: { a, br, em, img, li, span }
通俗點來講就是文本的顯示方式,與塊級元素相反,內聯元素的高度寬度是不能夠設置的,其寬度就是自身文字或者圖片的寬度。咱們經常使用到的<a>、<span>、<em>都屬於內聯元素。內聯元素的顯示特色就是像文本同樣的顯示,不會獨自佔據一個行。固然內聯元素也能變成塊級元素,那就是經過css的display:inline;和float來實現。
內聯元素依附其餘塊級元素存在, 緊接於被聯元素之間顯示, 而不換行。

在《CSS權威指南》這樣定義到,「任何不是塊級元素的可見元素都是內聯元素。其表現的特性是「行佈局」形式。」我我的不太習慣「行佈局」的說話,由於我認爲塊級元素從表現上更像「行」顯示,而內聯元素更像是「文本」的顯示屬性。這其中一點記住很關鍵,「內聯元素的高度寬度都是不能夠設置的,其寬度就是自身文字或者圖片的寬度」。由於在你設置寬度高度大半天后沒反應才發現,原來這只是個內聯元素。
 
參考連接:
相關文章
相關標籤/搜索