1. 程式人生 > 實用技巧 >CSS盒子模型

CSS盒子模型

盒子是網頁佈局的關鍵點,首先利用CSS設定好盒子的大小,然後擺放盒子的位置。最後把網頁元素比如文字圖片等等,放入盒子裡面。

盒子模型

所謂盒子模型:就是把HTML頁面中的佈局元素看作是一個矩形的盒子,也就是一個盛裝內容的容器。

  • 盒子模型有元素的內容、邊框(border)、內邊距(padding)、和外邊距(margin)組成。

  • 盒子裡面的文字和圖片等元素是 內容區域

  • 盒子的厚度 我們成為 盒子的邊框

  • 盒子內容與邊框的距離是內邊距(類似單元格的 cellpadding)

  • 盒子與盒子之間的距離是外邊距(類似單元格的 cellspacing)

盒子邊框(border)

語法:

border : border-width || border-style || border-color 
屬性作用
border-width 定義邊框粗細,單位是px
border-style 邊框的樣式
border-color 邊框顏色

邊框的樣式:

  • none:沒有邊框即忽略所有邊框的寬度(預設值)

  • solid:邊框為單實線(最為常用的)

  • dashed:邊框為虛線

  • dotted:邊框為點線

邊框的綜合設定

border : border-width || border-style || border-color 

例如:

border: 1px solid red;

很多情況下,我們不需要指定4個邊框,我們是可以單獨給4個邊框分別指定的。

上邊框下邊框左邊框右邊框
border-top-style:樣式; border-bottom-style:樣式; border-left-style:樣式; border-right-style:樣式;
border-top-width:寬度; border- bottom-width:寬度; border-left-width:寬度; border-right-width:寬度;
border-top-color:顏色; border- bottom-color:顏色;
border-left-color:顏色; border-right-color:顏色;
border-top:寬度 樣式 顏色; border-bottom:寬度 樣式 顏色; border-left:寬度 樣式 顏色; border-right:寬度 樣式 顏色;

表格的細線邊框

  • 通過表格的cellspacing="0",將單元格與單元格之間的距離設定為0,
  • 但是兩個單元格之間的邊框會出現重疊,從而使邊框變粗

  • 通過css屬性:

table{ border-collapse:collapse; }  

collapse 單詞是合併的意思
border-collapse:collapse; 表示相鄰邊框合併在一起。

例如:

<style>
	table {
		width: 500px;
		height: 300px;
		border: 1px solid red;
	}
	td {
		border: 1px solid red;
		text-align: center;
	}
	table, td {
		border-collapse: collapse;  /*合併相鄰邊框*/
	}
</style>

內邊距(padding)

padding屬性用於設定內邊距。 是指 邊框與內容之間的距離。

屬性作用
padding-left 左內邊距
padding-right 右內邊距
padding-top 上內邊距
padding-bottom 下內邊距

當我們給盒子指定padding值之後, 發生了2件事情:

  1. 內容和邊框 有了距離,添加了內邊距。

  2. 盒子會變大了。

注意: 後面跟幾個數值表示的意思是不一樣的。

值的個數表達意思
1個值 padding:上下左右內邊距;
2個值 padding: 上下內邊距 左右內邊距 ;
3個值 padding:上內邊距 左右內邊距 下內邊距;
4個值 padding: 上內邊距 右內邊距 下內邊距 左內邊距 ;

內盒尺寸計算(元素實際大小)

  • 寬度

    Element Height = content height + padding + border (Height為內容高度)

  • 高度

    Element Width = content width + padding + border (Width為內容寬度)

  • 盒子的實際的大小 = 內容的寬度和高度 + 內邊距 + 邊框

如果沒有給一個盒子指定寬度, 此時,如果給這個盒子指定padding, 則不會撐開盒子。

外邊距(margin)

margin屬性用於設定外邊距。 margin就是控制盒子和盒子之間的距離

屬性作用
margin-left 左外邊距
margin-right 右外邊距
margin-top 上外邊距
margin-bottom 下外邊距

margin值的簡寫 (複合寫法)代表意思 跟 padding 完全相同。

塊級盒子水平居中

可以讓一個塊級盒子實現水平居中必須:

  • 盒子必須指定了寬度(width)
  • 然後就給左右的外邊距都設定為auto

實際工作中常用這種方式進行網頁佈局,示例程式碼如下:

.header{ width:960px; margin:0 auto;}

