所謂盒子模型(Box Model)就是把HTML頁面中的元素看作是一個矩形的盒子,也就是一個盛裝內容的容器。每個矩形都由元素的內容(content)、內邊距(padding)、邊框(border)和外邊距(margin)組成。
一、盒子邊框(border)
border 屬性來定義盒子的邊框,該屬性包含3個子屬性:border-style(邊框樣式),border-color(邊框顏色),border-width(邊框寬度)。
1、定義寬度
(1)直接在屬性后面指定寬度值。
border-top-width:0.2em; /*定義頂部邊框的寬度為元素內字體大小的 0.2倍*/
border-bottom-width: 12px; /* 定義底部邊框寬度為12px*/
(2)使用關鍵字。(不常用)
可以使用 thin、medium 和 thick。不同瀏覽器對此解析的寬度值不同。很少用到。
(3)單獨為某條邊設置寬度。
單獨為元素的某條變設置寬度,分別使用 border-top-width、border-bottom-width、border-left-width、border-right-width 屬性。
(4)使用border-width 屬性速定義邊框寬度。
border-width:2px; /* 定義4個邊都為2px*/
border-width:2px 4px; /* 定義上下邊為2px,左右邊為4px*/
border-width:2px 3px 4px; /* 定義上邊為2px,左右邊為3px,下邊為4px*/
border-width:2px 3px 4px 5px; /* 定義上邊2px,右邊為 3px,下邊為 4px,左邊為5px*/
Tips:當定義邊框寬度時,必須要定義邊框的顯示樣式,由於默認樣式為none,所以僅設置邊框的寬度,由於樣式不存在,邊框寬度也自動被清除為 0。
2、定義顏色
定義邊框顏色可以使用顏色名、RGB 顏色值或十六進制顏色值。
Demo:
border-top-color: #f00;
為上邊框定義紅色的邊框。
3、定義樣式
邊框樣式是邊框顯示的基礎,CSS 提供了一下幾種邊框樣式:
屬性值 | 說明 |
none | 默認值,無邊框,不受任何指定的 border-width 影響 |
hidden | 隱藏邊框,IE 不支持 |
dotted | 定義邊框為點線 |
dashed | 定義邊框為虛線 |
solid | 定義邊框為實線 |
double | 定義邊框為雙線邊框,兩條線及其間隔寬度之和等於指定的border-width 值 |
groove | 根據 border-color 定義 3D 凹槽 |
ridge | 根據 border-color 定義 3D 凸槽 |
inset | 根據 border-color 定義 3D 凹邊 |
outset | 根據 border-color 定義 3D 凸邊 |
Demo:
border-color: #f00;border-style: outset;
4、綜合寫法
語法:
border : border-width || border-style || border-color
border 是一個復合屬性,可以把3個子屬性結合寫在一起。注意:順序不能錯誤。
5、綜合表
樣式屬性 | 常用屬性值 | |
上邊框 | border-top-style:樣式; border-top-width:寬度;border-top-color:顏色;border-top:寬度 樣式 顏色; | |
下邊框 | border-bottom-style:樣式;border- bottom-width:寬度;border- bottom-color:顏色;border-bottom:寬度 樣式 顏色; | |
左邊框 | border-left-style:樣式; border-left-width:寬度;border-left-color:顏色;border-left:寬度 樣式 顏色; | |
右邊框 | border-right-style:樣式;border-right-width:寬度;border-right-color:顏色;border-right:寬度 樣式 顏色; | |
樣式綜合設置 | border-style:上邊 [右邊 下邊 左邊]; | none無(默認)、solid單實線、dashed虛線、dotted點線、double雙實線 |
寬度綜合設置 | border-width:上邊 [右邊 下邊 左邊]; | 像素值 |
顏色綜合設置 | border-color:上邊 [右邊 下邊 左邊]; | 顏色值、#十六進制、rgb(r,g,b)、rgb(r%,g%,b%) |
邊框綜合設置 | border:四邊寬度 四邊樣式 四邊顏色; |
擴展1:
table{ border-collapse:collapse; } collapse 單詞是合並的意思,通過該屬性可以來設置一個細線表格。
擴展2:
圓角邊框(CSS3):
語法:
border-radius: 左上角 右上角 右下角 左下角;
取值可以是指定的固定的長度,也可以使用百分比來表示。
Demo:
border-radius: 10px; /* 一個數值表示4個角都是相同的 10px 的弧度 */
border-radius: 50%; /* 100px 50% 取寬度和高度 一半 則會變成一個圓形 */
border-radius: 10px 40px; /* 左上角 和 右下角 是 10px 右上角 左下角 40 對角線 */
border-radius: 10px 40px 80px; /* 左上角 10 右上角 左下角 40 右下角80 */
border-radius: 10px 40px 80px 100px; /* 左上角 10 右上角 40 右下角 80 左下角 右下角100 */
二、內邊距(padding)
padding屬性用於設置內邊距。 是指 邊框與內容之間的距離。
padding-top:上內邊距
padding-right:右內邊距
padding-bottom:下內邊距
padding-left:左內邊距
注意: 后面跟幾個數值表示的意思是不一樣的。
表達意思 | |
---|---|
1個值 | padding:上下左右邊距 比如padding: 3px; 表示上下左右都是3像素 |
2個值 | padding: 上下邊距 左右邊距 比如 padding: 3px 5px; 表示 上下3像素 左右 5像素 |
3個值 | padding:上邊距 左右邊距 下邊距 比如 padding: 3px 5px 10px; 表示 上是3像素 左右是5像素 下是10像素 |
4個值 | padding:上內邊距 右內邊距 下內邊距 左內邊距 比如: padding: 3px 5px 10px 15px; 表示 上3px 右是5px 下 10px 左15px 順時針 |
三、外邊距(margin)
margin屬性用於設置外邊距。 設置外邊距會在元素之間創建“空白”,定義了元素與其他相鄰元素的距離, 這段空白通常不能放置其他內容。
margin-top:上外邊距
margin-right:右外邊距
margin-bottom:下外邊距
margin-left:上外邊距
margin:上外邊距 右外邊距 下外邊距 左外邊
取值順序跟內邊距相同。
擴展1:
可以讓一個盒子實現水平居中,需要滿足一下兩個條件:
-
-
必須是塊級元素。
-
盒子必須指定了寬度(width)
-
然后就給左右的外邊距都設置為auto,就可使塊級元素水平居中。
.header{ width:960px; margin:0 auto;} /* margin:0 auto 相當於 left:auto;right:auto */
left:auto;
right:auto;
擴展2:清除元素的默認內外邊距
為了更方便地控制網頁中的元素,制作網頁時,可使用如下代碼清除元素的默認內外邊距:
* {
padding:0; /* 清除內邊距 */
margin:0; /* 清除外邊距 */
}
Tips: 行內元素是只有左右外邊距的,是沒有上下外邊距的。 內邊距,在ie6等低版本瀏覽器也會有問題。我們盡量不要給行內元素指定上下的內外邊距就好了。
擴展3:外邊距合並
1、
解決方法:避免就好了。一般都是為一個元素添加margin-top或者 margin-bottom ,不必同時為兩個元素同時加。
對於兩個嵌套關系的塊元素,如果父元素沒有上內邊距及邊框,則父元素的上外邊距會與子元素的上外邊距發生合並,合並后的外邊距為兩者中的較大者,即使父元素的上外邊距為0,也會發生合並。
-
可以為父元素定義1像素的上邊框或上內邊距。
-
可以為父元素添加overflow:hidden。
這里主要是涉及到 BFC的問題,后面會詳細學習。
四、內容(content)寬度和高度(width 和 height)
使用寬度屬性width和高度屬性height可以對盒子的大小進行控制。
width和height的屬性值可以為不同單位的數值或相對於父元素的百分比%,實際工作中最常用的是像素值。
1 /*外盒尺寸計算(元素空間尺寸)*/ 2 Element空間高度 = content height + padding + border + margin 3 Element 空間寬度 = content width + padding + border + margin 4 /*內盒尺寸計算(元素實際大小)*/ 5 Element Height = content height + padding + border (Height為內容高度) 6 Element Width = content width + padding + border (Width為內容寬度)
注意:
1、寬度屬性 width 和高度屬性 height 僅適用於塊級元素,對行內元素無效( img 標簽和 input除外)。
2、計算盒子模型的總高度時,還應考慮上下兩個盒子垂直外邊距合並的情況。
3、如果一個盒子沒有給定寬度/高度或者繼承父親的寬度/高度,則padding 不會影響本盒子大小。
五、盒子模型布局穩定性
根據穩定性來分,建議如下:
按照 優先使用 寬度 (width) 其次 使用內邊距(padding) 再次 外邊距(margin)。
width > padding > margin
-
margin 會有外邊距合並 還有 ie6下面margin 加倍的bug(討厭)所以最后使用。
-
padding 會影響盒子大小, 需要進行加減計算(麻煩) 其次使用。
-
width 沒有問題 我們經常使用寬度剩余法 高度剩余法來做。
六、盒子陰影
語法格式:
box-shadow:水平陰影 垂直陰影 模糊距離 陰影尺寸 陰影顏色 內/外陰影;
-
-
外陰影 (outset) 默認值,但是不能寫 ,想要內陰影寫上 inset 即可。
-
可以添加多個陰影,如同時添加內陰影和外陰影
Demo:
/* box-shadow:水平位置 垂直位置 模糊距離 陰影尺寸(影子大小) 陰影顏色 內/外陰影; */
box-shadow: 0 15px 30px rgba(0, 0, 0, .4);