常見的寫法,以下下三種都可以。

  • margin-left: auto; margin-right: auto;

  • margin: auto;

  • margin: 0 auto;

文字居中和盒子居中區別

  1. 盒子內的文字水平居中是 text-align: center, 而且還可以讓 行內元素和行內塊居中對齊

  2. 塊級盒子水平居中 左右margin 改為 auto

text-align: center; /*  文字 行內元素 行內塊元素水平居中 */
margin: 10px auto;  /* 塊級盒子水平居中  左右margin 改為 auto 就闊以了 上下margin都可以 */

插入圖片和背景圖片區別

  1. 插入圖片 我們用的最多 比如產品展示類 移動位置只能靠盒模型 padding margin

  2. 背景圖片我們一般用於小圖示背景 或者 超大背景圖片 背景圖片 只能通過 background-position

 img {  
		width: 200px;/* 插入圖片更改大小 width 和 height */
		height: 210px;
		margin-top: 30px;  /* 插入圖片更改位置 可以用margin 或padding  盒模型 */
		margin-left: 50px; /* 插入當圖片也是一個盒子 */
	}

 div {
		width: 400px;
		height: 400px;
		border: 1px solid purple;
		background: #fff url(images/sun.jpg) no-repeat;
		background-position: 30px 50px; /* 背景圖片更改位置 我用 background-position */
	}

清除元素的預設內外邊距

為了更靈活方便地控制網頁中的元素,製作網頁時,我們需要將元素的預設內外邊距清除

* {
   padding:0;         /* 清除內邊距 */
   margin:0;          /* 清除外邊距 */
}

注意:

行內元素為了照顧相容性, 儘量只設置左右內外邊距, 不要設定上下內外邊距。

外邊距合併

使用margin定義塊元素的垂直外邊距時,可能會出現外邊距的合併。

(1). 相鄰塊元素垂直外邊距的合併

  • 當上下相鄰的兩個塊元素相遇時,如果上面的元素有下外邊距margin-bottom

  • 下面的元素有上外邊距margin-top,則他們之間的垂直間距不是margin-bottom與margin-top之和

  • 取兩個值中的較大者這種現象被稱為相鄰塊元素垂直外邊距的合併(也稱外邊距塌陷)。

(2). 巢狀塊元素垂直外邊距的合併(塌陷)

  • 對於兩個巢狀關係的塊元素,如果父元素沒有上內邊距及邊框

  • 父元素的上外邊距會與子元素的上外邊距發生合併

  • 合併後的外邊距為兩者中的較大者

盒子模型佈局穩定性

大部分情況下內邊距和外邊距是可以混用的, 就是說用內邊距也可以,用外邊距也可以。 你覺得哪個方便,就用哪個。

我們根據穩定性來分,建議如下:

按照 優先使用 寬度 (width) 其次 使用內邊距(padding) 再次 外邊距(margin)。

  width >  padding  >   margin   
  • margin 會有外邊距合併 還有 ie6下面margin 加倍的bug(討厭)所以最後使用。

  • padding 會影響盒子大小, 需要進行加減計算(麻煩) 其次使用。

  • width 沒有問題(嗨皮)我們經常使用寬度剩餘法 高度剩餘法來做。

擴充套件

圓角邊框

語法:

border-radius:length; 


其中每一個值可以為 數值或百分比的形式。

例如: 讓一個正方形變成園

border-radius: 50%;

盒子陰影(CSS3)

語法:

box-shadow:水平陰影 垂直陰影 模糊距離(虛實)  陰影尺寸(影子大小)  陰影顏色  內/外陰影;
描述
h-shadow 必需。水平陰影的位置。允許負值
v-shadow 必需。垂直陰影的位置。允許負值
blur 可選。模糊距離
spread 可選。陰影尺寸
color 可選。陰影的顏色
inset 可選。將外部陰影(outset)改為內部陰影
  • 前兩個屬性是必須寫的。其餘的可以省略。

  • 外陰影 (outset) 是預設的 但是不能寫 想要內陰影可以寫 inset

div {
			width: 200px;
			height: 200px;
			border: 10px solid red;
			/* box-shadow: 5px 5px 3px 4px rgba(0, 0, 0, .4);  */
			/* box-shadow:水平位置 垂直位置 模糊距離 陰影尺寸(影子大小) 陰影顏色  內/外陰影; */
			box-shadow: 0 15px 30px  rgba(0, 0, 0, .4);
			
}